Revert "Imported Upstream version 1.2.7"
authorYoungbok Shin <youngb.shin@samsung.com>
Mon, 22 Aug 2016 02:23:44 +0000 (11:23 +0900)
committerYoungbok Shin <youngb.shin@samsung.com>
Mon, 22 Aug 2016 02:23:44 +0000 (11:23 +0900)
This reverts commit 087e8c5d58be057cb77192932cd7fa8f7aacf1a5.

499 files changed:
Android.mk
BUILD.md [deleted file]
ChangeLog
INSTALL
Makefile.am
Makefile.in
NEWS
README
README.python
TODO
aclocal.m4
config.h.in
config.sub
configure
configure.ac
docs/HarfBuzz.png [deleted file]
docs/Makefile.am
docs/Makefile.in
docs/harfbuzz-docs.xml [deleted file]
docs/harfbuzz.types [deleted file]
docs/html/HarfBuzz.png [deleted file]
docs/html/adding-text-to-the-buffer.html [deleted file]
docs/html/annotation-glossary.html [deleted file]
docs/html/api-index-0-9-10.html [deleted file]
docs/html/api-index-0-9-11.html [deleted file]
docs/html/api-index-0-9-2.html [deleted file]
docs/html/api-index-0-9-20.html [deleted file]
docs/html/api-index-0-9-22.html [deleted file]
docs/html/api-index-0-9-28.html [deleted file]
docs/html/api-index-0-9-30.html [deleted file]
docs/html/api-index-0-9-31.html [deleted file]
docs/html/api-index-0-9-38.html [deleted file]
docs/html/api-index-0-9-39.html [deleted file]
docs/html/api-index-0-9-41.html [deleted file]
docs/html/api-index-0-9-42.html [deleted file]
docs/html/api-index-0-9-5.html [deleted file]
docs/html/api-index-0-9-7.html [deleted file]
docs/html/api-index-0-9-8.html [deleted file]
docs/html/api-index-1-0-5.html [deleted file]
docs/html/api-index-1-1-2.html [deleted file]
docs/html/api-index-1-1-3.html [deleted file]
docs/html/buffers-language-script-and-direction.html [deleted file]
docs/html/building.html [deleted file]
docs/html/customizing-unicode-functions.html [deleted file]
docs/html/fonts-and-faces.html [deleted file]
docs/html/harfbuzz-Buffers.html [deleted file]
docs/html/harfbuzz-Shaping.html [deleted file]
docs/html/harfbuzz-hb-gobject.html [deleted file]
docs/html/harfbuzz-hb-ot-font.html [deleted file]
docs/html/harfbuzz-hb-ot-shape.html [deleted file]
docs/html/harfbuzz.devhelp2 [deleted file]
docs/html/hello-harfbuzz.html [deleted file]
docs/html/index.html [deleted file]
docs/html/install-harfbuzz.html [deleted file]
docs/html/plans-and-caching.html [deleted file]
docs/html/pt01.html [deleted file]
docs/html/pt02.html [deleted file]
docs/html/setting-buffer-properties.html [deleted file]
docs/html/shaping-and-shape-plans.html [deleted file]
docs/html/using-harfbuzzs-native-opentype-implementation.html [deleted file]
docs/html/using-your-own-font-functions.html [deleted file]
docs/html/what-about-the-other-scripts.html [deleted file]
docs/html/what-is-harfbuzz.html [deleted file]
docs/html/why-is-it-called-harfbuzz.html [deleted file]
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 [moved from docs/harfbuzz-overrides.txt with 100% similarity]
docs/reference/harfbuzz-sections.txt [moved from docs/harfbuzz-sections.txt with 90% similarity]
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 [moved from docs/html/api-index-full.html with 68% similarity]
docs/reference/html/ch01.html [moved from docs/html/ch07.html with 72% similarity]
docs/reference/html/deprecated-api-index.html [moved from docs/html/deprecated-api-index.html with 61% similarity]
docs/reference/html/harfbuzz-hb-blob.html [moved from docs/html/harfbuzz-hb-blob.html with 85% similarity]
docs/reference/html/harfbuzz-hb-buffer.html [new file with mode: 0644]
docs/reference/html/harfbuzz-hb-common.html [moved from docs/html/harfbuzz-hb-common.html with 74% similarity]
docs/reference/html/harfbuzz-hb-coretext.html [moved from docs/html/harfbuzz-hb-coretext.html with 90% similarity]
docs/reference/html/harfbuzz-hb-deprecated.html [moved from docs/html/harfbuzz-hb-deprecated.html with 90% similarity]
docs/reference/html/harfbuzz-hb-face.html [moved from docs/html/harfbuzz-hb-face.html with 84% similarity]
docs/reference/html/harfbuzz-hb-font.html [moved from docs/html/harfbuzz-hb-font.html with 80% similarity]
docs/reference/html/harfbuzz-hb-ft.html [moved from docs/html/harfbuzz-hb-ft.html with 62% similarity]
docs/reference/html/harfbuzz-hb-glib.html [moved from docs/html/harfbuzz-hb-glib.html with 79% similarity]
docs/reference/html/harfbuzz-hb-gobject.html [new file with mode: 0644]
docs/reference/html/harfbuzz-hb-graphite2.html [moved from docs/html/harfbuzz-hb-graphite2.html with 87% similarity]
docs/reference/html/harfbuzz-hb-icu.html [moved from docs/html/harfbuzz-hb-icu.html with 86% similarity]
docs/reference/html/harfbuzz-hb-ot-layout.html [moved from docs/html/harfbuzz-hb-ot-layout.html with 91% similarity]
docs/reference/html/harfbuzz-hb-ot-tag.html [moved from docs/html/harfbuzz-hb-ot-tag.html with 83% similarity]
docs/reference/html/harfbuzz-hb-ot.html [moved from docs/html/harfbuzz-hb-ot.html with 82% similarity]
docs/reference/html/harfbuzz-hb-set.html [moved from docs/html/harfbuzz-hb-set.html with 86% similarity]
docs/reference/html/harfbuzz-hb-shape-plan.html [moved from docs/html/harfbuzz-hb-shape-plan.html with 77% similarity]
docs/reference/html/harfbuzz-hb-shape.html [new file with mode: 0644]
docs/reference/html/harfbuzz-hb-unicode.html [moved from docs/html/harfbuzz-hb-unicode.html with 82% similarity]
docs/reference/html/harfbuzz-hb-uniscribe.html [moved from docs/html/harfbuzz-hb-uniscribe.html with 85% similarity]
docs/reference/html/harfbuzz-hb-version.html [moved from docs/html/harfbuzz-hb-version.html with 69% similarity]
docs/reference/html/harfbuzz-hb.html [moved from docs/html/harfbuzz-hb.html with 76% similarity]
docs/reference/html/harfbuzz.devhelp2 [new file with mode: 0644]
docs/reference/html/home.png [moved from docs/html/home.png with 100% similarity]
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 [moved from docs/html/left-insensitive.png with 100% similarity]
docs/reference/html/left.png [moved from docs/html/left.png with 100% similarity]
docs/reference/html/object-tree.html [moved from docs/html/object-tree.html with 69% similarity]
docs/reference/html/right-insensitive.png [moved from docs/html/right-insensitive.png with 100% similarity]
docs/reference/html/right.png [moved from docs/html/right.png with 100% similarity]
docs/reference/html/style.css [moved from docs/html/style.css with 97% similarity]
docs/reference/html/up-insensitive.png [moved from docs/html/up-insensitive.png with 100% similarity]
docs/reference/html/up.png [moved from docs/html/up.png with 100% similarity]
docs/reference/version.xml [new file with mode: 0644]
docs/reference/version.xml.in [moved from docs/version.xml.in with 100% similarity]
docs/usermanual-buffers-language-script-and-direction.xml [deleted file]
docs/usermanual-clusters.xml [deleted file]
docs/usermanual-fonts-and-faces.xml [deleted file]
docs/usermanual-glyph-information.xml [deleted file]
docs/usermanual-hello-harfbuzz.xml [deleted file]
docs/usermanual-install-harfbuzz.xml [deleted file]
docs/usermanual-opentype-features.xml [deleted file]
docs/usermanual-what-is-harfbuzz.xml [deleted file]
docs/version.xml [deleted file]
ltmain.sh
m4/libtool.m4
m4/ltoptions.m4
m4/ltsugar.m4
m4/ltversion.m4
m4/lt~obsolete.m4
missing
src/Makefile.am
src/Makefile.in
src/Makefile.sources [deleted file]
src/check-header-guards.sh
src/check-libstdc++.sh
src/gen-indic-table.py
src/gen-use-table.py [deleted file]
src/harfbuzz.pc.in
src/hb-atomic-private.hh
src/hb-blob.cc
src/hb-blob.h
src/hb-buffer-deserialize-text.hh
src/hb-buffer-deserialize-text.rl
src/hb-buffer-private.hh
src/hb-buffer-serialize.cc
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
src/hb-directwrite.cc [deleted file]
src/hb-directwrite.h [deleted file]
src/hb-face.cc
src/hb-face.h
src/hb-fallback-shape.cc
src/hb-font-private.hh
src/hb-font.cc
src/hb-font.h
src/hb-ft.cc
src/hb-ft.h
src/hb-glib.cc
src/hb-glib.h
src/hb-gobject-enums.h.tmpl
src/hb-gobject-structs.cc
src/hb-gobject-structs.h
src/hb-graphite2.cc
src/hb-graphite2.h
src/hb-icu.cc
src/hb-icu.h
src/hb-mutex-private.hh
src/hb-object-private.hh
src/hb-open-file-private.hh
src/hb-open-type-private.hh
src/hb-ot-cmap-table.hh
src/hb-ot-font.cc
src/hb-ot-font.h
src/hb-ot-glyf-table.hh [deleted file]
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
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-os2-table.hh [deleted file]
src/hb-ot-post-table.hh [deleted file]
src/hb-ot-shape-complex-arabic-fallback.hh
src/hb-ot-shape-complex-arabic-private.hh [deleted file]
src/hb-ot-shape-complex-arabic-table.hh
src/hb-ot-shape-complex-arabic-win1256.hh
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-private.hh
src/hb-ot-shape-complex-indic-table.cc
src/hb-ot-shape-complex-indic.cc
src/hb-ot-shape-complex-myanmar.cc
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
src/hb-ot-shape-complex-use-machine.hh [deleted file]
src/hb-ot-shape-complex-use-machine.rl [deleted file]
src/hb-ot-shape-complex-use-private.hh [deleted file]
src/hb-ot-shape-complex-use-table.cc [deleted file]
src/hb-ot-shape-complex-use.cc [deleted file]
src/hb-ot-shape-fallback-private.hh
src/hb-ot-shape-fallback.cc
src/hb-ot-shape-normalize.cc
src/hb-ot-shape.cc
src/hb-ot-shape.h
src/hb-ot-tag.cc
src/hb-ot-tag.h
src/hb-private.hh
src/hb-set-private.hh
src/hb-set.cc
src/hb-set.h
src/hb-shape-plan.cc
src/hb-shape-plan.h
src/hb-shape.cc
src/hb-shape.h
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/Makefile.sources [deleted file]
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/test.cc
test-driver
test/Makefile.am
test/Makefile.in
test/api/Makefile.am
test/api/Makefile.in
test/api/test-font.c
test/api/test-object.c
test/api/test-ot-tag.c
test/api/test-shape.c
test/fuzzing/Makefile.am [deleted file]
test/fuzzing/Makefile.in [deleted file]
test/fuzzing/README [deleted file]
test/fuzzing/hb-fuzzer.cc [deleted file]
test/shaping/Makefile.am
test/shaping/Makefile.in
test/shaping/README.md [deleted file]
test/shaping/fonts/sha1sum/0509e80afb379d16560e9e47bdd7d888bebdebc6.ttf [deleted file]
test/shaping/fonts/sha1sum/051d92f8bc6ff724511b296c27623f824de256e9.ttf [deleted file]
test/shaping/fonts/sha1sum/07f054357ff8638bac3711b422a1e31180bba863.ttf [deleted file]
test/shaping/fonts/sha1sum/191826b9643e3f124d865d617ae609db6a2ce203.ttf [deleted file]
test/shaping/fonts/sha1sum/1a6f1687b7a221f9f2c834b0b360d3c8463b6daf.ttf [deleted file]
test/shaping/fonts/sha1sum/1c04a16f32a39c26c851b7fc014d2e8d298ba2b8.ttf [deleted file]
test/shaping/fonts/sha1sum/1c2c3fc37b2d4c3cb2ef726c6cdaaabd4b7f3eb9.ttf [deleted file]
test/shaping/fonts/sha1sum/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf [deleted file]
test/shaping/fonts/sha1sum/205edd09bd3d141cc9580f650109556cc28b22cb.ttf [deleted file]
test/shaping/fonts/sha1sum/298c9e1d955f10f6f72c6915c3c6ff9bf9695cec.ttf [deleted file]
test/shaping/fonts/sha1sum/3511ff5c1647150595846ac414c595cccac34f18.ttf [deleted file]
test/shaping/fonts/sha1sum/375d6ae32a3cbe52fbf81a4e5777e3377675d5a3.ttf [deleted file]
test/shaping/fonts/sha1sum/43979b90b2dd929723cf4fe1715990bcb9c9a56b.ttf [deleted file]
test/shaping/fonts/sha1sum/43ef465752be9af900745f72fe29cb853a1401a5.ttf [deleted file]
test/shaping/fonts/sha1sum/45855bc8d46332b39c4ab9e2ee1a26b1f896da6b.ttf [deleted file]
test/shaping/fonts/sha1sum/49c9f7485c1392fa09a1b801bc2ffea79275f22e.ttf [deleted file]
test/shaping/fonts/sha1sum/56cfd0e18d07f41c38e9598545a6d369127fc6f9.ttf [deleted file]
test/shaping/fonts/sha1sum/5a5daf5eb5a4db77a2baa3ad9c7a6ed6e0655fa8.ttf [deleted file]
test/shaping/fonts/sha1sum/641bd9db850193064d17575053ae2bf8ec149ddc.ttf [deleted file]
test/shaping/fonts/sha1sum/6466d38c62e73a39202435a4f73bf5d6acbb73c0.ttf [deleted file]
test/shaping/fonts/sha1sum/706c5d7b625f207bc0d874c67237aad6f1e9cd6f.ttf [deleted file]
test/shaping/fonts/sha1sum/7a37dc4d5bf018456aea291cee06daf004c0221c.ttf [deleted file]
test/shaping/fonts/sha1sum/7ef276fc886ea502a03b9b0e5c8b547d5dc2b61c.ttf [deleted file]
test/shaping/fonts/sha1sum/8099955657a54e9ee38a6ba1d6f950ce58e3cc25.ttf [deleted file]
test/shaping/fonts/sha1sum/8240789f6d12d4cfc4b5e8e6f246c3701bcf861f.ttf [deleted file]
test/shaping/fonts/sha1sum/MANIFEST [new file with mode: 0644]
test/shaping/fonts/sha1sum/a34a7b00f22ffb5fd7eef6933b81c7e71bc2cdfb.ttf [deleted file]
test/shaping/fonts/sha1sum/a98e908e2ed21b22228ea59ebcc0f05034c86f2e.ttf [deleted file]
test/shaping/fonts/sha1sum/b9e2aaa0d75fcef6971ec3a96d806ba4a6b31fe2.ttf [deleted file]
test/shaping/fonts/sha1sum/bb0c53752e85c3d28973ebc913287b8987d3dfe8.ttf [deleted file]
test/shaping/fonts/sha1sum/c4e48b0886ef460f532fb49f00047ec92c432ec0.ttf [deleted file]
test/shaping/fonts/sha1sum/cc5f3d2d717fb6bd4dfae1c16d48a2cb8e12233b.ttf [deleted file]
test/shaping/fonts/sha1sum/f22416c692720a7d46fadf4af99f4c9e094f00b9.ttf [deleted file]
test/shaping/fonts/sha1sum/f518eb6f6b5eec2946c9fbbbde44e45d46f5e2ac.ttf [deleted file]
test/shaping/fonts/sha1sum/fab39d60d758cb586db5a504f218442cd1395725.ttf [deleted file]
test/shaping/fonts/sha1sum/fbb6c84c9e1fe0c39e152fbe845e51fd81f6748e.ttf [deleted file]
test/shaping/fonts/sha1sum/fcdcffbdf1c4c97c05308d7600e4c283eb47dbca.ttf [deleted file]
test/shaping/fonts/sha1sum/ffa0f5d2d9025486d8469d8b1fdd983e7632499b.ttf [deleted file]
test/shaping/hb-diff
test/shaping/hb-diff-colorize
test/shaping/hb-diff-filter-failures
test/shaping/hb-diff-ngrams
test/shaping/hb-diff-stat
test/shaping/hb-manifest-read
test/shaping/hb-manifest-update
test/shaping/hb-unicode-decode
test/shaping/hb-unicode-encode
test/shaping/hb-unicode-prettyname
test/shaping/hb_test_tools.py
test/shaping/record-test.sh
test/shaping/run-tests.sh
test/shaping/tests/arabic-fallback-shaping.tests
test/shaping/tests/arabic-feature-order.tests
test/shaping/tests/cluster.tests [deleted file]
test/shaping/tests/context-matching.tests
test/shaping/tests/cursive-positioning.tests [deleted file]
test/shaping/tests/default-ignorables.tests [deleted file]
test/shaping/tests/fallback-positioning.tests [deleted file]
test/shaping/tests/fuzzed.tests [deleted file]
test/shaping/tests/hangul-jamo.tests
test/shaping/tests/hyphens.tests [deleted file]
test/shaping/tests/indic-joiner-candrabindu.tests
test/shaping/tests/indic-old-spec.tests
test/shaping/tests/indic-pref-blocking.tests
test/shaping/tests/ligature-id.tests [deleted file]
test/shaping/tests/mark-filtering-sets.tests [deleted file]
test/shaping/tests/mongolian-variation-selector.tests
test/shaping/tests/simple.tests [deleted file]
test/shaping/tests/spaces.tests [deleted file]
test/shaping/tests/use.tests [deleted file]
test/shaping/tests/vertical.tests [deleted file]
test/shaping/tests/zero-width-marks.tests
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-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/MANIFEST [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-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-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-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-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/abbreviation-mark.txt [deleted file]
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-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-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-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-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-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-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-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/MANIFEST [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/MANIFEST [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/utrrs/MANIFEST [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/MANIFEST [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/utrrs/MANIFEST [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/MANIFEST [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/MANIFEST [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/MANIFEST [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/utrrs/MANIFEST [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/MANIFEST [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/utrrs/MANIFEST [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/MANIFEST [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/utrrs/MANIFEST [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/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/utrrs/MANIFEST [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/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/utrrs/MANIFEST [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/MANIFEST [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/utrrs/MANIFEST [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/MANIFEST [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/utrrs/MANIFEST [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/MANIFEST [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-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-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 [moved from test/shaping/texts/in-tree/shaper-use/script-cham/misc.txt with 100% similarity]
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 [moved from test/shaping/texts/in-tree/shaper-use/script-tai-tham/misc.txt with 100% similarity]
test/shaping/texts/in-tree/shaper-sea/script-tai-tham/misc/torture.txt [moved from test/shaping/texts/in-tree/shaper-use/script-tai-tham/torture.txt with 100% similarity]
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-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-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/contractions.txt [deleted file]
test/shaping/texts/in-tree/shaper-use/script-batak/misc.txt [deleted file]
test/shaping/texts/in-tree/shaper-use/script-buginese/misc.txt [deleted file]
test/shaping/texts/in-tree/shaper-use/script-kaithi/misc.txt [deleted file]
test/shaping/texts/in-tree/shaper-use/script-kharoshti/misc.txt [deleted file]
util/Makefile.am
util/Makefile.in
util/Makefile.sources [deleted file]
util/ansi-print.cc
util/hb-shape.cc
util/helper-cairo.cc
util/helper-cairo.hh
util/main-font-text.hh
util/options.cc
util/options.hh
util/view-cairo.cc
util/view-cairo.hh
win32/Makefile.am [deleted file]
win32/Makefile.in [deleted file]
win32/Makefile.vc [deleted file]
win32/README.txt [deleted file]
win32/build-rules-msvc.mak [deleted file]
win32/config-msvc.mak [deleted file]
win32/config.h.win32 [deleted file]
win32/config.h.win32.in [deleted file]
win32/create-lists-msvc.mak [deleted file]
win32/create-lists.bat [deleted file]
win32/detectenv-msvc.mak [deleted file]
win32/generate-msvc.mak [deleted file]
win32/hb-introspection-msvc.mak [deleted file]
win32/info-msvc.mak [deleted file]
win32/install.mak [deleted file]
win32/introspection-msvc.mak [deleted file]

index 654f0e0..0552507 100644 (file)
@@ -75,10 +75,9 @@ HARFBUZZ_SRC_FILES = \
        src/hb-ot-shape-complex-indic.cc \
        src/hb-ot-shape-complex-indic-table.cc \
        src/hb-ot-shape-complex-myanmar.cc \
+       src/hb-ot-shape-complex-sea.cc \
        src/hb-ot-shape-complex-thai.cc \
        src/hb-ot-shape-complex-tibetan.cc \
-       src/hb-ot-shape-complex-use.cc \
-       src/hb-ot-shape-complex-use-table.cc \
        src/hb-ot-shape-normalize.cc \
        src/hb-ot-shape-fallback.cc \
        $(NULL)
@@ -101,7 +100,6 @@ LOCAL_SHARED_LIBRARIES := \
        liblog
 LOCAL_C_INCLUDES += \
         $(LOCAL_PATH)/src
-LOCAL_CFLAGS += -DHB_NO_MT -DHAVE_OT -DHAVE_ICU -DHAVE_ICU_BUILTIN \
-       -Wno-unused-parameter -Wno-missing-field-initializers
+LOCAL_CFLAGS += -DHB_NO_MT -DHAVE_OT -DHAVE_ICU -DHAVE_ICU_BUILTIN
 LOCAL_MODULE:= libharfbuzz_ng
 include $(BUILD_SHARED_LIBRARY)
diff --git a/BUILD.md b/BUILD.md
deleted file mode 100644 (file)
index 86285c6..0000000
--- a/BUILD.md
+++ /dev/null
@@ -1,33 +0,0 @@
-On Linux, install the development packages for
-[FreeType](http://www.freedesktop.org/wiki/Software/FreeType/),
-Cairo, and GLib. For example, on Ubuntu / Debian, you would do:
-* sudo apt-get install gcc g++ libfreetype6-dev libglib2.0-dev libcairo2-dev
-
-whereas on Fedora, RHEL, CentOS, and other Red Hat based systems you would do:
-* sudo yum install gcc gcc-c++ freetype-devel glib2-devel cairo-devel
-
-on the Mac, using MacPorts:
-* sudo port install freetype glib2 cairo
-
-or using Homebrew:
-* brew install freetype glib cairo
-
-If you are using a tarball, you can now proceed to running configure and make
-as with any other standard package. That should leave you with a shared
-library in src/, and a few utility programs including hb-view and hb-shape
-under util/.  From the tarball, NMake Makefiles are also provided in win32/,
-which supports building HarfBuzz using Visual Studio, with a README.txt that
-gives instructions on building using NMake.
-If you are bootstraping from git, you need a few more tools before you can
-run autogen.sh for the first time. Namely, pkg-config and ragel. Again,
-on Ubuntu / Debian:
-* sudo apt-get install autoconf automake libtool pkg-config ragel gtk-doc-tools
-
-and on Fedora, RHEL, CentOS:
-* sudo yum install autoconf automake libtool pkgconfig ragel gtk-doc
-
-on the Mac, using MacPorts:
-* sudo port install autoconf automake libtool pkgconfig ragel gtk-doc
-
-or using Homebrew:
-* brew port install autoconf automake libtool pkgconfig ragel gtk-doc
index 33749c7..2ef17b2 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
-commit 9879fc1db3cad684f412c2f3d6b49e0435697d0e
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon May 2 10:29:12 2016 +0200
-
-    [ot-font] Remove unused 'post' table include for now
-
-    To make a release...
-
- src/hb-ot-font.cc | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-commit f8061ae7972462ad800c23be7cd7b3d7ab94b93b
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon May 2 10:28:24 2016 +0200
-
-    [tests] Fix test
-
- test/shaping/Makefile.am                                                |
- 2 +-
- .../tests/{fallback-positioning.test => fallback-positioning.tests}
- | 0
- 2 files changed, 1 insertion(+), 1 deletion(-)
-
-commit f00ab2a33ab34ba64f38cbbe65830c770a3e071e
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon May 2 10:24:00 2016 +0200
-
-    [hb-ot-font] Make 'glyf' table loading lazy
-
-    Apparently some clients have reference-table callbacks that copy
-    the table.
-    As such, avoid loading 'glyf' table which is only needed if fallback
-    positioning
-    happens.
-
- src/hb-ot-font.cc                                  |  45
- ++++++++++++++++++++-
- test/shaping/Makefile.am                           |   1 +
- .../7ef276fc886ea502a03b9b0e5c8b547d5dc2b61c.ttf   | Bin 0 -> 784 bytes
- test/shaping/tests/fallback-positioning.test       |   2 +
- 4 files changed, 46 insertions(+), 2 deletions(-)
-
-commit 587d46227a56940a7f5bb053cbeda6144394acf7
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat Apr 30 19:20:56 2016 +0200
-
-    [ot-font] Start implementing 'post' table, for accessing glyph names
-
- src/Makefile.sources        |   1 +
- src/hb-open-type-private.hh |  12 ++++-
- src/hb-ot-font.cc           |   1 +
- src/hb-ot-post-table.hh     | 119
- ++++++++++++++++++++++++++++++++++++++++++++
- 4 files changed, 132 insertions(+), 1 deletion(-)
-
-commit 9abaaac409b8e3a0a9182b67dc384133013f7878
-Merge: 2f560ee 264b7a7
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Apr 27 03:38:24 2016 -0700
-
-    Merge commit '264b7a728a41becfbf23ce258fc2a3af19d0cbbe' into HEAD
-
-commit 2f560ee44b7b08683e8e6955fe3b95187e8bda32
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Apr 27 03:11:41 2016 -0700
-
-    [tibetan] Reorder marks to better match Uniscribe
-
-    Fixes https://github.com/behdad/harfbuzz/issues/237
-
-    Note that Uniscribe enforces a certain syllable order.  We don't.
-    But with this change, I get all of the tibetan contractions pass
-    with Microsoft Himalaya font.
-
- src/hb-unicode-private.hh | 8 ++++++--
- 1 file changed, 6 insertions(+), 2 deletions(-)
-
-commit f68390f196216718c22c434e1d8921118e646824
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Wed Apr 27 02:44:35 2016 -0700
-
-    [test] Add text for Tibetan shorthand contractions
-
-    From http://www.babelstone.co.uk/Tibetan/Contractions.html
-
- .../script-tibetan/misc/contractions.txt           | 612
- +++++++++++++++++++++
- 1 file changed, 612 insertions(+)
-
-commit 264b7a728a41becfbf23ce258fc2a3af19d0cbbe
-Merge: 7e2da03 adafdcd
-Author: Khaled Hosny <khaledhosny@eglug.org>
-Date:   Wed Apr 27 03:48:23 2016 +0300
-
-    Merge pull request #247 from khaledhosny/update-opentype-language-tags
-
-    Update opentype language tags
-
-commit adafdcddced076da4bfa3114a00e15a387aaf1f7
-Author: Arthur Reutenauer <arthur.reutenauer@normalesup.org>
-Date:   Sat Nov 7 23:37:21 2015 +0000
-
-    Mass-added “difficult” tags – to be curated.
-
- src/hb-ot-tag.cc | 69
- +++++++++++++++++++++++++++++---------------------------
- 1 file changed, 36 insertions(+), 33 deletions(-)
-
-commit 3d6a2c0d7d9f6c5b3097f78c1123f9e59dcc76e2
-Author: Arthur Reutenauer <arthur.reutenauer@normalesup.org>
-Date:   Sat Nov 7 22:59:13 2015 +0000
-
-    Initial import of missing OpenType 1.7 language tags.
-
- src/hb-ot-tag.cc | 67
- +++++++++++++++++++++++++++++++++++++++++++++++++++-----
- 1 file changed, 61 insertions(+), 6 deletions(-)
-
-commit 7e2da035f68e46ce8f4759b67b4ed3a1b211d793
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Apr 26 16:42:25 2016 -0700
-
-    Undo accidental change
-
- src/hb-ot-shape-complex-arabic.cc | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-commit b20305022a8235b19e6b640bc62651854e1336f1
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Apr 26 16:41:17 2016 -0700
-
-    Do NOT ignore Mongolian Free Variation Selectors during matching
-
-    Fixes https://github.com/behdad/harfbuzz/issues/234
-
- src/hb-ot-layout-gsubgpos-private.hh               |   2 +-
- src/hb-ot-layout-private.hh                        |  23
- +++++++++++++++++++--
- src/hb-ot-shape-complex-arabic.cc                  |   2 +-
- .../a34a7b00f22ffb5fd7eef6933b81c7e71bc2cdfb.ttf   | Bin 0 -> 3700 bytes
- .../tests/mongolian-variation-selector.tests       |   1 +
- 5 files changed, 24 insertions(+), 4 deletions(-)
-
-commit 21ab5501f5f5267d20cf23256866dd9d82a667ef
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Apr 26 16:02:04 2016 -0700
-
-    Move ZWJ/ZWNJ bits to top byte of unicode_props()
-
-    To make room to remember Mongolian Free Variation Selectors.
-    Part of fixing https://github.com/behdad/harfbuzz/issues/234
-
- src/hb-ot-layout-private.hh | 40 ++++++++++++++++++++++------------------
- 1 file changed, 22 insertions(+), 18 deletions(-)
-
-commit de508516cb06ddb064d75bd7be8e843a5ebcf70d
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Apr 26 11:28:37 2016 -0700
-
-    [util] Print out --debug buffer to stderr
-
- util/main-font-text.hh | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-commit 29393884b9f045460fb65d6ad10a94461ba93430
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Tue Apr 26 10:35:23 2016 -0700
-
-    Annotate blacklisted fonts with their sha1sum
-
- src/hb-ot-layout.cc | 18 ++++++++++++------
- 1 file changed, 12 insertions(+), 6 deletions(-)
-
-commit 14bb4a56971fd45063cd6c1288d911627088abb2
-Merge: 1c625df 5069062
-Author: Sascha Brawer <sascha@brawer.ch>
-Date:   Tue Apr 26 11:38:16 2016 +0200
-
-    Merge pull request #245 from KonstantinRitt/fixes/ce
-
-    Unbreak build on Windows CE
-
-commit 5069062d0a9342bb716eebf3ddc1efad91924caa
-Author: Konstantin Ritt <ritt.ks@gmail.com>
-Date:   Tue Apr 26 12:02:26 2016 +0400
-
-    Unbreak build on Windows CE
-
-    0475ef2f97e3035a2eea9a0f96031331e07e8e29 broke the build by using
-    vsnprintf(), which is not defined on Windows CE
-
- src/hb-private.hh | 1 +
- 1 file changed, 1 insertion(+)
-
-commit 1c625dff2269c54ff429ca45be88893ff1fa6c34
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Sat Apr 9 12:53:23 2016 -0700
-
-    Minor
-
- src/hb-ot-layout.cc | 8 ++++----
- 1 file changed, 4 insertions(+), 4 deletions(-)
-
-commit 851b0db36d1b724fc1e0db506445119c78186285
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Apr 8 23:46:55 2016 -0700
-
-    Minor.  We should never get to this branch, but fix it anyway.
-
- src/hb-ot-layout-common-private.hh | 6 +++++-
- 1 file changed, 5 insertions(+), 1 deletion(-)
-
-commit 00ea66f35754a1e6e4d3b7b139d611a9a623a9d1
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Apr 8 13:51:01 2016 -0700
-
-    1.2.6
-
- NEWS         | 10 ++++++++++
- configure.ac |  2 +-
- 2 files changed, 11 insertions(+), 1 deletion(-)
-
-commit 4f3d59a1877dcb94d09da48e9694a6c1b05a86fe
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Apr 8 13:41:20 2016 -0700
-
-    Blacklist another set of timesi.ttf and timesbi.ttf
-
- src/hb-ot-layout.cc | 2 ++
- 1 file changed, 2 insertions(+)
-
-commit ef476be80d773332e0c768a3465d99381d76edd9
-Merge: a0331b5 d3134a6
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Fri Apr 8 13:16:33 2016 -0700
-
-    Merge pull request #239 from ebraminio/dwfix
-
-    Improve DirectWrite backend
-
-commit d3134a66ad551ded726db9528d3c25459088f105
-Author: Ebrahim Byagowi <ebrahim@gnu.org>
-Date:   Tue Apr 5 21:01:05 2016 +0000
-
-    Fix when no feature is given
-
- src/hb-directwrite.cc | 8 +++++---
- 1 file changed, 5 insertions(+), 3 deletions(-)
-
-commit a0331b55f7b45437980e1fc323251f4091bf2c4e
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Apr 4 16:25:32 2016 -0700
-
-    1.2.5
-
- NEWS         | 7 +++++++
- configure.ac | 2 +-
- 2 files changed, 8 insertions(+), 1 deletion(-)
-
-commit 6e55199b5f097ac93bad38f32e9813e2da14c5a7
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Apr 4 16:24:27 2016 -0700
-
-    Add test for 6dd80faf0dcb3e8a8915c3a25da44e2a67cb0cd8
-
- test/shaping/Makefile.am                                |   1 +
- .../f22416c692720a7d46fadf4af99f4c9e094f00b9.ttf        | Bin 0 ->
- 16736 bytes
- test/shaping/tests/mark-filtering-sets.tests            |   5 +++++
- 3 files changed, 6 insertions(+)
-
-commit 59089622dbb8dda783b1639c932123f125c3592d
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Apr 4 14:54:32 2016 -0700
-
-    [coretext] Clarify comment
-
- src/hb-coretext.cc | 8 +++-----
- 1 file changed, 3 insertions(+), 5 deletions(-)
-
-commit 6dd80faf0dcb3e8a8915c3a25da44e2a67cb0cd8
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Mon Apr 4 14:34:25 2016 -0700
-
-    Fix FixedVersion::to_int()
-
-    Ouch.  Had broken it in 9a13ed453ef96822a47d6e6f58332b87f38d5c59
-
-    Fixes https://github.com/behdad/harfbuzz/issues/238
-    Will add test soon.
-
- src/hb-open-type-private.hh | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-commit 4a104021697439fd21390a1f4cdc9310348882fa
-Author: Ebrahim Byagowi <ebrahim@gnu.org>
-Date:   Sat Apr 2 13:47:59 2016 +0000
-
-    Hide justification behind HB_DIRECTWRITE_EXPERIMENTAL_JUSTIFICATION
-
- src/hb-directwrite.cc | 8 ++++----
- 1 file changed, 4 insertions(+), 4 deletions(-)
-
-commit 63ee9ca5d81b53eb035972754ed95572821c393c
-Author: Ebrahim Byagowi <ebrahim@gnu.org>
-Date:   Fri Apr 1 15:47:07 2016 +0000
-
-    Use standard types instead Windows favourites ones
-
- src/hb-directwrite.cc | 100
- +++++++++++++++++++++++++-------------------------
- 1 file changed, 50 insertions(+), 50 deletions(-)
-
-commit adf20ba0d18d1506e633dcd9b4827a6c93abcadd
-Author: Ebrahim Byagowi <ebrahim@gnu.org>
-Date:   Fri Apr 1 15:36:40 2016 +0000
-
-    Limit GetJustifiedGlyphs only to scripts with custom justification
-    character
-
- src/hb-directwrite.cc | 98
- +++++++++++++++++++++++++++++++--------------------
- 1 file changed, 60 insertions(+), 38 deletions(-)
-
-commit 32ae9d1b3ffbe7e26e654437a56a26a95fe9f5a6
-Author: Ebrahim Byagowi <ebrahim@gnu.org>
-Date:   Fri Apr 1 06:39:57 2016 +0000
-
-    Add justification support
-
- src/hb-directwrite.cc | 321
- ++++++++++++++++++++++++++++++++------------------
- 1 file changed, 205 insertions(+), 116 deletions(-)
-
-commit 10c3d9e41520595c88dd2a8321590e03ce8fcf47
-Author: Ebrahim Byagowi <ebrahim@gnu.org>
-Date:   Thu Mar 31 18:19:44 2016 +0000
-
-    Basic opentype features support
-
- src/hb-directwrite.cc | 62
- ++++++++++++++++++++++++++++++++++-----------------
- 1 file changed, 42 insertions(+), 20 deletions(-)
-
-commit d129897120d3ad414220d603557c15a60aa69fa6
-Author: Ebrahim Byagowi <ebrahim@gnu.org>
-Date:   Thu Mar 31 13:45:37 2016 +0000
-
-    Refactor and remove dupe getglyphs call
-
- src/hb-directwrite.cc | 106
- ++++++++++++++++++++++++--------------------------
- 1 file changed, 51 insertions(+), 55 deletions(-)
-
-commit 5f1a8961008b93f72acc47336109af3a64e248d0
-Author: Ebrahim Byagowi <ebrahim@gnu.org>
-Date:   Thu Mar 31 12:26:16 2016 +0000
-
-    Better glyph offset support
-
- src/hb-directwrite.cc | 44 ++++++++++++++++++++++++--------------------
- 1 file changed, 24 insertions(+), 20 deletions(-)
-
-commit d691ba3f405738c6857450752b8cc0911dfcdb01
-Author: Ebrahim Byagowi <ebrahim@gnu.org>
-Date:   Wed Mar 30 20:21:40 2016 +0000
-
-    Don't fail when language is not set
-
- src/hb-directwrite.cc | 9 ++++++---
- 1 file changed, 6 insertions(+), 3 deletions(-)
-
-commit 1c00a46c7a608ebc0b03c5abfcfe7f2b9881d0df
-Author: Ebrahim Byagowi <ebrahim@gnu.org>
-Date:   Wed Mar 30 20:15:09 2016 +0000
-
-    Make DirectWrite backend to work with different font sizes
-
-    Actually copyedited same logic from Uniscribe to make it just work
-
- src/hb-directwrite.cc | 7 ++++++-
- 1 file changed, 6 insertions(+), 1 deletion(-)
-
-commit 0251b0cc5c39272d2299d4b2ab802faaafe96837
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Mar 17 14:37:11 2016 -0700
-
-    1.2.4
-
- NEWS         | 15 +++++++++++++++
- configure.ac |  2 +-
- 2 files changed, 16 insertions(+), 1 deletion(-)
-
-commit 69f9fbc4200442a35484d3c790ae8f4979be5d60
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:   Thu Mar 17 11:59:43 2016 -0700
-
-    Synthesize GDEF glyph class for any glyph that does not have one
-    in GDEF
-
-    Previously we only synthesized GDEF glyph classes if the glyphClassDef
-    array in GDEF was null.  This worked well enough, and is indeed what
-    OpenType requires: "If the font does not include a GlyphClassDef
-    table,
-    the client must define and maintain this information when using the
-    GSUB and GPOS tables."  That sentence does not quite make sense since
-    one needs Unicode properties as well, but is close enough.
-
-    However, looks like Arial Unicode as shipped on WinXP, does have GDEF
-    glyph class array, but defines no classes for Hebrew.  This results
-    in Hebrew marks not getting their widths zeroed.  So, with this
-    change,
-    we synthesize glyph class for any glyph that is not specified in the
-    GDEF glyph class table.  Since, from our point of view, a glyph not
-    being listed in that table is a font bug, any unwanted consequence of
-    this change is a font bug :).
-
-    Note that we still don't get the same rendering as Uniscribe, since
-    Uniscribe seems to do fallback positioning as well, even though the
-    font does have a GPOS table (which does NOT cover Hebrew!).  We are
-    not going to try to match that though.
-
-    Test string for Arial Unicode:
-
-       U+05E9,U+05B8,U+05C1,U+05DC
-
-    Before:            [gid1166=3+991|gid1142=0+737|gid5798=0+1434]
-    After:             [gid1166=3+991|gid1142=0+0|gid5798=0+1434]
-    Uniscribe: [gid1166=3+991|gid1142=0@348,0+0|gid5798=0+1434]
-
-    Note that our new output matches what we were generating until July
-    2014, because the Hebrew shaper used to zero mark advances based on
-    Unicode, NOT GDEF. That's 9e834e29e0b657f0555df1ab9cea79ff7abcf08d.
-
-    Reported by Greg Douglas.
-
- src/hb-ot-layout-gsub-table.hh | 22 ++++++++++++++++++++--
- src/hb-ot-shape.cc            | 29 -----------------------------
- 2 files changed, 20 insertions(+), 31 deletions(-)
-
-commit fef5dd9a72f326c160a7194f558749d24bac7283
-Merge: 01ea9ea 5f995db
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Sat Mar 12 19:15:15 2016 -0800
-
-    Merge pull request #232 from c0nk/wip-icu
-
-    Add --with-icu=builtin option; fix compile error
-
-commit 01ea9eaac373d9f3de6e56c1ca26cdcd259ecc8e
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Fri Mar 11 18:50:02 2016 -0800
-
-    [build] Use tar-ustar instead of tar-pax
-
-    The default tar-v7 is not good enough for us (99 char filename
-    limit), so I have had bumped to tar-pax.  We got one complaint
-    that someone's tar couldn't handle tar-pax.  Set to tar-ustar
-    which is ~13 years earlier than tar-pax and is good enough for us.
-
- configure.ac | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-commit 3e10460a1dd41de32752e308771aa30d23565cc0
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Fri Mar 11 18:45:19 2016 -0800
-
-    Minor comment
-
- src/hb-unicode-private.hh | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-commit d14fea4bdcc1423fe9a585af3abdefa9605d17e6
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Mar 8 12:16:41 2016 -0800
-
-    Remove default clause in minor switch statements
-
-    Bending to clang warnings...
-    https://bugs.chromium.org/p/chromium/issues/detail?id=593057
-
- src/hb-ot-shape-complex-indic.cc | 4 ----
- src/hb-ot-shape-complex-thai.cc  | 1 -
- 2 files changed, 5 deletions(-)
-
-commit ce8ae9970102f83b67bb1e8e8b2bf894a0e26c07
-Merge: 731a430 71248a8
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Fri Mar 4 17:20:35 2016 -0800
-
-    Merge pull request #231 from KonstantinRitt/post123buildfix
-
-    Fix build with HB_DISABLE_DEPRECATED
-
-commit 731a430cd36caabcef04e099b21ebc6daedd536f
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Mar 2 13:32:42 2016 -0800
-
-    Fix requiredFeature stage handling logic
-
-    Originally the way Jonathan had written this was correct in
-    "continue"ing:
-
-    https://github.com/jfkthame/harfbuzz/commit/35e28c7a733eaffcd9f062b18d7db9fbb3d990fc#diff-ead86a33a5cc9ad7f6e6381031a0baddR199
-
-    When I rewrote his patch, I messed it up:
-
-    https://github.com/behdad/harfbuzz/commit/da132937989acb4d8ca9bd41c79f98750e7dda30#diff-ead86a33a5cc9ad7f6e6381031a0baddR209
-
-    the intended behavior was NOT to set found=TRUE and NOT to continue.
-    This was resulting in feature_index[table_index] being left unset.
-    Oops!
-
- src/hb-ot-map.cc | 5 +----
- 1 file changed, 1 insertion(+), 4 deletions(-)
-
-commit 68b6296d3333fd38bd5442d2ba087ced481603bc
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Mar 1 16:41:53 2016 +0900
-
-    Add F2DOT14 type
-
- src/hb-open-type-private.hh | 9 +++++++++
- 1 file changed, 9 insertions(+)
-
-commit 082b79fe9f06607998178dcdcbe817af28b017de
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Mar 1 16:41:26 2016 +0900
-
-    Use FWORD and UFWORD when it makes sense
-
-    I had forgotten about those types.
-
- src/hb-ot-glyf-table.hh | 8 ++++----
- src/hb-ot-hmtx-table.hh | 6 +++---
- 2 files changed, 7 insertions(+), 7 deletions(-)
-
-commit 5f995db10381172ec63fd7ffbb0acf2c6b3dae5e
-Author: Kal Conley <kcconley@gmail.com>
-Date:  Fri Feb 26 00:36:17 2016 +0100
-
-    Fix missing ICU #include
-
-    Fix compile error in hb-icu.cc when ICU configured with
-    U_NO_DEFAULT_INCLUDE_UTF_HEADERS=1
-
- src/hb-icu.cc | 1 +
- 1 file changed, 1 insertion(+)
-
-commit b424b6c372dfe4c0ed75a49761eb34a416819446
-Author: Kal Conley <kcconley@gmail.com>
-Date:  Fri Feb 26 00:35:15 2016 +0100
-
-    Add --with-icu=builtin configure option
-
- configure.ac   | 33 +++++++++++++++++++--------------
- src/Makefile.am |  7 +++++++
- 2 files changed, 26 insertions(+), 14 deletions(-)
-
-commit 71248a843f976c86022eb5bb8c6e8880b2499937
-Author: Konstantin Ritt <ritt.ks@gmail.com>
-Date:  Thu Feb 25 18:55:28 2016 +0400
-
-    Fix build with HB_DISABLE_DEPRECATED
-
-    When HB_DISABLE_DEPRECATED is defined, no code from hb-deprecated.h
-    should be used, even from within HB itself.
-
- src/hb-font.cc | 4 ++++
- 1 file changed, 4 insertions(+)
-
-commit 0c7fb7419c20d04b803412945565562c32b42929
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Feb 25 14:40:09 2016 +0900
-
-    Speed up buffer variable allocation sanity check
-
-    This makes defining HB_NDEBUG much less relevant, to the
-    point of irrelevance.  Sorry about all the fuss in previous
-    release!
-
- src/hb-buffer-private.hh | 67
- ++++++++++++++++++++++++++++-----------------
- src/hb-buffer.cc        | 70
- ------------------------------------------------
- 2 files changed, 43 insertions(+), 94 deletions(-)
-
-commit 91dd11565221bdb108c138662ea013aac14bb968
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Feb 25 13:56:47 2016 +0900
-
-    Add HB_NDEBUG
-
-    API changes:
-    - If NDEBUG is defined, define HB_NDEBUG
-    - Disable costlier sanity checks if HB_NDEBUG is defined.
-
-    In 1.2.3 introduced some code to disable costly sanity checks if
-    NDEBUG is defined. NDEBUG, however, disables all assert()s as
-    well.  With HB_NDEBUG, one can disable costlier checks but keep
-    assert()s.
-
-    I'll probably add a way to define HB_NDEBUG automatically in
-    release tarballs.  But for now, production systems that do NOT
-    define NDEBUG, are encouraged to define HB_NDEBUG for our build.
-
- src/Makefile.am         | 2 +-
- src/hb-buffer-private.hh | 4 ++--
- src/hb-buffer.cc        | 4 ++--
- src/hb-private.hh       | 9 +++++++++
- 4 files changed, 14 insertions(+), 5 deletions(-)
-
-commit 75568b0a7f811ea18e23037735ec8541a7431f88
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Feb 25 12:26:26 2016 +0900
-
-    1.2.3
-
- NEWS        | 42 ++++++++++++++++++++++++++++++++++++++++++
- configure.ac |  2 +-
- 2 files changed, 43 insertions(+), 1 deletion(-)
-
-commit 988165021f8d48dc7120b071d056491256569f4f
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Feb 25 12:23:02 2016 +0900
-
-    Disable internal buffer variable bookkeeping in NDEBUG builds
-
-    Saves some sweet time and binary size!
-
- src/Makefile.am         |  1 +
- src/hb-buffer-private.hh | 30 ++++++++++++++++++++----------
- src/hb-buffer.cc        |  6 ++++--
- 3 files changed, 25 insertions(+), 12 deletions(-)
-
-commit 94dd0bb7e78125994cb7c833a5b03110f1ffc822
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Feb 25 11:31:03 2016 +0900
-
-    Add blacklist signature for Times New Roman (Bold) Italic on OS X
-
- src/hb-ot-layout.cc | 2 ++
- 1 file changed, 2 insertions(+)
-
-commit dd8598c1c7f29fc92253b0cd4e856c1941b1d0c0
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Feb 25 11:20:05 2016 +0900
-
-    [test] Pass closure to hb_font_set_glyph_func()
-
-    Exercises fix in c335fd7986fe360ab8e1c032c9b988d0d30511eb
-
- test/api/test-shape.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-commit e23cf902e91142a10229e3514be4ceee69efde04
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Feb 25 11:11:15 2016 +0900
-
-    Blacklist GDEF table of timesi.ttf and timesbi.ttf on Win 7
-
-    See discussion:
-    https://lists.freedesktop.org/archives/harfbuzz/2016-February/005489.html
-
- src/hb-ot-layout.cc | 25 +++++++++++++++++++++++++
- 1 file changed, 25 insertions(+)
-
-commit c335fd7986fe360ab8e1c032c9b988d0d30511eb
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Feb 25 09:16:05 2016 +0900
-
-    In trampoline implementation of get_glyph(), don't destroy user
-    data twice!
-
- src/hb-font.cc | 41 +++++++++++++++++++++++++++--------------
- 1 file changed, 27 insertions(+), 14 deletions(-)
-
-commit 23335deaad9d4d9824ff41343264514d3f9f7e37
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Feb 24 20:27:13 2016 +0900
-
-    [ot-font] Accelerate cmap format4 get_glyph
-
- src/hb-ot-cmap-table.hh | 111
- ++++++++++++++++++++++++++++--------------------
- src/hb-ot-font.cc      |  14 +++++-
- 2 files changed, 77 insertions(+), 48 deletions(-)
-
-commit e0f16a715bc3e621ff21a8be88102e9672630574
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Feb 24 19:52:36 2016 +0900
-
-    [ot-font] Towards accelerating get_glyph()
-
- src/hb-ot-font.cc | 23 ++++++++++++++++++++---
- 1 file changed, 20 insertions(+), 3 deletions(-)
-
-commit 5473ebfb84c7b6059ac16e04676b363acc51aa00
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Feb 24 19:32:43 2016 +0900
-
-    [ot-font] Remove level of indirection in get_glyph_variant
-
- src/hb-ot-cmap-table.hh | 14 ++------------
- src/hb-ot-font.cc      | 13 +++++++++----
- 2 files changed, 11 insertions(+), 16 deletions(-)
-
-commit 49fe6ecf19522413e79a11a29aa0ffc5bdfcd2f8
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Feb 24 19:10:06 2016 +0900
-
-    [TODO] Update
-
-    This file is rather obsolete.  Still, give it a refresh.
-
- TODO | 16 ++--------------
- 1 file changed, 2 insertions(+), 14 deletions(-)
-
-commit 8b5bc141cd3a6bfcea3c91a882a630426876ceb3
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Feb 24 19:05:23 2016 +0900
-
-    Add get_nominal_glyph() and get_variation_glyph() instead of
-    get_glyph()
-
-    New API:
-    - hb_font_get_nominal_glyph_func_t
-    - hb_font_get_variation_glyph_func_t
-    - hb_font_funcs_set_nominal_glyph_func()
-    - hb_font_funcs_set_variation_glyph_func()
-    - hb_font_get_nominal_glyph()
-    - hb_font_get_variation_glyph()
-
-    Deprecated API:
-    - hb_font_get_glyph_func_t
-    - hb_font_funcs_set_glyph_func()
-
-    Clients that implement their own font-funcs are encouraged to replace
-    their get_glyph() implementation with a get_nominal_glyph() and
-    get_variation_glyph() pair.  The variation version can assume that
-    variation_selector argument is not zero.
-
- src/hb-deprecated.h               |  10 ++
- src/hb-fallback-shape.cc          |   4 +-
- src/hb-font-private.hh                    |  26 +++--
- src/hb-font.cc                            | 203
- ++++++++++++++++++++++++++++++++++---
- src/hb-font.h                     |  55 +++++++---
- src/hb-ft.cc                      |  38 ++++---
- src/hb-ot-font.cc                 |  57 +++++++----
- src/hb-ot-shape-complex-indic.cc   |  8 +-
- src/hb-ot-shape-complex-myanmar.cc |  2 +-
- src/hb-ot-shape-complex-use.cc     |  2 +-
- src/hb-ot-shape-fallback.cc       |   6 +-
- src/hb-ot-shape-normalize.cc      |  18 ++--
- src/hb-ot-shape.cc                |   6 +-
- 13 files changed, 344 insertions(+), 91 deletions(-)
-
-commit b30a971bf792b9c683c345e1be25c5a5869a113c
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Feb 24 17:32:22 2016 +0900
-
-    1.2.2
-
- NEWS        | 14 +++++++++++++-
- configure.ac |  2 +-
- 2 files changed, 14 insertions(+), 2 deletions(-)
-
-commit af48e3d27c01c538f46f1dc376d994a0c24a8170
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Feb 24 16:06:40 2016 +0900
-
-    Fix recent test
-
-    Not sure why the FT functions were returning advance 1024. This
-    caused failure on drone.io.  Switch to hb-ot-font and disable
-    glyph names.
-
- test/shaping/tests/cursive-positioning.tests | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-commit 17c831701756bb46300c412fd64b19d67f299c18
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Feb 24 16:06:23 2016 +0900
-
-    [tests] Fix for multiple options in test runner scripts
-
- test/shaping/run-tests.sh | 3 +--
- 1 file changed, 1 insertion(+), 2 deletions(-)
-
-commit ebd7431f824c718db6ce5b85e94f2b3911127af4
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Feb 24 15:53:40 2016 +0900
-
-    Partially revert 86c68c7a2c971efe8e35b1f1bd99401dc8b688d2
-
-    That commit moved the advance adjustment for mark positioning to
-    be applied immediately, instead of doing late before.  This breaks
-    if mark advances are zeroed late, like in Arabic.  Also, easier to
-    hit it in RTL scripts since a single mark with non-zero advance is
-    enough to hit the bug, whereas in LTR, at least two marks are needed.
-
-    This reopens https://github.com/behdad/harfbuzz/issues/211
-    The cursive+mark interaction is broken again.  To be fixed in a
-    different way.
-
- src/hb-ot-layout-gpos-table.hh                      | 28
- ++++++++++++----------------
- test/shaping/tests/cursive-positioning.tests |  2 +-
- 2 files changed, 13 insertions(+), 17 deletions(-)
-
-commit 284481b3120963353f5f34ed094f07ffc13480ef
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Feb 24 15:52:37 2016 +0900
-
-    Add test for mark positioning in rtl with non-zero mark advance
-
-    Apparently I broke this 86c68c7a2c971efe8e35b1f1bd99401dc8b688d2.
-    Fix coming.
-
- .../sha1sum/07f054357ff8638bac3711b422a1e31180bba863.ttf  | Bin 0 ->
- 848 bytes
- test/shaping/tests/cursive-positioning.tests             |   1 +
- 2 files changed, 1 insertion(+)
-
-commit 56a84e8dd18c63782b8db3a86e94651dae5bb01b
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Feb 24 15:50:33 2016 +0900
-
-    [tests] Allow commenting out tests to be skipped
-
- test/shaping/run-tests.sh | 4 ++++
- 1 file changed, 4 insertions(+)
-
-commit 7cfd6cc486f2751d7f78c5008a636d677af4e12f
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Feb 24 12:30:57 2016 +0900
-
-    [Android.mk] Update with warning flags
-
- Android.mk | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
-commit dabf32a5ad706726412ba5c64e1ea614a707b928
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Feb 23 15:38:43 2016 +0900
-
-    1.2.1
-
- NEWS        | 13 +++++++++++++
- configure.ac |  2 +-
- 2 files changed, 14 insertions(+), 1 deletion(-)
-
-commit 525cc7d28cbe4e8149ddba677224f134dc0a3274
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Feb 23 15:19:27 2016 +0900
-
-    Add note re only adding tests with Free Software fonts
-
- test/shaping/README.md | 5 ++++-
- 1 file changed, 4 insertions(+), 1 deletion(-)
-
-commit 6a09d7e34b949f9929f616ee53278b2edfd9b7ea
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Feb 23 13:47:16 2016 +0900
-
-    [test] Add README about how to add shaping tests
-
- test/shaping/Makefile.am |  1 +
- test/shaping/README.md   | 37 +++++++++++++++++++++++++++++++++++++
- 2 files changed, 38 insertions(+)
-
-commit f8ee7906d0454d950081c621f2b04a6d08e1b92f
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Feb 23 13:45:38 2016 +0900
-
-    Remove MANIFEST files
-
-    They are unused currently. We can add later if we hook them up
-    to anything useful.
-
- test/shaping/fonts/sha1sum/MANIFEST               | 52
- ----------------------
- test/shaping/tests/MANIFEST                       | 19 --------
- test/shaping/texts/MANIFEST                       |  1 -
- test/shaping/texts/in-tree/MANIFEST               |  9 ----
- test/shaping/texts/in-tree/shaper-arabic/MANIFEST  |  6 ---
- .../in-tree/shaper-arabic/script-arabic/MANIFEST   |  3 --
- .../script-arabic/language-persian/MANIFEST       |  1 -
- .../script-arabic/language-urdu/MANIFEST          |  1 -
- .../script-arabic/language-urdu/crulp/MANIFEST     |  1 -
- .../language-urdu/crulp/ligatures/MANIFEST        |  7 ---
- .../shaper-arabic/script-arabic/misc/MANIFEST     |  1 -
- .../script-arabic/misc/diacritics/MANIFEST        |  7 ---
- .../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   |  4 --
- .../in-tree/shaper-arabic/script-nko/MANIFEST     |  1 -
- .../in-tree/shaper-arabic/script-nko/misc/MANIFEST |  1 -
- .../in-tree/shaper-arabic/script-phags-pa/MANIFEST |  1 -
- .../shaper-arabic/script-phags-pa/misc/MANIFEST    |  1 -
- .../in-tree/shaper-arabic/script-syriac/MANIFEST   |  1 -
- .../shaper-arabic/script-syriac/misc/MANIFEST     |  2 -
- test/shaping/texts/in-tree/shaper-default/MANIFEST |  5 ---
- .../shaper-default/script-ethiopic/MANIFEST       |  1 -
- .../shaper-default/script-ethiopic/misc/MANIFEST   |  1 -
- .../in-tree/shaper-default/script-han/MANIFEST     |  1 -
- .../shaper-default/script-han/misc/MANIFEST       |  1 -
- .../shaper-default/script-hiragana/MANIFEST       |  1 -
- .../shaper-default/script-hiragana/misc/MANIFEST   |  2 -
- .../shaper-default/script-linear-b/MANIFEST       |  1 -
- .../shaper-default/script-linear-b/misc/MANIFEST   |  1 -
- .../shaper-default/script-tifinagh/MANIFEST       |  1 -
- .../shaper-default/script-tifinagh/misc/MANIFEST   |  1 -
- test/shaping/texts/in-tree/shaper-hangul/MANIFEST  |  1 -
- .../in-tree/shaper-hangul/script-hangul/MANIFEST   |  1 -
- .../shaper-hangul/script-hangul/misc/MANIFEST     |  1 -
- test/shaping/texts/in-tree/shaper-hebrew/MANIFEST  |  1 -
- .../in-tree/shaper-hebrew/script-hebrew/MANIFEST   |  1 -
- .../shaper-hebrew/script-hebrew/misc/MANIFEST     |  1 -
- test/shaping/texts/in-tree/shaper-indic/MANIFEST   |  2 -
- .../texts/in-tree/shaper-indic/indic/MANIFEST     | 11 -----
- .../shaper-indic/indic/script-assamese/MANIFEST    |  2 -
- .../indic/script-assamese/misc/MANIFEST           |  0
- .../indic/script-assamese/utrrs/MANIFEST          |  3 --
- .../indic/script-assamese/utrrs/codepoint/MANIFEST |  7 ---
- .../indic/script-assamese/utrrs/gpos/MANIFEST     |  2 -
- .../indic/script-assamese/utrrs/gsub/MANIFEST     |  1 -
- .../shaper-indic/indic/script-bengali/MANIFEST     |  2 -
- .../indic/script-bengali/misc/MANIFEST                    |  2 -
- .../indic/script-bengali/utrrs/MANIFEST           |  3 --
- .../indic/script-bengali/utrrs/codepoint/MANIFEST  |  7 ---
- .../indic/script-bengali/utrrs/gpos/MANIFEST      |  2 -
- .../indic/script-bengali/utrrs/gsub/MANIFEST      |  1 -
- .../shaper-indic/indic/script-devanagari/MANIFEST  |  2 -
- .../indic/script-devanagari/misc/MANIFEST         |  6 ---
- .../indic/script-devanagari/utrrs/MANIFEST        |  3 --
- .../script-devanagari/utrrs/codepoint/MANIFEST     |  9 ----
- .../indic/script-devanagari/utrrs/gpos/MANIFEST    |  2 -
- .../indic/script-devanagari/utrrs/gsub/MANIFEST    |  1 -
- .../shaper-indic/indic/script-gujarati/MANIFEST    |  2 -
- .../indic/script-gujarati/misc/MANIFEST           |  0
- .../indic/script-gujarati/utrrs/MANIFEST          |  3 --
- .../indic/script-gujarati/utrrs/codepoint/MANIFEST |  7 ---
- .../indic/script-gujarati/utrrs/gpos/MANIFEST     |  2 -
- .../indic/script-gujarati/utrrs/gsub/MANIFEST     |  1 -
- .../shaper-indic/indic/script-gurmukhi/MANIFEST    |  2 -
- .../indic/script-gurmukhi/misc/MANIFEST           |  1 -
- .../indic/script-gurmukhi/utrrs/MANIFEST          |  3 --
- .../indic/script-gurmukhi/utrrs/codepoint/MANIFEST |  7 ---
- .../indic/script-gurmukhi/utrrs/gpos/MANIFEST     |  2 -
- .../indic/script-gurmukhi/utrrs/gsub/MANIFEST     |  1 -
- .../shaper-indic/indic/script-kannada/MANIFEST     |  2 -
- .../indic/script-kannada/misc/MANIFEST                    |  2 -
- .../indic/script-kannada/utrrs/MANIFEST           |  3 --
- .../indic/script-kannada/utrrs/codepoint/MANIFEST  |  8 ----
- .../indic/script-kannada/utrrs/gpos/MANIFEST      |  1 -
- .../indic/script-kannada/utrrs/gsub/MANIFEST      |  1 -
- .../shaper-indic/indic/script-malayalam/MANIFEST   |  2 -
- .../indic/script-malayalam/misc/MANIFEST          |  3 --
- .../indic/script-malayalam/utrrs/MANIFEST         |  2 -
- .../script-malayalam/utrrs/codepoint/MANIFEST     |  7 ---
- .../indic/script-malayalam/utrrs/gsub/MANIFEST     |  1 -
- .../shaper-indic/indic/script-oriya/MANIFEST      |  2 -
- .../shaper-indic/indic/script-oriya/misc/MANIFEST  |  2 -
- .../shaper-indic/indic/script-oriya/utrrs/MANIFEST |  2 -
- .../indic/script-oriya/utrrs/codepoint/MANIFEST    |  9 ----
- .../indic/script-oriya/utrrs/gsub/MANIFEST        |  1 -
- .../shaper-indic/indic/script-sinhala/MANIFEST     |  2 -
- .../indic/script-sinhala/misc/MANIFEST                    |  4 --
- .../indic/script-sinhala/utrrs/MANIFEST           |  3 --
- .../indic/script-sinhala/utrrs/codepoint/MANIFEST  |  5 ---
- .../indic/script-sinhala/utrrs/gpos/MANIFEST      |  1 -
- .../indic/script-sinhala/utrrs/gsub/MANIFEST      |  7 ---
- .../shaper-indic/indic/script-tamil/MANIFEST      |  2 -
- .../shaper-indic/indic/script-tamil/misc/MANIFEST  |  1 -
- .../shaper-indic/indic/script-tamil/utrrs/MANIFEST |  3 --
- .../indic/script-tamil/utrrs/codepoint/MANIFEST    | 10 -----
- .../indic/script-tamil/utrrs/gpos/MANIFEST        |  2 -
- .../indic/script-tamil/utrrs/gsub/MANIFEST        |  1 -
- .../shaper-indic/indic/script-telugu/MANIFEST     |  2 -
- .../shaper-indic/indic/script-telugu/misc/MANIFEST |  1 -
- .../indic/script-telugu/utrrs/MANIFEST                    |  3 --
- .../indic/script-telugu/utrrs/codepoint/MANIFEST   |  7 ---
- .../indic/script-telugu/utrrs/gpos/MANIFEST       |  1 -
- .../indic/script-telugu/utrrs/gsub/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    |  3 --
- test/shaping/texts/in-tree/shaper-myanmar/MANIFEST |  1 -
- .../in-tree/shaper-myanmar/script-myanmar/MANIFEST |  1 -
- .../shaper-myanmar/script-myanmar/misc/MANIFEST    |  3 --
- test/shaping/texts/in-tree/shaper-thai/MANIFEST    |  2 -
- .../texts/in-tree/shaper-thai/script-lao/MANIFEST  |  1 -
- .../in-tree/shaper-thai/script-lao/misc/MANIFEST   |  1 -
- .../texts/in-tree/shaper-thai/script-thai/MANIFEST |  1 -
- .../in-tree/shaper-thai/script-thai/misc/MANIFEST  |  4 --
- test/shaping/texts/in-tree/shaper-tibetan/MANIFEST |  1 -
- .../in-tree/shaper-tibetan/script-tibetan/MANIFEST |  1 -
- .../shaper-tibetan/script-tibetan/misc/MANIFEST    |  1 -
- test/shaping/texts/in-tree/shaper-use/MANIFEST     |  6 ---
- .../texts/in-tree/shaper-use/script-batak/MANIFEST |  1 -
- .../in-tree/shaper-use/script-buginese/MANIFEST    |  1 -
- .../texts/in-tree/shaper-use/script-cham/MANIFEST  |  1 -
- .../in-tree/shaper-use/script-kaithi/MANIFEST     |  1 -
- .../in-tree/shaper-use/script-kharoshti/MANIFEST   |  1 -
- .../in-tree/shaper-use/script-tai-tham/MANIFEST    |  2 -
- 126 files changed, 381 deletions(-)
-
-commit 815bdd7700155efcffa9a4c3ca5bfc31833d0586
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Mon Feb 22 18:22:44 2016 +0900
-
-    In cluster-level=0, group ZWJ/ZWNJ with previous cluster
-
-    This better emulates Unicode grapheme clusters.
-
-    Note that Uniscribe does NOT do this, but should be harmless with
-    most clients,
-    and improve fallback with clients that use HarfBuzz cluster as unit
-    of fallback.
-
-    Fixes https://github.com/behdad/harfbuzz/issues/217
-
- src/hb-ot-layout-private.hh                          | 6 ++++++
- src/hb-ot-shape.cc                                   | 3 ++-
- test/shaping/tests/indic-joiner-candrabindu.tests     | 2 +-
- test/shaping/tests/mongolian-variation-selector.tests | 2 +-
- 4 files changed, 10 insertions(+), 3 deletions(-)
-
-commit 89137e325a19d62fb00979e1e8ab2ca59a2c1147
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Mon Feb 22 16:00:59 2016 +0900
-
-    Minor
-
- src/hb-coretext.cc | 2 +-
- src/hb-ot-shape.cc | 2 +-
- 2 files changed, 2 insertions(+), 2 deletions(-)
-
-commit 15063b12f7619d4f44981248e28f38c172d12e1f
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Mon Feb 22 15:56:29 2016 +0900
-
-    [coretext] Move CTFont construction to face_data
-
- src/hb-coretext.cc | 66
- +++++++++++++++++++++++++-----------------------------
- 1 file changed, 30 insertions(+), 36 deletions(-)
-
-commit ba3d49d9a56932d341bf1916a30f322be665e3a6
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Mon Feb 22 15:50:12 2016 +0900
-
-    [coretext] Move code around
-
- src/hb-coretext.cc | 70
- +++++++++++++++++++++++++++++++-----------------------
- 1 file changed, 40 insertions(+), 30 deletions(-)
-
-commit 90194efb8480d58c55b7a19962624c7aadbdca63
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Mon Feb 22 15:42:53 2016 +0900
-
-    [coretext] Move code around
-
- src/hb-coretext.cc | 46 ++++++++++++++++++++++++++--------------------
- 1 file changed, 26 insertions(+), 20 deletions(-)
-
-commit ca539e37a4b71e585a267a288db1a3975cbb99fc
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Mon Feb 22 15:37:18 2016 +0900
-
-    [build] git.mk fix for m4/gtk-doc.m4
-
- Makefile.am | 1 +
- 1 file changed, 1 insertion(+)
-
-commit 54788cb1ecc5a5ffd63d07cd1f0b07b2afa9a8ca
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Mon Feb 22 15:32:52 2016 +0900
-
-    [win32] Install git.mk
-
- win32/Makefile.am | 2 ++
- 1 file changed, 2 insertions(+)
-
-commit 9a13ed453ef96822a47d6e6f58332b87f38d5c59
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Mon Feb 22 11:44:45 2016 +0900
-
-    Make FixedVersion a template
-
- 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             | 2 +-
- src/hb-ot-layout-gdef-table.hh       | 2 +-
- src/hb-ot-layout-gsubgpos-private.hh | 2 +-
- src/hb-ot-layout-jstf-table.hh       | 2 +-
- src/hb-ot-maxp-table.hh             | 2 +-
- 8 files changed, 14 insertions(+), 13 deletions(-)
-
-commit 238b943e850ea1ab0093e12c74d2cd7c686f318e
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Mon Feb 22 15:31:22 2016 +0900
-
-    [coretext] Fix leak!
-
- src/hb-coretext.cc | 1 +
- 1 file changed, 1 insertion(+)
-
-commit e561122856a50ed405d71cb1629317e7ae63f316
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Mon Feb 22 15:28:37 2016 +0900
-
-    [coretext] Move code around
-
- src/hb-coretext.cc | 109
- ++++++++++++++++++++++++++++++-----------------------
- 1 file changed, 62 insertions(+), 47 deletions(-)
-
-commit 04c64431530a4a6d9ebd33674c4665a8e6d25bdd
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Mon Feb 22 15:12:27 2016 +0900
-
-    [coretext] Ignore PPEM in font size selection
-
- src/hb-coretext.cc | 14 ++++----------
- 1 file changed, 4 insertions(+), 10 deletions(-)
-
-commit 62c2711121fe78f373c15c0f53090b62b52d11c1
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Mon Feb 22 15:07:20 2016 +0900
-
-    [coretext] Limit grapheme-cluster forming to cluster-level=0
-
- src/hb-coretext.cc | 1 +
- src/hb-ot-shape.cc | 2 +-
- 2 files changed, 2 insertions(+), 1 deletion(-)
-
-commit 061105ec443eb7350ffe217305f9d8902c179e2f
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Mon Feb 22 14:59:39 2016 +0900
-
-    [coretext] Fix shaping with varying font size
-
-    Fixes https://github.com/libass/libass/issues/212
-
- src/hb-coretext.cc | 8 ++++----
- 1 file changed, 4 insertions(+), 4 deletions(-)
-
-commit 27847cab1264b4ce8342603f4626b4e0645979e4
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Fri Feb 19 15:56:50 2016 +0700
-
-    1.2.0
-
- NEWS        | 20 ++++++++++++++++++++
- configure.ac |  2 +-
- 2 files changed, 21 insertions(+), 1 deletion(-)
-
-commit c3731559042e1730e85d19574321ad850010f7de
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Fri Feb 19 15:13:07 2016 +0700
-
-    [fuzzing] Add test for recent fix
-
-    Test from https://github.com/behdad/harfbuzz/issues/223
-
-    I forgot that we do run hb-fuzzer on tests in
-    shaping/tests/fuzzed.tests.
-
- .../sha1sum/205edd09bd3d141cc9580f650109556cc28b22cb.ttf | Bin 0 ->
- 1966 bytes
- test/shaping/fonts/sha1sum/MANIFEST                     |   1 +
- test/shaping/tests/fuzzed.tests                         |   1 +
- 3 files changed, 2 insertions(+)
-
-commit aa33cb72ab29c31e87f0cca9a0e72fe3a68247b7
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Fri Feb 19 15:12:24 2016 +0700
-
-    [fuzzing] Make test runner actually work
-
- test/fuzzing/Makefile.am | 6 ++++--
- 1 file changed, 4 insertions(+), 2 deletions(-)
-
-commit 2735555c6b0c95db7dfc2b391f92a1a5c06084c4
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Fri Feb 19 15:12:16 2016 +0700
-
-    [fuzzing] Add TODO item
-
- test/fuzzing/hb-fuzzer.cc | 1 +
- 1 file changed, 1 insertion(+)
-
-commit b87e36f6f119fac80b8fd55f3abae563c2c5b798
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Fri Feb 19 14:52:31 2016 +0700
-
-    Avoid buffer->move_to() in case of buffer error
-
-    Fixes https://github.com/behdad/harfbuzz/issues/223
-
-    Right now we cannot test this because it has to be tested using
-    hb-fuzzer.
-    We should move all fuzzing tests from test/shaping/tests/fuzzed.tests
-    to
-    test/fuzzing/ and have its own test runner.  At that point, should add
-    test from this issue as well.
-
- src/hb-buffer.cc                    | 2 ++
- src/hb-ot-layout-gsubgpos-private.hh | 2 +-
- 2 files changed, 3 insertions(+), 1 deletion(-)
-
-commit 7e76bbabbaa56af314abff8ddba8866c634919cd
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Fri Feb 19 14:43:39 2016 +0700
-
-    [fuzzing] Make "make hb-fuzzer" build lib dependency
-
-    Not going to do with util/, but is convenient here.
-
- test/fuzzing/Makefile.am | 3 +++
- 1 file changed, 3 insertions(+)
-
-commit 568a0c60e8695a6ad8a93ec60d55b137c48890cb
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Feb 18 19:31:51 2016 +0700
-
-    Remove pointless overflow check in pointer math
-
-    Fixes https://github.com/behdad/harfbuzz/issues/227
-
- src/hb-blob.cc | 1 -
- 1 file changed, 1 deletion(-)
-
-commit aae2847099cbf05bf0668fbe526fc58736837c1b
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Feb 18 17:06:25 2016 +0700
-
-    Emoji skin tone modifiers need to be treated as combining marks
-
-    Fixes https://github.com/behdad/harfbuzz/issues/169
-
- src/hb-ot-layout-private.hh | 15 ++++++++++++++-
- src/hb-unicode-private.hh   | 5 +++--
- 2 files changed, 17 insertions(+), 3 deletions(-)
-
-commit da41e48f0a1a6af6d44ef25185d2421a29bd4166
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Feb 16 17:16:33 2016 +0700
-
-    [USE] Zero mark advances by GDEF early
-
-    This is what Microsoft's implementation does.  Marks that need advance
-    need to add it back using 'dist' or other feature in GPOS.
-    Update tests to
-    match.
-
- src/hb-ot-shape-complex-use.cc                                  |   2 +-
- test/shaping/fonts/sha1sum/MANIFEST                     |   1 +
- .../sha1sum/f518eb6f6b5eec2946c9fbbbde44e45d46f5e2ac.ttf | Bin 0 ->
- 1356 bytes
- test/shaping/tests/context-matching.tests               |   2 +-
- test/shaping/tests/use.tests                            |   2 ++
- 5 files changed, 5 insertions(+), 2 deletions(-)
-
-commit 86c68c7a2c971efe8e35b1f1bd99401dc8b688d2
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Feb 16 16:07:20 2016 +0700
-
-    [GPOS] Fix interaction of mark attachments and cursive chaining
-
-    Fixes https://github.com/behdad/harfbuzz/issues/211
-
-    What happens in that bug is that a mark is attached to base first,
-    then a second mark is cursive-chained to the first mark.  This only
-    "works" because it's in the Indic shaper where mark advances are
-    not zeroed.
-
-    Before, we didn't allow cursive to run on marks at all.  Fix that.
-    We also where updating mark major offsets at the end of GPOS, such
-    that changes in advance of base will not change the mark attachment
-    position.  That was superior to the alternative (which is what
-    Uniscribe
-    does BTW), but made it hard to apply cursive to the mark after it
-    was positioned.  We could track major-direction offset changes and
-    apply that to cursive in the post process, but that's a much trickier
-    thing to do than the fix here, which is to immediately apply the
-    major-direction advance-width offsets...  Ie.:
-
-    https://github.com/behdad/harfbuzz/issues/211#issuecomment-183194739
-
-    If this breaks any fonts, the font should be fixed to do mark
-    attachment
-    after all the advances are set up first (kerning, etc).
-
-    Finally, this, still doesn't make us match Uniscribe, for I explained
-    in that bug.  Looks like Uniscribe applies minor-direction cursive
-    adjustment immediate as well.  We don't, and we like it our way, at
-    least for now.  Eg. the sequence in the test case does this:
-
-    - The first subscript attaches with mark-to-base, moving in x only,
-    - The second subscript attaches with cursive attachment to first
-    subscript
-      moving in x only,
-    - A final context rule moves the first subscript up by 104 units.
-
-    The way we do, the final shift-up, also shifts up the second subscript
-    mark because it's cursively-attached.  Uniscribe doesn't.  We get:
-
-    [ttaorya=0+1307|casubscriptorya=0@-242,104+-231|casubscriptnarroworya=0@20,104+507]
-
-    while Uniscribe gets:
-
-    [ttaorya=0+1307|casubscriptorya=0@-242,104+-211|casubscriptnarroworya=0+487]
-
-    note the different y-offset of the last glyph.  In our view,
-    after cursive,
-    things move together, period.
-
- src/hb-ot-layout-gpos-table.hh                            |  31
- +++++++++++----------
- .../706c5d7b625f207bc0d874c67237aad6f1e9cd6f.ttf   | Bin 0 -> 3868 bytes
- test/shaping/fonts/sha1sum/MANIFEST               |   1 +
- test/shaping/tests/cursive-positioning.tests      |   1 +
- 4 files changed, 18 insertions(+), 15 deletions(-)
-
-commit 80c8855cfeffa028d74a25df884d0e5577c95c6c
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Fri Feb 12 12:50:17 2016 +0700
-
-    Minor
-
- src/hb-common.cc | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-commit 6ab920224c32e38072a0bec5e84d4b0d58b74167
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Feb 11 16:57:52 2016 +0700
-
-    [GPOS] Minor
-
-    No effect.
-
- src/hb-ot-layout-gpos-table.hh | 8 ++++----
- 1 file changed, 4 insertions(+), 4 deletions(-)
-
-commit cbc3a76c5a38ab24f72e80357377711bd3f54d56
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Feb 11 16:48:13 2016 +0700
-
-    [GPOS] Merge fixing of offsets for cursive and mark attachments
-
-    Part of fixing https://github.com/behdad/harfbuzz/issues/211
-
- src/hb-buffer-private.hh      |  3 +-
- src/hb-ot-layout-gpos-table.hh | 73
- ++++++++++++++++++------------------------
- 2 files changed, 33 insertions(+), 43 deletions(-)
-
-commit 7d8d58ac81fe267e29ea68cdc6f4a4fa8c22d40f
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Feb 11 16:34:28 2016 +0700
-
-    [GPOS] Divide position_finish() into two phases, for advances
-    and offsets
-
-    Right now the position_finish_advances() is empty. To be used for
-    spacing attachments proposal later.
-
- src/hb-ot-layout-gpos-table.hh | 11 +++++++++--
- src/hb-ot-layout-gsub-table.hh |  6 ------
- src/hb-ot-layout-private.hh   | 19 +++++++++----------
- src/hb-ot-layout.cc           | 16 ++++++++--------
- src/hb-ot-shape.cc            |  7 +++----
- 5 files changed, 29 insertions(+), 30 deletions(-)
-
-commit 8474231567a08873cc5e0aa08fea60316a04c27e
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Feb 11 16:27:41 2016 +0700
-
-    [ot] Minor shuffling code around
-
- src/hb-ot-layout-gpos-table.hh |  2 --
- src/hb-ot-shape.cc            | 13 ++++++++-----
- 2 files changed, 8 insertions(+), 7 deletions(-)
-
-commit b0b11614e9fb9ecd1faae28b0ed71ac6bf5c1266
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Feb 11 15:28:55 2016 +0700
-
-    [GPOS] Add harmless recursion in fix_mark_attachment()
-
-    Will do nothing.  Just useful for merging two functions.
-
- src/hb-ot-layout-gpos-table.hh | 2 ++
- 1 file changed, 2 insertions(+)
-
-commit 686567baab5a32ffea843538643e01de2885fa4f
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Feb 11 15:25:28 2016 +0700
-
-    [GPOS] Merge attach_chain() and cursive_chain()
-
-    Differentiate, using new attach_type().
-
- src/hb-ot-layout-gpos-table.hh | 50
- +++++++++++++++++++++++++++---------------
- 1 file changed, 32 insertions(+), 18 deletions(-)
-
-commit 806ad8dc65931ab7893bff7d5592a67a9bd237ca
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Feb 11 14:53:11 2016 +0700
-
-    [GPOS] Minor shuffling
-
- src/hb-ot-layout-gpos-table.hh | 10 +++++-----
- 1 file changed, 5 insertions(+), 5 deletions(-)
-
-commit 0f6278d1fbb75856132f1fa2d29648979f033316
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Feb 11 14:49:10 2016 +0700
-
-    [GPOS] Negate sign of attach_lookback(), and rename it to
-    attach_chain()
-
-    No behavior change.  Preparing to unify how cursive and mark
-    attachments
-    work.
-
- src/hb-ot-layout-gpos-table.hh | 17 +++++++++--------
- 1 file changed, 9 insertions(+), 8 deletions(-)
-
-commit 5b5dc2c0406d8180e72d97a54334c722fda325b1
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Feb 11 12:15:38 2016 +0700
-
-    [tests] Add test for advance zeroing of an ASCII letter marked as
-    mark in GDEF
-
- test/shaping/fonts/sha1sum/MANIFEST                     |   1 +
- .../sha1sum/a98e908e2ed21b22228ea59ebcc0f05034c86f2e.ttf | Bin 0 ->
- 1016 bytes
- test/shaping/tests/zero-width-marks.tests               |   1 +
- 3 files changed, 2 insertions(+)
-
-commit 660c9d3fc21172e8dc340b017122c084dac6334c
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Feb 11 12:14:27 2016 +0700
-
-    Remove font-dependent ASCII-only perf hack
-
-    Is confusing.  I already hit it myself.  Remove.  We can optimize
-    ASCII based on Unicode properties. But should not do based on
-    assumptions on the font.
-
- src/hb-ot-shape.cc | 4 ----
- 1 file changed, 4 deletions(-)
-
-commit 3fe0cf10401875f1e9b8b5fbaf59826e64ea61d2
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Feb 10 18:43:43 2016 +0700
-
-    Fix previous commit!
-
- test/shaping/fonts/sha1sum/MANIFEST      | 6 +++---
- test/shaping/tests/zero-width-marks.tests | 6 +++---
- 2 files changed, 6 insertions(+), 6 deletions(-)
-
-commit 293a210eee0a53b59f4b33298f42ec6e59d785e0
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Feb 10 18:39:59 2016 +0700
-
-    [tests] Fix fonts in cc4a78bf22c4a735b84c89b04be3bb531f42135e
-
-    They had an invalid LookupFlag (32).
-
- .../sha1sum/0dd3a51c3ea50997cb1f72515d1060408f8b4b59.ttf | Bin 1412 ->
- 0 bytes
- .../sha1sum/56cfd0e18d07f41c38e9598545a6d369127fc6f9.ttf | Bin 0 ->
- 1412 bytes
- .../sha1sum/828114d00931885bc25abf7cdb878b2914a2e743.ttf | Bin 1448 ->
- 0 bytes
- .../sha1sum/894e96a367f00c196d82e6243673a1d4414f4f6a.ttf | Bin 1448 ->
- 0 bytes
- .../sha1sum/cc5f3d2d717fb6bd4dfae1c16d48a2cb8e12233b.ttf | Bin 0 ->
- 1448 bytes
- .../sha1sum/ffa0f5d2d9025486d8469d8b1fdd983e7632499b.ttf | Bin 0 ->
- 1448 bytes
- 6 files changed, 0 insertions(+), 0 deletions(-)
-
-commit eaadcbbc53e02838c847e53ef214a55d6915d677
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Feb 10 18:29:54 2016 +0700
-
-    Remove now-unused mark zeroing BY_UNICODE
-
- src/hb-ot-shape-complex-private.hh |  2 --
- src/hb-ot-shape.cc                | 29 -----------------------------
- 2 files changed, 31 deletions(-)
-
-commit cc4a78bf22c4a735b84c89b04be3bb531f42135e
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Feb 10 18:24:08 2016 +0700
-
-    [tests] Add tests for Latin mark zeroing
-
- .../sha1sum/0dd3a51c3ea50997cb1f72515d1060408f8b4b59.ttf | Bin 0 ->
- 1412 bytes
- .../sha1sum/828114d00931885bc25abf7cdb878b2914a2e743.ttf | Bin 0 ->
- 1448 bytes
- .../sha1sum/894e96a367f00c196d82e6243673a1d4414f4f6a.ttf | Bin 0 ->
- 1448 bytes
- test/shaping/fonts/sha1sum/MANIFEST                     |   4 ++++
- .../sha1sum/fcdcffbdf1c4c97c05308d7600e4c283eb47dbca.ttf | Bin 0 ->
- 1344 bytes
- test/shaping/tests/zero-width-marks.tests               |   4 ++++
- 6 files changed, 8 insertions(+)
-
-commit 55ff34b9c157a839d026465af8f30424ce7f891b
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Feb 10 18:20:02 2016 +0700
-
-    [tests] Add tests for Thai mark zeroing
-
- .../sha1sum/45855bc8d46332b39c4ab9e2ee1a26b1f896da6b.ttf | Bin 0 ->
- 1088 bytes
- .../sha1sum/7a37dc4d5bf018456aea291cee06daf004c0221c.ttf | Bin 0 ->
- 1080 bytes
- .../sha1sum/8099955657a54e9ee38a6ba1d6f950ce58e3cc25.ttf | Bin 0 ->
- 1024 bytes
- test/shaping/fonts/sha1sum/MANIFEST                     |   4 ++++
- .../sha1sum/bb0c53752e85c3d28973ebc913287b8987d3dfe8.ttf | Bin 0 ->
- 976 bytes
- test/shaping/tests/zero-width-marks.tests               |   4 ++++
- 6 files changed, 8 insertions(+)
-
-commit b3582a8ee82942a931130a83b2867b239f8ca71a
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Feb 10 18:10:15 2016 +0700
-
-    Change default mark advance zeroing behavior from Unicode to GDEF
-
-    See thread at:
-    https://lists.freedesktop.org/archives/harfbuzz/2016-February/005462.html
-
- src/hb-ot-shape-complex-default.cc | 2 +-
- src/hb-ot-shape-complex-thai.cc    | 2 +-
- src/hb-ot-shape-complex-tibetan.cc | 2 +-
- 3 files changed, 3 insertions(+), 3 deletions(-)
-
-commit 43bb2b8fb00705c3334730a58ade7984181018b2
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Feb 10 14:11:43 2016 +0700
-
-    Minor
-
- test/shaping/hb_test_tools.py | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-commit bdaa784bb610ec65626d63cc068a0958ff5005fc
-Merge: a168db4 f6ffba6
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Feb 10 11:11:36 2016 +0700
-
-    Merge pull request #164 from fanc999/msvc.build
-
-    Enable Build of HarfBuzz under Visual Studio using NMake Makefiles
-
-commit a168db4739148459bc33c7dae88e73efa0153d72
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Feb 10 11:10:08 2016 +0700
-
-    [README] Add ABI Tracker link
-
- README | 1 +
- 1 file changed, 1 insertion(+)
-
-commit f6ffba634bb33d6d4b051abce9c23fcae280c3fe
-Author: Chun-wei Fan <fanchunwei@src.gnome.org>
-Date:  Wed Dec 9 14:57:15 2015 +0800
-
-    MSVC builds: Add support to build DirectWrite shaping backend
-
-    Add into the NMake Makefiles to build the DirectWrite shaping backend,
-    but as PR #134 mentions, this is considered to be in an experimental
-    state,
-    so don't include this in the build by default for now.  This is
-    most probably
-    going to replace the Uniscribe backend eventually, since DirectWrite
-    is meant
-    to be Uniscribe's replacement, and is needed for Windows Store apps
-    if a
-    system shaping API is to be used.
-
- win32/README.txt       |  4 ++++
- win32/config-msvc.mak  | 10 ++++++++++
- win32/config.h.win32.in |  3 +++
- win32/info-msvc.mak    |  7 +++++++
- 4 files changed, 24 insertions(+)
-
-commit c6792854557ca104948e8f0b142c9384105b0d05
-Author: Chun-wei Fan <fanchunwei@src.gnome.org>
-Date:  Wed Feb 3 18:31:23 2016 +0800
-
-    build: Build the DirectWrite sources if requested
-
-    This adds to the autotools build system so that the (experimental)
-    DirectWrite support for HarfBuzz is built (and dist'ed).
-
- configure.ac        | 25 +++++++++++++++++++++++++
- src/Makefile.am      |  7 +++++++
- src/Makefile.sources |  3 +++
- 3 files changed, 35 insertions(+)
-
-commit d7b6636e5ebf1ddf7d7a04007ffbc411cf7e462e
-Author: Chun-wei Fan <fanchunwei@src.gnome.org>
-Date:  Tue Nov 3 19:00:42 2015 +0800
-
-    build: Support Visual Studio builds using NMake
-
-    This adds a set of NMake Makefiles that can be used to build
-    HarfBuzz, from
-    the standard basic build building the minimal HarfBuzz DLL (consisting
-    of OpenType, fallback and Uniscribe support only), to a full
-    fledged build
-    consisting of GLib and FreeType support, as well as building the
-    utilities,
-    the test programs in src/ and test/api, and HarfBuzz-ICU and
-    HarfBuzz-GObject, and up to building the introspection files.
-    This means a
-    flexible build mechanism is supported here, so anything that is
-    supported
-    for a Windows build (code-wise), should all be supported by this build
-    system.
-
-    As in an earlier commit, the source listings are shared with the
-    autotools
-    builds with the various Makefile.sources in src/, src/hb-ucdn and
-    util/, and
-    this set of NMake Makefiles will transform these lists into the
-    form they
-    want.
-
-    In the current form, all the test programs in test/api pass, and
-    this has
-    been checked successfully with 'make -j8 distcheck'.
-
- BUILD.md                       |   4 +-
- Makefile.am                    |   2 +-
- configure.ac                   |   2 +
- win32/Makefile.am              |  14 +++
- win32/Makefile.vc              |  52 +++++++++++
- win32/README.txt               |  75 ++++++++++++++++
- win32/build-rules-msvc.mak     | 140 ++++++++++++++++++++++++++++++
- win32/config-msvc.mak          | 188
- ++++++++++++++++++++++++++++++++++++++++
- win32/create-lists-msvc.mak    | 151 ++++++++++++++++++++++++++++++++
- win32/create-lists.bat                 |  42 +++++++++
- win32/detectenv-msvc.mak       | 136 +++++++++++++++++++++++++++++
- win32/generate-msvc.mak        |  26 ++++++
- win32/hb-introspection-msvc.mak |  42 +++++++++
- win32/info-msvc.mak            | 130 +++++++++++++++++++++++++++
- win32/install.mak              |  29 +++++++
- win32/introspection-msvc.mak   |  73 ++++++++++++++++
- 16 files changed, 1104 insertions(+), 2 deletions(-)
-
-commit 5c3e7260bcb4999b8b7cb9afb26e6eaff867634b
-Author: Chun-wei Fan <fanchunwei@src.gnome.org>
-Date:  Tue Nov 3 18:52:46 2015 +0800
-
-    MSVC builds: Add a pre-configured config.h(.win32) template
-
-    This adds a pre-configured config.h template that can be used
-    for Visual
-    Studio builds, where autotools is not normally available.  This has
-    the
-    configs that are suitable for Visual Studio builds, as well as all the
-    features used for Windows builds enabled (HAVE_OT, HAVE_FALLBACK and
-    HAVE_UNISCRIBE).
-
-    Note that the optional features are not enabled here, they are
-    enabled by
-    /D's (or -D's) in the NMake Makefiles as requested.
-
- win32/config.h.win32.in | 155
- ++++++++++++++++++++++++++++++++++++++++++++++++
- 1 file changed, 155 insertions(+)
-
-commit 35ded3af74a5bc4b038a07308354d5f7501ae3c7
-Author: Chun-wei Fan <fanchunwei@src.gnome.org>
-Date:  Tue Nov 3 16:56:27 2015 +0800
-
-    build: Move source listings into separate Makefile snippets
-
-    This moves all the source listings in src/Makefile.am,
-    src/hb-ucdn/Makefile.am and util/Makefile.am into separate Makefile
-    snippets, so that they may be shared between different Makefile-based
-    build systems, such as NMake for Visual Studio.
-
- src/Makefile.am             | 165
- +++++++++----------------------------------
- src/Makefile.sources        | 147 ++++++++++++++++++++++++++++++++++++++
- src/hb-ucdn/Makefile.am      |   6 +-
- src/hb-ucdn/Makefile.sources |   4 ++
- util/Makefile.am            |  34 ++-------
- util/Makefile.sources       |  32 +++++++++
- 6 files changed, 223 insertions(+), 165 deletions(-)
-
-commit b894a85ad1e7c3ecfb6d3732a7c9779f5462fe70
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Feb 2 16:39:19 2016 +0800
-
-    Fix more hangs in case of buffer allocation errors
-
-    Hopefully
-    fixes https://github.com/behdad/harfbuzz/issues/214
-
- src/hb-ot-shape-complex-indic.cc   | 2 +-
- src/hb-ot-shape-complex-myanmar.cc | 2 +-
- src/hb-ot-shape-complex-use.cc     | 2 +-
- 3 files changed, 3 insertions(+), 3 deletions(-)
-
-commit b693992ea160b66541f678dc9be29b513c77a30b
-Merge: 9a6a33c 498574e
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Feb 2 12:33:32 2016 +0800
-
-    Merge pull request #222 from n8willis/master
-
-    Add usermanual chapter on cluster levels
-
-commit 498574e6c1a83bbd2768925af6e39806fe1ea8bb
-Author: n8willis <nwillis@glyphography.com>
-Date:  Thu Jan 28 12:21:32 2016 -0600
-
-    Update Makefile.am
-
- docs/Makefile.am | 1 +
- 1 file changed, 1 insertion(+)
-
-commit e12fc666994573dbabb6928a8b2e8698667088ce
-Author: n8willis <nwillis@glyphography.com>
-Date:  Thu Jan 28 12:14:12 2016 -0600
-
-    Added initial usermanual chapter on cluster levels.
-
- docs/harfbuzz-docs.xml       |   1 +
- docs/usermanual-clusters.xml | 304
- +++++++++++++++++++++++++++++++++++++++++++
- 2 files changed, 305 insertions(+)
-
-commit 9a6a33ccbea8a2e23e779bd955958fa41974c1c7
-Merge: d05b783 146fe25
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Mon Jan 18 12:47:18 2016 +0100
-
-    Merge pull request #216 from mhosken/master
-
-    Refactor graphite2 to make ovleraps into negative width spaces
-
-commit 146fe252c3ebd0253344ce20981554e40926497b
-Author: Martin Hosken <martin_hosken@sil.org>
-Date:  Sat Jan 16 17:24:00 2016 -0600
-
-    Refactor graphite2 to make ovleraps into negative width spaces
-
- src/hb-graphite2.cc | 71
- ++++++++++++++++++++++++++++++++---------------------
- 1 file changed, 43 insertions(+), 28 deletions(-)
-
-commit d05b783322d90208b2ddf06a5ebffc7c301be3d7
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Jan 12 16:17:21 2016 +0000
-
-    Fix compiler warning
-
-    Fixes https://github.com/behdad/harfbuzz/issues/212
-
- src/hb-ot-tag.cc | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-commit d163dc18e66c9e2f404d09310482464245cae704
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Jan 12 13:05:01 2016 +0000
-
-    Minor
-
- src/hb-ot-layout-common-private.hh | 30 +++++++++++++++---------------
- 1 file changed, 15 insertions(+), 15 deletions(-)
-
-commit 505b7d4732c6a8c423f43c0de46e05dc583e82c0
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Mon Jan 11 18:31:04 2016 +0000
-
-    [fuzzing] Fuzz input text
-
-    Very rudimentary right now, but will get kcc's bot going.
-
-    From
-    https://github.com/behdad/harfbuzz/issues/139#issuecomment-163580783
-
- test/fuzzing/hb-fuzzer.cc | 25 +++++++++++++++++++------
- 1 file changed, 19 insertions(+), 6 deletions(-)
-
-commit 3e704521f67e021fb51cda7319925fd39eba4f97
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Mon Jan 11 17:38:41 2016 +0000
-
-    [OT] Get list of lookup subtables once and loop through them
-
-    This speeds up shaping the Amiri font by over 15%.
-
-    This was primarily needed for my work on OpenType GX, since
-    we will be collecting only sublookups that are "active" for
-    current font instance; but it's a nice boost in general as
-    well.
-
-    We might, in the future, collect subtables in the lookup_accel.
-    That would also allow us to do a per-subtbale set-digest, which
-    should speed things up some more, specially for ContextChainFormat3
-    lookups... Amiri, for example, contains one lookup with 53
-    subtables!
-
- src/hb-ot-layout.cc | 120
- +++++++++++++++++++++++++++++++++++-----------------
- 1 file changed, 81 insertions(+), 39 deletions(-)
-
-commit 11441291bbf4326dca9b14ec3e9cad3d4d229303
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Mon Jan 11 13:16:35 2016 +0000
-
-    1.1.3
-
- NEWS        | 29 +++++++++++++++++++++++++++++
- configure.ac |  2 +-
- 2 files changed, 30 insertions(+), 1 deletion(-)
-
-commit 97624d9244de0fdb9c03f60e03fe242028efa8a1
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Mon Jan 11 12:58:45 2016 +0000
-
-    [docs] Minor fixes.
-
- src/hb-buffer.h | 26 +++++++++++++-------------
- 1 file changed, 13 insertions(+), 13 deletions(-)
-
-commit a39ff95fce39226e80850ff251cb34a7aad12bd7
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Mon Jan 11 12:28:37 2016 +0000
-
-    [coretext] Speed up CoreText font fallback
-
-    Fixes https://code.google.com/p/chromium/issues/detail?id=547912
-
- src/hb-coretext.cc | 45 ++++++++++++++++++++++++++++++++++++++++-----
- 1 file changed, 40 insertions(+), 5 deletions(-)
-
-commit 5afebbdcb2dab0e9a42d580df629d8e60b50d2f9
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Jan 7 22:53:59 2016 +0000
-
-    Add Homebrew build instructions
-
- BUILD.md | 10 ++++++++--
- 1 file changed, 8 insertions(+), 2 deletions(-)
-
-commit e8a27d79476a5d7a83cf2287d92ca291257546f4
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Jan 7 22:52:16 2016 +0000
-
-    Don't build hb-fuzzer in "make", only "make check"
-
- test/fuzzing/Makefile.am | 3 +--
- 1 file changed, 1 insertion(+), 2 deletions(-)
-
-commit 25671466d245449187f8ab17e1a233f1d087d5ed
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Jan 7 19:11:41 2016 +0000
-
-    Add 9 reserved entries to hb_font_extents_t
-
-    Might add italic-angle, underline/strikethrough-position/thickness
-    in the future.  Do this before new struct goes into a release.
-
- src/hb-font.h | 10 ++++++++++
- 1 file changed, 10 insertions(+)
-
-commit e6d5e4c3106180cb22253c2c278b40f7c4c98f2f
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Jan 6 12:29:50 2016 +0000
-
-    [uniscribe] Fix negative advance
-
-    This happens with at least one test font I have.
-
- src/hb-uniscribe.cc | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-commit 99d34955762d0fff4b66a30e6fbe65fd1cf9976b
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Jan 6 12:20:47 2016 +0000
-
-    [test] Add test text for Kaithi
-
- test/shaping/texts/in-tree/shaper-hangul/MANIFEST           | 1 +
- test/shaping/texts/in-tree/shaper-hebrew/MANIFEST           | 1 +
- test/shaping/texts/in-tree/shaper-tibetan/MANIFEST          | 1 +
- test/shaping/texts/in-tree/shaper-use/MANIFEST                      | 1 +
- test/shaping/texts/in-tree/shaper-use/script-kaithi/MANIFEST | 1 +
- test/shaping/texts/in-tree/shaper-use/script-kaithi/misc.txt | 6 ++++++
- 6 files changed, 11 insertions(+)
-
-commit 53c47c85827a7e3ca82000e3baa9aa87c5770ce9
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Jan 5 13:26:20 2016 +0000
-
-    Increase sanitize edit count from 8 to 32
-
-    See previous commit.
-
- src/hb-open-type-private.hh | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-commit da2fcfdc51a2cc0d0a782efa6c91b733f7aa84ba
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Jan 5 13:23:45 2016 +0000
-
-    Don't count fixing-up FeatureParams offset as error
-
-    The font Garamond Premier Pro Caption (and possibly many other
-    Adobe fonts), have many FeatureParamsSize tables with the old
-    wrong offset.  We handle fixing those up, but they were still
-    contributing to edit_count, and when I reduced HB_SANITIZE_MAX_EDIT
-    from 100 to 8 in 14c2de321826c36037adde859ccca3e2011325a9, these
-    fonts were now getting GPOS dropped and hence kerning disabled.
-
-    Fix, by not counting edits made towareds offset fix-up.  I'll
-    also increase edit count again, in the next commit.
-
- src/hb-ot-layout-common-private.hh | 3 +++
- 1 file changed, 3 insertions(+)
-
-commit d0adc80965506810820f9ec165b8df80cc8907e3
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Sat Jan 2 13:25:18 2016 +0000
-
-    Check magicNumber in head table during sanitize
-
- src/hb-ot-head-table.hh | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
-
-commit 3a48c776701a919e11b067129586e40372d90d54
-Merge: 9230911 4b4948d
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Sat Jan 2 00:59:14 2016 +0000
-
-    Merge pull request #208 from khaledhosny/travis-trusty
-
-    [travis] Try building on Trusty
-
-commit 4b4948d360a2141e0ffda2994aa308645dc32f59
-Author: Khaled Hosny <khaledhosny@eglug.org>
-Date:  Sat Jan 2 00:36:19 2016 +0400
-
-    [travis] Try building on Trusty
-
-    Trusty has gtk-doc 1.20 which has better markdown support which should
-    fix some of the brokenness in the newly added documentation. The build
-    seems to be as fast as the current container-based build on Precise.
-
- .travis.yml | 5 +++--
- 1 file changed, 3 insertions(+), 2 deletions(-)
-
-commit 9230911facf90c06626e54023ca4d99f5e05f1a4
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Fri Jan 1 19:06:43 2016 +0000
-
-    [travis] Only run coveralls if testing behdad/harfbuzz
-
-    Fixes failures in others' forks, like:
-    https://travis-ci.org/khaledhosny/harfbuzz/jobs/99719710#L3912
-
- .travis.yml | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-commit 6f66f05757d3d5738571b3d4ee40afffb8f26ff9
-Merge: bfdf684 9ab9f97
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Fri Jan 1 16:44:01 2016 +0000
-
-    Merge pull request #207 from khaledhosny/docs-4
-
-    [docs] More buffers documentation
-
-commit 9ab9f974d42e0001966e243a23a64e6aefbd4764
-Author: Khaled Hosny <khaledhosny@eglug.org>
-Date:  Fri Jan 1 20:38:21 2016 +0400
-
-    [docs] More buffers documentation
-
- docs/harfbuzz-sections.txt |  4 +-
- src/hb-buffer-serialize.cc | 85
- ++++++++++++++++++++++++++++++-------------
- src/hb-buffer.cc          | 91
- +++++++++++++++++++++++++++++++++++-----------
- src/hb-buffer.h           | 78 +++++++++++++++++++++++++--------------
- src/hb-shape.cc           | 10 +++--
- 5 files changed, 187 insertions(+), 81 deletions(-)
-
-commit bfdf684f7957645dd016fbf76700c5911c4bee2d
-Merge: d7ed6f5 85c2443
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Dec 30 22:20:14 2015 +0100
-
-    Merge pull request #205 from khaledhosny/more-docs
-
-    More docs
-
-commit d7ed6f50b4ff13a94701131913d931f13a4d1266
-Merge: b758e5e a7f0e25
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Dec 30 22:20:00 2015 +0100
-
-    Merge pull request #206 from nico/patch-3
-
-    Remove unused HB_SHAPER_DATA_ENSURE_DECLARE lines.
-
-commit a7f0e25dafa90bd21b01c38cb0782ade54b75cdc
-Author: Nico Weber <nicolasweber@gmx.de>
-Date:  Wed Dec 30 16:05:52 2015 -0500
-
-    Remove unused HB_SHAPER_DATA_ENSURE_DECLARE lines.
-
-    The coretext_aat shaper delegates to the regular coretext_..._ensure()
-    functions, so coretext_aat_..._ensure() functions defined by these
-    macros are unused. The compiler warns about them, which in turn can
-    confuse people to think that the coretext_aat_..._ensure() functions
-    weren't called by accident.
-
- src/hb-coretext.cc | 4 ----
- 1 file changed, 4 deletions(-)
-
-commit 85c2443b737335b77c7e9bb6fd6741912f70fcef
-Author: Khaled Hosny <khaledhosny@eglug.org>
-Date:  Wed Dec 30 22:57:04 2015 +0400
-
-    [docs] Reduce gtkdoc-check errors
-
-    Now it is just reporting one error about “503 undocumented or
-    incomplete
-    symbols”, that will be the easy part I guess.
-
- docs/harfbuzz-docs.xml     | 74
- ++++++++++++++++++++++++++++++++++++++++++++++
- docs/harfbuzz-sections.txt | 40 +++++++++++++++++++++++++
- 2 files changed, 114 insertions(+)
-
-commit 9cffe329f15b3a74a3af4e68c1884f1dbda49666
-Author: Khaled Hosny <khaledhosny@eglug.org>
-Date:  Wed Dec 30 22:50:08 2015 +0400
-
-    [docs] Typo
-
- src/hb-buffer.cc | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-commit b758e5ea223eced0fde9a3e62d0fdf04c04914a1
-Merge: 266bfa3 8b1224f
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Dec 30 16:44:19 2015 +0100
-
-    Merge pull request #203 from nico/patch-1
-
-    Remove unused `retry:` label.
-
-commit 266bfa3772e75fedcd93db22bf8672a13ad7a7d9
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Dec 30 16:25:48 2015 +0100
-
-    [docs] Minor
-
- .ci/deploy-docs.sh | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-commit d08035f8f15b7ddd89a318ea34bc386a9e33a8ea
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Dec 30 16:15:36 2015 +0100
-
-    [docs] Fix up build, really
-
- .ci/deploy-docs.sh | 9 ++++-----
- .travis.yml       | 2 +-
- 2 files changed, 5 insertions(+), 6 deletions(-)
-
-commit 0d45c3cf63692151166ca7071f755dfaa8922a67
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Dec 30 16:09:39 2015 +0100
-
-    [docs] Turn bash tracing on
-
- .ci/deploy-docs.sh | 4 ++++
- 1 file changed, 4 insertions(+)
-
-commit 33b2d981a0b12ea165ef9282204a73f4a1ce0477
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Dec 30 15:56:56 2015 +0100
-
-    [docs] Another try, not sure why the bot isn't building
-
- .ci/deploy-docs.sh | 13 ++++---------
- 1 file changed, 4 insertions(+), 9 deletions(-)
-
-commit f3a051149b3b565b5ad4e489bf730c5203c3549e
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Dec 30 15:45:43 2015 +0100
-
-    [docs] Shuffling code around in deploy-docs.sh
-
-    Temporarily makes it rebuild docs on every change again.
-
- .ci/deploy-docs.sh | 46 +++++++++++++++++++++++++++-------------------
- 1 file changed, 27 insertions(+), 19 deletions(-)
-
-commit 8f31d0a94b27bb658aabe600472fc10bc47885f6
-Merge: 9d280cf fb192c2
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Dec 30 15:13:37 2015 +0100
-
-    Merge pull request #202 from khaledhosny/doc-fixes
-
-    Doc fixes
-
-commit fb192c263e17081c87f4cc971274d9be42f19513
-Author: Khaled Hosny <khaledhosny@eglug.org>
-Date:  Wed Dec 30 15:05:50 2015 +0400
-
-    [docs] A bit more buffers documentation
-
- docs/harfbuzz-sections.txt |  2 ++
- src/hb-buffer.cc          |  7 +++---
- src/hb-buffer.h           | 56
- ++++++++++++++++++++++++++++++++++++++++++++--
- 3 files changed, 60 insertions(+), 5 deletions(-)
-
-commit 8ab797c5b86c33eab6ee024471fd3c147325d26a
-Author: Khaled Hosny <khaledhosny@eglug.org>
-Date:  Tue Dec 29 17:42:16 2015 +0400
-
-    [docs] A bit more buffers documentation
-
- docs/harfbuzz-sections.txt | 60 +++++++++++++++---------------
- src/hb-buffer.cc          | 93
- +++++++++++++++++++++++++++++++---------------
- src/hb-buffer.h           |  7 +++-
- src/hb-common.cc          | 43 +++++++++++++--------
- src/hb-common.h           | 15 +++++---
- 5 files changed, 135 insertions(+), 83 deletions(-)
-
-commit f18d2226b62f20d29e6299c01ae8467c725ea971
-Author: Khaled Hosny <khaledhosny@eglug.org>
-Date:  Tue Dec 29 15:21:20 2015 +0400
-
-    [docs] Some documentation on buffers
-
-    Some of it (create, reference, destroy) are adapted from Cairo docs.
-
- docs/harfbuzz-sections.txt |  55 +++++++-------
- src/hb-buffer.cc          | 174
- +++++++++++++++++++++++++++------------------
- 2 files changed, 132 insertions(+), 97 deletions(-)
-
-commit d7bf9d05c519a369a7b3a02e9ed5ecc05a20cd3e
-Author: Khaled Hosny <khaledhosny@eglug.org>
-Date:  Tue Dec 29 02:23:24 2015 +0400
-
-    [docs] Fix comment syntax
-
-    To lower the number of gtk-doc warnings.
-
- .travis.yml          |  2 +-
- src/hb-directwrite.cc |  4 ++--
- src/hb-ot-layout.cc   | 14 ++++++++++++++
- src/hb-unicode.h      | 16 ++++++++++++++++
- 4 files changed, 33 insertions(+), 3 deletions(-)
-
-commit 8b1224f0eece7a5b6846e206333e57ac4653a705
-Author: Nico Weber <nicolasweber@gmx.de>
-Date:  Mon Dec 28 21:31:28 2015 -0500
-
-    Remove unused `retry:` label.
-
-    Fixes a -Wunused-label warning when building harfbuzz with clang
-    -Wall.
-
- src/hb-coretext.cc | 1 -
- 1 file changed, 1 deletion(-)
-
-commit 1f5559293f9bb1b4e911f4bdecf276ff1f6ae01c
-Author: Khaled Hosny <khaledhosny@eglug.org>
-Date:  Tue Dec 29 02:15:21 2015 +0400
-
-    [docs] Ignore the new HB_EXTERN decoration
-
-    Otherwise, almost all API functions are not extracted.
-
- docs/Makefile.am | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
-commit 9d280cf49f25181f64c978752f926b79e7c3746a
-Author: Khaled Hosny <khaledhosny@eglug.org>
-Date:  Sat Dec 26 06:45:51 2015 +0400
-
-    Fix previous commit
-
- .ci/deploy-docs.sh | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-commit b789199f107912cfce5e4a95d6152f9a1a7993f2
-Author: Khaled Hosny <khaledhosny@eglug.org>
-Date:  Sat Dec 26 06:35:08 2015 +0400
-
-    [travis] Build docs only on tagged revisions
-
-    Lets see if it works…
-
- .ci/deploy-docs.sh | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
-
-commit e5b90c08a4c1f475560209a5e47628f695606d89
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Fri Dec 25 18:41:41 2015 +0100
-
-    [travis] Remove secure var
-
-    I've set up a secure var for behdad/harfbuzz through Travis web
-    interface, no need
-    to set the var here.
-
- .ci/deploy-docs.sh | 2 +-
- .travis.yml       | 1 -
- 2 files changed, 1 insertion(+), 2 deletions(-)
-
-commit e75c1ffdf548185ce1f1df7937f0d028e5e40efe
-Merge: 6173c2a d25317f
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Fri Dec 25 18:21:08 2015 +0100
-
-    Merge pull request #199 from behdad/travis-docs
-
-    Deploy docs to gh-pages branch from Travis builds
-
-commit 6173c2a6fc6ea0bf812f7f398770b5342974f9bf
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Fri Dec 25 18:18:23 2015 +0100
-
-    Fix flaky test
-
-    This test font had a upem of 769, which results in rounding-related
-    errors with
-    the FreeType font funcs.  Change the upem to 1024 to fix that.
-
-    Fixes https://github.com/behdad/harfbuzz/issues/201
-
- ...> 1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf} | Bin 4064 ->
- 4064 bytes
- test/shaping/fonts/sha1sum/MANIFEST               |   2 +-
- test/shaping/tests/ligature-id.tests              |  70
- ++++++++++-----------
- 3 files changed, 36 insertions(+), 36 deletions(-)
-
-commit 3fcae6d82da389c9944386a8ab41eb1c13b99330
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Fri Dec 25 18:18:02 2015 +0100
-
-    [tests] Add --reference, for re-recording tests
-
- test/shaping/run-tests.sh | 18 ++++++++++++++----
- 1 file changed, 14 insertions(+), 4 deletions(-)
-
-commit d25317f67f3c5c77f9059961935b0f35cbaa9ac4
-Author: Khaled Hosny <khaledhosny@eglug.org>
-Date:  Wed Dec 23 01:29:48 2015 +0400
-
-    Move more docs from FreeDesktop page
-
- docs/Makefile.am                    |  1 +
- docs/harfbuzz-docs.xml                      | 15 ++++----
- docs/usermanual-install-harfbuzz.xml | 70
- ++++++++++++++++++++++++++++++++++++
- 3 files changed, 80 insertions(+), 6 deletions(-)
-
-commit 493a92220844c8996be67c8a7a2c5447942fe2c1
-Author: Khaled Hosny <khaledhosny@eglug.org>
-Date:  Wed Dec 23 00:33:41 2015 +0400
-
-    Rename user manual files
-
-    Use chapter ids instead of numbers, so that we can reorder them,
-    introduce new ones etc. without the numbers becoming out of date.
-
- docs/Makefile.am                                            | 12
- ++++++------
- docs/harfbuzz-docs.xml                                              | 12
- ++++++------
- ... => usermanual-buffers-language-script-and-direction.xml} |  0
- docs/{usermanual-ch04.xml => usermanual-fonts-and-faces.xml} |  0
- ...{usermanual-ch06.xml => usermanual-glyph-information.xml} |  0
- docs/{usermanual-ch02.xml => usermanual-hello-harfbuzz.xml}  |  0
- ...{usermanual-ch05.xml => usermanual-opentype-features.xml} |  0
- .../{usermanual-ch01.xml => usermanual-what-is-harfbuzz.xml} |  0
- 8 files changed, 12 insertions(+), 12 deletions(-)
-
-commit 4dc2265918089ee08c6d82eed0cfd41e02d7d231
-Author: Khaled Hosny <khaledhosny@eglug.org>
-Date:  Wed Dec 23 00:26:20 2015 +0400
-
-    Intro from freedesktop.org/wiki/Software/HarfBuzz/
-
- docs/HarfBuzz.png     | Bin 0 -> 3419 bytes
- docs/Makefile.am      |   3 ++-
- docs/harfbuzz-docs.xml |  31 ++++++++++++++++++++++++++++++-
- 3 files changed, 32 insertions(+), 2 deletions(-)
-
-commit 22b07782ced6503a0bf33f2fe157b70540238f6d
-Author: Khaled Hosny <khaledhosny@eglug.org>
-Date:  Mon Dec 14 23:33:51 2015 +0400
-
-    Deploy docs to gh-pages branch from Travis builds
-
-    Build docs in Travis and push them to the gh-pages branch, which makes
-    them available at http://behdad.github.io/harfbuzz/
-
- .ci/deploy-docs.sh | 25 +++++++++++++++++++++++++
- .travis.yml       |  4 ++++
- 2 files changed, 29 insertions(+)
-
-commit fc38e6034c76d5450f5398d667184bc3696efcc4
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Dec 23 14:50:53 2015 +0100
-
-    [layout] Collect coverage glyphs in PairPos
-
-    Apparently class=0 is used for ClassDef1.  See:
-    https://github.com/adobe-type-tools/afdko/issues/90
-
- src/hb-ot-layout-gpos-table.hh | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-commit 8718dae818b22c3933c33bdfc8a7413ef4c3110a
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Fri Dec 18 19:53:40 2015 +0000
-
-    [python] Hook up sample debugger
-
- src/sample.py | 6 ++++++
- 1 file changed, 6 insertions(+)
-
-commit 0475ef2f97e3035a2eea9a0f96031331e07e8e29
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Fri Dec 18 18:17:07 2015 +0000
-
-    [buffer] Add debugging, aka, message, API
-
-    Currently just announces lookup applications.  Message-API *will*
-    change.
-    hb-shape / hb-view are updated to print-out messages to stder
-    if --debug
-    is specified.
-
- src/hb-buffer-private.hh | 18 ++++++++++++++++++
- src/hb-buffer.cc        | 44
- ++++++++++++++++++++++++++++++++++++++++++++
- src/hb-buffer.h         | 15 +++++++++++++++
- src/hb-ot-layout.cc     | 12 ++----------
- util/main-font-text.hh   | 18 ++++++++++++++++++
- 5 files changed, 97 insertions(+), 10 deletions(-)
-
-commit 9ea0aa43ac5cf243b698aae0ec80241b5efd7488
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Fri Dec 18 17:30:18 2015 +0000
-
-    Don't deserialize positions if buffer has no positions
-
- src/hb-buffer-serialize.cc | 3 +++
- src/hb-ot-layout.cc       | 2 --
- 2 files changed, 3 insertions(+), 2 deletions(-)
-
-commit 862b1644e9469a7e70555141f53729409d50d0d2
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Fri Dec 18 13:54:06 2015 +0000
-
-    [use] Only set syllable-based topographical features if not
-    Arabic-joining
-
- src/hb-ot-shape-complex-use.cc | 3 +++
- 1 file changed, 3 insertions(+)
-
-commit 45b7ec365225109eb0854e6c417f48860b5f24af
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Fri Dec 18 13:47:16 2015 +0000
-
-    [indic] Followup fix for Malayalam context matching
-
-    We regeressed Malayalam in 508cc3d3cfcfb0383df0fe795cc28db4e0fd5729
-    This brings down the failures to 198 (from 750).
-
-    BENGALI: 353725 out of 354188 tests passed. 463 failed (0.130722%)
-    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: 1048136 out of 1048334 tests passed. 198 failed
-    (0.0188871%)
-    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%)
-    MYANMAR: 1123865 out of 1123883 tests passed. 18 failed (0.00160159%)
-
- src/hb-ot-shape-complex-indic.cc | 19 +++++++++++++++++++
- 1 file changed, 19 insertions(+)
-
-commit 2813e3049a69d64e5395f68c52c4690e1d256d55
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Fri Dec 18 11:05:11 2015 +0000
-
-    [indic] Update data tables to Unicode 8.0
-
-    Test stats remain unchanged, except for Malayalam, which we
-    investigate:
-
-    BENGALI: 353725 out of 354188 tests passed. 463 failed (0.130722%)
-    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: 1047584 out of 1048334 tests passed. 750 failed
-    (0.0715421%)
-    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%)
-
-    Myanmar, compared to Windows 10 mmrtext.ttf:
-
-    MYANMAR: 1123865 out of 1123883 tests passed. 18 failed (0.00160159%)
-
- src/gen-indic-table.py                          |   1 +
- src/hb-ot-shape-complex-indic-private.hh |  40 ++--
- src/hb-ot-shape-complex-indic-table.cc   | 372
- ++++++++++++++++++-------------
- src/hb-ot-shape-complex-indic.cc        |  23 +-
- src/hb-ot-shape-complex-myanmar.cc      |   4 +
- 5 files changed, 244 insertions(+), 196 deletions(-)
-
-commit fc06cff40f136440f6402d0a5e735e2a4a3c062a
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Dec 17 17:47:35 2015 +0000
-
-    Remove HB_OT_SHAPE_ZERO_WIDTH_MARKS_DEFAULT
-
-    The DEFAULT naming wasn't helpful, so just remove it.
-
- src/hb-ot-shape-complex-default.cc | 2 +-
- src/hb-ot-shape-complex-private.hh | 4 +---
- src/hb-ot-shape-complex-thai.cc    | 2 +-
- src/hb-ot-shape-complex-tibetan.cc | 2 +-
- 4 files changed, 4 insertions(+), 6 deletions(-)
-
-commit 508cc3d3cfcfb0383df0fe795cc28db4e0fd5729
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Dec 17 17:31:17 2015 +0000
-
-    [indic] Allow context when matching for Malayalam new-spec
-
-    Test sequence:
-       U+0995,U+09CD,U+09B0
-
-    With Nirmala shipped on Windows 10, this failed to form the below
-    form.
-    Works now.
-
-    Reported by Sairus.
-
- src/hb-ot-shape-complex-indic.cc | 11 +++++++++--
- 1 file changed, 9 insertions(+), 2 deletions(-)
-
-commit eaf1e93ef1ee19a3e72d781e8abbd7f1165c1618
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Dec 17 16:57:47 2015 +0000
-
-    [uniscribe] Handle E_NOT_SUFFICIENT_BUFFER as well as E_OUTOFMEMORY
-
-    On Windows 10 we are seeing that other error message...
-
-    Test sequence: U+0995,U+-9CD,U+09B0
-    With Nirmala shipped on Windows 10, this failed to form the below
-    form.
-    Works now.
-
-    Reported by Sairus.
-
- src/hb-uniscribe.cc | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-commit 21e5d7edc4f28157254ef29a8ac247f3a572f6a6
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Dec 17 16:28:38 2015 +0000
-
-    [util] Use O_BINARY instead of _O_BINARY
-
-    The latter doesn't seem to be available in Cygwin. I'm surprised it
-    compiled before...
-
- util/options.cc | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-commit 100fbeaf196515774c985ee839d0fa0695f9a6fa
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Dec 17 15:23:09 2015 +0000
-
-    Fix ligature component of a mark happening after a ligature within
-    a ligature!
-
-    Say, if we are ligating "A B_C m D", then previously 'm' was being
-    attached to 'B' in the combined A_B_C_D ligature.  Now we attach it
-    to 'C'.  No test for this though :(.
-
- src/hb-ot-layout-gsubgpos-private.hh | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-commit 2f02fc79a5018e3348fccf366c470803554e1e58
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Dec 17 15:21:14 2015 +0000
-
-    Improve ligature-component handling
-
-    We use three bits for lig_id these days, so we finally got a report of
-    two separate ligatures with the same lig_id happening adjacent to each
-    other, and then the component-handling code was breaking things.
-    Protect against that by ignoring same-lig-id but lig-comp=0 glyphs
-    after
-    a new ligature.
-
-    Fixes https://github.com/behdad/harfbuzz/issues/198
-
- src/hb-ot-layout-gsubgpos-private.hh              |  12 +++++--
- test/shaping/Makefile.am                          |   1 +
- test/shaping/fonts/sha1sum/MANIFEST               |   1 +
- .../c78d1f25ea1df1210414f2fe2e0e1e53082bba76.ttf   | Bin 0 -> 4064 bytes
- test/shaping/tests/MANIFEST                       |   1 +
- test/shaping/tests/ligature-id.tests              |  35
- +++++++++++++++++++++
- 6 files changed, 47 insertions(+), 3 deletions(-)
-
-commit 2ab0de9fbd03231b647345b01e31b136e2e00978
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Dec 17 11:59:15 2015 +0000
-
-    [use] Fix halant detection
-
-    Before, we were just checking the use_category().  This detects as
-    halant a ligature that had the halant as first glyph (as seen in
-    NotoSansBalinese.) Change that to use the is_ligated() glyph prop
-    bit.  The font is forming this ligature in ccmp, which is before
-    the rphf / pref tests.  So we need to make sure the "ligated" bit
-    survives those tests.  Since those only check the "substituted" bit,
-    we now only clear that bit for them and "ligated" survives.
-
-    Fixes https://github.com/behdad/harfbuzz/issues/180
-
- src/hb-ot-layout-private.hh                         |   6 ++----
- src/hb-ot-shape-complex-use.cc                              |  19
- ++++++++++++-------
- test/shaping/Makefile.am                            |   1 +
- test/shaping/fonts/sha1sum/MANIFEST                 |   1 +
- .../fbb6c84c9e1fe0c39e152fbe845e51fd81f6748e.ttf     | Bin 0 ->
- 2616 bytes
- test/shaping/tests/MANIFEST                         |   1 +
- test/shaping/tests/use.tests                        |   1 +
- 7 files changed, 18 insertions(+), 11 deletions(-)
-
-commit 86bcbd65b0d98357fb3d67a2f4f2a704ace55e10
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Dec 17 11:04:33 2015 +0000
-
-    [arabic] Use glyph advance width in apply_stch() instead of extents
-
-    That seems to be what Windows is doing, and makes more sense.
-
- src/hb-ot-shape-complex-arabic.cc | 24 +++++++-----------------
- 1 file changed, 7 insertions(+), 17 deletions(-)
-
-commit f11c11a1f123ef245e59ba892230db14170a8e5a
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Dec 16 17:08:36 2015 +0100
-
-    Fix Since: tags for new API
-
-    https://github.com/behdad/harfbuzz/commit/e1d4d0f1dbd8518b5672245c05d73f22a9ed03ea#commitcomment-15006653
-
- src/hb-font.cc | 6 +++---
- 1 file changed, 3 insertions(+), 3 deletions(-)
-
-commit 15f2c055c17c54b0a6ae6eef50dcda13c58cda75
-Merge: 49e7263 a13b023
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Mon Dec 14 14:19:03 2015 +0100
-
-    Merge pull request #196 from srl295/aix
-
-    AIX fixes
-
-commit a13b023dbfd0532e8cd74c356fbbd4453d0ffaa0
-Author: Steven R. Loomis <srloomis@us.ibm.com>
-Date:  Fri Dec 11 10:21:27 2015 -0800
-
-    AIX fixes
-
-    - use '-w' instead of '\<...\>' for check-header-guards
-      grep manpage says these are the same
-
-    - put '-q' first in the grep options
-
-    - move VAR into hb-private.hh
-
-    - hb-font-private.hh - use [VAR] instead of [] for variable array
-
- src/check-header-guards.sh  | 5 ++---
- src/hb-font-private.hh      | 2 +-
- src/hb-open-type-private.hh | 3 ---
- src/hb-private.hh          | 2 ++
- 4 files changed, 5 insertions(+), 7 deletions(-)
-
-commit 49e72634af74a9fbad01f42f48e104218413acc0
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Dec 10 17:44:19 2015 +0100
-
-    Limit use of AIX intrinsics to IBM's compiler
-
- src/hb-atomic-private.hh | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-commit e1d4d0f1dbd8518b5672245c05d73f22a9ed03ea
-Merge: 70b33ed 808d3fc
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Dec 10 16:56:07 2015 +0100
-
-    Merge branch 'font-extents'
-
-    Fixes https://github.com/behdad/harfbuzz/pull/165
-
-commit 808d3fc0eadd379909f2a0308fd3db474f1efde8
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Dec 10 16:55:16 2015 +0100
-
-    [util] Port hb-view to use font metrics from HarfBuzz instead of cairo
-
- util/helper-cairo.cc |  4 +++-
- util/view-cairo.cc   | 24 ++++++++++++------------
- 2 files changed, 15 insertions(+), 13 deletions(-)
-
-commit 31fa3892947138c7950303ea3719bb5ceb813625
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Dec 10 16:38:29 2015 +0100
-
-    [ft] Use ftface->size->metrics for font extent info
-
- src/hb-ft.cc | 6 +++---
- 1 file changed, 3 insertions(+), 3 deletions(-)
-
-commit 3ad16048fdd841f31f1cb98d7ff9ea1871841146
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Dec 10 16:37:49 2015 +0100
-
-    [ot-font] Respect OS/2 fsSelection USE_TYPO_METRICS bit
-
- src/hb-ot-font.cc | 12 ++++++++----
- 1 file changed, 8 insertions(+), 4 deletions(-)
-
-commit 70b33edae7c8b9c031b83c95f00cb383789f1041
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Dec 10 15:54:42 2015 +0100
-
-    Add atomic ops for AIX
-
-    Patch from Volker Simonis.
-
- src/hb-atomic-private.hh | 25 +++++++++++++++++++++++++
- 1 file changed, 25 insertions(+)
-
-commit 98460779bae19e4d64d29461ff154b3527bf8420
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Mon Dec 7 21:38:47 2015 +0100
-
-    Remove final pause from Arabic shaper
-
-    Back in the old days, we used to apply 'calt' and 'cswh' in Arabic
-    shaper,
-    with a pause in between.  Then we disabled the 'cswh' because
-    Microsoft
-    disabled it, but forgot to remove the unnecessary pause.  Do that now.
-
-    This has the benefit that it fixes shaping with monbaiti from
-    Windows 10.
-    In that version of that font, the lookups from 'calt' are duplicated
-    in
-    'rclt', and Mongolian was changed to go through Universal Shaping
-    Engine.
-    We still use the Arabic shaper for Mongolian.  With a pause after
-    'calt',
-    we were applying the duplicate lookups from 'calt' and 'rclt' twice.
-    It
-    happened to be the case that these lookups were NOT idempotent.  So we
-    were getting wrong shaping.  See thread "Windows 10 monbaiti.ttf
-    upgrade
-    (5.01 -> 5.51) caused loss of diacritical marks when shaped with
-    harfbuz"
-    on the mailing list.  This fixes that.
-
- src/hb-ot-shape-complex-arabic.cc | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-commit dee0fbf9e2eac8b61730efc4978bc10c552b5227
-Merge: 255df68 a7ffe35
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Mon Dec 7 10:44:08 2015 +0100
-
-    Merge pull request #192 from behdad/jfkthame-stch
-
-    [issue 191] Make apply_stch() give a more precise fit
-
-commit 255df6801201fb22402420f7b7b7ea8b042df8ba
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Mon Dec 7 10:34:47 2015 +0100
-
-    Fix undefined behavior in cmp function
-
-    Fixes https://bugs.freedesktop.org/show_bug.cgi?id=93274
-
- src/hb-ot-map-private.hh | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
-commit fcf9e61bad13c828b5482f26491c82db65d91c96
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Mon Dec 7 10:30:43 2015 +0100
-
-    Fix sorting order of ot_languages array
-
-    Looks like the original sort was wrongly done.
-    Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=93275
-
- src/hb-ot-tag.cc | 7 +++----
- 1 file changed, 3 insertions(+), 4 deletions(-)
-
-commit 70952ddb5a29c5bcbb4b6c3a05a428496033234a
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Mon Dec 7 10:28:46 2015 +0100
-
-    Add test to make sure ot-languages array is sorted
-
-    Currently fails.  Part of
-    https://bugs.freedesktop.org/show_bug.cgi?id=93275
-
- src/Makefile.am  |  9 ++++++++-
- src/hb-ot-tag.cc | 23 +++++++++++++++++++++++
- 2 files changed, 31 insertions(+), 1 deletion(-)
-
-commit 8c37556f730d7e961394075cd863f624af4c53c4
-Merge: 8e5f902 f35b3e9
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Mon Dec 7 09:34:58 2015 +0100
-
-    Merge pull request #134 from ebraminio/dwrite
-
-    Add working but less prefect DirectWrite backend
-
-commit a7ffe3535836032dba5559080dffeec79473197b
-Author: jfkthame <jfkthame@gmail.com>
-Date:  Sat Dec 5 17:47:37 2015 +0000
-
-    Make apply_stch() give a more precise fit
-
-    This aims to make Syriac Abbr Mark sizing more accurate when repeating
-    segments are used, by adding an extra repeat and tightening up the
-    spacing slightly rather than leaving a shortfall corresponding to
-    a partial repeat-width.
-
- src/hb-ot-shape-complex-arabic.cc | 15 ++++++++++++++-
- 1 file changed, 14 insertions(+), 1 deletion(-)
-
-commit 8e5f902656d2882d24c30e8b26ddbd3963baa55c
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Mon Nov 30 16:53:21 2015 -0800
-
-    src/test.cc: wrong field printed
-
-    Fixes https://github.com/behdad/harfbuzz/issues/188
-    Fixes https://bugs.freedesktop.org/show_bug.cgi?id=93182
-
- src/test.cc | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-commit 6f2e6de1fae0ab2269b472a750788817de6c2a6e
-Author: Simon Cozens <simon@simon-cozens.org>
-Date:  Mon Oct 26 16:23:22 2015 +0900
-
-    Get font ascender and descender metrics from OS/2 table.
-
- src/hb-font-private.hh |  39 ++++++++++++++++++-
- src/hb-font.cc                | 102
- ++++++++++++++++++++++++++++++++++++++++++++++++-
- src/hb-font.h         |  62 ++++++++++++++++++++++++++++--
- src/hb-ft.cc          |  21 ++++++++++
- src/hb-ot-font.cc     |  58 ++++++++++++++++++++++++++--
- 5 files changed, 274 insertions(+), 8 deletions(-)
-
-commit 097c998a0c7b250924801bb69f5fa0c529edd183
-Author: Simon Cozens <simon@simon-cozens.org>
-Date:  Mon Oct 26 16:22:38 2015 +0900
-
-    Parse the OS/2 table.
-
- src/Makefile.am       |   1 +
- src/hb-ot-os2-table.hh | 105
- +++++++++++++++++++++++++++++++++++++++++++++++++
- 2 files changed, 106 insertions(+)
-
-commit d44d52bd0da033865641dfd39d94852119fd4fd7
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Nov 26 19:35:43 2015 -0500
-
-    1.1.2
-
- NEWS        | 15 +++++++++++++++
- configure.ac |  2 +-
- 2 files changed, 16 insertions(+), 1 deletion(-)
-
-commit 35d18585fc57750d817f57bfffe569069f9803b5
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Nov 26 19:30:37 2015 -0500
-
-    Fix a few docs blocks
-
- src/hb-buffer.cc    | 4 ++++
- src/hb-glib.cc      | 2 ++
- src/hb-ot-font.cc   | 2 ++
- src/hb-ot-layout.cc | 6 ++++++
- src/hb-ot-shape.cc  | 4 ++++
- 5 files changed, 18 insertions(+)
-
-commit 0e38c918b66df31978d8fd3d8271a9b781384545
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Nov 26 19:26:26 2015 -0500
-
-    [introspection] Make scanner happy with HB_EXTERN
-
- src/Makefile.am | 1 +
- 1 file changed, 1 insertion(+)
-
-commit ea512f71084296be3bd893f78650def894066de0
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Nov 26 19:22:22 2015 -0500
-
-    Use C-style casts instead of compare to 0, to convert hb_bool_t
-    to bool
-
- src/hb-common.cc                 | 2 +-
- src/hb-fallback-shape.cc         | 2 +-
- src/hb-font-private.hh                   | 2 +-
- src/hb-ot-layout.cc              | 2 +-
- src/hb-ot-map.cc                 | 2 +-
- src/hb-ot-shape-complex-hangul.cc | 2 +-
- src/hb-ot-shape-complex-hebrew.cc | 2 +-
- src/hb-ot-shape-complex-indic.cc  | 4 ++--
- src/hb-ot-shape-normalize.cc     | 6 +++---
- src/hb-ot-shape.cc               | 2 +-
- 10 files changed, 13 insertions(+), 13 deletions(-)
-
-commit 67a36a725e2a61a096ba0324f359d17f9b02d312
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Nov 26 18:48:42 2015 -0500
-
-    Fix vertical GPOS
-
-    This was brorken earlier, though, it's really hard to notice it.
-    Unlike the glyph_h_origin(), an unset glyph_v_origin() does NOT
-    mean that the vertical origin is at 0,0.
-
-    Related to https://github.com/behdad/harfbuzz/issues/187
-
- src/hb-ot-shape.cc | 13 ++++++++-----
- 1 file changed, 8 insertions(+), 5 deletions(-)
-
-commit 1c6a057dd1a52511474630896a597bf8e5215214
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Nov 26 18:48:30 2015 -0500
-
-    Add tests for previous commit
-
- test/shaping/Makefile.am                                |   1 +
- .../sha1sum/49c9f7485c1392fa09a1b801bc2ffea79275f22e.ttf | Bin 0 ->
- 1496 bytes
- test/shaping/fonts/sha1sum/MANIFEST                     |   1 +
- test/shaping/tests/MANIFEST                             |   1 +
- test/shaping/tests/simple.tests                         |   2 ++
- 5 files changed, 5 insertions(+)
-
-commit c41c145c7386ebe72b1cfb0475d836a689fecc5e
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Nov 26 18:43:15 2015 -0500
-
-    Make nil glyph_h_origin() function return true
-
-    Fixes https://github.com/behdad/harfbuzz/issues/187
-
-    Funcs implementations that have a non-zero horizontal origin must
-    implement the glyph_h_origin() callback, nothing new here.
-
-    Other implementations (all I know of!) can simply not set
-    glyph_h_origin() now.  I did that for hb-ot and hb-ft in
-    44f82750807475aa5b16099ccccd917d488df703, though that broke the
-    fallback shaper because the default was returning false...
-
- src/hb-font.cc | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-commit 766963adba6770dcd45de4417481ed8eda60a716
-Merge: b344af8 f798b8e
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Nov 24 15:38:43 2015 -0600
-
-    Merge pull request #114 from ThePhD/vc++-fixes
-
-    Fix all VC++ warnings and errors
-
-commit b344af80ca95b9eddfd6017aa6ae103388d6b5f8
-Merge: 662acd2 835bbdc
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Nov 24 15:30:27 2015 -0600
-
-    Merge pull request #177 from fanc999/exporting
-
-    Enable use of compiler directives to export symbols
-
-commit 662acd26d10c38e96a9afcdaab2cb2979794966f
-Merge: b24e93e 1979f6f
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Nov 24 15:29:44 2015 -0600
-
-    Merge pull request #181 from mhosken/master
-
-    Fix y_scale problems in hb-gr
-
-commit b24e93e3a4d98111c4684fa08e9080b471881d5c
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Nov 24 13:18:20 2015 -0600
-
-    1.1.1
-
- NEWS        | 7 +++++++
- configure.ac | 2 +-
- 2 files changed, 8 insertions(+), 1 deletion(-)
-
-commit 233944ac91bb81250c0e63150eecfedfaf09f590
-Merge: 5a24b1d d538201
-Author: Khaled Hosny <khaledhosny@eglug.org>
-Date:  Tue Nov 24 18:37:35 2015 +0400
-
-    Merge pull request #185 from khaledhosny/travis-osx
-
-    [travis] Enable Mac OS X support
-
-commit d538201918e6932ef7645f8d5b2c3491954936f8
-Author: Khaled Hosny <khaledhosny@eglug.org>
-Date:  Tue Nov 24 12:46:35 2015 +0400
-
-    [travis] Enable Mac OS X support
-
-    Fixes https://github.com/behdad/harfbuzz/issues/182
-
- .travis.yml | 22 ++++++++++++++++------
- 1 file changed, 16 insertions(+), 6 deletions(-)
-
-commit 5a24b1d25c59865e298bf105f54503e79587265c
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Mon Nov 23 16:46:14 2015 -0600
-
-    [travis] Remove coverity scan
-
-    I never could get it to work, and it's a proprietary platform.
-
- .travis.yml | 11 -----------
- README      | 1 -
- 2 files changed, 12 deletions(-)
-
-commit 1979f6fedca82fa1e4f65491de491db1aa6dc645
-Author: Martin Hosken <martin_hosken@sil.org>
-Date:  Mon Nov 23 10:03:56 2015 +0700
-
-    Fix y_scale problems in hb-gr
-
- src/hb-graphite2.cc | 11 ++++++-----
- 1 file changed, 6 insertions(+), 5 deletions(-)
-
-commit 835bbdc7c92bd774ff92c42a9277ded72066d29d
-Author: Chun-wei Fan <fanchunwei@src.gnome.org>
-Date:  Thu Nov 19 18:34:12 2015 +0800
-
-    Public headers: Decorate public symbols with HB_EXTERN
-
-    This prepares the headers for exporting symbols using visibility
-    attributes or __declspec(dllexport), so that we do not need to
-    maintain
-    symbols listing files, as this is what was and is done in GLib
-    and GTK+.
-
- src/hb-blob.h              |  24 +++++-----
- src/hb-buffer.h            | 100 +++++++++++++++++++-------------------
- src/hb-common.h            |  22 ++++-----
- src/hb-coretext.h          |   6 +--
- src/hb-face.h              |  34 ++++++-------
- src/hb-font.h              | 114
- ++++++++++++++++++++++----------------------
- src/hb-ft.h                |  18 +++----
- src/hb-glib.h              |   8 ++--
- src/hb-gobject-enums.h.tmpl |  2 +-
- src/hb-gobject-structs.h    | 26 +++++-----
- src/hb-graphite2.h         |   4 +-
- src/hb-icu.h               |   6 +--
- src/hb-ot-font.h           |   2 +-
- src/hb-ot-layout.h         |  56 +++++++++++-----------
- src/hb-ot-shape.h          |   4 +-
- src/hb-ot-tag.h            |   8 ++--
- src/hb-set.h               |  52 ++++++++++----------
- src/hb-shape-plan.h        |  18 +++----
- src/hb-shape.h                     |  10 ++--
- src/hb-unicode.h           |  52 ++++++++++----------
- src/hb-uniscribe.h         |   4 +-
- src/hb-version.h.in        |   6 +--
- src/hb.h                   |   4 ++
- 23 files changed, 292 insertions(+), 288 deletions(-)
-
-commit f798b8e2d683a1b89b6905b1a8615375b847b468
-Author: ThePhD <phdofthehouse@gmail.com>
-Date:  Sat Nov 21 16:57:26 2015 -0500
-
-    c-style cast
-
- src/hb-ot-shape-complex-use.cc | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-commit a6991813659376a6a11c00a9f67d85b4f7ba9b5d
-Merge: 1dc32ea f19c6db
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Fri Nov 20 13:28:42 2015 -0800
-
-    Merge pull request #176 from behdad/missing-braces
-
-    Add braces for subobject initializer in _hb_font_funcs_nil
-
-commit 1dc32ea4d2f294f9d1ae1c8fd19fb75f9278223b
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Fri Nov 20 13:24:19 2015 -0800
-
-    Whitespace
-
- src/hb-private.hh | 20 ++++++++++----------
- 1 file changed, 10 insertions(+), 10 deletions(-)
-
-commit f94c0ecbb1488138d3ec3b9d6d9fb78113dfee4f
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Fri Nov 20 13:21:29 2015 -0800
-
-    Define HB_MARK_AS_FLAG_T as a macro instead of using templates
-
-    The generic template operator overloading was causing more problems
-    than it
-    solved.  Eg:
-
-    https://github.com/behdad/harfbuzz/pull/163
-    https://github.com/behdad/harfbuzz/issues/175
-
-    So, just use macros.
-
-    Fixes https://github.com/behdad/harfbuzz/issues/175
-    Fixes https://github.com/behdad/harfbuzz/pull/178
-
- src/hb-private.hh | 27 +++++++++++----------------
- 1 file changed, 11 insertions(+), 16 deletions(-)
-
-commit f19c6db18e2e2dd0e9a406fc7e8533049fab48b0
-Author: jfkthame <jfkthame@gmail.com>
-Date:  Fri Nov 20 08:43:49 2015 +0000
-
-    Add braces for subobject initializer in _hb_font_funcs_nil
-
-    To avoid triggering -Wmissing-braces; see
-    https://bugzilla.mozilla.org/show_bug.cgi?id=1226175#c8
-
- src/hb-font.cc | 8 ++++++--
- 1 file changed, 6 insertions(+), 2 deletions(-)
-
-commit 9cc1ed4fa68075b3b142a2737438109772dd0002
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Nov 19 12:39:09 2015 -0800
-
-    Do not allow recursiving to same position and same lookup
-
-    This is just to make it harder to be extremely slow.  There definitely
-    are ways still, just harder.  Oh well... how do we tame this problem
-    without solving halting problem?!
-
-    Fixes https://github.com/behdad/harfbuzz/issues/174
-
- src/hb-ot-layout-gsubgpos-private.hh                    |   5 +++++
- test/shaping/fonts/sha1sum/MANIFEST                     |   1 +
- .../sha1sum/fab39d60d758cb586db5a504f218442cd1395725.ttf | Bin 0 ->
- 1894 bytes
- test/shaping/tests/fuzzed.tests                         |   1 +
- 4 files changed, 7 insertions(+)
-
-commit 7d75eee799bbb5ee7eef2651cf7b7d3aee6f09b0
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Nov 19 12:03:04 2015 -0800
-
-    [fuzzing] Run fuzzing tests using hb-fuzzer as well
-
- test/fuzzing/Makefile.am | 4 ++++
- 1 file changed, 4 insertions(+)
-
-commit 13188cba7f0eaacd587beeb1c2258526ae24c438
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Nov 19 11:59:03 2015 -0800
-
-    Revert "Fix hang in OOM situations"
-
-    This reverts commit f0599db761d7fc2d585d86e757a797f75ebc7499.
-
-    Commit abadc1717d997b69f987fdf1be9e12156d2d13d6 provides a better
-    fix for this.
-
- src/hb-buffer-private.hh | 6 +-----
- 1 file changed, 1 insertion(+), 5 deletions(-)
-
-commit 18e1c6b6ef7c85a1b02e3dae86280d8ed6b65118
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Nov 19 11:50:58 2015 -0800
-
-    Revert "Make sure we make progress in OOM situations"
-
-    This reverts commit 68b507a3c3c62c28c38e13fee733702bb703b6ca.
-
-    Commit abadc1717d997b69f987fdf1be9e12156d2d13d6 provides a better
-    fix for this.
-
- src/hb-buffer-private.hh |  7 +++++--
- src/hb-buffer.cc        | 31 ++++++++-----------------------
- 2 files changed, 13 insertions(+), 25 deletions(-)
-
-commit e1118aeac3b5556df0ce502732df8ac92bdac45a
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Nov 18 23:40:47 2015 -0800
-
-    1.1.0
-
- NEWS        | 22 ++++++++++++++++++++++
- configure.ac |  2 +-
- 2 files changed, 23 insertions(+), 1 deletion(-)
-
-commit 63fe05c8b1cd4f08b525028409e1299f34750810
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Nov 18 23:52:34 2015 -0800
-
-    Fix make distcheck
-
- src/Makefile.am | 1 +
- 1 file changed, 1 insertion(+)
-
-commit 9b087dec7753ad96d256ce1b9ae347bd8d697c75
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Nov 18 23:23:35 2015 -0800
-
-    [travis] Only coverity-scan the coverity_scan branch
-
-    This essentially disables coverity-scan right now, until we find
-    a pattern to continuously submit branches there.
-
-    For background reasoning, see:
-    Fixes https://github.com/behdad/harfbuzz/issues/171
-
- .travis.yml | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-commit 85062e3b4655ec6d5c3cf5344ce22cd88c21a2aa
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Nov 18 23:09:13 2015 -0800
-
-    Add tests for previous two commits
-
-    To fully test what these are supposed to test, they should be run
-    against libharfbuzz-fuzzing.la instead of libharfbuzz.la, but for
-    now just record the files.
-
- .../sha1sum/43979b90b2dd929723cf4fe1715990bcb9c9a56b.ttf | Bin 0 ->
- 1804 bytes
- test/shaping/fonts/sha1sum/MANIFEST                     |   2 ++
- .../sha1sum/b9e2aaa0d75fcef6971ec3a96d806ba4a6b31fe2.ttf | Bin 0 ->
- 1804 bytes
- test/shaping/tests/fuzzed.tests                         |   2 ++
- 4 files changed, 4 insertions(+)
-
-commit 37b40cd8a18e25d3324f829acec197f016f4a524
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Nov 18 23:04:45 2015 -0800
-
-    Fix another move_to assertion failure
-
-    If buf->idx is at end, don't set end past it...
-
-    Fixes https://github.com/behdad/harfbuzz/issues/173
-
- src/hb-ot-layout-gsubgpos-private.hh | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-commit abadc1717d997b69f987fdf1be9e12156d2d13d6
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Nov 18 17:52:08 2015 -0800
-
-    Try to better handle OOM situations
-
-    Fixes assert fail in https://github.com/behdad/harfbuzz/issues/161
-    with libharfbuzz-fuzzing.
-
- src/hb-ot-layout-gsubgpos-private.hh |  2 +-
- src/hb-ot-layout.cc                 |  2 +-
- src/hb-ot-shape-complex-hangul.cc    |  2 +-
- src/hb-ot-shape-complex-indic.cc     |  2 +-
- src/hb-ot-shape-complex-thai.cc      |  2 +-
- src/hb-ot-shape-complex-use.cc       |  8 +-------
- src/hb-ot-shape-normalize.cc        | 10 +++++-----
- src/hb-ot-shape.cc                  |  2 +-
- 8 files changed, 12 insertions(+), 18 deletions(-)
-
-commit ec625f7dfb5f6df19d35d81af6605d05e08321f2
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Nov 18 16:37:59 2015 -0800
-
-    Try to fix gnome-continuous build fail
-
- test/fuzzing/Makefile.am | 2 ++
- 1 file changed, 2 insertions(+)
-
-commit ff16ef3379e06afe44b5e78b8893aeae0cee2b5b
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Nov 18 16:27:32 2015 -0800
-
-    Enable building a bounded version of the library for fuzzing
-
-    test/fuzzing/hb-fuzzer links against libharfbuzz-fuzzing.so now.
-
- src/Makefile.am         | 16 ++++++++++++++++
- test/fuzzing/Makefile.am |  9 ++-------
- test/fuzzing/README     |  6 ++----
- 3 files changed, 20 insertions(+), 11 deletions(-)
-
-commit e0082ae60dbd87d433f3b2b9d2bfa64b9a4c3663
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Nov 17 18:42:13 2015 -0800
-
-    Move things around
-
- src/hb-private.hh | 22 +++++++++++-----------
- 1 file changed, 11 insertions(+), 11 deletions(-)
-
-commit dde8cc87bd880bd35baf764820f4c85bd0a58696
-Merge: e97835a 167c327
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Nov 17 18:40:10 2015 -0800
-
-    Merge pull request #163 from fanc999/msvc.src
-
-    Update the sources so they will compile under Visual Studio
-
-commit 167c3271778cd1a8c4433b9d2230901ce17c099e
-Author: Chun-wei Fan <fanchunwei@src.gnome.org>
-Date:  Mon Nov 9 17:17:56 2015 +0800
-
-    Fix build on MSVC >= 2012
-
-    Use the DEFINE_ENUM_FLAG_OPERATORS macro in winnt.h on Visual Studio,
-    which defines the bitwise operators for the enumerations that we
-    want to
-    mark as hb_mark_as_flags_t, which will take care of the situation
-    on newer
-    Visual Studio (>= 2012), where the build breaks with C2057 errors
-    as the
-    underlying types of the enumerations is not clear to the compiler
-    when we
-    do a bitwise op within the declaration of the enumerations themselves.
-
-    Also disable the C4200 (nonstandard extension used : zero-sized
-    array in
-    struct/union) and C4800 ('type' : forcing value to bool 'true' or
-    'false'
-    (performance warning)) warnings as the C4200 is the intended
-    scenario and
-    C4800 is harmless but is so far an unavoidable side effect of using
-    DEFINE_ENUM_FLAG_OPERATORS.
-
- src/hb-buffer-private.hh          |  6 +++---
- src/hb-ot-layout-common-private.hh |  2 +-
- src/hb-ot-layout-private.hh       |  4 ++--
- src/hb-ot-map-private.hh          |  2 +-
- src/hb-private.hh                 | 11 +++++++++++
- 5 files changed, 18 insertions(+), 7 deletions(-)
-
-commit 4d27bb87468a1b84387e7ce084e3d92c0fc8f065
-Author: Chun-wei Fan <fanchunwei@src.gnome.org>
-Date:  Fri Nov 6 14:28:30 2015 +0800
-
-    hb-ot-shape-complex-arabic.cc: Fix build on Visual Studio
-
-    Visual Studio does not like declaring a enum variable within a for
-    statement, so fix the build by declaring the enum before doing the for
-    loop.
-
- src/hb-ot-shape-complex-arabic.cc | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
-commit a49e7b7e40127beba25f39ef3c10d7a77e2bb0f0
-Author: Chun-wei Fan <fanchunwei@src.gnome.org>
-Date:  Tue Nov 3 18:49:34 2015 +0800
-
-    MSVC builds: Add fallback implementation for pre-2013 MSVC
-
-    Pre-2013 MSVC does not have scalbn() and scalbnf(), which are used
-    in the
-    utility programs.  Add  fallback implementations for these, which
-    can be
-    used when necessary.
-
- util/options.hh | 17 +++++++++++++++++
- 1 file changed, 17 insertions(+)
-
-commit 998e8dda938cfef0146f1bfc4e8973a0e12d7d35
-Author: Chun-wei Fan <fanchunwei@src.gnome.org>
-Date:  Mon Nov 2 16:55:29 2015 +0800
-
-    util: Fix build on Visual Studio
-
-    Use the fallback implementation for lround() only on pre-2013 Visual
-    Studio, and ensure we are clear about the types of the parameters for
-    lround() and scalbnf(), since Visual Studio can be quite picky on
-    ambiguous parameter types. Also, use g_ascii_strcasecmp() rather than
-    strcasecmp() as we are already using GLib for this code and we are
-    assured that g_ascii_strcasemp() is available.
-
-    For scalbnf() on pre-2013 Visaul Studio, a fallback implementation is
-    needed, but use another forced-included header for those compilers,
-    which
-    will be added later.
-
-    Also use (char)27 on Visual Studio builds as '\e' is not a recognized
-    escape sequence, which will do the same thing.
-
- util/ansi-print.cc   | 16 +++++++++-------
- util/helper-cairo.cc | 20 ++++++++++----------
- util/options.cc      |  2 +-
- 3 files changed, 20 insertions(+), 18 deletions(-)
-
-commit e97835ad43f5c68e8cb29599246cae0f4461d663
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Nov 10 11:37:01 2015 -0800
-
-    [util] Fix crash when --output-file is specified but not
-    --output-format
-
- util/options.hh | 3 +++
- 1 file changed, 3 insertions(+)
-
-commit d5f0d7c9fb14255388ab616f56e178cb7ca10ec2
-Merge: 04ff23e 529a933
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Sat Nov 7 07:50:58 2015 -0800
-
-    Merge pull request #167 from KonstantinRitt/unicode_cp_opt
-
-    Micro optimizations to UTF-16 and UTF-32 codecs
-
-commit 04ff23e73d847ab3a5da0e9fac4fbca19aefd284
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Fri Nov 6 16:29:44 2015 -0800
-
-    [arabic] Improve stretch length calculation
-
-    Err on the side of being too short, than too wide. Reduces chance
-    of overlaps with neighboring glyphs.
-
- src/hb-ot-shape-complex-arabic.cc | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-commit 59821ab8b413df3a444c38b80582a5137e364a70
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Fri Nov 6 16:27:44 2015 -0800
-
-    [arabic] Don't stretch over cased letters
-
-    Addresses
-    https://github.com/behdad/harfbuzz/commit/6e6f82b6f3dde0fc6c3c7d991d9ec6cfff57823d#commitcomment-14248516
-
- src/hb-ot-shape-complex-arabic.cc                 | 24
- +++++++++++++++++++++-
- src/hb-unicode-private.hh                         | 20
- ------------------
- .../script-syriac/misc/abbreviation-mark.txt      |  4 ++--
- 3 files changed, 25 insertions(+), 23 deletions(-)
-
-commit 5337db29af39084d677a63154f404eca0c20cfeb
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Fri Nov 6 16:18:09 2015 -0800
-
-    Revert "Don't process lookups if buffer is in error"
-
-    This reverts commit f92bd86cc8c11d262d1830c631cb7c63fc9d4bc8.
-
-    We don't want to be like cairo, where as soon as there's an error,
-    nothing works anymore.  So, lets process lookups as long as there's
-    no new memory needed.  That's also a model that hides fewer bugs.
-
- src/hb-ot-layout.cc | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-commit 529a93312815dff3c2f37f880bf6ccb428bd3da0
-Author: Konstantin Ritt <ritt.ks@gmail.com>
-Date:  Sat Nov 7 02:00:04 2015 +0400
-
-    Micro optimization to hb_utf16_t and hb_utf32_t ::prev()
-
-    Implement reverse lookup instead of re-using next()
-
- src/hb-utf-private.hh | 29 +++++++++++++++++++----------
- 1 file changed, 19 insertions(+), 10 deletions(-)
-
-commit 44ae9be7a29eebd6003cad2fdb90b40512a9c8eb
-Author: Konstantin Ritt <ritt.ks@gmail.com>
-Date:  Sat Nov 7 01:58:38 2015 +0400
-
-    Nano optimization to hb_utf16_t and hb_utf32_t ::next()
-
- src/hb-utf-private.hh | 17 ++++++-----------
- 1 file changed, 6 insertions(+), 11 deletions(-)
-
-commit a6d7668a954a763a053f8af8edbff4731aa43729
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Fri Nov 6 09:46:54 2015 -0800
-
-    [fuzzing] Cap max buffer len at 128
-
- test/fuzzing/Makefile.am | 1 +
- 1 file changed, 1 insertion(+)
-
-commit f1c4adbcd3f6275e81e118ddadc9396f82daeccf
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Fri Nov 6 09:46:05 2015 -0800
-
-    Fix typo
-
- src/hb-buffer-private.hh | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-commit 68b507a3c3c62c28c38e13fee733702bb703b6ca
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Fri Nov 6 00:09:26 2015 -0800
-
-    Make sure we make progress in OOM situations
-
- src/hb-buffer-private.hh |  7 ++-----
- src/hb-buffer.cc        | 31 +++++++++++++++++++++++--------
- 2 files changed, 25 insertions(+), 13 deletions(-)
-
-commit 5a7eb5d4d862f402136044c19ead87ad098bd78f
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Fri Nov 6 00:01:24 2015 -0800
-
-    [fuzzing] Add test case for OOM
-
-    From https://github.com/behdad/harfbuzz/issues/161
-
- .../sha1sum/3511ff5c1647150595846ac414c595cccac34f18.ttf | Bin 0 ->
- 1483 bytes
- test/shaping/fonts/sha1sum/MANIFEST                     |   2 +-
- test/shaping/tests/fuzzed.tests                         |   1 +
- 3 files changed, 2 insertions(+), 1 deletion(-)
-
-commit f0599db761d7fc2d585d86e757a797f75ebc7499
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Nov 5 23:52:41 2015 -0800
-
-    Fix hang in OOM situations
-
-    Fixes https://github.com/behdad/harfbuzz/issues/161
-
- src/hb-buffer-private.hh | 6 +++++-
- 1 file changed, 5 insertions(+), 1 deletion(-)
-
-commit f92bd86cc8c11d262d1830c631cb7c63fc9d4bc8
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Nov 5 23:52:29 2015 -0800
-
-    Don't process lookups if buffer is in error
-
- src/hb-ot-layout.cc | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-commit 4301703bddb63a01651a0d58474bb15ac0ebbcf6
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Nov 5 23:44:59 2015 -0800
-
-    Limit buffer max size growth
-
-    https://github.com/behdad/harfbuzz/issues/161
-
- src/hb-buffer-private.hh | 11 +++++++++++
- src/hb-buffer.cc        |  8 ++++++++
- src/hb-ot-shape.cc      |  6 ++++++
- test/fuzzing/Makefile.am |  2 ++
- 4 files changed, 27 insertions(+)
-
-commit 19300183a6f0bac0d23f7a994b40a51e9c90d6e1
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Nov 5 23:08:50 2015 -0800
-
-    [fuzzing] Add build system
-
- configure.ac             |  1 +
- test/Makefile.am         |  2 +-
- test/fuzzing/Makefile.am  | 44
- ++++++++++++++++++++++++++++++++++++++++++++
- test/fuzzing/README      |  2 ++
- test/fuzzing/hb-fuzzer.cc |  4 ++--
- 5 files changed, 50 insertions(+), 3 deletions(-)
-
-commit 9c9ad214af43685b00f6d8493b7807d6607d4e2d
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Nov 5 22:50:52 2015 -0800
-
-    [fuzzer] Add README
-
-    https://github.com/behdad/harfbuzz/issues/139#issuecomment-154202645
-
- test/fuzzing/README | 21 +++++++++++++++++++++
- 1 file changed, 21 insertions(+)
-
-commit 6e6f82b6f3dde0fc6c3c7d991d9ec6cfff57823d
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Nov 5 17:29:03 2015 -0800
-
-    Implement SYRIAC ABBREVIATION MARK with 'stch' feature
-
-    The feature is enabled for any character in the Arabic shaper.
-    We should experiment with using it for Arabic subtending marks.
-    Though, that has a directionality problem as well, since those
-    are used with digits...
-
-    Fixes https://github.com/behdad/harfbuzz/issues/141
-
- src/hb-ot-shape-complex-arabic.cc                 | 219
- ++++++++++++++++++++-
- src/hb-unicode-private.hh                         |  19 ++
- .../shaper-arabic/script-syriac/misc/MANIFEST     |   1 +
- .../script-syriac/misc/abbreviation-mark.txt      |  11 ++
- 4 files changed, 244 insertions(+), 6 deletions(-)
-
-commit c743ec5886a1f6d57de26da33a770a8706be83d6
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Nov 5 17:33:57 2015 -0800
-
-    [ft] Fix extents with negative scales
-
-    Fixes https://github.com/behdad/harfbuzz/issues/162
-
- src/hb-ft.cc | 10 ++++++++++
- 1 file changed, 10 insertions(+)
-
-commit 73fec3992acb492829bde1d885f1ebeed8dcc133
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Nov 5 15:22:18 2015 -0800
-
-    Reserve a few scratch-flags bits for complex shapers
-
- src/hb-buffer-private.hh | 5 +++++
- 1 file changed, 5 insertions(+)
-
-commit 136863371c1402769426d892aef1b92f9ca1a25e
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Nov 5 13:24:15 2015 -0800
-
-    Add new shaper method postprocess_glyphs()
-
-    Unused currently.  To be used for Syriac stretch implementation.
-
-    https://github.com/behdad/harfbuzz/issues/141
-
- src/hb-ot-shape-complex-arabic.cc  | 3 ++-
- src/hb-ot-shape-complex-default.cc | 1 +
- src/hb-ot-shape-complex-hangul.cc  | 7 ++++---
- src/hb-ot-shape-complex-hebrew.cc  | 1 +
- src/hb-ot-shape-complex-indic.cc   | 1 +
- src/hb-ot-shape-complex-myanmar.cc | 2 ++
- src/hb-ot-shape-complex-private.hh | 9 +++++++++
- src/hb-ot-shape-complex-thai.cc    | 1 +
- src/hb-ot-shape-complex-tibetan.cc | 1 +
- src/hb-ot-shape-complex-use.cc     | 1 +
- src/hb-ot-shape.cc                | 9 ++++++---
- 11 files changed, 29 insertions(+), 7 deletions(-)
-
-commit 6c0ebd02c99e7536975ba7194832a1f33abd7faf
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Nov 5 11:37:48 2015 -0800
-
-    [util] If font has color, generate PNG with color
-
- util/helper-cairo.cc | 33 ++++++++++++++++++++++++++-------
- util/helper-cairo.hh |  6 +++++-
- util/view-cairo.cc   |  7 ++++++-
- 3 files changed, 37 insertions(+), 9 deletions(-)
-
-commit e95eb23a4ee920eab1e2f4eec9cf490bb431452c
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Nov 4 22:55:11 2015 -0800
-
-    Don't try zeroing marks by GDEF if there are no non-ASCII
-
-    This one is a hack, but should be ok.
-
- src/hb-ot-shape.cc | 4 ++++
- 1 file changed, 4 insertions(+)
-
-commit 7fa54ed75aa30ae1d6ee9136ccb83b630c24fb65
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Nov 4 22:54:49 2015 -0800
-
-    Don't try zeroing mark attachments by Unicode if there's no non-ASCII
-
- src/hb-ot-shape.cc | 3 +++
- 1 file changed, 3 insertions(+)
-
-commit 550bd14d2b21ec2a2b509ff42f4df4341dbf2d46
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Nov 4 22:58:58 2015 -0800
-
-    Actually commit changes for previous commit
-
- src/hb-buffer-private.hh      |  2 ++
- src/hb-ot-layout-gpos-table.hh | 15 ++++++++-------
- 2 files changed, 10 insertions(+), 7 deletions(-)
-
-commit ff31b3c1b8a2a21b57dba37eb5bb5db0579e0640
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Nov 4 22:42:41 2015 -0800
-
-    Skip GPOS cursive / attachment adjustmnent if none happened
-
-    I'm starting to really like how free these new scratch_flags are.
-
- src/hb-ot-layout-gpos-table.hh | 3 +++
- 1 file changed, 3 insertions(+)
-
-commit 0f407325f6923db11d332585e8250e3646cb74d6
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Nov 4 22:28:44 2015 -0800
-
-    Minor
-
- src/hb-ot-shape.cc | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
-
-commit 497a6c2071cd0638e4c6af07621d01335fd963a9
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Nov 4 22:24:19 2015 -0800
-
-    Skip forming clusters if text is all ASCII
-
- src/hb-ot-shape.cc | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
-commit 28de104f15b80df4b678267c4488b7d09a42720c
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Nov 4 22:00:25 2015 -0800
-
-    Move variable-sized struct member to end
-
-    Hopefully makes clang build happy
-
- src/hb-font-private.hh | 21 ++++++++++-----------
- src/hb-font.cc                | 20 ++++++++++++++++++++
- 2 files changed, 30 insertions(+), 11 deletions(-)
-
-commit 5bc28b5f688ee90d103d052e98bc15d6e0e7e0b1
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Nov 4 21:53:16 2015 -0800
-
-    Optimize positioning for when h_origin is nil
-
- src/hb-ot-shape.cc | 38 ++++++++++++++++++++------------------
- 1 file changed, 20 insertions(+), 18 deletions(-)
-
-commit 762770c964f9f0591bf4c44427f73ea3e1c51733
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Nov 4 21:42:55 2015 -0800
-
-    Add font->has_...() to check for individual nil font funcs
-
-    Hopefully this wouldn't break any compiler.  There was some magic
-    moments to getting this to compile...
-
- src/hb-font-private.hh | 19 +++++++++++++++++--
- src/hb-font.cc                |  7 +++++++
- 2 files changed, 24 insertions(+), 2 deletions(-)
-
-commit 88e9a9bcae61421d9dd65715d25e5f20b2847c03
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Nov 4 21:16:26 2015 -0800
-
-    Minor reshaping of hb_font_funcs_t implementation
-
-    In anticipation of further changes.  No functional changes.
-
- src/hb-font-private.hh | 80
- ++++++++++++++++++++++++++------------------------
- src/hb-font.cc                |  4 +--
- 2 files changed, 43 insertions(+), 41 deletions(-)
-
-commit a6a7715bac8b0c8f5473b84bc649c315ad4d2d51
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Nov 4 20:51:21 2015 -0800
-
-    Comments
-
- src/hb-font-private.hh | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-commit 6c48ec830ffac00a920d047ed77acd1b05549074
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Nov 4 20:47:42 2015 -0800
-
-    [ot] Remove font funcs that do nothing
-
- src/hb-ot-font.cc | 95
- ++++---------------------------------------------------
- 1 file changed, 7 insertions(+), 88 deletions(-)
-
-commit 75ea2daa1d9bbe235cd4a8570efb1913d58c3c62
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Nov 4 20:43:59 2015 -0800
-
-    [ot] Port ot font funcs to allocated object
-
- src/hb-ot-font.cc | 47 ++++++++++++++++++++++++++++++++++++++---------
- 1 file changed, 38 insertions(+), 9 deletions(-)
-
-commit 44f82750807475aa5b16099ccccd917d488df703
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Nov 4 20:40:05 2015 -0800
-
-    [ft] Remove font funcs that do nothing
-
- src/hb-ft.cc | 29 ++++-------------------------
- 1 file changed, 4 insertions(+), 25 deletions(-)
-
-commit 7918c261efd283e0428ce7836e9e42768a6aa05c
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Nov 4 20:37:49 2015 -0800
-
-    [ft] Port ft font funcs to allocated object
-
- src/hb-ft.cc | 45 ++++++++++++++++++++++++++++++++++++---------
- 1 file changed, 36 insertions(+), 9 deletions(-)
-
-commit da29b43794cfa3f9a602c34b33c5d8a9c36f87b5
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Nov 4 20:22:44 2015 -0800
-
-    Separate nil font-funcs from parent-peeking font-funcs
-
-    API change: all fonts created with hb_font_create() now inherit from
-    (ie have parent) hb_font_get_empty().
-
- src/hb-font.cc       | 211
- +++++++++++++++++++++++++++++++++++----------------
- test/api/test-font.c |   2 +-
- 2 files changed, 145 insertions(+), 68 deletions(-)
-
-commit bee901b38ef3c26a04f69c299c8d5e028a0090e9
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Nov 4 19:28:17 2015 -0800
-
-    Optimize positioning direction calculations
-
-    It makes the binary smaller AND faster.  Yumm!
-
- src/hb-font-private.hh | 40 +++++++++++++++++++++++++++++++++++++++
- src/hb-ot-shape.cc    | 51
- +++++++++++++++++++++++++++-----------------------
- 2 files changed, 68 insertions(+), 23 deletions(-)
-
-commit e3e4bb011ae1a2f1ba05e7ea450595b185304bec
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Nov 4 18:58:02 2015 -0800
-
-    Don't do fractions if buffer is ASCII-only
-
- src/hb-buffer-private.hh    | 5 +++--
- src/hb-ot-layout-private.hh | 1 +
- src/hb-ot-shape.cc         | 3 ++-
- 3 files changed, 6 insertions(+), 3 deletions(-)
-
-commit 6986208ba3b395534f4c7bcfa51df6bf9038f717
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Nov 4 18:46:22 2015 -0800
-
-    Optimize runs without Default_Ignorable's
-
-    Now that we have a buffer-wide scratch flags facility, use it to
-    optimize away a few passes.
-
- src/hb-buffer-private.hh     |  3 ++-
- src/hb-ot-layout-private.hh  |  4 +++-
- src/hb-ot-shape-normalize.cc |  4 ++--
- src/hb-ot-shape.cc          | 10 ++++++----
- src/hb-private.hh           |  3 +++
- 5 files changed, 16 insertions(+), 8 deletions(-)
-
-commit 14c2de321826c36037adde859ccca3e2011325a9
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Nov 4 18:00:57 2015 -0800
-
-    Limit max edits during sanitize to 8
-
-    Used to be 100.  If a tabe needs more than one or two edits, it's
-    probably completely bogus...
-
-    Might help with speeding up fuzzing for
-    https://github.com/behdad/harfbuzz/issues/157
-
- src/hb-open-type-private.hh | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-commit 9cbc39aef962a95b0eba32c24ff9c415d1316d56
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Nov 4 18:00:53 2015 -0800
-
-    Minor
-
- src/hb-ot-shape-normalize.cc | 2 ++
- 1 file changed, 2 insertions(+)
-
-commit 52e6c4e15893ed1cb0997795912a07b3e446b65a
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Nov 4 17:45:06 2015 -0800
-
-    If font doesn't support U+2011, fall back to U+2010
-
-    Test passes now.
-
- src/hb-ot-shape-normalize.cc | 10 ++++++++++
- 1 file changed, 10 insertions(+)
-
-commit 75483aafa6ad02d6391712d082d093823edcd758
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Nov 4 17:43:36 2015 -0800
-
-    Untangle if/else waterfall
-
- src/hb-ot-shape-normalize.cc | 40
- +++++++++++++++++++++++++++-------------
- 1 file changed, 27 insertions(+), 13 deletions(-)
-
-commit 04fd8517f85ae9aa05b44f25578d2b19abfef7cb
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Nov 4 17:38:22 2015 -0800
-
-    Add tests for hyphen fallback
-
-    U+2011 is <noBreak> equivaent of U+2010, so we should do the fallback
-    for it.  Currently fails.
-
- test/shaping/Makefile.am                                 |   1 +
- .../sha1sum/1c04a16f32a39c26c851b7fc014d2e8d298ba2b8.ttf  | Bin 0 ->
- 820 bytes
- test/shaping/fonts/sha1sum/MANIFEST                      |   2 ++
- test/shaping/tests/MANIFEST                              |   1 +
- test/shaping/tests/hyphens.tests                         |   2 ++
- 5 files changed, 6 insertions(+)
-
-commit 550417117da7e14457a11f49a20145311f58587b
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Nov 4 17:37:30 2015 -0800
-
-    [test] Drop hintings when subsetting fonts to record
-
- test/shaping/record-test.sh | 1 +
- 1 file changed, 1 insertion(+)
-
-commit 49ef630936325b2e56a870fcef9aa8473a8f8526
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Nov 4 17:27:07 2015 -0800
-
-    Adjust the width of various spaces if font does not cover them
-
-    See discussion here:
-    https://github.com/behdad/harfbuzz/commit/81ef4f407d9c7bd98cf62cef951dc538b13442eb
-
-    There's no way to disable this fallback, but I don't think it would
-    be needed. Let's hope for the best!
-
-    Fixes https://github.com/behdad/harfbuzz/issues/153
-
- src/hb-buffer-private.hh           |  7 ++++
- src/hb-buffer.cc                   |  2 ++
- src/hb-ot-shape-fallback-private.hh | 4 +++
- src/hb-ot-shape-fallback.cc        | 67
- +++++++++++++++++++++++++++++++++++++
- src/hb-ot-shape-normalize.cc       |  1 +
- src/hb-ot-shape.cc                 |  3 ++
- src/hb-unicode-private.hh          | 56 +++++++++++++++++--------------
- test/shaping/tests/spaces.tests     | 24 ++++++-------
- 8 files changed, 126 insertions(+), 38 deletions(-)
-
-commit aa7044de0ceacd71cab19212d266c3a66c03b41e
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Nov 4 16:25:57 2015 -0800
-
-    Generalize flags types
-
- src/hb-buffer-private.hh          |  3 +++
- src/hb-ot-layout-common-private.hh |  5 +++++
- src/hb-ot-layout-private.hh       |  8 +++++---
- src/hb-ot-map-private.hh          | 16 +---------------
- src/hb-ot-shape.cc                |  2 +-
- src/hb-private.hh                 | 14 ++++++++++++++
- 6 files changed, 29 insertions(+), 19 deletions(-)
-
-commit 7793aad946e09b53523b30d57de85abd1d15f8b6
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Nov 4 14:48:46 2015 -0800
-
-    Normalize various spaces to space if font doesn't support
-
-    This resurrects the space fallback feature, after I disabled
-    the compatibility decomposition.  Now I can release HarfBuzz
-    again without breaking Pango!
-
-    It also remembers which space character it was, such that later
-    on we can approximate the width of this particular space
-    character. That part is not implemented yet.
-
-    We normalize all GC=Zs chars except for U+1680 OGHA SPACE MARK,
-    which is better left alone.
-
- src/hb-ot-layout-private.hh                       |  47
- +++------------------
- src/hb-ot-shape-normalize.cc                      |  12 +++++-
- src/hb-unicode-private.hh                         |  40
- ++++++++++++++++++
- test/shaping/Makefile.am                          |   1 +
- .../1c2c3fc37b2d4c3cb2ef726c6cdaaabd4b7f3eb9.ttf   | Bin 0 -> 316 bytes
- test/shaping/fonts/sha1sum/MANIFEST               |   1 +
- test/shaping/tests/MANIFEST                       |   1 +
- test/shaping/tests/spaces.tests                   |  17 ++++++++
- 8 files changed, 76 insertions(+), 43 deletions(-)
-
-commit 8b3c7f9ede77052225cff8495d660860bf9c7629
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Nov 4 15:30:48 2015 -0800
-
-    [test] Support recording multiple lines of text in record-test.sh
-
- test/shaping/record-test.sh | 15 +++++++++++++--
- 1 file changed, 13 insertions(+), 2 deletions(-)
-
-commit 85658394809fe0593ab5dfb30fd96118765c7dc5
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Nov 4 14:46:52 2015 -0800
-
-    Protect against possible invalid-memory access after OOM
-
- src/hb-buffer-private.hh | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-commit 4cc80bed25450af3d84a30ea417fa9275b15e014
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Nov 4 14:46:10 2015 -0800
-
-    Fix typo!
-
-    Ouch!  Fortunately that function was unused.
-
- src/hb-buffer-private.hh | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-commit 9ac4b9656dd78ffd129bc3d560a92e2692bc3058
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Nov 4 14:18:39 2015 -0800
-
-    Add Unicode space category
-
-    Unused so far.
-
- src/hb-ot-layout-private.hh | 78
- +++++++++++++++++++++++++++++++++++++++++++--
- 1 file changed, 76 insertions(+), 2 deletions(-)
-
-commit 8249ec3f86510fd24462ce71ed64a6978f0ade17
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Nov 4 13:26:17 2015 -0800
-
-    Make top-byte of unicode_props available to be used differently per-GC
-
- src/hb-ot-layout-private.hh | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
-
-commit cc5d3a33882b52f906ee4346707700f5e846d2ac
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Nov 4 13:21:25 2015 -0800
-
-    Towards using top-byte of unicode-props for more things
-
- src/hb-ot-layout-gsubgpos-private.hh | 1 -
- src/hb-ot-layout-private.hh         | 3 ++-
- 2 files changed, 2 insertions(+), 2 deletions(-)
-
-commit 2f38dde5a1ea5459789fabaee661cae9235d204e
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Nov 4 13:17:33 2015 -0800
-
-    Add _hb_glyph_info_is_unicode_mark()
-
-    Unused right now.
-
- src/hb-ot-layout-private.hh | 6 ++++++
- 1 file changed, 6 insertions(+)
-
-commit 90d75f93bb85aeb627c4e6bb9e4cbd75895c99f7
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Nov 3 12:58:12 2015 -0800
-
-    Tighten ccc-setting a bit and document it
-
- src/hb-ot-layout-private.hh | 12 +++++++++++-
- src/hb-unicode-private.hh   | 5 +++++
- 2 files changed, 16 insertions(+), 1 deletion(-)
-
-commit 2f0dfd43cdc2259e6117704f8077ab6951c761e5
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Nov 3 12:28:34 2015 -0800
-
-    Fix test expectation
-
- test/shaping/tests/fuzzed.tests | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-commit df698f3299d92867e3305715f675b2621c316acd
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Nov 3 12:15:12 2015 -0800
-
-    [ot-font] Fix hmtx table length checking, *again*
-
-    Exactly the same problem that I fixed in
-    63ef0b41dc48d6112d1918c1b1de9de8ea90adb5
-
-    I rewrote the table checking yesterday in
-    67f8821fb25d9bd55719f5e29a582ae1af4b02b3
-    and introduced the exact same issue again. :(
-    Good thing we have ongoing fuzzing going now.  Was discovered
-    immediately by libFuzzer.  Thanks kcc!
-
-    https://github.com/behdad/harfbuzz/issues/139#issuecomment-153449473
-    Fixes https://github.com/behdad/harfbuzz/issues/156
-
- src/hb-ot-font.cc                                        |   4 ++--
- .../sha1sum/8240789f6d12d4cfc4b5e8e6f246c3701bcf861f.ttf  | Bin 0 ->
- 633 bytes
- test/shaping/fonts/sha1sum/MANIFEST                      |   1 +
- test/shaping/tests/fuzzed.tests                          |   1 +
- 4 files changed, 4 insertions(+), 2 deletions(-)
-
-commit 3530cc2d7c3b7102902cb0e38b0bf9f46188078d
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Nov 3 11:34:47 2015 -0800
-
-    [util] Fix option-parsing leaks
-
- util/helper-cairo.cc  |  7 +++++--
- util/main-font-text.hh | 22 ++++++++++++++++++---
- util/options.cc       | 21 ++++++++++----------
- util/options.hh       | 53
- +++++++++++++++++++++++++++++++++-----------------
- 4 files changed, 70 insertions(+), 33 deletions(-)
-
-commit 642135f3b2d6d6eb800153c76c4718239733c0e6
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Nov 3 11:26:34 2015 -0800
-
-    [util] In --debug mode, duplicate font data
-
-    This has the effect that the font data will end up in a memory
-    section malloc()ed exactly to its size.  This gives us better
-    valgrind detection of out-of-bounds access.
-
-    Previously, the font data was placed in a mmap()ed section or
-    GString-allocated area, which didn't have proper protections
-    at the end when running under valgrind.
-
- util/options.cc | 3 +++
- 1 file changed, 3 insertions(+)
-
-commit ed2024ef93ac3af214082016e5aa8c14db9d7515
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Mon Nov 2 17:58:12 2015 -0800
-
-    [perf] Micro-optimize
-
- src/hb-ot-layout-private.hh | 23 ++++++++++++++---------
- 1 file changed, 14 insertions(+), 9 deletions(-)
-
-commit 76a5310a830c7ae12037b768c5043bef0ff733a0
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Mon Nov 2 17:52:45 2015 -0800
-
-    Remove irrelevant comment
-
-    I tried moving the is_default_ignorable() function to an INTERNAL
-    function.  That made the binary size grow by 5k AND things got a
-    tad bit slower!
-
- src/hb-ot-layout-private.hh | 1 -
- 1 file changed, 1 deletion(-)
-
-commit 8259669fbd1b070fc02287325894caf1bc4d590e
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Mon Nov 2 17:44:05 2015 -0800
-
-    Minor
-
- src/hb-ot-layout-gsubgpos-private.hh | 2 +-
- src/hb-ot-shape-complex-thai.cc      | 2 +-
- 2 files changed, 2 insertions(+), 2 deletions(-)
-
-commit 9382c471eabce8d36d3a73c97499ab60af422716
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Mon Nov 2 17:36:51 2015 -0800
-
-    Combine unicode_props0/1 into a uint16
-
-    Slightly faster.  In prep for more changes.
-
- src/hb-ot-layout-private.hh | 55
- ++++++++++++++++++++++++---------------------
- 1 file changed, 29 insertions(+), 26 deletions(-)
-
-commit 71277185454482cff9b0c10b85c416eb4d6e0ed9
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Mon Nov 2 17:27:48 2015 -0800
-
-    [perf] Only call combining_class() for marks
-
-    Saves some time.  Also preparing for reusing the ccc byte for
-    other stuff.
-
- src/hb-ot-layout-private.hh | 14 ++++++++------
- 1 file changed, 8 insertions(+), 6 deletions(-)
-
-commit 5ba450407b9d9856453e63a815499da8721ff6a7
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Mon Nov 2 15:43:08 2015 -0800
-
-    Make max context-length and max nesting level configurable
-
-    ...at compile time.
-
- src/hb-ot-layout-common-private.hh   | 10 ++++++++--
- src/hb-ot-layout-gsub-table.hh       |  4 ++--
- src/hb-ot-layout-gsubgpos-private.hh | 20 ++++++++++----------
- 3 files changed, 20 insertions(+), 14 deletions(-)
-
-commit 67f8821fb25d9bd55719f5e29a582ae1af4b02b3
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Mon Nov 2 15:37:29 2015 -0800
-
-    [ot] Make bad-hmtx handling match FreeType
-
-    Also route fuzzing-related tests through hb-ot-font, to reduce
-    dependency
-    on FreeType behavior for badly-broken fonts.  Fixes failing test with
-    FreeType master.
-
- src/hb-ot-font.cc              | 24 ++++++++++++++----------
- test/shaping/tests/fuzzed.tests | 10 +++++-----
- 2 files changed, 19 insertions(+), 15 deletions(-)
-
-commit 672ca3b4e65a75fb3a418ec5d117ad242a98acbb
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Mon Oct 26 14:05:05 2015 -0700
-
-    Use templates for making sure expression is constant
-
- src/hb-private.hh | 6 +++---
- 1 file changed, 3 insertions(+), 3 deletions(-)
-
-commit 5c8174eda32c08187bc2ed40eefa1017f5b40668
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Oct 21 18:51:40 2015 -0200
-
-    Update comments for removal of compat decompositions
-
- src/hb-ot-shape-normalize.cc | 16 ++--------------
- 1 file changed, 2 insertions(+), 14 deletions(-)
-
-commit f6799700404c49ae0a6018fd51be19551c76768a
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Oct 21 17:20:55 2015 -0200
-
-    Disable compatibility decomposition usage during normalization
-
-    Fixes https://github.com/behdad/harfbuzz/issues/152
-
- src/hb-ot-shape-normalize.cc | 24 ------------------------
- 1 file changed, 24 deletions(-)
-
-commit ce889189c1f8ef5b400a17f623dcb8b935d1102b
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Oct 21 11:23:12 2015 -0200
-
-    Fix two more -Wshadow warnings
-
-    https://bugzilla.mozilla.org/show_bug.cgi?id=1215894
-
- src/hb-open-type-private.hh | 10 +++++-----
- 1 file changed, 5 insertions(+), 5 deletions(-)
-
-commit 4a6b1eedbb0044b57505eea65a329d2dc4f9f917
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Oct 21 11:20:55 2015 -0200
-
-    Fix one more -Wshadow warning
-
-    https://bugzilla.mozilla.org/show_bug.cgi?id=1215894
-
- src/hb-ot-layout-gsubgpos-private.hh | 6 +++---
- 1 file changed, 3 insertions(+), 3 deletions(-)
-
-commit 6f932bc8f9045b224613a617af2b4f3450c79467
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Oct 21 11:16:49 2015 -0200
-
-    Fix a few more -Wshadow-local warnings
-
-    https://bugzilla.mozilla.org/show_bug.cgi?id=1215894
-
- src/hb-ot-shape-complex-indic.cc   | 10 +++++-----
- src/hb-ot-shape-complex-myanmar.cc | 10 +++++-----
- src/hb-ot-shape-complex-use.cc     | 10 +++++-----
- 3 files changed, 15 insertions(+), 15 deletions(-)
-
-commit b90cb366d7723c28758c6b75a0770613fbb5456e
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Oct 21 11:13:21 2015 -0200
-
-    Fix one -Wshadow-compatible-local warning
-
-    From https://bugzilla.mozilla.org/show_bug.cgi?id=1215894
-
- src/hb-ot-shape-complex-indic.cc | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-commit 50e5750bd8670b4cf4463471a2348d4c99c9d054
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Oct 21 11:10:10 2015 -0200
-
-    Avoid unnecessary cast to 64-bit
-
-    Fixes https://github.com/behdad/harfbuzz/issues/146
-
-    Or I think it should.
-
- src/hb-private.hh | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-commit 305d2fbf5a2db51447c8ed894a48a88896930673
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Oct 21 11:04:28 2015 -0200
-
-    Add HB_FALLTHROUGH
-
-    Borrowed from https://bugzilla.mozilla.org/show_bug.cgi?id=1215411
-
- src/hb-ot-shape-complex-indic.cc |  2 +-
- src/hb-ot-shape-complex-thai.cc  |  2 +-
- src/hb-ot-shape-fallback.cc     |  4 +++-
- src/hb-private.hh               | 30 ++++++++++++++++++++++++++++++
- 4 files changed, 35 insertions(+), 3 deletions(-)
-
-commit f35b3e931ddacd075c5d0810e9b17de07b232ee2
-Author: Ebrahim Byagowi <ebrahim@gnu.org>
-Date:  Fri Sep 11 09:48:12 2015 +0430
-
-    Add a prototype of DirectWrite as a shaping backend
-
- src/hb-directwrite.cc | 827
- ++++++++++++++++++++++++++++++++++++++++++++++++++
- src/hb-directwrite.h  |  34 +++
- src/hb-shaper-list.hh |   3 +
- 3 files changed, 864 insertions(+)
-
-commit 6486e3755482563ecd89aeb3f8348ed190945e26
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Oct 20 16:39:41 2015 -0200
-
-    Fix typo
-
- Makefile.am | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-commit 753ea7b90904c951c199861409458bea182abb37
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Oct 20 15:21:18 2015 -0200
-
-    Add BUILD.md to dist
-
- Makefile.am | 1 +
- 1 file changed, 1 insertion(+)
-
-commit 5d7a30fde09320c2c62c7c73570ce3f2e298eba6
-Merge: 904b0dc 2fb95a0
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Oct 20 15:19:41 2015 -0200
-
-    Merge pull request #148 from ebraminio/inst
-
-    Add BUILD.md based on harfbuzz.org docs
-
-commit 904b0dc3811464cf61dc9457664de95ee4f61a86
-Merge: 86cadc2 ba096bc
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Mon Oct 19 16:59:43 2015 -0200
-
-    Merge pull request #147 from ebraminio/dockerci
-
-    [ci] change to docker infrastructure
-
-commit ba096bcc28ca80e2096e0a15191848fcd175e395
-Author: Ebrahim Byagowi <ebrahim@gnu.org>
-Date:  Mon Oct 19 21:41:01 2015 +0330
-
-    [ci] change to docker infrastructure
-
- .travis.yml | 24 ++++++++++++++++--------
- 1 file changed, 16 insertions(+), 8 deletions(-)
-
-commit 2fb95a0c9d2cb8b03b7c158706d6b0e41283a6df
-Author: Ebrahim Byagowi <ebrahim@gnu.org>
-Date:  Mon Oct 19 22:02:12 2015 +0330
-
-    Add BUILD.md based on harfbuzz.org docs
-
- BUILD.md | 25 +++++++++++++++++++++++++
- 1 file changed, 25 insertions(+)
-
-commit 86cadc2cd4171050e9d74306b76c42f6ec74b861
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Oct 15 20:25:29 2015 -0300
-
-    1.0.6
-
- NEWS        | 13 +++++++++++++
- configure.ac |  2 +-
- 2 files changed, 14 insertions(+), 1 deletion(-)
-
-commit ca97ea7aa2cb7186f432aaba76f4f151aa90c1d0
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Oct 15 20:20:22 2015 -0300
-
-    [ft] Revert change-of-behavior of hb_ft_font_create() introduced
-    in 1.0.5
-
-    The default FreeType load flags where changed from FT_LOAD_NO_HINTING
-    to FT_LOAD_DEFAULT in 2a9627c5641cd000e2adff0e42a0dc687b53ec70.
-    This is crashing HarfBuzz-enabled FreeType as I suppose it causes
-    infinite recursion between HB and FT autohinter...
-
-    Revert the behavior change.
-
-    Fixes https://github.com/behdad/harfbuzz/issues/143
-
- src/hb-ft.cc | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-commit 338ffec9e4a5819f2be21c3a320a567378c977b1
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Oct 15 12:55:57 2015 -0300
-
-    Add tests for a couple of fixed issues found by libFuzzer
-
-    From:
-    https://github.com/behdad/harfbuzz/issues/139#issuecomment-147616887
-    https://github.com/behdad/harfbuzz/issues/139#issuecomment-148289957
-
- .../sha1sum/375d6ae32a3cbe52fbf81a4e5777e3377675d5a3.ttf | Bin 0 ->
- 1024 bytes
- .../sha1sum/641bd9db850193064d17575053ae2bf8ec149ddc.ttf | Bin 0 ->
- 305 bytes
- test/shaping/fonts/sha1sum/MANIFEST                     |   2 ++
- test/shaping/tests/fuzzed.tests                         |   2 ++
- 4 files changed, 4 insertions(+)
-
-commit 63ef0b41dc48d6112d1918c1b1de9de8ea90adb5
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Oct 15 12:47:22 2015 -0300
-
-    [ot-font] Fix hmtx wrong table length check
-
-    Discovered by libFuzzer.  Ouch!
-
-    https://github.com/behdad/harfbuzz/issues/139#issuecomment-148289957
-
- src/hb-ot-font.cc | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-commit 613e630617074eb9b62b794cc37c9b42a7fb079b
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Oct 13 23:33:28 2015 -0300
-
-    Reduce max nesting level from 8 to 6
-
-    We probably should implement better system to catch cyclic lookups.
-    But for now, this speeds up worst case behavior with broken fonts
-    considerably without compromising legitimate usecases.
-
-    https://github.com/behdad/harfbuzz/issues/139#issuecomment-147788447
-
- src/hb-ot-layout-common-private.hh | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-commit ab170529246ad80830bef2b3c8b48e9a8d2b7483
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Oct 13 10:55:33 2015 -0300
-
-    1.0.5
-
- NEWS        | 24 ++++++++++++++++++++++++
- configure.ac |  2 +-
- 2 files changed, 25 insertions(+), 1 deletion(-)
-
-commit ed13e2ce509408f849255be1d3cc3dbd7dbb3ba2
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Oct 13 10:32:56 2015 -0300
-
-    [ot-font] Fix leak
-
-    https://github.com/behdad/harfbuzz/issues/139#issuecomment-147616887
-
- src/hb-ot-font.cc | 1 +
- 1 file changed, 1 insertion(+)
-
-commit 55db94be2b754ba9b9121f09abcf8496c798affc
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Oct 13 00:33:59 2015 -0400
-
-    Add test for previous commit
-
- .../sha1sum/0509e80afb379d16560e9e47bdd7d888bebdebc6.ttf   | Bin 0 ->
- 61 bytes
- test/shaping/fonts/sha1sum/MANIFEST                       |   1 +
- test/shaping/tests/fuzzed.tests                           |   1 +
- 3 files changed, 2 insertions(+)
-
-commit f96664974774bfeb237a7274f512f64aaafb201e
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Oct 13 00:30:50 2015 -0400
-
-    Fix another memory access issue discovered by libFuzzer
-
-    Fixes
-    https://github.com/behdad/harfbuzz/issues/139#issuecomment-146984679
-
- src/hb-ot-layout-gpos-table.hh | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
-
-commit c1a5dc46c2231f7b62421e06b9766ccfebaf3ef5
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Mon Oct 12 17:39:52 2015 -0400
-
-    [fuzz] Add fuzzing script from kcc@
-
-    https://github.com/behdad/harfbuzz/issues/139
-
- test/fuzzing/hb-fuzzer.cc | 47
- +++++++++++++++++++++++++++++++++++++++++++++++
- 1 file changed, 47 insertions(+)
-
-commit cc6ea308d4c99b9dd6d625fa3a9b0ef62fa2614f
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Mon Oct 12 17:21:52 2015 -0400
-
-    Extern "C" custom-allocator declerations
-
- src/hb-private.hh | 8 ++++----
- 1 file changed, 4 insertions(+), 4 deletions(-)
-
-commit 98c6fccc00062ead7a86892dd059aa13d266b981
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Sun Oct 11 21:41:04 2015 -0400
-
-    Add test for ee9b0b6cb5fdb08671ab064f26c299135f828260
-
- .../sha1sum/5a5daf5eb5a4db77a2baa3ad9c7a6ed6e0655fa8.ttf   | Bin 0 ->
- 61 bytes
- test/shaping/fonts/sha1sum/MANIFEST                       |   1 +
- test/shaping/tests/fuzzed.tests                           |   1 +
- 3 files changed, 2 insertions(+)
-
-commit 50f489a0a013fc589626bb532a9f64f50bb41f58
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Sun Oct 11 20:59:29 2015 -0400
-
-    Typo
-
- src/hb-font-private.hh | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-commit ee9b0b6cb5fdb08671ab064f26c299135f828260
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Fri Oct 9 14:23:15 2015 -0400
-
-    Fix another sanitize bug
-
-    Also discovered by "libFuzzer".
-
- src/hb-open-type-private.hh | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-commit 34379b49e6922b86c15ee62f7fe3bf016cdc2514
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Fri Oct 9 12:34:02 2015 -0400
-
-    Add test for previous fix
-
- test/shaping/Makefile.am                                  |   1 +
- .../sha1sum/1a6f1687b7a221f9f2c834b0b360d3c8463b6daf.ttf   | Bin 0 ->
- 64 bytes
- test/shaping/fonts/sha1sum/MANIFEST                       |   1 +
- test/shaping/tests/MANIFEST                               |   1 +
- test/shaping/tests/fuzzed.tests                           |   1 +
- 5 files changed, 4 insertions(+)
-
-commit f396fbb000dc1c8acddbf6a16e193b328c5e551e
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Fri Oct 9 12:25:55 2015 -0400
-
-    Fix return value of sanitize when subformat is not readable
-
-    This is a fix on top of the previous issue fixed in
-    c917965b9e6fe2b21ed6c51559673288fa3af4b7.
-
-    This was caught by "libFuzzer" testing.
-
- src/hb-open-type-private.hh         |  2 ++
- src/hb-ot-layout-gpos-table.hh       | 15 +++++++--------
- src/hb-ot-layout-gsub-table.hh       | 13 ++++++-------
- src/hb-ot-layout-gsubgpos-private.hh |  8 ++++----
- 4 files changed, 19 insertions(+), 19 deletions(-)
-
-commit 77a1a2bc18e7b04d4e352a8777ccce345b2f8659
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Fri Oct 9 12:20:58 2015 -0400
-
-    Add hb_dispatch_context_t
-
- src/hb-open-type-private.hh         | 26 ++++++++++++++++++++++----
- src/hb-ot-layout-gsubgpos-private.hh | 36
- ++++++++++++------------------------
- src/hb-ot-layout.cc                 |  8 +++-----
- 3 files changed, 37 insertions(+), 33 deletions(-)
-
-commit 3e905e396bcd745bda88e751998a76556c5cb8c6
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Oct 8 12:51:02 2015 -0400
-
-    Add hb_font_set_parent()
-
-    No reason to not have it.  Makes life easier later.
-    We (hb-ft, hb-ot-font, etc) can use this API to inject new
-    parent into a font...
-
- src/hb-font.cc       | 26 ++++++++++++++++++++++++++
- src/hb-font.h       |  4 ++++
- test/api/test-font.c | 12 ++++++++++++
- 3 files changed, 42 insertions(+)
-
-commit edeb3dabf4a589d67c3f1da7ba43a74e4d3a9afd
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Oct 8 12:47:15 2015 -0400
-
-    [ft] Add version for new API
-
- src/hb-ft.cc | 18 ++++++++++++++++++
- 1 file changed, 18 insertions(+)
-
-commit 2a9627c5641cd000e2adff0e42a0dc687b53ec70
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Oct 7 17:33:20 2015 -0400
-
-    [ft] API: Add hb_font_[sg]et_load_flags() API
-
-    This changes the default load_flags of fonts created using
-    hb_ft_font_create() from NO_HINTING to DEFAULT.  Hope that doesn't
-    break too much client code.
-
-    Code calling hb_ft_font_set_funcs() is unaffected.
-
- src/hb-ft.cc | 163
- +++++++++++++++++++++++++++++++++++++++--------------------
- src/hb-ft.h  |  13 +++--
- 2 files changed, 118 insertions(+), 58 deletions(-)
-
-commit 3224a594dcf2164b5585b4ccba34f244af3f61b9
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Oct 7 17:33:02 2015 -0400
-
-    Minor
-
- src/hb-ot-font.cc | 5 ++---
- 1 file changed, 2 insertions(+), 3 deletions(-)
-
-commit 52b418555b62a3b25399f202c1fa72ab7288c224
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Sat Oct 3 13:20:55 2015 +0100
-
-    Allow compiling with custom allocators
-
-    User can define hb_malloc_impl, etc, to name of custom allocator
-    functions
-    that have the same signature as malloc.
-
- src/hb-private.hh | 17 +++++++++++++++++
- 1 file changed, 17 insertions(+)
-
-commit 88da7bba9fa4665b33f5bfcd45add7443097eaf3
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Fri Oct 2 14:38:20 2015 +0100
-
-    Default font scale to face upem
-
-    Makes for a better default and avoids nasty inheritance issues.
-    See mailing list thread "Default hb_font_t scale".
-
- src/hb-font.cc       |  2 ++
- test/api/test-font.c | 13 ++++++++-----
- 2 files changed, 10 insertions(+), 5 deletions(-)
-
-commit 1866e17114b41d565eb066e7d9393c2ff3e0a12b
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Fri Oct 2 14:21:29 2015 +0100
-
-    Make hb_font_create_sub_font() NOT make parent immutable
-
-    We don't rely on that.  However, whenever hb_font_make_immutable()
-    is called, it makes its parenting chain immutable.
-
- src/hb-font.cc       |  4 +++-
- test/api/test-font.c | 21 +++++++++++++++------
- 2 files changed, 18 insertions(+), 7 deletions(-)
-
-commit 980e25cad2e58c31f5361862b9223d94ec47fc7a
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Fri Oct 2 08:21:12 2015 +0100
-
-    Fix hb-ot-shape-normalize with empty buffer
-
-    Part of https://github.com/behdad/harfbuzz/issues/136
-
- src/hb-ot-shape-normalize.cc | 2 ++
- 1 file changed, 2 insertions(+)
-
-commit a5efaac4ff61b587f228830b265b39fe8e5e4e47
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Fri Oct 2 08:02:29 2015 +0100
-
-    Replace a couple of malloc()s with calloc()
-
- src/hb-face.cc       | 2 +-
- src/hb-shape-plan.cc | 2 +-
- src/hb-shaper.cc     | 2 +-
- 3 files changed, 3 insertions(+), 3 deletions(-)
-
-commit 26ba4d1e1fb8949632fe08e6a7600badfba4f142
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Fri Oct 2 07:25:52 2015 +0100
-
-    Fix segfault with empty buffer in hb_shape_plan_execute()
-
-    Move the empty-buffer check from hb_shape_full() to
-    hb_shape_plan_execute().
-
-    Reported by Simon Cozens.
-
- src/hb-shape-plan.cc | 9 +++++++--
- src/hb-shape.cc      | 5 -----
- 2 files changed, 7 insertions(+), 7 deletions(-)
-
-commit 432ffc47a46d41bea17d839d0d3980e654c6e638
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Sep 30 22:51:16 2015 +0100
-
-    1.0.4
-
- NEWS        | 7 +++++++
- configure.ac | 2 +-
- 2 files changed, 8 insertions(+), 1 deletion(-)
-
-commit b47159011ca518c3b94d782ed16a91ffe9dd2ab2
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Sep 29 14:57:02 2015 +0100
-
-    Define return_trace()
-
-    Not functional change (expected!).
-
- src/hb-open-file-private.hh         |  20 +--
- src/hb-open-type-private.hh         |  62 +++----
- src/hb-ot-cmap-table.hh             |  56 +++----
- src/hb-ot-glyf-table.hh             |   4 +-
- 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   | 108 ++++++-------
- src/hb-ot-layout-gdef-table.hh       |  44 ++---
- src/hb-ot-layout-gpos-table.hh       | 252 +++++++++++++++--------------
- src/hb-ot-layout-gsub-table.hh       | 304
- ++++++++++++++++++-----------------
- src/hb-ot-layout-gsubgpos-private.hh | 205 +++++++++++------------
- src/hb-ot-layout-jstf-table.hh       |  35 ++--
- src/hb-ot-maxp-table.hh             |   5 +-
- src/hb-ot-name-table.hh             |  14 +-
- src/hb-private.hh                   |   6 +-
- 16 files changed, 575 insertions(+), 546 deletions(-)
-
-commit c917965b9e6fe2b21ed6c51559673288fa3af4b7
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Sep 29 14:45:35 2015 +0100
-
-    Add missing returns
-
-    Fixes possible invalid read of two bytes.
-
-    Reported by Behzad Najjarpour Jabbari, Secunia Research.
-
- src/hb-ot-layout-gpos-table.hh       | 14 +++++++-------
- src/hb-ot-layout-gsub-table.hh       | 12 ++++++------
- src/hb-ot-layout-gsubgpos-private.hh |  8 ++++----
- 3 files changed, 17 insertions(+), 17 deletions(-)
-
-commit f3159ba5141c2ab0e430e64742972df140f91c43
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Sep 29 14:34:56 2015 +0100
-
-    Micro-optimize hb_language_from_string()
-
-    As measured / improved by Benson Limketkai.
-
- src/hb-common.cc | 10 +++++-----
- 1 file changed, 5 insertions(+), 5 deletions(-)
-
-commit f2ad935e19338a29113492150f0c5a5fd5befd75
-Author: Sascha Brawer <sascha@brawer.ch>
-Date:  Sun Jun 28 03:29:47 2015 +0200
-
-    Handle language tags that indicate phonetic IPA transcription
-
-    The BCP-47 registry defines a variant subtag "fonipa" that can be used
-    in combination with arbitrary other language tags. For example,
-    "rm-CH-fonipa-sursilv" indicates the Sursilvan dialect of Romansh
-    as used in Switzerland, transcribed used the International Phonetic
-    Alphabet.
-
-    http://www.iana.org/assignments/language-subtag-registry/language-subtag-registry
-
- src/hb-ot-tag.cc      | 15 ++++++++++++++-
- test/api/test-ot-tag.c |  7 +++++++
- 2 files changed, 21 insertions(+), 1 deletion(-)
-
-commit b8811429b6810c4f13be087b593a862c17d9d987
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Sep 3 15:53:22 2015 +0430
-
-    Fix Since tags
-
-    Fixes https://github.com/behdad/harfbuzz/issues/103
-
- src/hb-blob.cc                    | 24 +++++++++----------
- src/hb-buffer-serialize.cc | 10 ++++----
- src/hb-buffer.cc          | 58
- +++++++++++++++++++++++-----------------------
- src/hb-buffer.h           |  9 +++++++
- src/hb-common.cc          | 24 +++++++++----------
- src/hb-common.h           |  3 +++
- src/hb-coretext.cc        |  3 +++
- src/hb-font.h             | 18 +++++++-------
- src/hb-ft.cc              |  6 ++---
- src/hb-graphite2.cc       |  6 +++++
- src/hb-ot-layout.cc       |  2 +-
- src/hb-ot-tag.cc          |  2 +-
- src/hb-set.h              |  3 +++
- src/hb-shape.cc           |  2 +-
- src/hb-unicode.cc         | 18 +++++++-------
- src/hb-unicode.h          | 10 ++++----
- 16 files changed, 111 insertions(+), 87 deletions(-)
-
-commit 5d74ff02ab01df67808b416af8bb9cefb06f841e
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Sep 3 14:55:59 2015 +0430
-
-    Fix Since: version tags on font and face APIs
-
-    A while back we marked every API as version:1.0.  We should fix
-    them all
-    to reflect real version they were introduced.  This is a start.
-
-    Patch from Nikolay Sivov.
-
- src/hb-face.cc | 22 ++++++++---------
- src/hb-font.cc | 76
- +++++++++++++++++++++++++++++-----------------------------
- 2 files changed, 49 insertions(+), 49 deletions(-)
-
-commit 7f5405397406a24c5a001b5ef43dcf4d6926415e
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Sep 1 17:03:50 2015 +0100
-
-    1.0.3
-
- NEWS        | 11 +++++++++++
- configure.ac |  2 +-
- 2 files changed, 12 insertions(+), 1 deletion(-)
-
-commit 5828c45d7a816ccd0a7f10a665ea3cf8cfd63b05
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Sep 1 16:26:35 2015 +0100
-
-    [indic] Add comments to merge_clusters calls
-
- src/hb-ot-shape-complex-indic.cc | 21 ++++++++++++++++-----
- 1 file changed, 16 insertions(+), 5 deletions(-)
-
-commit bdc8215949a7add742cc800b4fdea6acaa37d152
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Sep 1 16:24:54 2015 +0100
-
-    [thai] Respect cluster-level > 0
-
- src/hb-ot-shape-complex-thai.cc | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-commit 5b31fe383ead726ec77062501ed3bb24c02842b3
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Sep 1 16:24:34 2015 +0100
-
-    [use] Merge /before/ reordering
-
- src/hb-ot-shape-complex-use.cc | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-commit 0d438f89bd9422c66838c776eb4aa867de0a2ad8
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Sep 1 16:24:13 2015 +0100
-
-    [hangul] Merge /before/ reordering
-
- src/hb-ot-shape-complex-hangul.cc | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-commit f883de664fc4bfe01e30c89e07e31dc113f906d9
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Sep 1 16:23:40 2015 +0100
-
-    [OT] Merge /before/ reordering
-
- src/hb-ot-shape.cc | 5 +++--
- 1 file changed, 3 insertions(+), 2 deletions(-)
-
-commit c403d6320074455a5e8e48902c0ac4ee9685e33d
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Sep 1 16:15:25 2015 +0100
-
-    [myanmar] Use buffer->sort() to sort cluster
-
-    This can possibly produce more granular clusters.
-
- src/hb-ot-shape-complex-myanmar.cc | 3 +--
- 1 file changed, 1 insertion(+), 2 deletions(-)
-
-commit e995d33c10a4bd9404699d01bddb2b69d811e9ed
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Sep 1 16:13:32 2015 +0100
-
-    [OT] Merge clusters when reordering marks for normalization
-
-    Fixes https://bugzilla.gnome.org/show_bug.cgi?id=541608
-    and cluster test.
-
- src/hb-buffer-private.hh     |  2 ++
- src/hb-buffer.cc            | 21 +++++++++++++++++++++
- src/hb-ot-shape-normalize.cc |  2 +-
- 3 files changed, 24 insertions(+), 1 deletion(-)
-
-commit b6d7d161a87b5dde710924e5c557d39c302f5630
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Sep 1 16:12:44 2015 +0100
-
-    [tests] Add Hebrew test for normalization under cluster-level=1
-
-    Currently fails.
-    https://bugzilla.gnome.org/show_bug.cgi?id=541608
-
- .../sha1sum/43ef465752be9af900745f72fe29cb853a1401a5.ttf | Bin 0 ->
- 4272 bytes
- test/shaping/fonts/sha1sum/MANIFEST                     |   1 +
- test/shaping/tests/cluster.tests                        |   1 +
- 3 files changed, 2 insertions(+)
-
-commit 93099748e39740a3f6f003c83d9dec1d21660ce8
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Sep 1 16:11:27 2015 +0100
-
-    Minor
-
- src/hb-private.hh | 6 ++----
- 1 file changed, 2 insertions(+), 4 deletions(-)
-
-commit 85846b3de7491b6a07fed6a2c0c6c1b09943b249
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Sep 1 15:07:52 2015 +0100
-
-    Use insertion-sort instead of bubble-sort
-
-    Needed for upcoming merge-clusters fix.
-
- src/hb-buffer.cc                          |  4 +--
- src/hb-ot-shape-complex-arabic-fallback.hh |  6 ++--
- src/hb-ot-shape-complex-indic.cc          |  2 +-
- src/hb-ot-shape-complex-myanmar.cc        |  2 +-
- src/hb-ot-shape-normalize.cc              |  6 ++--
- src/hb-private.hh                         | 56
- +++++++++++++-----------------
- 6 files changed, 34 insertions(+), 42 deletions(-)
-
-commit fad2674874591b4a1df822603144c8864f5364c1
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Sep 1 14:45:46 2015 +0100
-
-    Minor
-
- test/Makefile.am        | 4 ++++
- test/api/Makefile.am    | 4 ++++
- test/shaping/Makefile.am | 4 ++++
- 3 files changed, 12 insertions(+)
-
-commit 23e4fac6de913201f263a73e13d3c1fab31d1bdd
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Mon Aug 31 19:41:01 2015 +0100
-
-    Update git.mk from upstream
-
- git.mk | 17 ++++++++++++++++-
- 1 file changed, 16 insertions(+), 1 deletion(-)
-
-commit 5783e05f81bbf6debf2618c8994d6852630d9847
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Mon Aug 31 19:18:10 2015 +0100
-
-    [docs] Move docs/reference/ contents into docs/
-
- configure.ac                               |   3 +-
- docs/Makefile.am                           | 117
- ++++++++++++++++++++++++++-
- docs/{reference => }/harfbuzz-docs.xml      |  0
- docs/{reference => }/harfbuzz-overrides.txt |  0
- docs/{reference => }/harfbuzz-sections.txt  |  0
- docs/reference/Makefile.am                 | 118
- ----------------------------
- docs/{reference => }/usermanual-ch01.xml    |  0
- docs/{reference => }/usermanual-ch02.xml    |  0
- docs/{reference => }/usermanual-ch03.xml    |  0
- docs/{reference => }/usermanual-ch04.xml    |  0
- docs/{reference => }/usermanual-ch05.xml    |  0
- docs/{reference => }/usermanual-ch06.xml    |  0
- docs/{reference => }/version.xml.in        |   0
- 13 files changed, 117 insertions(+), 121 deletions(-)
-
-commit cd5e3a13a6e0b6606d3a421f8cd44cdfb8314907
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Mon Aug 31 19:16:41 2015 +0100
-
-    [docs] Fix out-of-tree build
-
- docs/reference/Makefile.am              |  9 ++++++++-
- docs/reference/harfbuzz-docs.xml        | 12 ++++++------
- docs/{ => reference}/usermanual-ch01.xml |  0
- docs/{ => reference}/usermanual-ch02.xml |  0
- docs/{ => reference}/usermanual-ch03.xml |  0
- docs/{ => reference}/usermanual-ch04.xml |  0
- docs/{ => reference}/usermanual-ch05.xml |  0
- docs/{ => reference}/usermanual-ch06.xml |  0
- 8 files changed, 14 insertions(+), 7 deletions(-)
-
-commit 3899795fa3c3e058e3885ec7a6638f0597a752cc
-Merge: d205965 01e16e8
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Mon Aug 31 10:46:01 2015 +0100
-
-    Merge pull request #131 from simoncozens/docs
-
-    Use gtk-doc to build user's manual as well as reference
-
-commit 01e16e88f50b65b82dcb84773f532f18a351319f
-Author: Simon Cozens <simon@simon-cozens.org>
-Date:  Mon Aug 31 10:40:17 2015 +0100
-
-    Combine user / reference information into gtk-doc generated manual.
-
- docs/reference/harfbuzz-docs.xml | 91
- +++++++++++++++++++++++-----------------
- 1 file changed, 52 insertions(+), 39 deletions(-)
-
-commit 11a07c4729174e1d4af028103ecb0a351e4c2707
-Author: Simon Cozens <simon@simon-cozens.org>
-Date:  Mon Aug 31 10:39:10 2015 +0100
-
-    Correct tag hierarchy, to allow for table-of-contents entries.
-
- docs/usermanual-ch01.xml | 12 ++++++------
- docs/usermanual-ch02.xml |  8 ++++----
- docs/usermanual-ch03.xml | 24 ++++++++++++------------
- docs/usermanual-ch04.xml | 16 ++++++++--------
- docs/usermanual-ch05.xml | 12 ++++++------
- 5 files changed, 36 insertions(+), 36 deletions(-)
-
-commit 387d6af428ddd5d4f211fe5748412011013a3826
-Author: Simon Cozens <simon@simon-cozens.org>
-Date:  Mon Aug 31 10:31:09 2015 +0100
-
-    Missing tag (oops).
-
- docs/usermanual-ch02.xml | 1 +
- 1 file changed, 1 insertion(+)
-
-commit d205965286798af4b7ad07e1eafa58288bee4bdb
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Mon Aug 31 10:12:05 2015 +0100
-
-    [docs] Fix typo
-
- docs/usermanual-ch03.xml | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-commit c424b41705b50055c7f92b268cf78a2680af73af
-Merge: 31594b9 5470e74
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Mon Aug 31 09:53:16 2015 +0100
-
-    Merge pull request #129 from simoncozens/docs
-
-    First two chapters. More to follow.
-
-commit 31594b98af0c9181982c77d8d3803753007f8fd4
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Sun Aug 30 17:33:04 2015 +0100
-
-    [test] Fix test-object
-
-    See previous commit.
-
- test/api/test-object.c | 4 ----
- 1 file changed, 4 deletions(-)
-
-commit 326b5ebf5748f547e4eb7388d66b79fe23130e2a
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Sun Aug 30 17:29:21 2015 +0100
-
-    Poison freed objects such that double-free is detected
-
-    Previously we were setting refcount of freed objects to the inert
-    value, which
-    was harmful because it caused further destroy()s of the freed object
-    to NOT
-    call free() and hence hide the bug.  Indeed, after eb0bf3ae6688b7
-    test-object
-    was double-free'ing objects and this was never caught on Linux.
-    It only was
-    caught as crashing on Mac.
-
-    Now we poison refcount upon freeing and check that it's valid
-    whenever reading
-    it.  Makes test-object fail now.
-
- src/hb-object-private.hh | 21 ++++++++++++++++-----
- 1 file changed, 16 insertions(+), 5 deletions(-)
-
-commit 5470e744dd264c2dc33437a68d20bcf7c5ffb905
-Author: Simon Cozens <simon@simon-cozens.org>
-Date:  Sat Aug 29 08:21:18 2015 +0100
-
-    Current state and skeleton outline
-
- docs/usermanual-ch03.xml | 77
- ++++++++++++++++++++++++++++++++++++++++++++++++
- docs/usermanual-ch04.xml | 18 +++++++++++
- docs/usermanual-ch05.xml | 13 ++++++++
- docs/usermanual-ch06.xml |  8 +++++
- 4 files changed, 116 insertions(+)
-
-commit 6578575cc8aeb05341f2053039acfcd735707674
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Aug 25 20:24:59 2015 +0100
-
-    [GPOS] Fix cursive connection with mix of RTL and non-RTL lookups
-
-    See thread "Issue with cursive attachment" started by Khaled.
-    Turned out fixing this wasn't as bad as I had assumed.  I like the
-    new code better; we now have a theoretical model of cursive
-    connections that is easier to reason about.
-
- src/hb-ot-layout-gpos-table.hh | 34 ++++++++++++++++++++++++++++++++++
- 1 file changed, 34 insertions(+)
-
-commit 7368da67244ea53195cd9b95a5c57485df695732
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Aug 25 20:28:39 2015 +0100
-
-    [test] Add test for cursive-positioning with mixed directions
-
-    Fails now. Fix coming.  See thread "Issue with cursive attachment"
-    started by Khaled. Test fonts were made by modifying test font
-    from Khaled to add more anchors.
-
- test/shaping/Makefile.am                                |   1 +
- .../sha1sum/298c9e1d955f10f6f72c6915c3c6ff9bf9695cec.ttf | Bin 0 ->
- 2520 bytes
- test/shaping/fonts/sha1sum/MANIFEST                     |   2 ++
- .../sha1sum/c4e48b0886ef460f532fb49f00047ec92c432ec0.ttf | Bin 0 ->
- 2512 bytes
- test/shaping/tests/MANIFEST                             |   1 +
- test/shaping/tests/cursive-positioning.tests            |   2 ++
- 6 files changed, 6 insertions(+)
-
-commit f0807654da160bd7ceb9aff5b8338ec0b643171c
-Author: Simon Cozens <simon@simon-cozens.org>
-Date:  Tue Aug 25 19:57:15 2015 +0100
-
-    First two chapters. More to follow.
-
- docs/usermanual-ch01.xml | 115 ++++++++++++++++++++++++++++++
- docs/usermanual-ch02.xml | 182
- +++++++++++++++++++++++++++++++++++++++++++++++
- 2 files changed, 297 insertions(+)
-
-commit 58f2a73fb95af42e264a91cdef7bb5a89e965601
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Aug 25 18:55:34 2015 +0100
-
-    [GPOS] Rewrite cursive attachment slightly differently
-
-    In anticipation for upcoming fix for bug reported by
-    Khaled in thread "Issue with cursive attachment".
-
- src/hb-ot-layout-gpos-table.hh | 36 ++++++++++++++++++++++++------------
- 1 file changed, 24 insertions(+), 12 deletions(-)
-
-commit fdd1770e006ca2d2973c049177ceda87a575e07f
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Mon Aug 24 13:49:55 2015 +0100
-
-    Add API/cmdline to show glyph extents when serializing buffer
-
-    New API: HB_BUFFER_SERIALIZE_FLAG_GLYPH_EXTENTS
-
-    hb-shape now accepts --show-extents.
-
-    Patch from Simon Cozens.
-
- src/hb-buffer-serialize.cc | 17 +++++++++++++++++
- src/hb-buffer.h           |  3 ++-
- util/hb-shape.cc          |  2 ++
- util/options.cc           |  1 +
- util/options.hh           |  2 ++
- 5 files changed, 24 insertions(+), 1 deletion(-)
-
-commit 2cee5b68a07b99214ef9428fe5d03e7b378a558f
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Mon Aug 24 13:45:12 2015 +0100
-
-    [ot-font] Fix short-offset calculation
-
- src/hb-ot-font.cc | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-commit b50fcfa82994f93568a54dd1eb7fd327f6db5586
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Sun Aug 23 14:42:20 2015 +0100
-
-    [ot-font] Implement glyph_extents() for TrueType fonts
-
-    This brings ot-fonts into almost-complete shape and mostly in par with
-    ft font.
-
- src/Makefile.am        |   1 +
- src/hb-font.h          |   9 +++--
- src/hb-ot-font.cc      |  90 +++++++++++++++++++++++++++++++++++++++--
- src/hb-ot-glyf-table.hh | 104
- ++++++++++++++++++++++++++++++++++++++++++++++++
- src/hb-ot-head-table.hh |   3 +-
- 5 files changed, 198 insertions(+), 9 deletions(-)
-
-commit 0299b45000b5047c0b9bf0fe51f3b8b68a7982f8
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Fri Aug 21 12:44:36 2015 +0100
-
-    Make BYTE a real type
-
- src/hb-open-type-private.hh | 16 +++++++++++++++-
- 1 file changed, 15 insertions(+), 1 deletion(-)
-
-commit ed6962c795ae7c54aaee9ed5667fa65ccf7412bf
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Aug 20 15:39:53 2015 +0100
-
-    [coretext] Use i32 instead of u32 as well
-
-    Shouldn't cause *any* functional changes, but is more correct.
-
- src/hb-coretext.cc | 20 ++++++++++----------
- 1 file changed, 10 insertions(+), 10 deletions(-)
-
-commit 163c435f1807c138da9f74f09d29d913eb9e29e9
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Aug 20 15:39:06 2015 +0100
-
-    [uniscribe] Fix negative offsets
-
-    Ouch!
-
- src/hb-uniscribe.cc | 8 ++++----
- 1 file changed, 4 insertions(+), 4 deletions(-)
-
-commit 789b89ef7130ffe5f22c571fc3cb4e6d35456654
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Aug 19 13:39:57 2015 +0100
-
-    1.0.2
-
- NEWS        | 13 +++++++++++++
- configure.ac |  2 +-
- 2 files changed, 14 insertions(+), 1 deletion(-)
-
-commit 958c268fa3a520666436e77a2111a3b564a36d96
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Aug 19 13:22:12 2015 +0100
-
-    [coretext] Add TODO item
-
- src/hb-coretext.cc | 1 +
- 1 file changed, 1 insertion(+)
-
-commit 7c5bee09d9c7c25672c7c77572ebae0b731892d0
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Aug 19 13:20:31 2015 +0100
-
-    [uniscribe] Fix font scale handling
-
-    By default shape at upem (or ppem), and scale results.
-    Similar to work done in CoreText backend, but using upem as default.
-
- src/hb-uniscribe.cc | 25 +++++++++++++++++++------
- 1 file changed, 19 insertions(+), 6 deletions(-)
-
-commit 902e74a098dad8c3b487856284f9fdf99b04f9f1
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Aug 18 18:55:03 2015 +0100
-
-    Commented-out code to print buffer before each lookup
-
-    To be turned into a useful HB_DEBUG_SHAPE infrastructure...
-
- src/hb-ot-layout.cc | 12 ++++++++++++
- 1 file changed, 12 insertions(+)
-
-commit 75504a50488a6aac0b9789f728fb5b87e641d4c3
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Aug 18 18:47:02 2015 +0100
-
-    Allow serializing buffer with output-buffer being used
-
-    Ie, don't call get_positions() if positions are not
-    requested for serialization.
-
- src/hb-buffer-serialize.cc | 6 ++++--
- 1 file changed, 4 insertions(+), 2 deletions(-)
-
-commit e47b772a56af44a9a4f9ec907ee2091b725b94c1
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Aug 18 18:42:47 2015 +0100
-
-    [ot] Change buffer content type right after we map to glyphs
-
-    Needed for upcoming debug output changes.
-
- src/hb-ot-shape.cc | 2 ++
- 1 file changed, 2 insertions(+)
-
-commit d104415e4c1e0f9140f794cd8d09c6460c63e966
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Aug 18 17:33:34 2015 +0100
-
-    [Android.mk] Update for SEA removal and USE addition
-
- Android.mk | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
-commit ddd6bf12f1cabaa298feed820313483b9893528c
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Aug 18 15:55:09 2015 +0100
-
-    Don't declare dependency on freetype in harfbuzz.pc
-
-    See comments.
-
- src/Makefile.am | 7 ++++++-
- 1 file changed, 6 insertions(+), 1 deletion(-)
-
-commit 2c8b3b2e5312c9858584f568b1528c57e5bb8a10
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Aug 18 14:36:43 2015 +0100
-
-    [debug] Print lookup index in debug-apply output
-
- src/hb-ot-layout-gpos-table.hh       | 5 ++++-
- src/hb-ot-layout-gsub-table.hh       | 5 ++++-
- src/hb-ot-layout-gsubgpos-private.hh | 7 +++++--
- src/hb-ot-layout.cc                 | 3 ++-
- 4 files changed, 15 insertions(+), 5 deletions(-)
-
-commit 50ad7788eeb7160caef4ec78e65c7c630e601b06
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Aug 18 10:22:16 2015 +0100
-
-    [coretext] Remove assert that kicks in on Mac OS 10.6
-
-    http://crbug.com/419769
-
- src/hb-coretext.cc | 18 ++++++++++++++----
- 1 file changed, 14 insertions(+), 4 deletions(-)
-
-commit 2b646fa07f5f9d4d10d563a91d22a2750b5fc771
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Mon Aug 17 16:03:28 2015 +0200
-
-    Remove unused function
-
- src/hb-ot-shape-complex-use.cc | 8 --------
- 1 file changed, 8 deletions(-)
-
-commit 23237b0279a04407addf33f599c45faa60f002ca
-Author: ThePhD <phdofthehouse@gmail.com>
-Date:  Fri Aug 14 01:19:08 2015 -0400
-
-    Last apparent boolean fix!
-
- src/hb-ot-shape-complex-use.cc | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-commit 5c99cf93d6242803bddcac2ca8300fdec7e0f8a7
-Merge: 8ad89f0 539a610
-Author: ThePhD <phdofthehouse@gmail.com>
-Date:  Fri Aug 14 01:02:00 2015 -0400
-
-    Merge branch 'master' into vc++-fixes
-
-commit 539a610e2e72375e598ab29fd390ed9ec93816d5
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Aug 11 12:58:49 2015 +0200
-
-    Add Libs.private and Requires.private to harfbuzz.pc
-
-    Fixes https://bugs.freedesktop.org/show_bug.cgi?id=64501
-
- configure.ac      | 12 +++++++++---
- src/Makefile.am    | 15 ++++++++++++---
- src/harfbuzz.pc.in |  2 ++
- 3 files changed, 23 insertions(+), 6 deletions(-)
-
-commit c7dfe316f8c0fc04b7976fca5e58eb46d91b4821
-Author: jfkthame <jfkthame@gmail.com>
-Date:  Fri Aug 7 17:55:03 2015 +0100
-
-    Don't rely on .cluster in _hb_ot_shape_normalize()
-
-    Fixes https://github.com/behdad/harfbuzz/pull/124
-
- src/hb-ot-shape-normalize.cc | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-commit 9099e48e29fe5cfdf8566c8f1ba6ddc8c0799e7e
-Author: jfkthame <jfkthame@gmail.com>
-Date:  Fri Aug 7 17:51:28 2015 +0100
-
-    Don't rely on .cluster field in fallback_position
-
-    Fixes tests/cluster.
-
-    Fixes https://github.com/behdad/harfbuzz/pull/123
-
- src/hb-ot-shape-fallback.cc | 5 ++---
- 1 file changed, 2 insertions(+), 3 deletions(-)
-
-commit f3792342f670978cdc3f8512fb5e80314ca0678d
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Sat Aug 8 18:02:18 2015 +0200
-
-    [tests] Add test for fallback positioning with cluster_level > 0
-
-    For https://github.com/behdad/harfbuzz/pull/123
-    Currently fails.  Fix coming.
-
- test/shaping/Makefile.am                                 |   1 +
- .../sha1sum/6466d38c62e73a39202435a4f73bf5d6acbb73c0.ttf  | Bin 0 ->
- 824 bytes
- test/shaping/fonts/sha1sum/MANIFEST                      |   1 +
- test/shaping/tests/MANIFEST                              |   1 +
- test/shaping/tests/cluster.tests                         |   1 +
- 5 files changed, 4 insertions(+)
-
-commit bd22a5cfae24b3b9253bccaeb139e698e74cd0c3
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Fri Aug 7 11:13:27 2015 +0200
-
-    Bug 91559 - HarfBuzz 1.0.1: Inconsistent DLL files
-    specified/created...
-
-    Fixes https://bugs.freedesktop.org/show_bug.cgi?id=91559
-
- src/Makefile.am | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-commit 02d6439f420d959183dd446abd0b0118ee1ee061
-Merge: 9002c27 160f635
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Mon Aug 3 22:47:18 2015 +0300
-
-    Merge pull request #122 from RomainNaour/static-fix
-
-    fix static linking with icu-uc
-
-commit 160f635523d596f61e292776f638d4eb09673463
-Author: Romain Naour <romain.naour@openwide.fr>
-Date:  Wed Jul 22 23:26:23 2015 +0200
-
-    fix static linking with icu-uc
-
-    When linking test-unicode statically it needs $(ICU_LIBS)
-    which contains all required flags.
-    Especially -lstdc++.
-
-    Fixes:
-    http://autobuild.buildroot.net/results/210/2107f9dfb39eeb6559fb4271c7af8b39aef521ca/
-
-    Signed-off-by: Romain Naour <romain.naour@openwide.fr>
-
- test/api/Makefile.am | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-commit 9002c27b2f54bb5135db92045c0d770b47317577
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Mon Jul 27 12:17:54 2015 +0200
-
-    1.0.1
-
- NEWS        | 9 ++++++++-
- configure.ac | 2 +-
- 2 files changed, 9 insertions(+), 2 deletions(-)
-
-commit f1c20e1ba5bf218df7dc3e198bdcf1f449fc9387
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Mon Jul 27 12:16:02 2015 +0200
-
-    [USE] Fix out-of-bounds static array access
-
- src/hb-ot-shape-complex-use.cc | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-commit 260442346a5756c3538ee8fcbf157d1cddcf6f36
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Sun Jul 26 23:39:10 2015 +0200
-
-    1.0.0
-
- NEWS           | 10 ++++++++++
- configure.ac   |  4 ++--
- src/Makefile.am |  2 +-
- 3 files changed, 13 insertions(+), 3 deletions(-)
-
-commit df6cb84449a473d540821e41fb5007b59644780f
-Merge: 2ed6be6 786ba45
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Sun Jul 26 19:40:55 2015 +0200
-
-    Merge branch 'use'
-
-commit 2ed6be66703e6cc67f3a3746e197001dad3d9b74
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Sun Jul 26 19:29:53 2015 +0200
-
-    0.9.42
-
- NEWS        | 12 ++++++++++++
- configure.ac |  2 +-
- 2 files changed, 13 insertions(+), 1 deletion(-)
-
-commit 23e56e088a721863cfdef4f027fb66eecbd77457
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Sat Jul 25 17:36:46 2015 +0200
-
-    Fix broken sentence
-
- src/hb-set-private.hh | 10 +++++++++-
- 1 file changed, 9 insertions(+), 1 deletion(-)
-
-commit 91a2e5d2878a8c0b4d4500e3d52d4fbaaf1ac0d7
-Author: Grigori Goronzy <greg@chown.ath.cx>
-Date:  Wed Jul 8 23:28:11 2015 +0200
-
-    Update UCDN to upstream commit 8af93f30
-
-    This adds support for Unicode 8.0 and fixes a bug with wrong
-    properties
-    for ranges of codepoints.
-
- src/hb-ucdn.cc                      |    6 +
- src/hb-ucdn/ucdn.h          |    6 +
- src/hb-ucdn/unicodedata_db.h | 2167
- +++++++++++++++++++++---------------------
- 3 files changed, 1118 insertions(+), 1061 deletions(-)
-
-commit 786ba45847127b9cd4d9c0c01ae0e6c61f3a8e06
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Jul 23 13:04:34 2015 +0100
-
-    [test] Encode Kharoshti text
-
-    Ouch!
-
- .../in-tree/shaper-use/script-kharoshti/misc.txt   | 72
- +++++++++++-----------
- 1 file changed, 36 insertions(+), 36 deletions(-)
-
-commit b4231255032e243153a6f32cf8c93c158cb0bf6a
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Jul 23 13:01:55 2015 +0100
-
-    [test] Add Batak and Buginese test texts
-
- test/shaping/texts/in-tree/shaper-use/MANIFEST     |  2 +
- .../texts/in-tree/shaper-use/script-batak/MANIFEST |  1 +
- .../texts/in-tree/shaper-use/script-batak/misc.txt |  9 +++
- .../in-tree/shaper-use/script-buginese/MANIFEST    |  1 +
- .../in-tree/shaper-use/script-buginese/misc.txt    | 70
- ++++++++++++++++++++++
- 5 files changed, 83 insertions(+)
-
-commit b8c159ffccad090974a2b97be0a0140fa09af132
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Jul 23 12:59:17 2015 +0100
-
-    [test] Remove shaper-sea texts under shaper-use
-
- test/shaping/texts/in-tree/MANIFEST                                    |
- 1 -
- test/shaping/texts/in-tree/shaper-sea/MANIFEST                                 |
- 2 --
- test/shaping/texts/in-tree/shaper-sea/script-cham/MANIFEST             |
- 1 -
- test/shaping/texts/in-tree/shaper-sea/script-tai-tham/MANIFEST                 |
- 1 -
- test/shaping/texts/in-tree/shaper-use/MANIFEST                                 |
- 2 ++
- .../{shaper-sea/script-cham/misc => shaper-use/script-cham}/MANIFEST
- | 0
- .../{shaper-sea/script-cham/misc => shaper-use/script-cham}/misc.txt
- | 0
- .../script-tai-tham/misc => shaper-use/script-tai-tham}/MANIFEST
- | 0
- .../script-tai-tham/misc => shaper-use/script-tai-tham}/misc.txt
- | 0
- .../script-tai-tham/misc => shaper-use/script-tai-tham}/torture.txt
- | 0
- 10 files changed, 2 insertions(+), 5 deletions(-)
-
-commit 67ba7320cc5545baeacfcff64cea338223b9bd6d
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Jul 23 12:58:21 2015 +0100
-
-    [test] Remove New Tai Lue texts
-
-    New Tai Lue changed encoding to visual, boring, model.
-
- test/shaping/texts/in-tree/shaper-sea/MANIFEST                                |
- 1 -
- test/shaping/texts/in-tree/shaper-sea/script-new-tai-lue/MANIFEST     |
- 1 -
- test/shaping/texts/in-tree/shaper-sea/script-new-tai-lue/misc/MANIFEST |
- 1 -
- test/shaping/texts/in-tree/shaper-sea/script-new-tai-lue/misc/misc.txt |
- 1 -
- 4 files changed, 4 deletions(-)
-
-commit c81d957a264539dfe3252f9a94ee066c4a44edf4
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Jul 23 12:50:48 2015 +0100
-
-    [test] Add tests for improved 'vert' feature
-
- test/shaping/Makefile.am                                |   1 +
- .../sha1sum/191826b9643e3f124d865d617ae609db6a2ce203.ttf | Bin 0 ->
- 2140 bytes
- test/shaping/fonts/sha1sum/MANIFEST                     |   1 +
- test/shaping/tests/MANIFEST                             |   1 +
- test/shaping/tests/vertical.tests                       |   1 +
- 5 files changed, 4 insertions(+)
-
-commit 8a6a16dbcb1808c7ed50f9ba320384565bbf405a
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Jul 23 12:49:09 2015 +0100
-
-    [test] Add recently added test
-
-    Ouch.
-
- test/shaping/Makefile.am | 1 +
- 1 file changed, 1 insertion(+)
-
-commit 895fb31c7f0201f13df5a6866b367476bc4aab2e
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Jul 23 12:14:03 2015 +0100
-
-    [test] Support additional options to hb-shape in micro-test suite
-
- test/shaping/record-test.sh                       | 47
- ++++++++++++++++++----
- test/shaping/run-tests.sh                         |  9 ++++-
- test/shaping/tests/arabic-fallback-shaping.tests   |  2 +-
- test/shaping/tests/arabic-feature-order.tests     |  6 +--
- test/shaping/tests/context-matching.tests         |  6 +--
- test/shaping/tests/default-ignorables.tests       |  2 +-
- test/shaping/tests/hangul-jamo.tests              |  4 +-
- test/shaping/tests/indic-joiner-candrabindu.tests  |  4 +-
- test/shaping/tests/indic-old-spec.tests           |  4 +-
- test/shaping/tests/indic-pref-blocking.tests      |  4 +-
- .../tests/mongolian-variation-selector.tests      |  6 +--
- test/shaping/tests/zero-width-marks.tests         |  4 +-
- 12 files changed, 67 insertions(+), 31 deletions(-)
-
-commit 0f98fe88f42471eb8fb28d08d45eca9cd8303f7a
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Jul 23 11:52:11 2015 +0100
-
-    [ot] Search globally for 'vert' feature if not found in specified
-    script/lang
-
-    Fixes https://github.com/behdad/harfbuzz/issues/63
-
- src/hb-ot-layout-private.hh | 9 +++++++++
- src/hb-ot-layout.cc        | 22 ++++++++++++++++++++++
- src/hb-ot-map-private.hh    | 7 ++++---
- src/hb-ot-map.cc           | 10 ++++++++++
- src/hb-ot-shape.cc         |  6 +++++-
- 5 files changed, 50 insertions(+), 4 deletions(-)
-
-commit f327aacfa107bbef0c823ef9c3b7dfc91316040c
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Jul 23 11:32:59 2015 +0100
-
-    [ot] Minor
-
- src/hb-ot-shape.cc | 11 +++--------
- 1 file changed, 3 insertions(+), 8 deletions(-)
-
-commit d78463c8016ff1852233479a1ebde30c3bb6de6e
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Jul 23 10:11:35 2015 +0100
-
-    Minor debug output fix
-
- src/hb-ot-layout.cc | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-commit d99f50bde0e8be0866385ca6886938d2023dbd4f
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Jul 23 10:08:48 2015 +0100
-
-    Add missing TRACE_RETURN
-
- src/hb-ot-layout-gsubgpos-private.hh | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-commit 2dc8e3f470d7c0b579f867605b8bf40688bc5722
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Jul 23 10:07:21 2015 +0100
-
-    [ot] Add missing return!
-
- src/hb-ot-layout-gsubgpos-private.hh | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-commit 582069172c39326c7f94373793c656439a4c2b59
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Jul 22 18:44:59 2015 +0100
-
-    Add test case for deleting default ignorables with positioning
-
- .../sha1sum/051d92f8bc6ff724511b296c27623f824de256e9.ttf | Bin 0 ->
- 2028 bytes
- test/shaping/fonts/sha1sum/MANIFEST                     |   1 +
- test/shaping/tests/MANIFEST                             |   1 +
- test/shaping/tests/default-ignorables.tests             |   1 +
- 4 files changed, 3 insertions(+)
-
-commit 8cfbc304ee563ec96e402beed34b10b6c0950a6a
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Jul 22 18:41:10 2015 +0100
-
-    Fix hide-default-ignorables after
-    f0010dfd01ef4a927b0bdc175dd4e343a8637174
-
-    We can't delete things before hb_ot_layout_position_finish().  So,
-    just zero the advance before it, and remove later.
-
- src/hb-ot-shape.cc | 25 +++++++++++++++++++------
- 1 file changed, 19 insertions(+), 6 deletions(-)
-
-commit 2dbd3d29d6548bd96fd976606ed689fac8ad8817
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Jul 22 18:28:39 2015 +0100
-
-    Fix hide-ignorables if font doesn't have space glyph
-
-    Was broken by 82b521aeb7cc73879b44ca4278d6fa8b4347527f, as we have
-    positioning data by then and can't use the output buffer.  Ouch!
-
- src/hb-buffer-private.hh | 18 ------------------
- src/hb-ot-shape.cc      | 44
- +++++++++++++++++++++++++++++++++++---------
- 2 files changed, 35 insertions(+), 27 deletions(-)
-
-commit 4ba796b26ee62de0d2830a550f3aa3b4aecf6f59
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Jul 22 17:41:31 2015 +0100
-
-    Refactor _hb_glyph_info_is_default_ignorable()
-
- src/hb-ot-layout-gsubgpos-private.hh | 3 +--
- src/hb-ot-layout-private.hh         | 4 +++-
- src/hb-ot-shape.cc                  | 9 +++------
- 3 files changed, 7 insertions(+), 9 deletions(-)
-
-commit f0010dfd01ef4a927b0bdc175dd4e343a8637174
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Jul 22 17:36:23 2015 +0100
-
-    [ot] Hide default-ignorables before finishing off positioning
-
-    For example, fixes the following sequence with Arial XP:
-    628 25cc 651 25cc 64e 3a 20 628 651 34f 64e
-    628 25cc 64e 25cc 651 3a 20 628 64e 34f 651
-
-    Discovered as part of:
-    https://bugs.freedesktop.org/show_bug.cgi?id=85873
-
- src/hb-ot-shape.cc | 125
- +++++++++++++++++++++++++++--------------------------
- 1 file changed, 63 insertions(+), 62 deletions(-)
-
-commit 376d587f36b4ff10342ee6ca3bacd73532ea44c8
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Jul 22 16:51:12 2015 +0100
-
-    Implement more granular cluster-merging
-
-    TODO: Documentation.
-
-    Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=71445
-
- NEWS                             |  8 +++++++
- src/hb-buffer-private.hh         |  1 +
- src/hb-buffer.cc                 | 46
- ++++++++++++++++++++++++++++++++++-----
- src/hb-buffer.h                  | 12 ++++++++++
- src/hb-ot-shape-complex-hangul.cc | 13 +++++------
- src/hb-ot-shape.cc               |  7 ++++++
- util/options.cc                  |  1 +
- util/options.hh                  |  3 +++
- 8 files changed, 77 insertions(+), 14 deletions(-)
-
-commit a60e2cfa395718cde48eb81f43adc27b4a92e117
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Jul 22 15:49:08 2015 +0100
-
-    [ot] Don't rely on cluster numbers for ensure_native_direction()
-
- src/hb-ot-shape.cc | 19 ++++++++++++++++++-
- 1 file changed, 18 insertions(+), 1 deletion(-)
-
-commit 701112dad9f6e690b253f1e64f4e7e549f5ae65f
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Jul 22 15:42:20 2015 +0100
-
-    [ot] Simplify form_clusters()
-
- src/hb-buffer-private.hh |  9 ++++++++-
- src/hb-buffer.cc        |  7 ++-----
- src/hb-ot-shape.cc      | 11 +++++++++--
- 3 files changed, 19 insertions(+), 8 deletions(-)
-
-commit 7b8b63adc5e0389fc4cf2720ef7e5804ab6c29cc
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Jul 22 15:24:26 2015 +0100
-
-    [ot] Don't mirror character if font doesn't support mirrored
-    character!
-
- src/hb-ot-shape.cc | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-commit 97d7c3a100e2673279f066540229d229aaf0df78
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Jul 22 14:28:25 2015 +0100
-
-    [graphite2] Fix bunch of stuff
-
-    Based on patch from Martin Hosken, with review from Jonathan and I.
-
- src/hb-graphite2.cc | 82
- +++++++++++++++++++++++++++++++++++------------------
- 1 file changed, 54 insertions(+), 28 deletions(-)
-
-commit ea7f8414e34d4b5efc7b98974637c08f75440f0e
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Jul 22 13:53:45 2015 +0100
-
-    [graphite2] Enlarge buffer for output glyphs!
-
- src/hb-graphite2.cc | 1 +
- 1 file changed, 1 insertion(+)
-
-commit 9cd59db1af47ff511edf251949d58b82673cf704
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Jul 22 13:27:06 2015 +0100
-
-    [USE] Implement topographical features for non-Arabic-joining scripts
-
-    This works per-syllable as per the spec, but we think it should be per
-    spacing/base/??? glyph instead.
-
- src/hb-ot-shape-complex-use.cc | 87
- ++++++++++++++++++++++++++++++++++++++----
- 1 file changed, 80 insertions(+), 7 deletions(-)
-
-commit ecb0b24ef3f8177e7c789f45a2e858bd67e31be3
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Jul 22 12:02:09 2015 +0100
-
-    Use foreach_cluster in Indic shaper
-
- src/hb-ot-shape-complex-indic.cc | 90
- +++++++++-------------------------------
- 1 file changed, 19 insertions(+), 71 deletions(-)
-
-commit 56f71ff98890fc4fd13e8d9743dc34c4b9407309
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Jul 22 11:58:11 2015 +0100
-
-    Use foreach_syllable in Myanmar shaper
-
- src/hb-ot-shape-complex-myanmar.cc | 62
- ++++++++------------------------------
- 1 file changed, 12 insertions(+), 50 deletions(-)
-
-commit ac596511a8c9eeaeb455ca16b5b9c5f1b9923b3a
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Jul 22 11:54:02 2015 +0100
-
-    Add foreach_syllable
-
-    Use it in USE.
-
- src/hb-ot-layout-private.hh   |  24 ++++++++
- src/hb-ot-shape-complex-use.cc | 129
- +++++++++++++----------------------------
- 2 files changed, 64 insertions(+), 89 deletions(-)
-
-commit 8ba9e689680f7685c04cfe7c6019222bdf0c52b0
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Jul 22 11:16:01 2015 +0100
-
-    [USE] Do Arabic-like shaping
-
- src/hb-ot-shape-complex-use.cc | 77
- ++++++++++++++++++++++++++++++++++++++++--
- 1 file changed, 75 insertions(+), 2 deletions(-)
-
-commit 9daf2dfb6bd5683fd951bdf166c8b87938257e52
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Jul 22 10:32:30 2015 +0100
-
-    Add hb-ot-shape-complex-arabic-private.hh
-
- src/Makefile.am                          |  1 +
- src/hb-ot-shape-complex-arabic-private.hh | 50
- +++++++++++++++++++++++++++++++
- src/hb-ot-shape-complex-arabic.cc        | 37 +++++++++++++----------
- 3 files changed, 73 insertions(+), 15 deletions(-)
-
-commit a51a661fe1dcfdd3a274a6be6ad741c68d430c8c
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Jul 21 18:24:21 2015 +0100
-
-    [USE] Only reorder the first component of a split left mark
-
- src/hb-ot-shape-complex-use.cc | 5 ++++-
- 1 file changed, 4 insertions(+), 1 deletion(-)
-
-commit a08a278b15c7e57a1d0a783f2bc877471b9d8229
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Jul 21 18:09:40 2015 +0100
-
-    [USE] Don't compose split matras
-
-    Same logic as in Indic shaper.
-
- src/hb-ot-shape-complex-use.cc | 15 ++++++++++++++-
- 1 file changed, 14 insertions(+), 1 deletion(-)
-
-commit 21cb08a417f1203523191192d6a342e8cd0ea14c
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Jul 21 17:47:06 2015 +0100
-
-    Remove unused SEA shaper
-
- src/Makefile.am                       |   4 -
- src/hb-ot-shape-complex-sea-machine.rl | 102 ---------
- src/hb-ot-shape-complex-sea.cc                | 380
- ---------------------------------
- 3 files changed, 486 deletions(-)
-
-commit db1e9cdd41ff7c97c29b4d9b64b2351ed0ef0403
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Jul 21 17:46:06 2015 +0100
-
-    Retire SEA shaper in favor of USE
-
- src/hb-ot-shape-complex-private.hh | 25 +++----------------------
- 1 file changed, 3 insertions(+), 22 deletions(-)
-
-commit 87dde9c64753dea4017f11a7734e7528b8eecac0
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Jul 21 17:31:43 2015 +0100
-
-    [USE] Only use USE shaper if script system is not DFLT
-
-    Same logic as Indic and SEA.
-
- src/hb-ot-shape-complex-private.hh | 13 ++++++++++---
- 1 file changed, 10 insertions(+), 3 deletions(-)
-
-commit 29832d797ff2f3a96721dd44f2f03a83fb2e8dda
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Jul 21 17:24:18 2015 +0100
-
-    Route misc untested scripts through USE shaper instead of Indic
-
-    These were never tested with Indic shaper, and indeed wouldn't
-    work there
-    because they didn't have their viramas and other config defined.
-    They are
-    all also supported by MS through USE, so route them there.
-
- src/hb-ot-shape-complex-private.hh | 91
- +++++---------------------------------
- 1 file changed, 11 insertions(+), 80 deletions(-)
-
-commit 40c4a991c7ea18017273ff8993eecc3953869e69
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Jul 21 17:14:54 2015 +0100
-
-    [USE] Implement dotted-circle
-
-    This makes USE feature-complete as far as the Indic-like features
-    are concerned.
-
- src/hb-ot-shape-complex-use-machine.rl | 10 ++++++++++
- src/hb-ot-shape-complex-use.cc                | 18 +++++++++++++++---
- 2 files changed, 25 insertions(+), 3 deletions(-)
-
-commit 7ce03ebe7c525919ce22d9094480847ff1b3c2b2
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Jul 21 16:55:26 2015 +0100
-
-    [USE] Move pref
-
- src/hb-ot-shape-complex-use-machine.rl |  9 +++++----
- src/hb-ot-shape-complex-use-private.hh |  9 +++++----
- src/hb-ot-shape-complex-use.cc                | 24 ++++++++++++++++++++++--
- 3 files changed, 32 insertions(+), 10 deletions(-)
-
-commit 2d4b62ead931b13f95f5dc0e5b740d997a8d1a8e
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Jul 21 16:46:37 2015 +0100
-
-    [USE] Fix-up variation selectors and word joiner in table
-
- src/gen-use-table.py                |  7 ++++++-
- src/hb-ot-shape-complex-use-table.cc | 34
- +++++++++++++++++++++++-----------
- 2 files changed, 29 insertions(+), 12 deletions(-)
-
-commit ad7178227f16abc17456f122deac1508031cbbc3
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Jul 21 16:43:27 2015 +0100
-
-    [USE] Use a couple warnings
-
- src/gen-use-table.py                | 20 ++++-----
- src/hb-ot-shape-complex-use-table.cc | 82
- ++++++++++++++++++------------------
- 2 files changed, 51 insertions(+), 51 deletions(-)
-
-commit a85c4da9b1750c2f994f9f85226a3e755fafe50b
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Jul 21 16:07:10 2015 +0100
-
-    [USE] Move rphf
-
- src/hb-ot-shape-complex-use.cc | 105
- ++++++++++++++---------------------------
- 1 file changed, 35 insertions(+), 70 deletions(-)
-
-commit 5b5617e0664e59770910d04d15175f643a5ffb73
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Jul 21 15:52:15 2015 +0100
-
-    Add FLAG_UNSAFE()
-
-    Unused right now.
-
- src/hb-private.hh | 1 +
- 1 file changed, 1 insertion(+)
-
-commit f8160a495966c790b79134a9f9382b6545f8c733
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Jul 21 15:50:02 2015 +0100
-
-    Add FLAG_SAFE() for values known to be small-enough
-
-    And add check to FLAG()
-
- src/hb-ot-shape-complex-arabic.cc  |  2 +-
- src/hb-ot-shape-complex-indic.cc   | 12 ++++++------
- src/hb-ot-shape-complex-myanmar.cc |  2 +-
- src/hb-private.hh                 |  5 +++--
- src/hb-unicode-private.hh         |  2 +-
- 5 files changed, 12 insertions(+), 11 deletions(-)
-
-commit 366aeaad006b230481a3c08ab4d239fb6b64fef8
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Jul 21 15:45:48 2015 +0100
-
-    Add note re ASSERT_STATIC_EXPR_ZERO()
-
- src/hb-private.hh | 2 ++
- 1 file changed, 2 insertions(+)
-
-commit d6adca9fbbbd6fc7c8906121b50c3930fbe2de8e
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Jul 21 15:17:27 2015 +0100
-
-    Remove unused macro ASSERT_STATIC_EXPR()
-
- src/hb-ot-shape-complex-arabic-win1256.hh | 4 ++--
- src/hb-ot-shape-complex-indic-private.hh  | 2 --
- src/hb-private.hh                        | 1 -
- 3 files changed, 2 insertions(+), 5 deletions(-)
-
-commit 1025e1a9e7785ac67cc90d05b02862e38b3e6026
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Jul 21 15:05:35 2015 +0100
-
-    Use unsigned in FLAG()
-
- src/hb-private.hh | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-commit cf59c7589c2b4064f4b9f4936115f830089a8ee7
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Jul 21 14:51:45 2015 +0100
-
-    [USE] Use use_category() for rphf/pref memory
-
- src/hb-ot-shape-complex-use.cc | 63
- +++++++++++++++---------------------------
- 1 file changed, 22 insertions(+), 41 deletions(-)
-
-commit 595936ec25e9c0924851bd1aa1af5eed3723b54f
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Jul 21 14:15:35 2015 +0100
-
-    [USE] Hook of rphf and pref custom processing
-
-    Still no reordering.
-
- src/hb-ot-layout-private.hh   |   8 ++
- src/hb-ot-shape-complex-use.cc | 181
- +++++++++++++++++++++++++++++++++++++++--
- 2 files changed, 181 insertions(+), 8 deletions(-)
-
-commit ba72801325e4bd58f7597938d4409762c9fa530c
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Jul 21 11:57:23 2015 +0100
-
-    [USE] Add CGJ to table
-
- src/gen-use-table.py                | 13 ++++++++++---
- src/hb-ot-shape-complex-use-table.cc |  1 +
- 2 files changed, 11 insertions(+), 3 deletions(-)
-
-commit 4febed61edc5367543e5a206ae01d3393841b612
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Jul 21 10:24:32 2015 +0100
-
-    [USE] Set up features
-
- src/hb-ot-shape-complex-use.cc | 68
- +++++++++++++++++++++++-------------------
- 1 file changed, 38 insertions(+), 30 deletions(-)
-
-commit 52a957795697085a5d379921ddd8aa6cf2f1a99d
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Jul 21 10:02:04 2015 +0100
-
-    [USE] Hook up new scripts to USE shaper
-
-    Don't reroute scripts that we were routing to other shapers
-    before (just yet).
-
- src/hb-ot-shape-complex-private.hh | 71
- ++++++++++++++++++++++++++++++++++++++
- 1 file changed, 71 insertions(+)
-
-commit b4c0829bc18b696f140a260fa2e1089d10164519
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Jul 21 09:31:19 2015 +0100
-
-    [USE] Remove unused Unicode data enums from USE C++ side
-
- src/hb-ot-shape-complex-use-private.hh | 66
- +---------------------------------
- src/hb-ot-shape-complex-use.cc                | 14 ++------
- 2 files changed, 3 insertions(+), 77 deletions(-)
-
-commit 44910cef626e6d03baa4d89d8fbe2c088971902d
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Mon Jul 20 18:01:10 2015 +0100
-
-    [USE] Finish converting Unicode positional categories to USE
-
-    Even compiles.
-
- src/gen-use-table.py                | 114 +++++-
- src/hb-ot-shape-complex-use-table.cc | 702
- ++++++++++++++++++-----------------
- 2 files changed, 467 insertions(+), 349 deletions(-)
-
-commit ad725552521273a1f571f04bc96a04221c3e067a
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Mon Jul 20 17:00:06 2015 +0100
-
-    [USE] Map from Unicode data to USE syllabic categories
-
-    Positional sub-categories not applied yet.
-
- src/gen-use-table.py                |  128 ++--
- src/hb-ot-shape-complex-use-table.cc | 1062
- ++++++++++++----------------------
- 2 files changed, 409 insertions(+), 781 deletions(-)
-
-commit 20e246e674155d5fb6527722fc3ef3accf2413df
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Mon Jul 20 15:56:19 2015 +0100
-
-    [USE] Start moving Unicode-to-USE mapping into Python code
-
- src/Makefile.am                     |   2 +-
- src/gen-use-table.py                | 176
- +++++++++++++++++++++++++++++++++--
- src/hb-ot-shape-complex-use-table.cc |   3 +-
- 3 files changed, 169 insertions(+), 12 deletions(-)
-
-commit eb74535cc2c0d0de41e54e75bdc71825ec969523
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Mon Jul 20 15:33:25 2015 +0100
-
-    [USE] Fix Number clusters
-
-    The spec wrongly has "H" where "HN" is meant.
-
- src/hb-ot-shape-complex-use-machine.rl | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-commit a9663958fe861950b6f389b389f146232b2cd909
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Mon Jul 20 14:24:55 2015 +0100
-
-    [USE] Start putting together the shaper body
-
- src/hb-ot-shape-complex-use-private.hh |   2 +-
- src/hb-ot-shape-complex-use.cc                | 339
- +++++++++++++++++++++++++++++++++
- 2 files changed, 340 insertions(+), 1 deletion(-)
-
-commit e0eabd7f67462ac34fbfc749d897be478fbd1224
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Mon Jul 20 13:30:51 2015 +0100
-
-    [USE] Put a Ragel machine together
-
-    Grammar from the spec!
-
- src/hb-ot-shape-complex-use-machine.rl | 169
- +++++++++++++++++++++++++++++++++
- src/hb-ot-shape-complex-use-private.hh | 160
- +++++++++++++++++++++++++++++++
- 2 files changed, 329 insertions(+)
-
-commit fd74b939b176f47d34d34b3d33e2a09d255c2d9e
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Mon Jul 20 13:30:45 2015 +0100
-
-    Minor
-
- src/Makefile.am | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-commit 5e5c8560cca3cb9c6be90c7c18ecb77d5cca0c0f
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Mon Jul 20 12:01:20 2015 +0100
-
-    [USE] Minor optimization of USE table
-
- src/gen-use-table.py                |  2 +-
- src/hb-ot-shape-complex-use-table.cc | 30 ++++++++++++------------------
- 2 files changed, 13 insertions(+), 19 deletions(-)
-
-commit 14b12f92a9ef7db57c5252ef0442239319ce4bca
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Mon Jul 20 11:57:44 2015 +0100
-
-    [USE] Add Kharoshti test data from Unicode proposal
-
- test/shaping/texts/in-tree/MANIFEST               |  1 +
- test/shaping/texts/in-tree/shaper-use/MANIFEST     |  1 +
- .../in-tree/shaper-use/script-kharoshti/MANIFEST   |  1 +
- .../in-tree/shaper-use/script-kharoshti/misc.txt   | 36
- ++++++++++++++++++++++
- 4 files changed, 39 insertions(+)
-
-commit c48ff288522f33dc6c78520de0a0a74306630895
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Mon Jul 20 11:46:17 2015 +0100
-
-    [USE] Build Universal Shaping Engine data table from Unicode 8 files
-
- src/gen-use-table.py                |   35 +-
- src/hb-ot-shape-complex-use-table.cc | 1016
- ++++++++++++++++++++++++++++++++++
- 2 files changed, 1032 insertions(+), 19 deletions(-)
-
-commit e2c95116e1423f83a692d6170553d0cc95733d24
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Mon Jul 20 11:32:48 2015 +0100
-
-    [USE] Add Universal Shaping Engine to Makefile
-
- src/Makefile.am                       |  23 +++-
- src/gen-use-table.py                  | 237
- +++++++++++++++++++++++++++++++++
- src/hb-ot-shape-complex-use-machine.rl |   0
- src/hb-ot-shape-complex-use-private.hh |   0
- src/hb-ot-shape-complex-use-table.cc  |   0
- src/hb-ot-shape-complex-use.cc                |   0
- 6 files changed, 254 insertions(+), 6 deletions(-)
-
-commit 41a29af8053782e3a9c6a96a394bd76ef6d42099
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Jul 15 01:39:57 2015 +0100
-
-    Update Arabic shaping table for Unicode 8.0
-
- src/hb-ot-shape-complex-arabic-table.hh | 26 +++++++++++++-------------
- 1 file changed, 13 insertions(+), 13 deletions(-)
-
-commit 64a2726e2c6efce4379a7609024ec21eb4b5e4dc
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Jul 15 01:36:39 2015 +0100
-
-    Add Unicode 8.0 scripts
-
-    Based on https://bugzilla.mozilla.org/show_bug.cgi?id=1183209
-
- src/hb-common.cc | 3 +++
- src/hb-common.h  | 7 +++++++
- 2 files changed, 10 insertions(+)
-
-commit 9ae156b76820d9079bae062e7e38c34a386d9bd2
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Sun Jul 5 22:43:17 2015 +0100
-
-    Fix pragma usage
-
-    https://bugs.freedesktop.org/show_bug.cgi?id=91228
-
-    Commit cdcdfe61b97a0a48ccf834b6d924d187da9609be changed two `#pragma
-    message` to `#pragma error` in hb-unicode.cc, however MSVC uses
-    #error,
-    just like the #else branch. `#pragma error` is an unknown pragma so
-    MSVC does not fail the build because of it, which I believe was the
-    intention of that commit.
-
-    If it's meant to be an #error, then the #ifdef for _MSC_VER can be
-    removed entirely.
-
- src/hb-unicode.cc |  5 -----
- src/hb-warning.cc | 10 ----------
- 2 files changed, 15 deletions(-)
-
-commit 8ad89f057d737ccbc6f411e9ebcf11b8130a50bb
-Author: ThePhD <phdofthehouse@gmail.com>
-Date:  Tue Jun 23 09:09:24 2015 -0400
-
-    Spelling words is not my strong point.
-
- src/hb-private.hh | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-commit e0a828ecbd708757d67977f7e92a6f4c1b0b92fd
-Author: ThePhD <phdofthehouse@gmail.com>
-Date:  Tue Jun 23 09:07:17 2015 -0400
-
-    Back to using regular `strdup`, with an `hb-private.hh` fix that
-    special-cases VC++'s
-    definition and usage of the words
-
- src/hb-common.cc  | 2 +-
- src/hb-private.hh | 3 +++
- 2 files changed, 4 insertions(+), 1 deletion(-)
-
-commit 8e545d59610211261e684c10158b9e5df6fae24d
-Author: ThePhD <phdofthehouse@gmail.com>
-Date:  Mon Jun 22 22:29:04 2015 -0400
-
-    Fix all VC++ warnings and errors in the current commit's builds.
-
- src/hb-common.cc                 | 4 ++--
- src/hb-fallback-shape.cc         | 2 +-
- src/hb-ot-layout.cc              | 2 +-
- src/hb-ot-map.cc                 | 2 +-
- src/hb-ot-shape-complex-hangul.cc | 2 +-
- src/hb-ot-shape-complex-hebrew.cc | 2 +-
- src/hb-ot-shape-complex-indic.cc  | 4 ++--
- src/hb-ot-shape-normalize.cc     | 6 +++---
- src/hb-ot-shape.cc               | 2 +-
- 9 files changed, 13 insertions(+), 13 deletions(-)
-
-commit 5f13bbd9d4b0970851626e2ce3cf4ecb3cfde801
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Fri Jun 19 13:31:49 2015 -0700
-
-    When removing default-ignorables, merge clusters
-
-    Fixes test-shape, and:
-    https://code.google.com/p/chromium/issues/detail?id=497578
-
- src/hb-buffer-private.hh |  2 ++
- src/hb-buffer.cc        | 36 ++++++++++++++++++++++++++++++++++--
- src/hb-ot-shape.cc      |  2 +-
- 3 files changed, 37 insertions(+), 3 deletions(-)
-
-commit 82b521aeb7cc73879b44ca4278d6fa8b4347527f
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Fri Jun 19 11:57:57 2015 -0700
-
-    Rewrite hide_default_ignorables
-
-    Separate the loops for the two cases of replacing with space
-    and deleting.  For deleting, use the out-buffer machinery.
-
-    Needed for upcoming cluster merge fix.
-
- src/hb-buffer-private.hh | 18 ++++++++++++++
- src/hb-ot-shape.cc      | 65
- +++++++++++++++++++++++++++++-------------------
- 2 files changed, 57 insertions(+), 26 deletions(-)
-
-commit b3a2f6afbac1956b65f29a17b9dc896e86135329
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Jun 18 17:15:33 2015 -0700
-
-    [test] Add test for cluster merging
-
-    Based on test from
-    https://code.google.com/p/chromium/issues/detail?id=497578
-
-    Currently fails.  Basically, if there's a default_ignorable at the
-    start of text, and font has no space glyph, we remove the
-    default_ignorable,
-    and that makes the first char in text to correspond to no cluster.
-
-    Fix coming.
-
- test/api/test-shape.c | 43 +++++++++++++++++++++++++++++++++++++++++++
- 1 file changed, 43 insertions(+)
-
-commit a6446d44e6d04e1eeea994682e29f9cb6265f7f6
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Jun 18 11:14:56 2015 -0700
-
-    0.9.41
-
- NEWS        | 10 ++++++++++
- configure.ac |  2 +-
- 2 files changed, 11 insertions(+), 1 deletion(-)
-
-commit cd042fc8c4a3984c3647cd22a27c34f00636f6e8
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Jun 18 10:55:13 2015 -0700
-
-    [util] Disable hb-fc-list for now
-
-    Until I figure out what to do about the API, and finalize
-    the tool.
-
- util/Makefile.am | 28 ++++++++++++++--------------
- 1 file changed, 14 insertions(+), 14 deletions(-)
-
-commit 351f68f4e01a107f62e4eb3458d7c7ae379939fb
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Fri Jun 12 17:46:06 2015 -0700
-
-    [bindings] Fix hb_language_get_default() and hb_ot_tag_to_language()
-
-    Part of https://github.com/behdad/harfbuzz/issues/91
-
- src/hb-common.cc | 2 +-
- src/hb-ot-tag.cc | 9 +++++++++
- 2 files changed, 10 insertions(+), 1 deletion(-)
-
-commit f0c80060763475aa34a18ecbef600b6811855cb6
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Fri Jun 12 17:37:41 2015 -0700
-
-    [TravisCI] Hook up Coverity
-
-    First try...
-
- .travis.yml | 13 +++++++++++++
- 1 file changed, 13 insertions(+)
-
-commit 8ac446908ca75bea989414a0f551a6da8885bf52
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Fri Jun 12 17:29:05 2015 -0700
-
-    Add Coverity Scan badge
-
- README | 1 +
- 1 file changed, 1 insertion(+)
-
-commit a5e4f6d6088f6ed37fb1d68d3682b8eb4c9b46fe
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Jun 10 10:57:46 2015 -0700
-
-    Fix warnings: "member call on null pointer of type"
-
-    https://bugzilla.mozilla.org/show_bug.cgi?id=1167119
-
- src/hb-private.hh | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-commit 16dac7eccf04bb357e95a8e4c18c8418dcfb4030
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Jun 3 12:07:46 2015 -0700
-
-    Fix build
-
- util/options.cc | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-commit 8dacb7f8b46c70f22b70c78e0a8efc3309137650
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Jun 3 11:53:42 2015 -0700
-
-    Add include check to hb-ot-font.h
-
- src/hb-ot-font.h | 4 ++++
- 1 file changed, 4 insertions(+)
-
-commit 37c8daf724add4a41a06385e571277d137dc2a2f
-Merge: f1b4430 01c3a88
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Mon Jun 1 13:27:37 2015 -0700
-
-    Merge pull request #111 from brawer/since
-
-    Fix "Since:" tags
-
-commit 01c3a88543850c87483fd8671044df53b368c520
-Author: Sascha Brawer <sascha@brawer.ch>
-Date:  Mon Jun 1 13:22:01 2015 +0200
-
-    Fix "Since:" tags
-
-    Based on data from http://upstream-tracker.org/versions/harfbuzz.html
-    Resolves #103
-
- src/hb-buffer.cc        | 32 +++++++++++++++++------------
- src/hb-common.cc        |  4 ++--
- src/hb-face.cc                  | 12 +++++------
- src/hb-font.cc                  | 14 ++++++-------
- src/hb-font.h           |  4 ++--
- src/hb-ft.cc            |  4 ++--
- src/hb-glib.cc                  |  3 +++
- src/hb-gobject-structs.h | 18 +++++++++++++++++
- src/hb-ot-font.cc       |  3 +++
- src/hb-ot-layout.cc     | 30 ++++++++++++++++++++++++++++
- src/hb-ot-shape.cc      |  6 ++++++
- src/hb-set.cc           | 52
- ++++++++++++++++++++++++------------------------
- src/hb-shape-plan.cc    | 18 ++++++++---------
- src/hb-shape.cc         |  8 ++++----
- src/hb-unicode.cc       |  6 +++---
- src/hb-unicode.h        | 31 ++++++++++++++++++++++++++---
- 16 files changed, 168 insertions(+), 77 deletions(-)
-
-commit f1b44303df0712b433e35e1e1e75115c353b279e
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu May 21 14:00:15 2015 -0700
-
-    Fix unary minus operator applied to unsigned int
-
-    Applying unary minus operator to unsigned int causes the following
-    warning on MSVS:
-
-      warning C4146: unary minus operator applied to unsigned type,
-      result still unsigned
-
-    Based on patch from Koji Ishi.
-
-    Fixes https://github.com/behdad/harfbuzz/pull/110
-
- src/hb-ot-font.cc | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-commit 1ae6cdb365c15405500d4f50ec98016dde23a26b
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue May 19 17:42:30 2015 -0700
-
-    [gobject] Remove hb_language_t workarounds for g-i shortcomings
-
-    Using latest gobject-introspection, I don't seem to be having this
-    problem anymore:
-
-      https://bugzilla.gnome.org/show_bug.cgi?id=707656
-
-    Removing that kludge makes language_t behave more like the way I
-    expect it
-    in Python.
-
-    Also fixes:
-    https://github.com/behdad/harfbuzz/issues/91
-
- src/hb-gobject-structs.cc | 1 -
- src/hb-gobject-structs.h  | 8 --------
- 2 files changed, 9 deletions(-)
-
-commit ece434fa0fec6754e5164d881c1e967376729eca
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue May 19 17:20:58 2015 -0700
-
-    [gobject] Macroize value types
-
-    Fixes user_data_t
-
- src/hb-gobject-structs.cc | 73
- +++++++++++------------------------------------
- 1 file changed, 17 insertions(+), 56 deletions(-)
-
-commit 9df099b4837df722e738675af318efcc9ac39a78
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Mon May 18 18:37:06 2015 -0700
-
-    [ft] Don't set *glyph in get_glyph() if glyph not found
-
- src/hb-ft.cc | 16 ++++++++++------
- 1 file changed, 10 insertions(+), 6 deletions(-)
-
-commit ff0f210519bcb0e44d4b986f7eef2004383cd344
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Mon May 18 14:16:28 2015 -0700
-
-    [util] Minor
-
- util/ansi-print.cc | 26 +++++++++++++-------------
- 1 file changed, 13 insertions(+), 13 deletions(-)
-
-commit fbecde3d5c5c6d5af315140e4966dc850388ad63
-Merge: 5801521 74139f9
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu May 7 10:46:42 2015 -0700
-
-    Merge pull request #105 from ebraminio/master
-
-    Fix Travis CI config to pass again
-
-commit 74139f9839f69ea3e7a1d17627f52fea6c06d58a
-Author: Ebrahim Byagowi <ebrahim@gnu.org>
-Date:  Thu May 7 13:09:32 2015 +0000
-
-    Fix Travis CI config to pass again
-
- .travis.yml | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-commit 58015215321a76d68df8e0d51039904a67291108
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed May 6 00:40:31 2015 -0700
-
-    Add note re OpenType 1.7 language tags
-
- src/hb-ot-tag.cc | 15 ++++++++++-----
- 1 file changed, 10 insertions(+), 5 deletions(-)
-
-commit f6266ad291d7686d5e110255ace5f2ff9e70bf38
-Author: Roozbeh Pournader <roozbeh@google.com>
-Date:  Tue May 5 22:31:19 2015 -0700
-
-    [minor] Remove comment about Navajo OpenType code.
-
-    Apparently the code is already standardized:
-    https://www.microsoft.com/typography/otspec/languagetags.htm
-
- src/hb-ot-tag.cc | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-commit 42b00118eae46a5183e885e89e0856f41361f57e
-Merge: c60f3c8 cfeb056
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue May 5 14:49:47 2015 -0700
-
-    Merge pull request #102 from roozbehp/master
-
-    Add OpenType language tag 'NAV ' for Navajo.
-
-commit c60f3c8e1156fe7328d42851013cca97333c3bf7
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Mon May 4 23:10:32 2015 -0700
-
-    [README.python] Add package name for gobject-introspection on Ubuntu
-
- README.python | 8 ++++++--
- 1 file changed, 6 insertions(+), 2 deletions(-)
-
-commit 82010a4bdb32248deb1337a3357dfae5b203c48d
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Mon May 4 23:09:51 2015 -0700
-
-    [travis] Comment out gobject-introspection again
-
-    Apparently the version on Travis is 1.32.0, while we require 1.34.0.
-
- .travis.yml | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-commit 8a254bdd29a99eb91b37e9e540179a1a01f77605
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Mon May 4 19:22:11 2015 -0700
-
-    [travis] Build with introspection enabled
-
- .travis.yml | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
-commit be66ec5373634234f221ace9cfed45d76b87f20e
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Apr 30 18:27:13 2015 -0400
-
-    Use TRUE/FALSE instead of true/false in docs
-
- src/hb-shape.cc | 6 +++---
- 1 file changed, 3 insertions(+), 3 deletions(-)
-
-commit d055e1fc781c123f38d321846937965ef794257e
-Author: Khaled Hosny <khaledhosny@eglug.org>
-Date:  Wed Jan 8 02:28:55 2014 +0200
-
-    Some attempt into initial hb-shape documentation
-
-    Very anaemic, needs to descripe the format understood by
-    hb_feature_from_string() etc., but it is just start.
-
- src/hb-shape.cc | 70
- ++++++++++++++++++++++++++++++++++++++-------------------
- src/hb-shape.h  |  3 ---
- 2 files changed, 47 insertions(+), 26 deletions(-)
-
-commit 81bedda58cfc15f1987aa1952290cf9d87b4d074
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Apr 30 13:04:16 2015 -0400
-
-    New API: hb_buffer_reverse_range()
-
- src/hb-buffer.cc | 17 +++++++++++++++++
- src/hb-buffer.h  |  4 ++++
- 2 files changed, 21 insertions(+)
-
-commit cfeb0562ebd8804dad731625153549eafeb78213
-Author: Roozbeh Pournader <roozbeh@google.com>
-Date:  Wed Apr 29 09:32:42 2015 -0700
-
-    Add OpenType language tag 'NAV ' for Navajo.
-
-    The code is not standardized yet, but is used in some Google fonts.
-
- src/hb-ot-tag.cc | 1 +
- 1 file changed, 1 insertion(+)
-
-commit f724cc351640ee075a9867ef42df32cf5e0ef3b7
-Author: Jonathan Kew <jfkthame@gmail.com>
-Date:  Thu Apr 23 12:45:02 2015 +0100
-
-    Don't apply Arabic shaping to vertical text.
-
- src/hb-ot-shape-complex-private.hh | 9 ++++++---
- 1 file changed, 6 insertions(+), 3 deletions(-)
-
-commit 97942420bbee1bc6953d5f805621066301fa17ca
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Apr 23 18:56:24 2015 -0700
-
-    Update check-libstdc++ for clang
-
- src/check-libstdc++.sh | 6 +++---
- 1 file changed, 3 insertions(+), 3 deletions(-)
-
-commit 8f0a4d67143ccdef0b5a6ac99fb9b680c3a2f69c
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Apr 23 14:32:33 2015 -0700
-
-    [test] Ignor 'n' and 'i' in hb-unicode-encode
-
-    Allows accepting uniXXXX format.
-
- test/shaping/hb_test_tools.py | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-commit 39851ce84efd30f6d0570324ff8f3808a01b813b
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Apr 21 19:23:27 2015 -0700
-
-    [coretext] Oops; fix issue number for previous commit
-
- src/hb-coretext.cc | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-commit 24f17afeafd40ff77177ed42c9007a0f34fcbb78
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Apr 21 19:21:32 2015 -0700
-
-    [coretext] Fix positioning with trailing whitespace
-
-    Fixes https://code.google.com/p/chromium/issues/detail?id=476913
-
- src/hb-coretext.cc | 11 +++++++++++
- 1 file changed, 11 insertions(+)
-
-commit dba482fc4458776ffebdeb2d34b970b4223fa8fd
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Fri Apr 17 13:08:08 2015 -0700
-
-    [ot-font] Accept MS Symbol cmap if nothing else found
-
- src/hb-ot-font.cc | 1 +
- 1 file changed, 1 insertion(+)
-
-commit 3029e8b59d1667dc6a53355be89a2b55d7089b88
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Apr 14 13:32:22 2015 -0700
-
-    Revert "Add MSVC pragma for UTF-8 source code"
-
-    This reverts commit 89cbd4d9533011fb5487caa99a0cd58923e7cf59.
-
-    See discussion:
-    https://bugzilla.gnome.org/show_bug.cgi?id=747772
-
- src/hb-private.hh | 1 -
- 1 file changed, 1 deletion(-)
-
-commit 820505a186ff60e4bae9d717fe4d7ab2390e6fef
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Mon Apr 13 23:51:45 2015 -0700
-
-    Whitespace
-
- util/options.cc | 18 +++++++++++-------
- 1 file changed, 11 insertions(+), 7 deletions(-)
-
-commit 76d57331117be8e0c2d4a2aee8341969b62b6888
-Merge: 89cbd4d 9ee176e
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Mon Apr 13 23:40:35 2015 -0700
-
-    Merge pull request #86 from cpfair/hb-shape-output-help-improvement
-
-    Improve hb-shape/hb-view's help text w.r.t. output options
-
-commit 89cbd4d9533011fb5487caa99a0cd58923e7cf59
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Mon Apr 13 12:27:08 2015 -0700
-
-    Add MSVC pragma for UTF-8 source code
-
-    Not sure we have any right now; motivated by this:
-    https://bugzilla.gnome.org/show_bug.cgi?id=747772
-
- src/hb-private.hh | 1 +
- 1 file changed, 1 insertion(+)
-
-commit 713f99ff6138b4149d9fd382f9af3ace01ee0da5
-Merge: 1086f21 22524a5
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Fri Apr 10 14:34:05 2015 -0700
-
-    Merge pull request #99 from khaledhosny/introspection-fixes2
-
-    More ntrospection fixes
-
-commit 22524a514f6609a2bc009b6035f6b5b932c719c7
-Author: Khaled Hosny <khaledhosny@eglug.org>
-Date:  Fri Apr 10 18:14:45 2015 +0200
-
-    [bindings] Fix hb_buffer_get_segment_properties
-
-    Annotate the output parameter.
-
- src/hb-buffer.cc | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-commit 1086f21e546e2435d9da6024fd6afa7a36ba3707
-Merge: 125cb08 fe97b65
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Fri Apr 10 12:21:04 2015 -0700
-
-    Merge branch 'hb-fc'
-
-commit 125cb08345a7f27e565329d37093b1a60a41a403
-Merge: e8fd839 855a5d7
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Fri Apr 10 12:19:57 2015 -0700
-
-    Merge pull request #98 from KonstantinRitt/WEC2013
-
-    Fix build on WEC2013
-
-commit 04f89e8f7dfdb882e8c98afb613cba3f1d02ed7d
-Author: Khaled Hosny <khaledhosny@eglug.org>
-Date:  Fri Apr 10 17:49:01 2015 +0200
-
-    [bindings] Fix ownership of returned hb_language_t
-
-    It should not be freed by the caller.
-
- src/hb-buffer.cc | 2 +-
- src/hb-common.cc | 2 +-
- 2 files changed, 2 insertions(+), 2 deletions(-)
-
-commit 855a5d7cb8f585bf66dd18cb480b8c3feef62480
-Author: Konstantin Ritt <ritt.ks@gmail.com>
-Date:  Fri Apr 10 17:18:01 2015 +0400
-
-    Fix build on WEC2013
-
-    Based on patch from Björn Breitmeyer
-
- src/hb-private.hh | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
-
-commit fe97b65a54a416229e28b1c931e5e01ca19f31d3
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Aug 6 16:49:51 2014 -0400
-
-    [utils] Add hb-fc-list
-
-    This is a tool that lists all fonts that can render a given string.
-    It uses hb_shape() to do so, and as such is aware of HarfBuzz's
-    normalizer.
-
- configure.ac     |  19 +++++
- util/Makefile.am  |  15 ++++
- util/hb-fc-list.c | 222
- ++++++++++++++++++++++++++++++++++++++++++++++++++++++
- util/hb-fc.cc    | 149 ++++++++++++++++++++++++++++++++++++
- util/hb-fc.h     |  46 +++++++++++
- 5 files changed, 451 insertions(+)
-
-commit eb0bf3ae6688b7e98a706df2ad2714c071d77e22
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Aug 6 15:36:41 2014 -0400
-
-    Relax inert checks
-
-    Previously, when creating an object from inert inputs (eg:
-    "hb_font_create(hb_face_get_empty())") we returned the inert
-    empty object.  This is not helpful as there are legitimate
-    usecases to do that.
-
-    We now never return the inert object unless allocation failed.
-
-    Tests are revised to reflect.
-
- src/hb-face.cc                |  4 ++--
- src/hb-font.cc                |  4 +---
- src/hb-shape-plan.cc  |  7 +++++--
- test/api/test-font.c  | 10 +++++-----
- test/api/test-object.c | 34 +++++++++++++++++-----------------
- 5 files changed, 30 insertions(+), 29 deletions(-)
-
-commit e8fd83932a75cfbaa4638a757868915ebfac3c1f
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Apr 9 15:52:26 2015 -0700
-
-    [util/hb-view] Fix rendering with all combinations of negative scales
-
- util/view-cairo.cc | 90
- ++++++++++++++++++++++++++++--------------------------
- util/view-cairo.hh |  2 --
- 2 files changed, 47 insertions(+), 45 deletions(-)
-
-commit 69d5af93169ea2d87276b65d43c889a359d5d81e
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Apr 9 15:17:16 2015 -0700
-
-    [util] Minor
-
- util/view-cairo.cc | 6 ++----
- 1 file changed, 2 insertions(+), 4 deletions(-)
-
-commit a664810e38b479e05ea32cac263cb5730629f9d8
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Apr 9 15:04:42 2015 -0700
-
-    [util] Accept comma as well as space when separating components
-    of args
-
-    Applies to --font-size and --margin.
-
-    Hopefully the scanf usage here doesn't have compatibility issues
-    (star being counted in the return value, etc).
-
- util/options.cc | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-commit 9c974360febcfd67247107352425fe8590d9d452
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Apr 9 12:04:14 2015 -0700
-
-    Minor rename
-
- src/hb-atomic-private.hh | 10 +++++-----
- 1 file changed, 5 insertions(+), 5 deletions(-)
-
-commit f3b170bdd970e31e9dbfed94c07c3cda41269aed
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Apr 8 16:26:24 2015 -0700
-
-    Minor
-
- src/hb-common.cc | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-commit 2958f2c147fc6327175b51a4eaca694263e34ac9
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Apr 8 16:26:16 2015 -0700
-
-    Fixup
-
- src/hb-atomic-private.hh | 1 +
- 1 file changed, 1 insertion(+)
-
-commit b931e0b0ceeab0e4819d9c4b838c1a1eb87b52e4
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Apr 8 14:39:00 2015 -0700
-
-    Fix warnings
-
-    Part of https://github.com/behdad/harfbuzz/pull/68
-
- src/hb-ot-font.cc                   |  4 ++--
- src/hb-ot-layout-gsubgpos-private.hh | 22 +++++++++++-----------
- 2 files changed, 13 insertions(+), 13 deletions(-)
-
-commit cdcdfe61b97a0a48ccf834b6d924d187da9609be
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Apr 8 13:25:04 2015 -0700
-
-    Err, instead of warn, if mutex / atomic / unicode funcs are missing
-
-    Hopefully this results in fewer badly built HarfBuzz integrations.
-
- src/hb-unicode.cc |  8 ++++----
- src/hb-warning.cc | 22 ++++++++--------------
- 2 files changed, 12 insertions(+), 18 deletions(-)
-
-commit fc3c59a1d746c5280f6216a94fdc1be3e826051f
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Apr 8 13:03:27 2015 -0700
-
-    Fix unused var warnings
-
- src/hb-ot-layout-gpos-table.hh | 1 -
- src/hb-ot-layout-gsub-table.hh | 1 -
- 2 files changed, 2 deletions(-)
-
-commit 3f174cd020b7762fae96f20ce14fc9e9abec748f
-Author: Konstantin Ritt <ritt.ks@gmail.com>
-Date:  Sat Mar 28 00:49:33 2015 +0400
-
-    Minor refactoring to the atomics implementation
-
-    s/atomic_int/atomic_int_impl/ and s/atomic_ptr/atomic_ptr_impl/
-    to bring it in par with hb_mutex_impl_t, then re-introduce
-    hb_atomic_int_t as a wrapper around hb_atomic_int_impl_t.
-
-    In hb_reference_count_t, make it clear the non-atomic get and set
-    are intentional due to nature of the cases they are used in
-    (comparison to -1 and the debug output/tracing).
-
- src/hb-atomic-private.hh | 86
- +++++++++++++++++++++++++++++++-----------------
- src/hb-mutex-private.hh  |  4 ++-
- src/hb-object-private.hh | 21 ++++++------
- 3 files changed, 69 insertions(+), 42 deletions(-)
-
-commit 24930d544ee9e247e4cf6a5f6d5207ba9d7a3ddc
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Apr 8 12:52:06 2015 -0700
-
-    Minor
-
- src/hb-mutex-private.hh | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
-commit 45a8b46f478d4aa63ae5df74b6bb28ebdd7521ac
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Apr 8 12:49:38 2015 -0700
-
-    Allow implementing atomic and mutex ops in config
-
-    Motivated by
-    https://github.com/behdad/harfbuzz/pull/92
-
- src/hb-atomic-private.hh | 6 +++++-
- src/hb-mutex-private.hh  | 7 ++++++-
- 2 files changed, 11 insertions(+), 2 deletions(-)
-
-commit 3fe4e92bc5ff09d84c6763cedf06ce80d15a5fb2
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Apr 8 12:49:23 2015 -0700
-
-    Minor
-
- src/hb-set-private.hh | 1 -
- 1 file changed, 1 deletion(-)
-
-commit 9868749abe468130d89c80a2501847a83acb4579
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Mon Apr 6 14:51:31 2015 -0700
-
-    [test] Use /usr/bin/env python instead of /usr/bin/python
-
-    Bug 76494 - #!/usr/bin/python in testsuite
-
-    https://bugs.freedesktop.org/show_bug.cgi?id=76494
-
- test/shaping/hb-diff                | 2 +-
- test/shaping/hb-diff-colorize       | 2 +-
- test/shaping/hb-diff-filter-failures | 2 +-
- test/shaping/hb-diff-ngrams         | 2 +-
- test/shaping/hb-diff-stat           | 2 +-
- test/shaping/hb-manifest-read       | 2 +-
- test/shaping/hb-manifest-update      | 2 +-
- test/shaping/hb-unicode-decode       | 2 +-
- test/shaping/hb-unicode-encode       | 2 +-
- test/shaping/hb-unicode-prettyname   | 2 +-
- test/shaping/hb_test_tools.py       | 2 +-
- 11 files changed, 11 insertions(+), 11 deletions(-)
-
-commit bfcddd32a674dd19fca1bf521e95466a0eec5179
-Merge: ce01ad7 363ceec
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Mon Apr 6 14:41:32 2015 -0700
-
-    Merge pull request #93 from ebraminio/archpy3
-
-    Make hb_test_tools.py compatible with python 3
-
-commit ce01ad7c2f5a259030f4dbec746f85522aa9c3f9
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Apr 1 11:05:59 2015 -0700
-
-    MSVC 2015 supports snprintf and not _snprintf
-
- src/hb-private.hh | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-commit 560718862f0bd994b62361652d6fd558c4182e2a
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Apr 1 11:04:33 2015 -0700
-
-    Move WinCE define to better place
-
- src/hb-private.hh | 3 +--
- 1 file changed, 1 insertion(+), 2 deletions(-)
-
-commit 363ceec3fb0c9566db5a59da31e508f69dea1e92
-Author: Ebrahim Byagowi <ebrahim@gnu.org>
-Date:  Mon Mar 30 03:27:14 2015 +0430
-
-    Make hb_test_tools.py compatible with python 3
-
-    On ArchLinux, /usr/bin/python is linked to python 3 so
-    HarfBuzz `make check` is broken there.
-
-    This makes hb_test_tools.py compatible with python 3 while
-    no breaking it on python 2.
-
- test/shaping/hb_test_tools.py | 44
- ++++++++++++++++++++++++-------------------
- 1 file changed, 25 insertions(+), 19 deletions(-)
-
-commit aee685086c8fde6f6c4590e483a177c19f222540
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Mar 26 14:13:53 2015 -0400
-
-    Fix VC++ /analyze warnings
-
-    out\debug\hb-buffer-deserialize-text.rl(47) : warning C6001: Using
-    uninitialized memory 'pos'.
-
- src/hb-buffer-deserialize-text.rl | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-commit 8886ab430ca68539cb318e175647e9f6973718b0
-Merge: e3671b8 a394bb6
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Sun Mar 22 16:18:57 2015 -0400
-
-    Merge pull request #90 from khaledhosny/introspection-fixes
-
-    [bindings] Fix *_from_string functions
-
-commit a394bb66707184c995fe2d08c80e98220e6ec0b0
-Author: Khaled Hosny <khaledhosny@eglug.org>
-Date:  Sun Mar 22 20:29:10 2015 +0200
-
-    [bindings] Fix *_from_string functions
-
-    Without the element-type they will be getting garbage, at least with
-    Python.
-
- src/hb-common.cc | 8 ++++----
- src/hb-font.cc   | 2 +-
- src/hb-shape.cc  | 2 +-
- 3 files changed, 6 insertions(+), 6 deletions(-)
-
-commit e3671b8f8bb339e8a563a9da9cd5069073200fec
-Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Fri Mar 20 18:03:02 2015 -0400
-
-    0.9.40
-
- NEWS        | 8 ++++++++
- configure.ac | 2 +-
- 2 files changed, 9 insertions(+), 1 deletion(-)
-
 commit 9e401f6890f2bea1d11914bca436c2230f8d0f1b
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Fri Mar 20 16:08:38 2015 -0400
+Date:   Fri Mar 20 16:08:38 2015 -0400
 
     Fix reverse_range() for empty range
 
@@ -7231,7 +13,7 @@ Date:       Fri Mar 20 16:08:38 2015 -0400
 
 commit 7481bd49d56d4e814ab1f85fc2df8bf934d520f4
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Mar 4 15:47:25 2015 -0800
+Date:   Wed Mar 4 15:47:25 2015 -0800
 
     Fix previous commit
 
@@ -7242,7 +24,7 @@ Date:       Wed Mar 4 15:47:25 2015 -0800
 
 commit 6763e21afb77b250ad4416ff921d46c63ea12443
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Mar 4 15:43:05 2015 -0800
+Date:   Wed Mar 4 15:43:05 2015 -0800
 
     Accept glibtoolize as libtoolize
 
@@ -7255,17 +37,17 @@ Date:     Wed Mar 4 15:43:05 2015 -0800
 
 commit 02a04e6afb1a76894f3723a467716607970d95d3
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Mar 4 12:32:03 2015 -0800
+Date:   Wed Mar 4 12:32:03 2015 -0800
 
     0.9.39
 
- NEWS        | 10 ++++++++++
+ NEWS         | 10 ++++++++++
  configure.ac |  2 +-
  2 files changed, 11 insertions(+), 1 deletion(-)
 
 commit 98e3ea8e34c798ce003e946c9a150bb41be9d09b
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Mar 4 12:03:39 2015 -0800
+Date:   Wed Mar 4 12:03:39 2015 -0800
 
     Fix hb-uniscribe build
 
@@ -7274,7 +56,7 @@ Date:       Wed Mar 4 12:03:39 2015 -0800
 
 commit 8ac345e5c0ed0aad6547592ea0839aabfb4ba980
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Mon Mar 2 16:06:55 2015 -0800
+Date:   Mon Mar 2 16:06:55 2015 -0800
 
     Fix reverse_range() to only reverse alt array if positions are used
 
@@ -7287,7 +69,7 @@ Date:       Mon Mar 2 16:06:55 2015 -0800
 
 commit 1e03d7ac83f3e17aafed1e37390d9ff8394e36da
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Feb 26 13:58:32 2015 -0800
+Date:   Thu Feb 26 13:58:32 2015 -0800
 
     Better error message if libtool is not installed
 
@@ -7298,7 +80,7 @@ Date:       Thu Feb 26 13:58:32 2015 -0800
 
 commit 6c918e2997fb82e89485f2b50bee2bf4fcd70592
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Feb 26 13:55:34 2015 -0800
+Date:   Thu Feb 26 13:55:34 2015 -0800
 
     Clean up gtk-doc.make
 
@@ -7307,7 +89,7 @@ Date:       Thu Feb 26 13:55:34 2015 -0800
 
 commit 5ec5875acb12cf07447c9ebfb03212601368dfc4
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Feb 26 13:53:05 2015 -0800
+Date:   Thu Feb 26 13:53:05 2015 -0800
 
     Install git.mk in docs/
 
@@ -7316,7 +98,7 @@ Date:       Thu Feb 26 13:53:05 2015 -0800
 
 commit d146678d103425b3da7ef393bc6d66f6ba4c5593
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Feb 26 13:52:50 2015 -0800
+Date:   Thu Feb 26 13:52:50 2015 -0800
 
     Update git.mk from upstream
 
@@ -7325,7 +107,7 @@ Date:      Thu Feb 26 13:52:50 2015 -0800
 
 commit 5f541f8f7be82f29b77b481827deb212e12d53e4
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Sat Feb 21 16:51:17 2015 +0300
+Date:   Sat Feb 21 16:51:17 2015 +0300
 
     Minor refactoring
 
@@ -7334,7 +116,7 @@ Date:      Sat Feb 21 16:51:17 2015 +0300
 
 commit ef79bdf73bbfde1bfaa222834809d105ab7755b3
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Sat Feb 21 16:49:15 2015 +0300
+Date:   Sat Feb 21 16:49:15 2015 +0300
 
     Minor
 
@@ -7343,7 +125,7 @@ Date:      Sat Feb 21 16:49:15 2015 +0300
 
 commit 68e04afbb1e1073c47474f7a4d6d2cacf7057f6f
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Sat Feb 21 16:30:28 2015 +0300
+Date:   Sat Feb 21 16:30:28 2015 +0300
 
     Typo
 
@@ -7352,7 +134,7 @@ Date:      Sat Feb 21 16:30:28 2015 +0300
 
 commit 55553699b38d6481fbfacd0a32fc266e55553b34
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Sat Feb 21 16:29:08 2015 +0300
+Date:   Sat Feb 21 16:29:08 2015 +0300
 
     Minor
 
@@ -7361,7 +143,7 @@ Date:      Sat Feb 21 16:29:08 2015 +0300
 
 commit 5175300fbaf4ff19b7d38c14c86331bb614b0390
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Sat Feb 21 12:50:01 2015 +0300
+Date:   Sat Feb 21 12:50:01 2015 +0300
 
     [layout] Fix comparison of GlyphID and hb_codepoint_t
 
@@ -7376,7 +158,7 @@ Date:      Sat Feb 21 12:50:01 2015 +0300
 
 commit 7cce809cb11e0ce65dbdab899779ece3dc337763
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Sat Feb 21 12:41:08 2015 +0300
+Date:   Sat Feb 21 12:41:08 2015 +0300
 
     Remove unused (and wrong as of a few commits ago) cmp() function
 
@@ -7385,7 +167,7 @@ Date:      Sat Feb 21 12:41:08 2015 +0300
 
 commit 8e3d4bae033bdec649676da26cfc3eb7610832a8
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Sat Feb 21 12:31:59 2015 +0300
+Date:   Sat Feb 21 12:31:59 2015 +0300
 
     Minor
 
@@ -7394,7 +176,7 @@ Date:      Sat Feb 21 12:31:59 2015 +0300
 
 commit f47cf1f12dd1fa3cd3aa84502139caca9d469af8
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Sat Feb 21 11:45:22 2015 +0300
+Date:   Sat Feb 21 11:45:22 2015 +0300
 
     Minor
 
@@ -7403,7 +185,7 @@ Date:      Sat Feb 21 11:45:22 2015 +0300
 
 commit 640b66c6348653bfd7cf88ea9caa2133c0eb949f
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Feb 19 17:30:05 2015 +0300
+Date:   Thu Feb 19 17:30:05 2015 +0300
 
     [layout] If lookup has only one subtable, move the forward loop down
     to subtable
@@ -7416,7 +198,7 @@ Date:      Thu Feb 19 17:30:05 2015 +0300
 
 commit e2f50f2a7ebf9882ea89dc3f0c740e7fce964e37
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Feb 19 17:15:05 2015 +0300
+Date:   Thu Feb 19 17:15:05 2015 +0300
 
     [layout] Add apply_forward / apply_backward
 
@@ -7426,7 +208,7 @@ Date:      Thu Feb 19 17:15:05 2015 +0300
 
 commit 1d4a328472f094c0d75a062f6e176c6b1875cfdc
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Feb 19 11:33:30 2015 +0300
+Date:   Thu Feb 19 11:33:30 2015 +0300
 
     [layout] Remove unneeded return value from apply()
 
@@ -7435,7 +217,7 @@ Date:      Thu Feb 19 11:33:30 2015 +0300
 
 commit bbdd6fd21cc2e079defff7cb17c3eb8eff3f9e09
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Feb 19 17:03:02 2015 +0300
+Date:   Thu Feb 19 17:03:02 2015 +0300
 
     Minor simpilfy BEInt
 
@@ -7444,7 +226,7 @@ Date:      Thu Feb 19 17:03:02 2015 +0300
 
 commit 88a399acdc0fcb060803da0e7db56de2866981e3
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Feb 19 16:57:12 2015 +0300
+Date:   Thu Feb 19 16:57:12 2015 +0300
 
     Optimize IntType comparison to avoid branches for 16bit numbers
 
@@ -7453,7 +235,7 @@ Date:      Thu Feb 19 16:57:12 2015 +0300
 
 commit 37de2d533126245774417234e3536fcfb24f3a6b
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Feb 19 16:55:51 2015 +0300
+Date:   Thu Feb 19 16:55:51 2015 +0300
 
     Minor simplify IntType
 
@@ -7462,18 +244,18 @@ Date:    Thu Feb 19 16:55:51 2015 +0300
 
 commit bd047d3b7f04d551c0a26bc0ce9b9d61481e34e1
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Feb 19 10:47:18 2015 +0300
+Date:   Thu Feb 19 10:47:18 2015 +0300
 
     [layout] Minor
 
  src/hb-ot-layout-gpos-table.hh | 6 ++++++
  src/hb-ot-layout-gsub-table.hh | 6 ++++++
- src/hb-ot-layout.cc           | 4 ++--
+ src/hb-ot-layout.cc            | 4 ++--
  3 files changed, 14 insertions(+), 2 deletions(-)
 
 commit b9d3f60520c022dc952e65a66eb138d1f7cae2e1
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Feb 19 10:42:41 2015 +0300
+Date:   Thu Feb 19 10:42:41 2015 +0300
 
     [layout] Minor
 
@@ -7482,7 +264,7 @@ Date:      Thu Feb 19 10:42:41 2015 +0300
 
 commit 1a2322134a5d7bba990da28baf893b35879a5a7a
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Feb 19 10:40:23 2015 +0300
+Date:   Thu Feb 19 10:40:23 2015 +0300
 
     [layout] Don't check glyph props against lookup flags when recursing
 
@@ -7495,14 +277,14 @@ Date:    Thu Feb 19 10:40:23 2015 +0300
 
 commit 095a1257cc3cc56b044b4cd842a92f0d0f933a50
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Feb 19 10:29:41 2015 +0300
+Date:   Thu Feb 19 10:29:41 2015 +0300
 
     [layout] Port sanitize() to use dispatch()
 
     Needed some rework of Extension table.  Hopefully I got it right, and
     the new template usage doesn't break any compilers...
 
- src/hb-open-type-private.hh         |  5 ++-
+ src/hb-open-type-private.hh          |  5 ++-
  src/hb-ot-layout-gpos-table.hh       | 82
  +----------------------------------
  src/hb-ot-layout-gsub-table.hh       | 72 ++-----------------------------
@@ -7512,7 +294,7 @@ Date:      Thu Feb 19 10:29:41 2015 +0300
 
 commit 758fb20630f84c3d373cda37974b88f16c02995e
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Feb 18 13:45:03 2015 +0300
+Date:   Wed Feb 18 13:45:03 2015 +0300
 
     Remove unused macro
 
@@ -7521,7 +303,7 @@ Date:      Wed Feb 18 13:45:03 2015 +0300
 
 commit 40c58923cbf689c465f9b65334c455a9b7f71ab0
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Feb 18 13:18:46 2015 +0300
+Date:   Wed Feb 18 13:18:46 2015 +0300
 
     [layout] Refactor Lookup::dispatch()
 
@@ -7533,7 +315,7 @@ Date:      Wed Feb 18 13:18:46 2015 +0300
 
 commit 70366f5d19df2e654f0933474fecf1aa16e27812
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Feb 18 13:09:54 2015 +0300
+Date:   Wed Feb 18 13:09:54 2015 +0300
 
     [layout] Refactor get_subtable()
 
@@ -7544,7 +326,7 @@ Date:      Wed Feb 18 13:09:54 2015 +0300
 
 commit f72f326aea6d1e93f63040730f7aecd401676c1c
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Feb 17 19:18:07 2015 +0300
+Date:   Tue Feb 17 19:18:07 2015 +0300
 
     Minor
 
@@ -7553,7 +335,7 @@ Date:      Tue Feb 17 19:18:07 2015 +0300
 
 commit 8e36ccfd4f076888076ca176c055c18104af03b6
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Feb 17 19:15:34 2015 +0300
+Date:   Tue Feb 17 19:15:34 2015 +0300
 
     [layout] Use dispatch() for add_coverage()
 
@@ -7564,7 +346,7 @@ Date:      Tue Feb 17 19:15:34 2015 +0300
 
 commit 50b8dc79daffc7ef671dd5eedfea47f8d5e946f4
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Feb 17 18:14:17 2015 +0300
+Date:   Tue Feb 17 18:14:17 2015 +0300
 
     [layout] Add may_dispatch()
 
@@ -7577,7 +359,7 @@ Date:      Tue Feb 17 18:14:17 2015 +0300
 
 commit de2118ed7a998a1df9b28fd1be96b4af89ed82c3
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Feb 17 17:27:44 2015 +0300
+Date:   Tue Feb 17 17:27:44 2015 +0300
 
     Make sanitize() a const method
 
@@ -7586,12 +368,12 @@ Date:    Tue Feb 17 17:27:44 2015 +0300
     place, after making sure it's safe to do so.  So, do a const_cast<> in
     that one place...
 
- src/hb-open-file-private.hh         |  15 +++--
- src/hb-open-type-private.hh         |  51 +++++++++++------
- src/hb-ot-cmap-table.hh             |  35 ++++++++----
- src/hb-ot-head-table.hh             |   6 +-
- src/hb-ot-hhea-table.hh             |   3 +-
- src/hb-ot-hmtx-table.hh             |   3 +-
+ src/hb-open-file-private.hh          |  15 +++--
+ src/hb-open-type-private.hh          |  51 +++++++++++------
+ src/hb-ot-cmap-table.hh              |  35 ++++++++----
+ src/hb-ot-head-table.hh              |   6 +-
+ src/hb-ot-hhea-table.hh              |   3 +-
+ src/hb-ot-hmtx-table.hh              |   3 +-
  src/hb-ot-layout-common-private.hh   |  58 ++++++++++++-------
  src/hb-ot-layout-gdef-table.hh       |  30 ++++++----
  src/hb-ot-layout-gpos-table.hh       | 108
@@ -7599,13 +381,13 @@ Date:    Tue Feb 17 17:27:44 2015 +0300
  src/hb-ot-layout-gsub-table.hh       |  58 ++++++++++++-------
  src/hb-ot-layout-gsubgpos-private.hh |  65 +++++++++++++--------
  src/hb-ot-layout-jstf-table.hh       |  12 ++--
- src/hb-ot-maxp-table.hh             |   6 +-
- src/hb-ot-name-table.hh             |   6 +-
+ src/hb-ot-maxp-table.hh              |   6 +-
+ src/hb-ot-name-table.hh              |   6 +-
  14 files changed, 296 insertions(+), 160 deletions(-)
 
 commit 6759ed95a3bec2874826376b68ebff19ba277ef2
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Feb 17 16:05:30 2015 +0300
+Date:   Tue Feb 17 16:05:30 2015 +0300
 
     Minor
 
@@ -7615,7 +397,7 @@ Date:      Tue Feb 17 16:05:30 2015 +0300
 
 commit 6b599dac1f814a3c900300241d4c492a8f8b66d2
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Tue Feb 17 16:04:07 2015 +0300
+Date:   Tue Feb 17 16:04:07 2015 +0300
 
     Remove unnecessary check in sanitize
 
@@ -7625,7 +407,7 @@ Date:      Tue Feb 17 16:04:07 2015 +0300
 
 commit 365576d246949f9d587e90cf0539dc0381e4d0a3
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Jan 29 13:59:42 2015 +0100
+Date:   Thu Jan 29 13:59:42 2015 +0100
 
     [layout] Allocate iters in the context
 
@@ -7635,23 +417,23 @@ Date:    Thu Jan 29 13:59:42 2015 +0100
 
  src/hb-ot-layout-gpos-table.hh       | 18 ++++++------------
  src/hb-ot-layout-gsubgpos-private.hh | 21 +++++++++++++--------
- src/hb-ot-shape-fallback.cc         |  2 +-
+ src/hb-ot-shape-fallback.cc          |  2 +-
  3 files changed, 20 insertions(+), 21 deletions(-)
 
 commit 514564f5444b8ad2f210b1e3d7d66378f7275317
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Jan 29 13:48:48 2015 +0100
+Date:   Thu Jan 29 13:48:48 2015 +0100
 
     [layout] Move skippy_iter setup from constructor into init()
 
  src/hb-ot-layout-gpos-table.hh       | 18 ++++++++++++------
  src/hb-ot-layout-gsubgpos-private.hh | 28 +++++++++++++++-------------
- src/hb-ot-shape-fallback.cc         |  3 ++-
+ src/hb-ot-shape-fallback.cc          |  3 ++-
  3 files changed, 29 insertions(+), 20 deletions(-)
 
 commit b051be542a8945ec14b0192bbc285f3e1a78c8f1
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Jan 29 13:40:39 2015 +0100
+Date:   Thu Jan 29 13:40:39 2015 +0100
 
     [lookup] Add skippy_iter.reset()
 
@@ -7659,12 +441,12 @@ Date:    Thu Jan 29 13:40:39 2015 +0100
 
  src/hb-ot-layout-gpos-table.hh       | 18 ++++++++++++------
  src/hb-ot-layout-gsubgpos-private.hh | 27 ++++++++++++++++++---------
- src/hb-ot-shape-fallback.cc         |  3 ++-
+ src/hb-ot-shape-fallback.cc          |  3 ++-
  3 files changed, 32 insertions(+), 16 deletions(-)
 
 commit 2cecc38c7cf49b2cf697efa7e974ceee7055f2c5
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Jan 29 13:32:05 2015 +0100
+Date:   Thu Jan 29 13:32:05 2015 +0100
 
     [layout] Shuffle code around
 
@@ -7674,19 +456,19 @@ Date:    Thu Jan 29 13:32:05 2015 +0100
 
 commit 696266981df5ef6c62ad0115133dad1d6c1d9acc
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Jan 29 13:08:41 2015 +0100
+Date:   Thu Jan 29 13:08:41 2015 +0100
 
     [layout] Merge forward and backward iterators
 
  src/hb-ot-layout-gpos-table.hh       | 12 +++---
  src/hb-ot-layout-gsubgpos-private.hh | 71
  ++++++++----------------------------
- src/hb-ot-shape-fallback.cc         |  2 +-
+ src/hb-ot-shape-fallback.cc          |  2 +-
  3 files changed, 23 insertions(+), 62 deletions(-)
 
 commit 1f038eec3c0dd6331036f795614fe1ddcbf613b0
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Jan 29 13:05:25 2015 +0100
+Date:   Thu Jan 29 13:05:25 2015 +0100
 
     [layout] Fix backward reject()
 
@@ -7698,7 +480,7 @@ Date:      Thu Jan 29 13:05:25 2015 +0100
 
 commit 37d13acd8d414a4b53fac0152addfadecf755cd4
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Jan 29 11:38:01 2015 +0100
+Date:   Thu Jan 29 11:38:01 2015 +0100
 
     [layout] Remove some unnecessary checks in skippy
 
@@ -7708,7 +490,7 @@ Date:      Thu Jan 29 11:38:01 2015 +0100
 
 commit baa14e18148d3f5493f78b4fe9e0c835a01f50f7
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Thu Jan 29 11:08:43 2015 +0100
+Date:   Thu Jan 29 11:08:43 2015 +0100
 
     [lookup] Don't initialize skippy if coverage match fails
 
@@ -7733,7 +515,7 @@ Date:      Thu Jan 29 11:08:43 2015 +0100
 
 commit 7788993bc19bf122f1e143ab64cc1da2ed1865a3
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Jan 28 23:01:12 2015 -0800
+Date:   Wed Jan 28 23:01:12 2015 -0800
 
     [layout] Use setter method to set c->lookup_props
 
@@ -7743,7 +525,7 @@ Date:      Wed Jan 28 23:01:12 2015 -0800
 
 commit f4ee48fd7b312550faf9b0be4cd1b2f2849dd08d
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Jan 28 22:53:54 2015 -0800
+Date:   Wed Jan 28 22:53:54 2015 -0800
 
     [layout] Remove unused wrapper method
 
@@ -7752,7 +534,7 @@ Date:      Wed Jan 28 22:53:54 2015 -0800
 
 commit 7b7129c7a997def599fb4d2ba05fda40d27aed20
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Jan 28 21:46:07 2015 -0800
+Date:   Wed Jan 28 21:46:07 2015 -0800
 
     Add hb_frozen_set_t
 
@@ -7767,18 +549,18 @@ Date:    Wed Jan 28 21:46:07 2015 -0800
 
 commit 241eac9559465fa79f396570af4e87f455b7e9d5
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Jan 28 20:55:42 2015 -0800
+Date:   Wed Jan 28 20:55:42 2015 -0800
 
     Hide internals of lookup accelerators
 
  src/hb-ot-layout-gsub-table.hh | 5 +++--
- src/hb-ot-layout-private.hh   | 5 +++++
- src/hb-ot-layout.cc           | 6 +++---
+ src/hb-ot-layout-private.hh    | 5 +++++
+ src/hb-ot-layout.cc            | 6 +++---
  3 files changed, 11 insertions(+), 5 deletions(-)
 
 commit e2d4e8480d85436a3acad8145acac345ed593f5a
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Jan 28 20:29:48 2015 -0800
+Date:   Wed Jan 28 20:29:48 2015 -0800
 
     [util] Add convenience "make lib" target
 
@@ -7788,53 +570,15 @@ Date:    Wed Jan 28 20:29:48 2015 -0800
 commit faaae64bf28abdcdd15185374bc09a3809794118
 Merge: 7888a6b 9768e65
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Feb 25 15:34:34 2015 -0800
+Date:   Wed Feb 25 15:34:34 2015 -0800
 
     Merge pull request #85 from KonstantinRitt/define_inline
 
     Fix build with MSVC on CE
 
-commit 9ee176ee978e6668c4faf00028811ce70979122e
-Author: Collin Fair <cpf@cpfx.ca>
-Date:  Sat Feb 14 09:59:44 2015 -0500
-
-    Stop hb-shape docs leaking into hb-view
-
- util/options.cc | 15 ++++++++-------
- 1 file changed, 8 insertions(+), 7 deletions(-)
-
-commit 952b8dbdf61da9b4814e09ad3c1b9b76483bef5c
-Author: Collin Fair <cpf@cpfx.ca>
-Date:  Sat Feb 14 09:44:00 2015 -0500
-
-    'All' of the above, not 'each'
-
- util/options.cc | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-commit 9e867b64467c46eea5cc9b1d5a9404a1221bbbfc
-Author: Collin Fair <cpf@cpfx.ca>
-Date:  Sat Feb 14 09:32:04 2015 -0500
-
-    Remove reference to --help-output-content in --help-output (as
-    --help-output-format's options aren't available in hb-view)
-
- util/options.cc | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-commit 1d55ffeb66381889f11ebb9039ca4ec2ca5efbab
-Author: Collin Fair <cpf@cpfx.ca>
-Date:  Sat Feb 14 09:29:35 2015 -0500
-
-    Add serialization syntax documentation. Clarify naming and wording
-    in --help-output/--help-format
-
- util/options.cc | 30 ++++++++++++++++--------------
- 1 file changed, 16 insertions(+), 14 deletions(-)
-
 commit 9768e651be0561f07d6f38c3ed8bc5ee04882990
 Author: Konstantin Ritt <ritt.ks@gmail.com>
-Date:  Sat Feb 14 00:58:51 2015 +0400
+Date:   Sat Feb 14 00:58:51 2015 +0400
 
     Fix build with MSVC on CE
 
@@ -7864,7 +608,7 @@ Date:      Sat Feb 14 00:58:51 2015 +0400
 
 commit 7888a6b07a9922cedd3e0d235959058e0011357b
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Jan 28 12:40:40 2015 -0800
+Date:   Wed Jan 28 12:40:40 2015 -0800
 
     [ft] Handle negative scales with vertical writing
 
@@ -7873,7 +617,7 @@ Date:      Wed Jan 28 12:40:40 2015 -0800
 
 commit 982d94eaa2a377616f22f39427e5ed9f1ce43263
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Jan 28 10:51:33 2015 -0800
+Date:   Wed Jan 28 10:51:33 2015 -0800
 
     [coretext] Don't generate notdef glyph for default-ignorables
 
@@ -7886,7 +630,7 @@ Date:      Wed Jan 28 10:51:33 2015 -0800
 
 commit 6917a045fd8d16952cad75fda8b291b11e1d3564
 Author: Behdad Esfahbod <behdad@behdad.org>
-Date:  Wed Jan 28 10:43:32 2015 -0800
+Date:   Wed Jan 28 10:43:32 2015 -0800
 
     [coretext] Unbreak glyph positioning in presence of notdef runs
 
@@ -12411,29 +5155,29 @@ 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 ---
- .../script-tibetan => shaper-hangul/script-hangul}/MANIFEST           |
- 0
- .../script-tibetan => shaper-hangul/script-hangul}/misc/MANIFEST
- | 0
- .../{shaper-default => shaper-hangul}/script-hangul/misc/misc.txt
- | 0
- .../in-tree/{shaper-default => shaper-hebrew}/script-hebrew/MANIFEST
- | 0
- .../{shaper-default => shaper-hebrew}/script-hebrew/misc/MANIFEST
- | 0
- .../script-hebrew/misc/diacritics.txt                                 |
- 0
- .../script-hangul => shaper-tibetan/script-tibetan}/MANIFEST          |
- 0
- .../script-hangul => shaper-tibetan/script-tibetan}/misc/MANIFEST
- | 0
- .../{shaper-default => shaper-tibetan}/script-tibetan/misc/misc.txt
- | 0
11 files changed, 3 insertions(+), 3 deletions(-)
+ 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>
@@ -12604,18 +5348,19 @@ 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-tt-font.cc => hb-ot-font.h} | 56 ++------
- src/hb-ot-hhea-table.hh            |   2 +-
- src/hb-ot-hmtx-table.hh            |   2 +-
- src/hb-ot.h                        |   1 +
- util/Makefile.am                   |   4 +-
- util/options.cc                    |   4 +
- 10 files changed, 283 insertions(+), 53 deletions(-)
+ 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>
@@ -12797,13 +5542,13 @@ Date:  Mon Mar 10 14:57:55 2014 -0700
 
     Minor
 
- test/shaping/texts/in-tree/shaper-myanmar/script-myanmar/misc/MANIFEST
- | 1 -
- test/shaping/texts/in-tree/shaper-sea/script-tai-tham/misc/MANIFEST
| 1 +
- .../script-myanmar => shaper-sea/script-tai-tham}/misc/torture.txt
- | 0
3 files changed, 1 insertion(+), 1 deletion(-)
+ .../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>
@@ -17531,8 +10276,9 @@ Date:   Wed Mar 6 20:20:45 2013 -0500
 
     Move valgrind suppressions to the correct directory
 
- test/{ => api}/.valgrind-suppressions | 0
- 1 file changed, 0 insertions(+), 0 deletions(-)
+ test/.valgrind-suppressions    | 0
+ test/api/.valgrind-suppressions | 0
+ 2 files changed, 0 insertions(+), 0 deletions(-)
 
 commit a8ac1d33c731f6200ee472ab6c37a80b72770564
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -18013,25 +10759,37 @@ Date: Tue Feb 19 00:50:46 2013 -0500
 
     Moving files around
 
- test/shaping/texts/in-tree/MANIFEST                                    |
+ test/shaping/texts/in-tree/MANIFEST                                   |
  2 --
- test/shaping/texts/in-tree/shaper-default/MANIFEST                     |
+ 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 ++
- .../in-tree/{shaper-hangul => shaper-default}/script-hangul/MANIFEST
- | 0
- .../{shaper-hangul => shaper-default}/script-hangul/misc/MANIFEST
- | 0
- .../{shaper-hangul => shaper-default}/script-hangul/misc/misc.txt
- | 0
- .../in-tree/{script-default => shaper-default/script-tibetan}/MANIFEST
- | 0
- .../{script-default => shaper-default/script-tibetan}/misc/MANIFEST
- | 0
- .../{script-default => shaper-default/script-tibetan}/misc/misc.txt
- | 0
- test/shaping/texts/in-tree/shaper-hangul/MANIFEST                      |
+ 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 -
- 9 files changed, 2 insertions(+), 3 deletions(-)
+ 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>
@@ -18672,28 +11430,33 @@ Date: Tue Feb 12 12:14:10 2013 -0500
 
  src/Makefile.am                                   |  12 +-
  src/gen-indic-table.py                                    |   9 +-
- src/hb-ot-shape-complex-indic-private.hh          | 241 +------------
- ...table.hh => hb-ot-shape-complex-indic-table.cc} |  9 +-
- src/hb-ot-shape-complex-indic.cc                  | 239 ++++++++++++
+ 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
- +++++++++++++++++++++
+ 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 +
- .../script-cham}/MANIFEST                         |   0
- .../script-cham}/misc/MANIFEST                            |   0
+ .../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 +
- .../script-new-tai-lue/misc/misc.txt              |   0
+ .../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 +
- 22 files changed, 792 insertions(+), 263 deletions(-)
+ 26 files changed, 1661 insertions(+), 1132 deletions(-)
 
 commit fb960212063016656dfaba83f072c81d1efc3202
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -18703,23 +11466,29 @@ Date: Tue Feb 12 10:33:58 2013 -0500
 
  test/shaping/texts/in-tree/MANIFEST
  | 1 +
.../south-east-asian/script-thai => script-default}/MANIFEST
- | 0
.../south-asian/script-tibetan => script-default}/misc/MANIFEST
- | 0
.../south-asian/script-tibetan => script-default}/misc/misc.txt
- | 0
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
9 files changed, 1 insertion(+), 4 deletions(-)
12 files changed, 4 insertions(+), 7 deletions(-)
 
 commit 5676d5d52784e16068ae483103d59111a8081854
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -18842,25 +11611,23 @@ Date: Mon Feb 11 14:24:03 2013 -0500
 
     Shuffle test data around
 
- test/shaping/texts/in-tree/MANIFEST
- | 1 +
- test/shaping/texts/in-tree/shaper-indic/south-east-asian/MANIFEST
- | 1 -
- .../in-tree/shaper-indic/south-east-asian/script-thai/misc/MANIFEST
- | 1 -
- .../south-east-asian => shaper-myanmar}/script-myanmar/MANIFEST
- | 0
- .../south-east-asian => shaper-myanmar}/script-myanmar/misc/MANIFEST
- | 0
- .../south-east-asian => shaper-myanmar}/script-myanmar/misc/misc.txt
- | 0
- .../south-east-asian => shaper-myanmar}/script-myanmar/misc/utn11.txt
- | 0
- test/shaping/texts/in-tree/shaper-thai/script-thai/misc/MANIFEST
- | 1 +
- .../south-east-asian => shaper-thai}/script-thai/misc/misc.txt
- | 0
- 9 files changed, 2 insertions(+), 2 deletions(-)
+ 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>
@@ -19045,11 +11812,12 @@ 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-internal-symbols.sh                     | 34
- ----------------------
- ...{check-exported-symbols.sh => check-symbols.sh} | 16 ++++++++--
- 3 files changed, 14 insertions(+), 39 deletions(-)
+ 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>
@@ -20973,12 +13741,12 @@ Date: Wed Nov 14 15:51:54 2012 -0800
 
     Move Thai shaper into a separate file
 
- src/Makefile.am                                   |   3 +-
- ...plex-misc.cc => hb-ot-shape-complex-default.cc} | 114
- -----------------
- src/hb-ot-shape-complex-thai.cc                   | 141
+++++++++++++++++++++
3 files changed, 143 insertions(+), 115 deletions(-)
+ 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
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -23603,35 +16371,37 @@ Date: Fri Aug 10 09:06:30 2012 -0400
 
     [test] Move around
 
- test/shaping/texts/in-tree/shaper-arabic/script-arabic/MANIFEST        |
- 2 +-
- .../texts/in-tree/shaper-arabic/script-arabic/language-urdu/MANIFEST   |
- 1 +
- .../shaper-arabic/script-arabic/{ => language-urdu}/crulp/MANIFEST
- | 0
- .../script-arabic/{ => language-urdu}/crulp/ligatures/2grams.txt
- | 0
- .../script-arabic/{ => language-urdu}/crulp/ligatures/3grams.txt
- | 0
- .../script-arabic/{ => language-urdu}/crulp/ligatures/4grams.txt
- | 0
- .../script-arabic/{ => language-urdu}/crulp/ligatures/5grams.txt
- | 0
- .../script-arabic/{ => language-urdu}/crulp/ligatures/6grams.txt
- | 0
- .../script-arabic/{ => language-urdu}/crulp/ligatures/7grams.txt
- | 0
- .../script-arabic/{ => language-urdu}/crulp/ligatures/8grams.txt
- | 0
- .../script-arabic/{ => language-urdu}/crulp/ligatures/LICENSE
- | 0
- .../script-arabic/{ => language-urdu}/crulp/ligatures/MANIFEST
- | 0
- .../script-arabic/{ => language-urdu}/crulp/ligatures/README           |
- 0
- .../script-arabic/{ => language-urdu}/crulp/ligatures/SOURCES
- | 0
- 14 files changed, 2 insertions(+), 1 deletion(-)
+ .../in-tree/shaper-arabic/script-arabic/MANIFEST   |   2 +-
+ .../shaper-arabic/script-arabic/crulp/MANIFEST     |   1 -
+ .../script-arabic/crulp/ligatures/2grams.txt      |  601 --
+ .../script-arabic/crulp/ligatures/3grams.txt      | 3415 -----------
+ .../script-arabic/crulp/ligatures/4grams.txt      | 6316
+ --------------------
+ .../script-arabic/crulp/ligatures/5grams.txt      | 5029
+ ----------------
+ .../script-arabic/crulp/ligatures/6grams.txt      | 1542 -----
+ .../script-arabic/crulp/ligatures/7grams.txt      |  354 --
+ .../script-arabic/crulp/ligatures/8grams.txt      |   26 -
+ .../script-arabic/crulp/ligatures/LICENSE         |    3 -
+ .../script-arabic/crulp/ligatures/MANIFEST        |    7 -
+ .../script-arabic/crulp/ligatures/README          |   16 -
+ .../script-arabic/crulp/ligatures/SOURCES         |    4 -
+ .../script-arabic/language-urdu/MANIFEST          |    1 +
+ .../script-arabic/language-urdu/crulp/MANIFEST     |   1 +
+ .../language-urdu/crulp/ligatures/2grams.txt      |  601 ++
+ .../language-urdu/crulp/ligatures/3grams.txt      | 3415 +++++++++++
+ .../language-urdu/crulp/ligatures/4grams.txt      | 6316
+ ++++++++++++++++++++
+ .../language-urdu/crulp/ligatures/5grams.txt      | 5029
+ ++++++++++++++++
+ .../language-urdu/crulp/ligatures/6grams.txt      | 1542 +++++
+ .../language-urdu/crulp/ligatures/7grams.txt      |  354 ++
+ .../language-urdu/crulp/ligatures/8grams.txt      |   26 +
+ .../language-urdu/crulp/ligatures/LICENSE         |    3 +
+ .../language-urdu/crulp/ligatures/MANIFEST        |    7 +
+ .../language-urdu/crulp/ligatures/README          |   16 +
+ .../language-urdu/crulp/ligatures/SOURCES         |    4 +
+ 26 files changed, 17316 insertions(+), 17315 deletions(-)
 
 commit 7a484c601e0958533eb85a6902296733c39537fe
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -23906,15 +16676,15 @@ Date: Wed Aug 8 14:33:37 2012 -0400
 
     Minor renaming
 
- src/Makefile.am                                                  |
- 4 ++--
- ...sition-fallback-private.hh => hb-ot-shape-fallback-private.hh} |
- 8 ++++----
- src/{hb-ot-shape-position-fallback.cc => hb-ot-shape-fallback.cc} |
- 4 ++--
- src/hb-ot-shape.cc                                               |
4 ++--
4 files changed, 10 insertions(+), 10 deletions(-)
+ 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
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -25510,25 +18280,29 @@ Date: Thu Jul 26 17:34:25 2012 -0400
 
     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.cc                          |  62 ++++++-
- src/hb-font-private.hh                                    |  12 ++
- src/hb-font.cc                                            |  15 +-
- src/hb-old.cc                                     | 109 +++++++++---
- src/hb-ot-shape-private.hh                        |   8 -
- src/hb-ot-shape.cc                                |  60 ++++++-
- ...aphite2-private.hh => hb-shape-plan-private.hh} |  28 +++-
- src/hb-shape-plan.cc                              |  85 ++++++++++
- ...b-fallback-shape-private.hh => hb-shape-plan.h} |  39 +++--
- src/hb-shape.cc                                   |  48 +-----
- ...scribe-private.hh => hb-shaper-impl-private.hh} |  20 ++-
- src/{hb-old-private.hh => hb-shaper-list.hh}      |  30 ++--
- src/hb-shaper-private.hh                          |  81 +++++++++
- src/hb-uniscribe.cc                               | 186
- +++++++++++++--------
- 17 files changed, 608 insertions(+), 238 deletions(-)
+ 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
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -27883,11 +20657,13 @@ Date: Tue Jul 3 11:38:46 2012 -0400
  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 +
.../shaper-thai/{misc/misc.txt => script-thai/misc/sara-am.txt}     |
- 6 ++----
5 files changed, 5 insertions(+), 6 deletions(-)
test/shaping/texts/in-tree/shaper-thai/script-thai/misc/sara-am.txt |
+ 4 ++++
6 files changed, 7 insertions(+), 8 deletions(-)
 
 commit aa116582e69d18777448e7993078e5d6335ddfed
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -28929,49 +21705,50 @@ Date: Mon Jun 4 10:21:22 2012 -0400
 
     s/script-punjabi/script-gurmukhi/
 
- test/shaping/texts/in-tree/shaper-indic/indic/MANIFEST                         |
- 2 +-
- .../shaper-indic/indic/{script-punjabi => script-gurmukhi}/MANIFEST
- | 0
- .../indic/{script-punjabi => script-gurmukhi}/misc/MANIFEST            |
- 0
- .../indic/{script-punjabi => script-gurmukhi}/misc/misc.txt            |
- 0
- .../indic/{script-punjabi => script-gurmukhi}/utrrs/LICENSE            |
- 0
- .../indic/{script-punjabi => script-gurmukhi}/utrrs/MANIFEST           |
- 0
- .../shaper-indic/indic/{script-punjabi => script-gurmukhi}/utrrs/README
- | 0
- .../indic/{script-punjabi => script-gurmukhi}/utrrs/SOURCES            |
- 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt           |
- 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt
- | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt               |
- 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-GurmukhiSpecific.txt
- | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt
- | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt             |
- 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt
- | 0
- .../indic/{script-punjabi => script-gurmukhi}/utrrs/codepoint/MANIFEST
- | 0
- .../utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt                      |
- 0
- .../utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt                      |
- 0
- .../indic/{script-punjabi => script-gurmukhi}/utrrs/gpos/MANIFEST
- | 0
- .../utrrs/gsub/IndicFontFeatureGSUB.txt                                |
- 0
- .../indic/{script-punjabi => script-gurmukhi}/utrrs/gsub/MANIFEST
- | 0
- 21 files changed, 1 insertion(+), 1 deletion(-)
+ .../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
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -29277,8 +22054,9 @@ Date:   Wed May 23 21:50:43 2012 -0400
  +++++++++++++++++++++
  .../misc/diacritics/language-persian.txt          |  48 ++
  .../misc/diacritics/language-urdu.txt             | 188 ++++++
- .../misc/{ => diacritics}/ligature-diacritics.txt  |  0
- 7 files changed, 965 insertions(+), 1 deletion(-)
+ .../misc/diacritics/ligature-diacritics.txt       |   1 +
+ .../script-arabic/misc/ligature-diacritics.txt     |  1 -
+ 8 files changed, 966 insertions(+), 2 deletions(-)
 
 commit ed2f1363a391add41f10cff18792003583a10257
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -29304,23 +22082,21 @@ Date: Fri May 18 15:04:35 2012 -0400
     From:
     http://people.mozilla.org/~jdaggett/tests/cjkcompat.html
 
- test/shaping/texts/in-tree/shaper-default/MANIFEST                    |
- 3 ++-
- .../in-tree/shaper-default/{script-japanese => script-han}/MANIFEST
- | 0
- test/shaping/texts/in-tree/shaper-default/script-han/misc/MANIFEST    |
- 1 +
- .../texts/in-tree/shaper-default/script-han/misc/cjk-compat.txt       |
- 3 +++
- test/shaping/texts/in-tree/shaper-default/script-hiragana/MANIFEST    |
- 1 +
- .../shaper-default/{script-japanese => script-hiragana}/misc/MANIFEST
- | 0
- .../{script-japanese => script-hiragana}/misc/kazuraki-liga-lines.txt
- | 0
- .../{script-japanese => script-hiragana}/misc/kazuraki-liga.txt
- | 0
- 8 files changed, 7 insertions(+), 1 deletion(-)
+ 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
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -29467,14 +22243,15 @@ Date: Tue May 15 23:10:39 2012 -0400
 
     [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 => main-font-text.hh} | 48 +++++++++++------------
- util/shape-consumer.hh                        | 69
- +++++++++++++++++++++++++++++++++
- 5 files changed, 135 insertions(+), 70 deletions(-)
+ 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
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -31392,24 +24169,25 @@ Date: Thu Apr 12 14:53:53 2012 -0400
 
     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-ot-shape.h => hb-graphite2-private.hh} | 30 ++++++++----------
- 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.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 +-
- 16 files changed, 96 insertions(+), 86 deletions(-)
+ 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
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -31713,17 +24491,23 @@ Date: Sat Apr 7 22:07:23 2012 -0400
 
     Move around
 
- test/shaping/texts/in-tree/MANIFEST
- | 1 +
- test/shaping/texts/in-tree/shaper-default/MANIFEST
- | 1 -
- .../in-tree/{shaper-default => shaper-hangul}/script-hangul/MANIFEST
- | 0
- .../{shaper-default => shaper-hangul}/script-hangul/misc/MANIFEST
- | 0
- .../{shaper-default => shaper-hangul}/script-hangul/misc/misc.txt
- | 0
- 5 files changed, 1 insertion(+), 1 deletion(-)
+ 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
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -32590,221 +25374,433 @@ Date:       Fri Jan 20 17:16:35 2012 -0500
 
     Move
 
- test/shaping/texts/MANIFEST                                          |
- 4 +---
- test/shaping/texts/in-tree/MANIFEST                                  |
- 3 +++
- test/shaping/texts/{ => in-tree}/shaper-arabic/MANIFEST              | 0
- .../{shaper-default => in-tree/shaper-arabic/script-arabic}/MANIFEST  | 0
- .../script-syriac => in-tree/shaper-arabic/script-mandaic}/MANIFEST   | 0
- .../script-nko => in-tree/shaper-arabic/script-mongolian}/MANIFEST    | 0
- .../script-mongolian => in-tree/shaper-arabic/script-nko}/MANIFEST    | 0
- .../script-mandaic => in-tree/shaper-arabic/script-syriac}/MANIFEST   | 0
- .../{shaper-arabic/script-arabic => in-tree/shaper-default}/MANIFEST  | 0
- test/shaping/texts/{ => in-tree}/shaper-indic/MANIFEST                       | 0
- test/shaping/texts/{ => in-tree}/shaper-indic/indic/MANIFEST         | 0
- .../shaper-indic/indic/script-assamese}/MANIFEST                     | 0
- .../shaper-indic/indic/script-assamese}/utrrs/LICENSE                | 0
- .../shaper-indic/indic/script-assamese}/utrrs/MANIFEST                       | 0
- .../shaper-indic/indic/script-assamese}/utrrs/README                 | 0
- .../shaper-indic/indic/script-assamese}/utrrs/SOURCES                | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt    | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt         | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt     | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt             | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt   | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt           | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt        | 0
- .../shaper-indic/indic/script-assamese}/utrrs/codepoint/MANIFEST      | 0
- .../script-assamese/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt     | 0
- .../script-assamese/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt     | 0
- .../shaper-indic/indic/script-assamese}/utrrs/gpos/MANIFEST          | 0
- .../indic/script-assamese/utrrs/gsub/IndicFontFeatureGSUB.txt        | 0
- .../shaper-indic/indic/script-assamese}/utrrs/gsub/MANIFEST          | 0
- .../shaper-indic/indic/script-bengali}/MANIFEST                      | 0
- .../shaper-indic/indic/script-bengali}/utrrs/LICENSE                 | 0
- .../shaper-indic/indic/script-bengali}/utrrs/MANIFEST                | 0
- .../shaper-indic/indic/script-bengali}/utrrs/README                  | 0
- .../shaper-indic/indic/script-bengali}/utrrs/SOURCES                 | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt    | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt         | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt     | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt             | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt   | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt           | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt        | 0
- .../shaper-indic/indic/script-bengali}/utrrs/codepoint/MANIFEST       | 0
- .../script-bengali/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt      | 0
- .../script-bengali/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt      | 0
- .../shaper-indic/indic/script-bengali}/utrrs/gpos/MANIFEST           | 0
- .../indic/script-bengali/utrrs/gsub/IndicFontFeatureGSUB.txt         | 0
- .../shaper-indic/indic/script-bengali}/utrrs/gsub/MANIFEST           | 0
- .../shaper-indic/indic/script-devanagari}/MANIFEST                   | 0
- .../shaper-indic/indic/script-devanagari}/utrrs/LICENSE              | 0
- .../shaper-indic/indic/script-devanagari}/utrrs/MANIFEST             | 0
- .../shaper-indic/indic/script-devanagari}/utrrs/README                       | 0
- .../shaper-indic/indic/script-devanagari}/utrrs/SOURCES              | 0
- .../codepoint/IndicFontFeatureCodepoint-AdditionalConsonants.txt      | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt    | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt         | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt     | 0
- .../codepoint/IndicFontFeatureCodepoint-DevnagariSpecificAddition.txt | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt             | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-GenericPunctuation.txt  | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt   | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt        | 0
- .../shaper-indic/indic/script-devanagari/utrrs/codepoint/MANIFEST     | 0
- .../script-devanagari/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt   | 0
- .../script-devanagari/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt   | 0
- .../shaper-indic/indic/script-devanagari}/utrrs/gpos/MANIFEST        | 0
- .../indic/script-devanagari/utrrs/gsub/IndicFontFeatureGSUB.txt       | 0
- .../shaper-indic/indic/script-devanagari}/utrrs/gsub/MANIFEST        | 0
- .../shaper-indic/indic/script-gujarati}/MANIFEST                     | 0
- .../shaper-indic/indic/script-gujarati}/utrrs/LICENSE                | 0
- .../shaper-indic/indic/script-gujarati}/utrrs/MANIFEST                       | 0
- .../shaper-indic/indic/script-gujarati}/utrrs/README                 | 0
- .../shaper-indic/indic/script-gujarati}/utrrs/SOURCES                | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt    | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt         | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt     | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt             | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt   | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt           | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt        | 0
- .../shaper-indic/indic/script-gujarati/utrrs/codepoint/MANIFEST       | 0
- .../script-gujarati/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt     | 0
- .../script-gujarati/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt     | 0
- .../shaper-indic/indic/script-gujarati}/utrrs/gpos/MANIFEST          | 0
- .../indic/script-gujarati/utrrs/gsub/IndicFontFeatureGSUB.txt        | 0
- .../shaper-indic/indic/script-gujarati}/utrrs/gsub/MANIFEST          | 0
- .../shaper-indic/indic/script-kannada}/MANIFEST                      | 0
- .../shaper-indic/indic/script-kannada}/utrrs/LICENSE                 | 0
- .../{ => in-tree}/shaper-indic/indic/script-kannada/utrrs/MANIFEST    | 0
- .../shaper-indic/indic/script-kannada}/utrrs/README                  | 0
- .../shaper-indic/indic/script-kannada}/utrrs/SOURCES                 | 0
- .../codepoint/IndicFontFeatureCodepoint-AdditionalConsonants.txt      | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt    | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt         | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt     | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt             | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt   | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt           | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt        | 0
- .../shaper-indic/indic/script-kannada/utrrs/codepoint/MANIFEST        | 0
- .../script-kannada/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt      | 0
- .../shaper-indic/indic/script-kannada}/utrrs/gpos/MANIFEST           | 0
- .../indic/script-kannada/utrrs/gsub/IndicFontFeatureGSUB.txt         | 0
- .../shaper-indic/indic/script-kannada}/utrrs/gsub/MANIFEST           | 0
- .../texts/{ => in-tree}/shaper-indic/indic/script-malayalam/MANIFEST  | 0
- .../{ => in-tree}/shaper-indic/indic/script-malayalam/utrrs/LICENSE   | 0
- .../shaper-indic/indic/script-malayalam}/utrrs/MANIFEST              | 0
- .../{ => in-tree}/shaper-indic/indic/script-malayalam/utrrs/README    | 0
- .../{ => in-tree}/shaper-indic/indic/script-malayalam/utrrs/SOURCES   | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt    | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt         | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt     | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt             | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt   | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt           | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt        | 0
- .../shaper-indic/indic/script-malayalam}/utrrs/codepoint/MANIFEST     | 0
- .../indic/script-malayalam/utrrs/gsub/IndicFontFeatureGSUB.txt        | 0
- .../shaper-indic/indic/script-malayalam}/utrrs/gsub/MANIFEST         | 0
- .../shaper-indic/indic/script-oriya}/MANIFEST                        | 0
- .../shaper-indic/indic/script-oriya}/utrrs/LICENSE                   | 0
- .../shaper-indic/indic/script-oriya}/utrrs/MANIFEST                  | 0
- .../shaper-indic/indic/script-oriya}/utrrs/README                    | 0
- .../shaper-indic/indic/script-oriya}/utrrs/SOURCES                   | 0
- .../codepoint/IndicFontFeatureCodepoint-AdditionalConsonants.txt      | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt    | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt         | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt     | 0
- .../script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt   | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-OriyaSpecific.txt       | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt           | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt        | 0
- .../shaper-indic/indic/script-oriya/utrrs/codepoint/MANIFEST         | 0
- .../indic/script-oriya/utrrs/gsub/IndicFontFeatureGSUB.txt           | 0
- .../shaper-indic/indic/script-oriya}/utrrs/gsub/MANIFEST             | 0
- .../shaper-indic/indic/script-punjabi}/MANIFEST                      | 0
- .../shaper-indic/indic/script-punjabi}/utrrs/LICENSE                 | 0
- .../shaper-indic/indic/script-punjabi}/utrrs/MANIFEST                | 0
- .../shaper-indic/indic/script-punjabi}/utrrs/README                  | 0
- .../shaper-indic/indic/script-punjabi}/utrrs/SOURCES                 | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt         | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt     | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt             | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-GurmukhiSpecific.txt    | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt   | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt           | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt        | 0
- .../shaper-indic/indic/script-punjabi/utrrs/codepoint/MANIFEST        | 0
- .../script-punjabi/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt      | 0
- .../script-punjabi/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt      | 0
- .../shaper-indic/indic/script-punjabi}/utrrs/gpos/MANIFEST           | 0
- .../indic/script-punjabi/utrrs/gsub/IndicFontFeatureGSUB.txt         | 0
- .../shaper-indic/indic/script-punjabi}/utrrs/gsub/MANIFEST           | 0
- .../shaper-indic/indic/script-sinhala}/MANIFEST                      | 0
- .../shaper-indic/indic/script-sinhala}/utrrs/LICENSE                 | 0
- .../shaper-indic/indic/script-sinhala}/utrrs/MANIFEST                | 0
- .../shaper-indic/indic/script-sinhala}/utrrs/README                  | 0
- .../shaper-indic/indic/script-sinhala}/utrrs/SOURCES                 | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt         | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt     | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt   | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-Punctuation.txt        | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt        | 0
- .../shaper-indic/indic/script-sinhala/utrrs/codepoint/MANIFEST        | 0
- .../indic/script-sinhala/utrrs/gpos/IndicFontFeatureGPOS.txt         | 0
- .../shaper-indic/indic/script-sinhala/utrrs/gpos/MANIFEST            | 0
- .../indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Conjunct.txt | 0
- .../script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Rakaaraansaya.txt  | 0
- .../indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Repaya.txt   | 0
- .../script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Special-Cases.txt  | 0
- .../utrrs/gsub/IndicFontFeatureGSUB-TouchingLetters.txt              | 0
- .../indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Yansaya.txt  | 0
- .../indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB.txt         | 0
- .../shaper-indic/indic/script-sinhala/utrrs/gsub/MANIFEST            | 0
- .../shaper-indic/indic/script-tamil}/MANIFEST                        | 0
- .../shaper-indic/indic/script-tamil}/utrrs/LICENSE                   | 0
- .../shaper-indic/indic/script-tamil}/utrrs/MANIFEST                  | 0
- .../shaper-indic/indic/script-tamil}/utrrs/README                    | 0
- .../shaper-indic/indic/script-tamil}/utrrs/SOURCES                   | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt         | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-CurrencySymbols.txt     | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt     | 0
- .../script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt   | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-Numerics.txt           | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt           | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-Symbols.txt            | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-TamilSymbol.txt        | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt        | 0
- .../shaper-indic/indic/script-tamil/utrrs/codepoint/MANIFEST         | 0
- .../indic/script-tamil/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt  | 0
- .../indic/script-tamil/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt  | 0
- .../shaper-indic/indic/script-tamil}/utrrs/gpos/MANIFEST             | 0
- .../indic/script-tamil/utrrs/gsub/IndicFontFeatureGSUB.txt           | 0
- .../shaper-indic/indic/script-tamil}/utrrs/gsub/MANIFEST             | 0
- .../shaper-indic/indic/script-telugu}/MANIFEST                               | 0
- .../shaper-indic/indic/script-telugu}/utrrs/LICENSE                  | 0
- .../shaper-indic/indic/script-telugu}/utrrs/MANIFEST                 | 0
- .../shaper-indic/indic/script-telugu}/utrrs/README                   | 0
- .../shaper-indic/indic/script-telugu}/utrrs/SOURCES                  | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt    | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt         | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt     | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt             | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt   | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt           | 0
- .../utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt        | 0
- .../shaper-indic/indic/script-telugu}/utrrs/codepoint/MANIFEST        | 0
- .../indic/script-telugu/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt | 0
- .../shaper-indic/indic/script-telugu}/utrrs/gpos/MANIFEST            | 0
- .../indic/script-telugu/utrrs/gsub/IndicFontFeatureGSUB.txt          | 0
- .../shaper-indic/indic/script-telugu}/utrrs/gsub/MANIFEST            | 0
- 212 files changed, 4 insertions(+), 3 deletions(-)
+ 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 +
+ .../indic/script-assamese/utrrs/LICENSE           |   19 +
+ .../indic/script-assamese/utrrs/MANIFEST          |    3 +
+ .../indic/script-assamese/utrrs/README                    |   13 +
+ .../indic/script-assamese/utrrs/SOURCES           |    2 +
+ .../IndicFontFeatureCodepoint-AdditionalVowels.txt |   4 +
+ .../IndicFontFeatureCodepoint-Consonants.txt      |   40 +
+ .../IndicFontFeatureCodepoint-DependentVowels.txt  |  10 +
+ .../codepoint/IndicFontFeatureCodepoint-Digits.txt |  10 +
+ ...IndicFontFeatureCodepoint-IndependentVowels.txt |  11 +
+ .../IndicFontFeatureCodepoint-Reserved.txt        |    2 +
+ .../IndicFontFeatureCodepoint-VariousSigns.txt     |   6 +
+ .../indic/script-assamese/utrrs/codepoint/MANIFEST |   7 +
+ .../utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt  |  59 +
+ .../utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt  |  131 ++
+ .../indic/script-assamese/utrrs/gpos/MANIFEST     |    2 +
+ .../utrrs/gsub/IndicFontFeatureGSUB.txt           |  139 ++
+ .../indic/script-assamese/utrrs/gsub/MANIFEST     |    1 +
+ .../shaper-indic/indic/script-bengali/MANIFEST     |   1 +
+ .../indic/script-bengali/utrrs/LICENSE                    |   19 +
+ .../indic/script-bengali/utrrs/MANIFEST           |    3 +
+ .../shaper-indic/indic/script-bengali/utrrs/README |  13 +
+ .../indic/script-bengali/utrrs/SOURCES                    |    2 +
+ .../IndicFontFeatureCodepoint-AdditionalVowels.txt |   1 +
+ .../IndicFontFeatureCodepoint-Consonants.txt      |   36 +
+ .../IndicFontFeatureCodepoint-DependentVowels.txt  |  10 +
+ .../codepoint/IndicFontFeatureCodepoint-Digits.txt |  10 +
+ ...IndicFontFeatureCodepoint-IndependentVowels.txt |  12 +
+ .../IndicFontFeatureCodepoint-Reserved.txt        |    2 +
+ .../IndicFontFeatureCodepoint-VariousSigns.txt     |   6 +
+ .../indic/script-bengali/utrrs/codepoint/MANIFEST  |   7 +
+ .../utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt  |  58 +
+ .../utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt  |  119 ++
+ .../indic/script-bengali/utrrs/gpos/MANIFEST      |    2 +
+ .../utrrs/gsub/IndicFontFeatureGSUB.txt           |  215 +++
+ .../indic/script-bengali/utrrs/gsub/MANIFEST      |    1 +
+ .../shaper-indic/indic/script-devanagari/MANIFEST  |   1 +
+ .../indic/script-devanagari/utrrs/LICENSE         |   19 +
+ .../indic/script-devanagari/utrrs/MANIFEST        |    3 +
+ .../indic/script-devanagari/utrrs/README          |   13 +
+ .../indic/script-devanagari/utrrs/SOURCES         |    2 +
+ ...icFontFeatureCodepoint-AdditionalConsonants.txt |   8 +
+ .../IndicFontFeatureCodepoint-AdditionalVowels.txt |   4 +
+ .../IndicFontFeatureCodepoint-Consonants.txt      |   45 +
+ .../IndicFontFeatureCodepoint-DependentVowels.txt  |  14 +
+ ...tFeatureCodepoint-DevnagariSpecificAddition.txt |   1 +
+ .../codepoint/IndicFontFeatureCodepoint-Digits.txt |  10 +
+ ...ndicFontFeatureCodepoint-GenericPunctuation.txt |   2 +
+ ...IndicFontFeatureCodepoint-IndependentVowels.txt |  16 +
+ .../IndicFontFeatureCodepoint-VariousSigns.txt     |  10 +
+ .../script-devanagari/utrrs/codepoint/MANIFEST     |   9 +
+ .../utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt  |  185 +++
+ .../utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt  |  185 +++
+ .../indic/script-devanagari/utrrs/gpos/MANIFEST    |   2 +
+ .../utrrs/gsub/IndicFontFeatureGSUB.txt           | 1367
+ ++++++++++++++++++++
+ .../indic/script-devanagari/utrrs/gsub/MANIFEST    |   1 +
+ .../shaper-indic/indic/script-gujarati/MANIFEST    |   1 +
+ .../indic/script-gujarati/utrrs/LICENSE           |   19 +
+ .../indic/script-gujarati/utrrs/MANIFEST          |    3 +
+ .../indic/script-gujarati/utrrs/README                    |   13 +
+ .../indic/script-gujarati/utrrs/SOURCES           |    2 +
+ .../IndicFontFeatureCodepoint-AdditionalVowels.txt |   1 +
+ .../IndicFontFeatureCodepoint-Consonants.txt      |   34 +
+ .../IndicFontFeatureCodepoint-DependentVowels.txt  |  12 +
+ .../codepoint/IndicFontFeatureCodepoint-Digits.txt |  10 +
+ ...IndicFontFeatureCodepoint-IndependentVowels.txt |  13 +
+ .../IndicFontFeatureCodepoint-Reserved.txt        |    2 +
+ .../IndicFontFeatureCodepoint-VariousSigns.txt     |   7 +
+ .../indic/script-gujarati/utrrs/codepoint/MANIFEST |   7 +
+ .../utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt  |  170 +++
+ .../utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt  |  170 +++
+ .../indic/script-gujarati/utrrs/gpos/MANIFEST     |    2 +
+ .../utrrs/gsub/IndicFontFeatureGSUB.txt           | 1156
+ +++++++++++++++++
+ .../indic/script-gujarati/utrrs/gsub/MANIFEST     |    1 +
+ .../shaper-indic/indic/script-kannada/MANIFEST     |   1 +
+ .../indic/script-kannada/utrrs/LICENSE                    |   19 +
+ .../indic/script-kannada/utrrs/MANIFEST           |    3 +
+ .../shaper-indic/indic/script-kannada/utrrs/README |  13 +
+ .../indic/script-kannada/utrrs/SOURCES                    |    2 +
+ ...icFontFeatureCodepoint-AdditionalConsonants.txt |   1 +
+ .../IndicFontFeatureCodepoint-AdditionalVowels.txt |   4 +
+ .../IndicFontFeatureCodepoint-Consonants.txt      |   40 +
+ .../IndicFontFeatureCodepoint-DependentVowels.txt  |  13 +
+ .../codepoint/IndicFontFeatureCodepoint-Digits.txt |  10 +
+ ...IndicFontFeatureCodepoint-IndependentVowels.txt |  14 +
+ .../IndicFontFeatureCodepoint-Reserved.txt        |    2 +
+ .../IndicFontFeatureCodepoint-VariousSigns.txt     |   9 +
+ .../indic/script-kannada/utrrs/codepoint/MANIFEST  |   8 +
+ .../utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt  |  188 +++
+ .../indic/script-kannada/utrrs/gpos/MANIFEST      |    1 +
+ .../utrrs/gsub/IndicFontFeatureGSUB.txt           |  306 +++++
+ .../indic/script-kannada/utrrs/gsub/MANIFEST      |    1 +
+ .../shaper-indic/indic/script-malayalam/MANIFEST   |   1 +
+ .../indic/script-malayalam/utrrs/LICENSE          |   19 +
+ .../indic/script-malayalam/utrrs/MANIFEST         |    2 +
+ .../indic/script-malayalam/utrrs/README           |   13 +
+ .../indic/script-malayalam/utrrs/SOURCES          |    2 +
+ .../IndicFontFeatureCodepoint-AdditionalVowels.txt |   2 +
+ .../IndicFontFeatureCodepoint-Consonants.txt      |   36 +
+ .../IndicFontFeatureCodepoint-DependentVowels.txt  |  12 +
+ .../codepoint/IndicFontFeatureCodepoint-Digits.txt |  10 +
+ ...IndicFontFeatureCodepoint-IndependentVowels.txt |  14 +
+ .../IndicFontFeatureCodepoint-Reserved.txt        |    2 +
+ .../IndicFontFeatureCodepoint-VariousSigns.txt     |   4 +
+ .../script-malayalam/utrrs/codepoint/MANIFEST     |    7 +
+ .../utrrs/gsub/IndicFontFeatureGSUB.txt           |  254 ++++
+ .../indic/script-malayalam/utrrs/gsub/MANIFEST     |   1 +
+ .../shaper-indic/indic/script-oriya/MANIFEST      |    1 +
+ .../shaper-indic/indic/script-oriya/utrrs/LICENSE  |  19 +
+ .../shaper-indic/indic/script-oriya/utrrs/MANIFEST |   2 +
+ .../shaper-indic/indic/script-oriya/utrrs/README   |  13 +
+ .../shaper-indic/indic/script-oriya/utrrs/SOURCES  |   2 +
+ ...icFontFeatureCodepoint-AdditionalConsonants.txt |   3 +
+ .../IndicFontFeatureCodepoint-AdditionalVowels.txt |   2 +
+ .../IndicFontFeatureCodepoint-Consonants.txt      |   34 +
+ .../IndicFontFeatureCodepoint-DependentVowels.txt  |  12 +
+ .../codepoint/IndicFontFeatureCodepoint-Digits.txt |  10 +
+ ...IndicFontFeatureCodepoint-IndependentVowels.txt |  12 +
+ .../IndicFontFeatureCodepoint-OriyaSpecific.txt    |   2 +
+ .../IndicFontFeatureCodepoint-Reserved.txt        |    2 +
+ .../IndicFontFeatureCodepoint-VariousSigns.txt     |   8 +
+ .../indic/script-oriya/utrrs/codepoint/MANIFEST    |   9 +
+ .../utrrs/gsub/IndicFontFeatureGSUB.txt           |  170 +++
+ .../indic/script-oriya/utrrs/gsub/MANIFEST        |    1 +
+ .../shaper-indic/indic/script-punjabi/MANIFEST     |   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 +
+ .../shaper-indic/indic/script-sinhala/MANIFEST     |   1 +
+ .../indic/script-sinhala/utrrs/LICENSE                    |   19 +
+ .../indic/script-sinhala/utrrs/MANIFEST           |    3 +
+ .../shaper-indic/indic/script-sinhala/utrrs/README |  13 +
+ .../indic/script-sinhala/utrrs/SOURCES                    |    2 +
+ .../IndicFontFeatureCodepoint-Consonants.txt      |   41 +
+ .../IndicFontFeatureCodepoint-DependentVowels.txt  |  17 +
+ ...IndicFontFeatureCodepoint-IndependentVowels.txt |  18 +
+ .../IndicFontFeatureCodepoint-Punctuation.txt     |    1 +
+ .../IndicFontFeatureCodepoint-VariousSigns.txt     |   3 +
+ .../indic/script-sinhala/utrrs/codepoint/MANIFEST  |   5 +
+ .../utrrs/gpos/IndicFontFeatureGPOS.txt           |  162 +++
+ .../indic/script-sinhala/utrrs/gpos/MANIFEST      |    1 +
+ .../utrrs/gsub/IndicFontFeatureGSUB-Conjunct.txt   |   1 +
+ .../gsub/IndicFontFeatureGSUB-Rakaaraansaya.txt    |  41 +
+ .../utrrs/gsub/IndicFontFeatureGSUB-Repaya.txt     |  42 +
+ .../gsub/IndicFontFeatureGSUB-Special-Cases.txt    |   2 +
+ .../gsub/IndicFontFeatureGSUB-TouchingLetters.txt  |   1 +
+ .../utrrs/gsub/IndicFontFeatureGSUB-Yansaya.txt    |  41 +
+ .../utrrs/gsub/IndicFontFeatureGSUB.txt           |    1 +
+ .../indic/script-sinhala/utrrs/gsub/MANIFEST      |    7 +
+ .../shaper-indic/indic/script-tamil/MANIFEST      |    1 +
+ .../shaper-indic/indic/script-tamil/utrrs/LICENSE  |  19 +
+ .../shaper-indic/indic/script-tamil/utrrs/MANIFEST |   3 +
+ .../shaper-indic/indic/script-tamil/utrrs/README   |  13 +
+ .../shaper-indic/indic/script-tamil/utrrs/SOURCES  |   2 +
+ .../IndicFontFeatureCodepoint-Consonants.txt      |   23 +
+ .../IndicFontFeatureCodepoint-CurrencySymbols.txt  |   1 +
+ .../IndicFontFeatureCodepoint-DependentVowels.txt  |  11 +
+ .../codepoint/IndicFontFeatureCodepoint-Digits.txt |  10 +
+ ...IndicFontFeatureCodepoint-IndependentVowels.txt |  12 +
+ .../IndicFontFeatureCodepoint-Numerics.txt        |    3 +
+ .../IndicFontFeatureCodepoint-Reserved.txt        |    2 +
+ .../IndicFontFeatureCodepoint-Symbols.txt         |    6 +
+ .../IndicFontFeatureCodepoint-TamilSymbol.txt     |    1 +
+ .../IndicFontFeatureCodepoint-VariousSigns.txt     |   4 +
+ .../indic/script-tamil/utrrs/codepoint/MANIFEST    |  10 +
+ .../utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt  |  64 +
+ .../utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt  |  44 +
+ .../indic/script-tamil/utrrs/gpos/MANIFEST        |    2 +
+ .../utrrs/gsub/IndicFontFeatureGSUB.txt           |    4 +
+ .../indic/script-tamil/utrrs/gsub/MANIFEST        |    1 +
+ .../shaper-indic/indic/script-telugu/MANIFEST     |    1 +
+ .../shaper-indic/indic/script-telugu/utrrs/LICENSE |  19 +
+ .../indic/script-telugu/utrrs/MANIFEST                    |    3 +
+ .../shaper-indic/indic/script-telugu/utrrs/README  |  13 +
+ .../shaper-indic/indic/script-telugu/utrrs/SOURCES |   2 +
+ .../IndicFontFeatureCodepoint-AdditionalVowels.txt |   2 +
+ .../IndicFontFeatureCodepoint-Consonants.txt      |   38 +
+ .../IndicFontFeatureCodepoint-DependentVowels.txt  |  13 +
+ .../codepoint/IndicFontFeatureCodepoint-Digits.txt |  10 +
+ ...IndicFontFeatureCodepoint-IndependentVowels.txt |  14 +
+ .../IndicFontFeatureCodepoint-Reserved.txt        |    2 +
+ .../IndicFontFeatureCodepoint-VariousSigns.txt     |   6 +
+ .../indic/script-telugu/utrrs/codepoint/MANIFEST   |   7 +
+ .../utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt  |  385 ++++++
+ .../indic/script-telugu/utrrs/gpos/MANIFEST       |    1 +
+ .../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 -
+ .../indic/script-assamese/utrrs/LICENSE           |   19 -
+ .../indic/script-assamese/utrrs/MANIFEST          |    3 -
+ .../indic/script-assamese/utrrs/README                    |   13 -
+ .../indic/script-assamese/utrrs/SOURCES           |    2 -
+ .../IndicFontFeatureCodepoint-AdditionalVowels.txt |   4 -
+ .../IndicFontFeatureCodepoint-Consonants.txt      |   40 -
+ .../IndicFontFeatureCodepoint-DependentVowels.txt  |  10 -
+ .../codepoint/IndicFontFeatureCodepoint-Digits.txt |  10 -
+ ...IndicFontFeatureCodepoint-IndependentVowels.txt |  11 -
+ .../IndicFontFeatureCodepoint-Reserved.txt        |    2 -
+ .../IndicFontFeatureCodepoint-VariousSigns.txt     |   6 -
+ .../indic/script-assamese/utrrs/codepoint/MANIFEST |   7 -
+ .../utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt  |  59 -
+ .../utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt  |  131 --
+ .../indic/script-assamese/utrrs/gpos/MANIFEST     |    2 -
+ .../utrrs/gsub/IndicFontFeatureGSUB.txt           |  139 --
+ .../indic/script-assamese/utrrs/gsub/MANIFEST     |    1 -
+ .../shaper-indic/indic/script-bengali/MANIFEST     |   1 -
+ .../indic/script-bengali/utrrs/LICENSE                    |   19 -
+ .../indic/script-bengali/utrrs/MANIFEST           |    3 -
+ .../shaper-indic/indic/script-bengali/utrrs/README |  13 -
+ .../indic/script-bengali/utrrs/SOURCES                    |    2 -
+ .../IndicFontFeatureCodepoint-AdditionalVowels.txt |   1 -
+ .../IndicFontFeatureCodepoint-Consonants.txt      |   36 -
+ .../IndicFontFeatureCodepoint-DependentVowels.txt  |  10 -
+ .../codepoint/IndicFontFeatureCodepoint-Digits.txt |  10 -
+ ...IndicFontFeatureCodepoint-IndependentVowels.txt |  12 -
+ .../IndicFontFeatureCodepoint-Reserved.txt        |    2 -
+ .../IndicFontFeatureCodepoint-VariousSigns.txt     |   6 -
+ .../indic/script-bengali/utrrs/codepoint/MANIFEST  |   7 -
+ .../utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt  |  58 -
+ .../utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt  |  119 --
+ .../indic/script-bengali/utrrs/gpos/MANIFEST      |    2 -
+ .../utrrs/gsub/IndicFontFeatureGSUB.txt           |  215 ---
+ .../indic/script-bengali/utrrs/gsub/MANIFEST      |    1 -
+ .../shaper-indic/indic/script-devanagari/MANIFEST  |   1 -
+ .../indic/script-devanagari/utrrs/LICENSE         |   19 -
+ .../indic/script-devanagari/utrrs/MANIFEST        |    3 -
+ .../indic/script-devanagari/utrrs/README          |   13 -
+ .../indic/script-devanagari/utrrs/SOURCES         |    2 -
+ ...icFontFeatureCodepoint-AdditionalConsonants.txt |   8 -
+ .../IndicFontFeatureCodepoint-AdditionalVowels.txt |   4 -
+ .../IndicFontFeatureCodepoint-Consonants.txt      |   45 -
+ .../IndicFontFeatureCodepoint-DependentVowels.txt  |  14 -
+ ...tFeatureCodepoint-DevnagariSpecificAddition.txt |   1 -
+ .../codepoint/IndicFontFeatureCodepoint-Digits.txt |  10 -
+ ...ndicFontFeatureCodepoint-GenericPunctuation.txt |   2 -
+ ...IndicFontFeatureCodepoint-IndependentVowels.txt |  16 -
+ .../IndicFontFeatureCodepoint-VariousSigns.txt     |  10 -
+ .../script-devanagari/utrrs/codepoint/MANIFEST     |   9 -
+ .../utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt  |  185 ---
+ .../utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt  |  185 ---
+ .../indic/script-devanagari/utrrs/gpos/MANIFEST    |   2 -
+ .../utrrs/gsub/IndicFontFeatureGSUB.txt           | 1367
+ --------------------
+ .../indic/script-devanagari/utrrs/gsub/MANIFEST    |   1 -
+ .../shaper-indic/indic/script-gujarati/MANIFEST    |   1 -
+ .../indic/script-gujarati/utrrs/LICENSE           |   19 -
+ .../indic/script-gujarati/utrrs/MANIFEST          |    3 -
+ .../indic/script-gujarati/utrrs/README                    |   13 -
+ .../indic/script-gujarati/utrrs/SOURCES           |    2 -
+ .../IndicFontFeatureCodepoint-AdditionalVowels.txt |   1 -
+ .../IndicFontFeatureCodepoint-Consonants.txt      |   34 -
+ .../IndicFontFeatureCodepoint-DependentVowels.txt  |  12 -
+ .../codepoint/IndicFontFeatureCodepoint-Digits.txt |  10 -
+ ...IndicFontFeatureCodepoint-IndependentVowels.txt |  13 -
+ .../IndicFontFeatureCodepoint-Reserved.txt        |    2 -
+ .../IndicFontFeatureCodepoint-VariousSigns.txt     |   7 -
+ .../indic/script-gujarati/utrrs/codepoint/MANIFEST |   7 -
+ .../utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt  |  170 ---
+ .../utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt  |  170 ---
+ .../indic/script-gujarati/utrrs/gpos/MANIFEST     |    2 -
+ .../utrrs/gsub/IndicFontFeatureGSUB.txt           | 1156
+ -----------------
+ .../indic/script-gujarati/utrrs/gsub/MANIFEST     |    1 -
+ .../shaper-indic/indic/script-kannada/MANIFEST     |   1 -
+ .../indic/script-kannada/utrrs/LICENSE                    |   19 -
+ .../indic/script-kannada/utrrs/MANIFEST           |    3 -
+ .../shaper-indic/indic/script-kannada/utrrs/README |  13 -
+ .../indic/script-kannada/utrrs/SOURCES                    |    2 -
+ ...icFontFeatureCodepoint-AdditionalConsonants.txt |   1 -
+ .../IndicFontFeatureCodepoint-AdditionalVowels.txt |   4 -
+ .../IndicFontFeatureCodepoint-Consonants.txt      |   40 -
+ .../IndicFontFeatureCodepoint-DependentVowels.txt  |  13 -
+ .../codepoint/IndicFontFeatureCodepoint-Digits.txt |  10 -
+ ...IndicFontFeatureCodepoint-IndependentVowels.txt |  14 -
+ .../IndicFontFeatureCodepoint-Reserved.txt        |    2 -
+ .../IndicFontFeatureCodepoint-VariousSigns.txt     |   9 -
+ .../indic/script-kannada/utrrs/codepoint/MANIFEST  |   8 -
+ .../utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt  |  188 ---
+ .../indic/script-kannada/utrrs/gpos/MANIFEST      |    1 -
+ .../utrrs/gsub/IndicFontFeatureGSUB.txt           |  306 -----
+ .../indic/script-kannada/utrrs/gsub/MANIFEST      |    1 -
+ .../shaper-indic/indic/script-malayalam/MANIFEST   |   1 -
+ .../indic/script-malayalam/utrrs/LICENSE          |   19 -
+ .../indic/script-malayalam/utrrs/MANIFEST         |    2 -
+ .../indic/script-malayalam/utrrs/README           |   13 -
+ .../indic/script-malayalam/utrrs/SOURCES          |    2 -
+ .../IndicFontFeatureCodepoint-AdditionalVowels.txt |   2 -
+ .../IndicFontFeatureCodepoint-Consonants.txt      |   36 -
+ .../IndicFontFeatureCodepoint-DependentVowels.txt  |  12 -
+ .../codepoint/IndicFontFeatureCodepoint-Digits.txt |  10 -
+ ...IndicFontFeatureCodepoint-IndependentVowels.txt |  14 -
+ .../IndicFontFeatureCodepoint-Reserved.txt        |    2 -
+ .../IndicFontFeatureCodepoint-VariousSigns.txt     |   4 -
+ .../script-malayalam/utrrs/codepoint/MANIFEST     |    7 -
+ .../utrrs/gsub/IndicFontFeatureGSUB.txt           |  254 ----
+ .../indic/script-malayalam/utrrs/gsub/MANIFEST     |   1 -
+ .../texts/shaper-indic/indic/script-oriya/MANIFEST |   1 -
+ .../shaper-indic/indic/script-oriya/utrrs/LICENSE  |  19 -
+ .../shaper-indic/indic/script-oriya/utrrs/MANIFEST |   2 -
+ .../shaper-indic/indic/script-oriya/utrrs/README   |  13 -
+ .../shaper-indic/indic/script-oriya/utrrs/SOURCES  |   2 -
+ ...icFontFeatureCodepoint-AdditionalConsonants.txt |   3 -
+ .../IndicFontFeatureCodepoint-AdditionalVowels.txt |   2 -
+ .../IndicFontFeatureCodepoint-Consonants.txt      |   34 -
+ .../IndicFontFeatureCodepoint-DependentVowels.txt  |  12 -
+ .../codepoint/IndicFontFeatureCodepoint-Digits.txt |  10 -
+ ...IndicFontFeatureCodepoint-IndependentVowels.txt |  12 -
+ .../IndicFontFeatureCodepoint-OriyaSpecific.txt    |   2 -
+ .../IndicFontFeatureCodepoint-Reserved.txt        |    2 -
+ .../IndicFontFeatureCodepoint-VariousSigns.txt     |   8 -
+ .../indic/script-oriya/utrrs/codepoint/MANIFEST    |   9 -
+ .../utrrs/gsub/IndicFontFeatureGSUB.txt           |  170 ---
+ .../indic/script-oriya/utrrs/gsub/MANIFEST        |    1 -
+ .../shaper-indic/indic/script-punjabi/MANIFEST     |   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 -
+ .../shaper-indic/indic/script-sinhala/MANIFEST     |   1 -
+ .../indic/script-sinhala/utrrs/LICENSE                    |   19 -
+ .../indic/script-sinhala/utrrs/MANIFEST           |    3 -
+ .../shaper-indic/indic/script-sinhala/utrrs/README |  13 -
+ .../indic/script-sinhala/utrrs/SOURCES                    |    2 -
+ .../IndicFontFeatureCodepoint-Consonants.txt      |   41 -
+ .../IndicFontFeatureCodepoint-DependentVowels.txt  |  17 -
+ ...IndicFontFeatureCodepoint-IndependentVowels.txt |  18 -
+ .../IndicFontFeatureCodepoint-Punctuation.txt     |    1 -
+ .../IndicFontFeatureCodepoint-VariousSigns.txt     |   3 -
+ .../indic/script-sinhala/utrrs/codepoint/MANIFEST  |   5 -
+ .../utrrs/gpos/IndicFontFeatureGPOS.txt           |  162 ---
+ .../indic/script-sinhala/utrrs/gpos/MANIFEST      |    1 -
+ .../utrrs/gsub/IndicFontFeatureGSUB-Conjunct.txt   |   1 -
+ .../gsub/IndicFontFeatureGSUB-Rakaaraansaya.txt    |  41 -
+ .../utrrs/gsub/IndicFontFeatureGSUB-Repaya.txt     |  42 -
+ .../gsub/IndicFontFeatureGSUB-Special-Cases.txt    |   2 -
+ .../gsub/IndicFontFeatureGSUB-TouchingLetters.txt  |   1 -
+ .../utrrs/gsub/IndicFontFeatureGSUB-Yansaya.txt    |  41 -
+ .../utrrs/gsub/IndicFontFeatureGSUB.txt           |    1 -
+ .../indic/script-sinhala/utrrs/gsub/MANIFEST      |    7 -
+ .../texts/shaper-indic/indic/script-tamil/MANIFEST |   1 -
+ .../shaper-indic/indic/script-tamil/utrrs/LICENSE  |  19 -
+ .../shaper-indic/indic/script-tamil/utrrs/MANIFEST |   3 -
+ .../shaper-indic/indic/script-tamil/utrrs/README   |  13 -
+ .../shaper-indic/indic/script-tamil/utrrs/SOURCES  |   2 -
+ .../IndicFontFeatureCodepoint-Consonants.txt      |   23 -
+ .../IndicFontFeatureCodepoint-CurrencySymbols.txt  |   1 -
+ .../IndicFontFeatureCodepoint-DependentVowels.txt  |  11 -
+ .../codepoint/IndicFontFeatureCodepoint-Digits.txt |  10 -
+ ...IndicFontFeatureCodepoint-IndependentVowels.txt |  12 -
+ .../IndicFontFeatureCodepoint-Numerics.txt        |    3 -
+ .../IndicFontFeatureCodepoint-Reserved.txt        |    2 -
+ .../IndicFontFeatureCodepoint-Symbols.txt         |    6 -
+ .../IndicFontFeatureCodepoint-TamilSymbol.txt     |    1 -
+ .../IndicFontFeatureCodepoint-VariousSigns.txt     |   4 -
+ .../indic/script-tamil/utrrs/codepoint/MANIFEST    |  10 -
+ .../utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt  |  64 -
+ .../utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt  |  44 -
+ .../indic/script-tamil/utrrs/gpos/MANIFEST        |    2 -
+ .../utrrs/gsub/IndicFontFeatureGSUB.txt           |    4 -
+ .../indic/script-tamil/utrrs/gsub/MANIFEST        |    1 -
+ .../shaper-indic/indic/script-telugu/MANIFEST     |    1 -
+ .../shaper-indic/indic/script-telugu/utrrs/LICENSE |  19 -
+ .../indic/script-telugu/utrrs/MANIFEST                    |    3 -
+ .../shaper-indic/indic/script-telugu/utrrs/README  |  13 -
+ .../shaper-indic/indic/script-telugu/utrrs/SOURCES |   2 -
+ .../IndicFontFeatureCodepoint-AdditionalVowels.txt |   2 -
+ .../IndicFontFeatureCodepoint-Consonants.txt      |   38 -
+ .../IndicFontFeatureCodepoint-DependentVowels.txt  |  13 -
+ .../codepoint/IndicFontFeatureCodepoint-Digits.txt |  10 -
+ ...IndicFontFeatureCodepoint-IndependentVowels.txt |  14 -
+ .../IndicFontFeatureCodepoint-Reserved.txt        |    2 -
+ .../IndicFontFeatureCodepoint-VariousSigns.txt     |   6 -
+ .../indic/script-telugu/utrrs/codepoint/MANIFEST   |   7 -
+ .../utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt  |  385 ------
+ .../indic/script-telugu/utrrs/gpos/MANIFEST       |    1 -
+ .../utrrs/gsub/IndicFontFeatureGSUB.txt           |  287 ----
+ .../indic/script-telugu/utrrs/gsub/MANIFEST       |    1 -
+ 422 files changed, 7601 insertions(+), 7600 deletions(-)
 
 commit 45f640c98d752161e51eda63061d70fad9ab9f68
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -33054,9 +26050,12 @@ Date:  Fri Jan 20 13:50:55 2012 -0500
 
     Move hb-diff to test/shaping/
 
- {util => test/shaping}/hb-diff | 0
- util/Makefile.am              | 2 --
- 2 files changed, 2 deletions(-)
+ test/shaping/hb-diff | 70
+ ++++++++++++++++++++++++++++++++++++++++++++++++++++
+ util/Makefile.am     |  2 --
+ util/hb-diff        | 70
+ ----------------------------------------------------
+ 3 files changed, 70 insertions(+), 72 deletions(-)
 
 commit f868e1b84d2f73688d4d6558d44610b1ac75ec13
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -33064,11 +26063,14 @@ Date: Fri Jan 20 13:50:05 2012 -0500
 
     Add hb-unicode-decode
 
- test/shaping/{hb-read-manifest => hb-manifest-read}   |  0
- .../{hb-update-manifests => hb-manifest-update}       |  0
- test/shaping/hb-unicode-decode                               | 19
- +++++++++++++++++++
- 3 files changed, 19 insertions(+)
+ test/shaping/hb-manifest-read   | 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 ----------------------
+ 5 files changed, 77 insertions(+), 58 deletions(-)
 
 commit 9ab23ef4749b51e60464b9ef2a92739cdc2b36ba
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -33207,25 +26209,38 @@ Date: Thu Jan 19 14:52:02 2012 -0500
 
     Rename test/ to test/api/
 
- configure.ac                       |   1 +
- test/Makefile.am                   | 128
- +----------------------------------
- test/api/Makefile.am               | 131
- ++++++++++++++++++++++++++++++++++++
- test/{ => api}/hb-test.h           |   0
- test/{ => api}/test-blob.c         |   0
- test/{ => api}/test-buffer.c       |   0
- test/{ => api}/test-c.c            |   0
- test/{ => api}/test-common.c       |   0
- test/{ => api}/test-cplusplus.cc    |  0
- test/{ => api}/test-font.c         |   0
- test/{ => api}/test-object.c       |   0
- test/{ => api}/test-ot-tag.c       |   0
- test/{ => api}/test-shape-complex.c |  0
- test/{ => api}/test-shape.c        |   0
- test/{ => api}/test-unicode.c      |   0
- test/{ => api}/test-version.c      |   0
- 16 files changed, 133 insertions(+), 127 deletions(-)
+ configure.ac                 |    1 +
+ 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/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-shape-complex.c | 1189
+ +++++++++++++++++++++++++++++++++++++++++
+ test/api/test-shape.c        |  165 ++++++
+ test/api/test-unicode.c       |  887 ++++++++++++++++++++++++++++++
+ test/api/test-version.c       |   80 +++
+ test/hb-test.h                       |  265 ---------
+ test/test-blob.c             |  301 -----------
+ test/test-buffer.c           |  783 ---------------------------
+ test/test-c.c                |   58 --
+ test/test-common.c           |  213 --------
+ test/test-cplusplus.cc        |   30 --
+ test/test-font.c             |  502 -----------------
+ test/test-object.c           |  367 -------------
+ test/test-ot-tag.c           |  241 ---------
+ test/test-shape-complex.c     | 1189
+ -----------------------------------------
+ test/test-shape.c            |  165 ------
+ test/test-unicode.c          |  887 ------------------------------
+ test/test-version.c          |   80 ---
+ 29 files changed, 5214 insertions(+), 5208 deletions(-)
 
 commit 3b5c22c39b87155f315853fb0c40edcf14e99b54
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -33719,20 +26734,22 @@ Date: Mon Sep 19 16:41:17 2011 -0400
 
     The output format is kinda cryptic.  Suggestions welcome.
 
- configure.ac                       |   6 -
- util/Makefile.am                   |  44 +++--
- util/{common.cc => hb-shape.cc}     | 57 ++++--
- util/hb-view.cc                    |  44 +----
- util/hb-view.hh                    |  79 ++++++++
- util/helper-cairo.cc               | 375
- +++++++++++++++++++++++++++++++++++
- util/{common.hh => helper-cairo.hh} | 64 ++++--
- util/options.cc                    |  79 ++++++++
- util/options.hh                    |  53 ++++-
- util/view-cairo.cc                 | 381
- ++----------------------------------
- util/view-cairo.hh                 |   8 +-
- 11 files changed, 717 insertions(+), 473 deletions(-)
+ 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
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -34325,9 +27342,12 @@ Date:  Wed Aug 24 01:31:29 2011 +0200
 
     Minor
 
- src/Makefile.am                               | 2 +-
- src/{hb-uniscribe-shape.cc => hb-uniscribe.cc} | 0
- 2 files changed, 1 insertion(+), 1 deletion(-)
+ src/Makefile.am          |   2 +-
+ src/hb-uniscribe-shape.cc | 454
+ ----------------------------------------------
+ src/hb-uniscribe.cc      | 454
+ ++++++++++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 455 insertions(+), 455 deletions(-)
 
 commit efde8113258b117ec0a7fbffe6d681442d045c41
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -34349,12 +27369,13 @@ Date: Fri Aug 19 19:59:24 2011 +0200
     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.cc => hb-gobject-structs.cc} |  0
- 4 files changed, 86 insertions(+), 3 deletions(-)
+ 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
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -34444,21 +27465,27 @@ Date: Wed Aug 17 14:19:59 2011 +0200
 
     Rename table files from eg maxp-private.hh to maxp-table.hh
 
- src/Makefile.am                                             | 12
- ++++++------
- src/hb-font.cc                                                      |  2 +-
- src/{hb-ot-head-private.hh => hb-ot-head-table.hh}          |  6 +++---
- ...-ot-layout-gdef-private.hh => hb-ot-layout-gdef-table.hh} |  6 +++---
- ...-ot-layout-gpos-private.hh => hb-ot-layout-gpos-table.hh} |  6 +++---
- ...-ot-layout-gsub-private.hh => hb-ot-layout-gsub-table.hh} |  6 +++---
- src/hb-ot-layout-gsubgpos-private.hh                        |  2 +-
- src/hb-ot-layout.cc                                         |
- 8 ++++----
- src/{hb-ot-maxp-private.hh => hb-ot-maxp-table.hh}          |  6 +++---
- src/{hb-ot-name-private.hh => hb-ot-name-table.hh}          |  6 +++---
- src/hb-uniscribe-shape.cc                                   |  2 +-
- src/main.cc                                                 |  2 +-
- 12 files changed, 32 insertions(+), 32 deletions(-)
+ src/Makefile.am                     |   12 +-
+ src/hb-font.cc                              |    2 +-
+ src/hb-ot-head-private.hh           |  143 ---
+ src/hb-ot-head-table.hh             |  143 +++
+ src/hb-ot-layout-gdef-private.hh     |  427 ---------
+ src/hb-ot-layout-gdef-table.hh       |  427 +++++++++
+ src/hb-ot-layout-gpos-private.hh     | 1633
+ ----------------------------------
+ src/hb-ot-layout-gpos-table.hh       | 1633
+ ++++++++++++++++++++++++++++++++++
+ src/hb-ot-layout-gsub-private.hh     |  943 --------------------
+ src/hb-ot-layout-gsub-table.hh       |  943 ++++++++++++++++++++
+ src/hb-ot-layout-gsubgpos-private.hh |    2 +-
+ src/hb-ot-layout.cc                 |    8 +-
+ src/hb-ot-maxp-private.hh           |   66 --
+ src/hb-ot-maxp-table.hh             |   66 ++
+ src/hb-ot-name-private.hh           |  128 ---
+ src/hb-ot-name-table.hh             |  128 +++
+ src/hb-uniscribe-shape.cc           |    2 +-
+ src/main.cc                         |    2 +-
+ 18 files changed, 3354 insertions(+), 3354 deletions(-)
 
 commit 0b7e4d9f20b3ed947d0c441ca59b43c4097cdb0e
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -34660,12 +27687,15 @@ Date: Tue Aug 9 15:03:00 2011 +0200
 
     Move hb-view into util/
 
- Makefile.am             |  3 +--
- configure.ac            |  1 +
- src/Makefile.am         | 13 -------------
- util/Makefile.am        | 24 ++++++++++++++++++++++++
- {src => util}/hb-view.cc |  0
- 5 files changed, 26 insertions(+), 15 deletions(-)
+ 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
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -36828,10 +29858,13 @@ Date: Wed Jun 1 18:10:10 2011 -0400
 
     Minor rename
 
- src/Makefile.am                                         | 2 +-
- src/{gen-arabic-joining-table.py => gen-arabic-table.py} | 2 +-
- src/hb-ot-shape-complex-arabic-table.hh                 | 2 +-
- 3 files changed, 3 insertions(+), 3 deletions(-)
+ 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
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -39123,10 +32156,14 @@ Date: Wed Apr 27 12:15:06 2011 -0400
 
     Rename hb-view.c and test.c to .cc files
 
- src/Makefile.am              | 4 ++--
- src/{hb-view.c => hb-view.cc} | 2 +-
- src/{test.c => test.cc}       | 5 ++++-
- 3 files changed, 7 insertions(+), 4 deletions(-)
+ 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
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -39422,32 +32459,43 @@ 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.
 
- src/Makefile.am                                        | 17
- +++++++++--------
- src/{hb-blob-private.h => hb-blob-private.hh}          |  8 ++++----
- src/hb-blob.cc                                                 |  4 ++--
- src/hb-buffer-private.hh                               |  2 +-
- src/{hb-common.c => hb-common.cc}                      |  8 ++++----
- src/{hb-font-private.h => hb-font-private.hh}          |  8 ++++----
- src/hb-font.cc                                                 |  6 +++---
- src/{hb-ft.c => hb-ft.cc}                              |  4 ++--
- src/hb-glib.cc                                                 |  2 +-
- src/hb-icu.cc                                          |  2 +-
- src/{hb-object-private.h => hb-object-private.hh}      | 10 ++++------
- src/hb-open-type-private.hh                            |  2 +-
- src/hb-ot-layout-gdef-private.hh                       |  2 +-
- src/hb-ot-layout-private.hh                            |  4 ++--
- ...abic-table.h => hb-ot-shape-complex-arabic-table.hh} |  8 ++++----
- 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 => hb-ot-tag.cc}                      |  8 ++++----
- src/{hb-private.h => hb-private.hh}                    |  8 ++++----
- src/hb-shape.cc                                        |  2 +-
- src/hb-unicode-private.hh                              |  2 +-
- src/hb-unicode.cc                                      |  2 +-
- src/hb-view.c                                          |  6 ++++++
- 24 files changed, 63 insertions(+), 58 deletions(-)
+ 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/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
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -39455,9 +32503,12 @@ Date:  Wed Apr 20 18:25:56 2011 -0400
 
     Rename hb-blob.c to hb-blob.cc in preparation of more changes
 
- src/Makefile.am              | 2 +-
- src/{hb-blob.c => hb-blob.cc} | 2 +-
- 2 files changed, 2 insertions(+), 2 deletions(-)
+ src/Makefile.am |   2 +-
+ src/hb-blob.c  | 356
+ --------------------------------------------------------
+ src/hb-blob.cc  | 356
+ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 357 insertions(+), 357 deletions(-)
 
 commit 04744e73bad22d679986173b5f0d84dbbf49dd57
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -39607,9 +32658,12 @@ Date:  Wed Apr 20 02:56:39 2011 -0400
 
     [test] Rename test-types to test-common
 
- test/Makefile.am                    | 2 +-
- test/{test-types.c => test-common.c} | 0
- 2 files changed, 1 insertion(+), 1 deletion(-)
+ test/Makefile.am   |  2 +-
+ test/test-common.c | 166
+ +++++++++++++++++++++++++++++++++++++++++++++++++++++
+ test/test-types.c  | 166
+ -----------------------------------------------------
+ 3 files changed, 167 insertions(+), 167 deletions(-)
 
 commit f144a8ea840c6452c1fece2fd988b42a8ea7c5a6
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -39657,18 +32711,23 @@ Date: Wed Apr 20 02:00:47 2011 -0400
 
     unicode: Cleanup implementation
 
- src/Makefile.am                                   |   8 +-
- src/hb-buffer-private.hh                          |   2 +-
- src/{hb-glib.c => hb-glib.cc}                     |  65 +++----
- src/{hb-icu.c => hb-icu.cc}                       |  30 +--
- src/hb-ot-shape.cc                                |  14 +-
- src/hb-shape.cc                                   |   4 +-
- ...{hb-unicode-private.h => hb-unicode-private.hh} |  65 ++++---
- src/{hb-unicode.c => hb-unicode.cc}               | 213
- +++++++++------------
- src/hb-unicode.h                                  |  57 +++---
- test/test-unicode.c                               |  23 ++-
- 10 files changed, 237 insertions(+), 244 deletions(-)
+ 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
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -41485,15 +34544,17 @@ Date: Tue Oct 12 16:50:36 2010 -0400
 
     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 +-
- ...ape-arabic.cc => hb-ot-shape-complex-arabic.cc} |  9 +++
- src/hb-ot-shape-complex-private.hh                | 88
- ++++++++++++++++++++++
- src/hb-ot-shape-private.hh                        | 12 +--
- src/hb-ot-shape.cc                                |  8 +-
- 7 files changed, 107 insertions(+), 17 deletions(-)
+ 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
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -42172,15 +35233,19 @@ Date: Fri Jul 23 15:00:13 2010 -0400
 
     Helps with avoiding many "extern C" declarations in source files.
 
- src/Makefile.am                              | 4 ++--
- src/check-header-guards.sh                   | 2 +-
- src/{hb-font-private.hh => hb-font-private.h} | 6 +++---
- src/hb-font.cc                                       | 2 +-
- src/{hb-ft.cc => hb-ft.c}                    | 2 +-
- src/hb-graphite.cc                           | 2 +-
- src/hb-ot-layout-gdef-private.hh             | 2 +-
- src/hb-ot-layout-private.hh                  | 2 +-
- 8 files changed, 11 insertions(+), 11 deletions(-)
+ 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
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -43507,24 +36572,32 @@ Date: Wed May 12 18:23:21 2010 -0400
 
     In anticipation for buffer revamp coming.
 
- src/Makefile.am                                        | 16
- ++++++++--------
- src/{hb-buffer-private.h => hb-buffer-private.hh}      |  2 +-
- src/{hb-buffer.c => hb-buffer.cc}                      | 14
- +++++++-------
- src/hb-common.h                                        |  1 +
- src/{hb-font-private.h => hb-font-private.hh}          |  2 +-
- src/hb-font.cc                                                 |  4 ++--
- src/{hb-ft.c => hb-ft.cc}                              |  8 ++++----
- 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 => hb-ot-layout-private.hh} |  2 +-
- src/hb-ot-layout.cc                                    |  2 +-
- src/{hb-ot-shape-private.h => hb-ot-shape-private.hh}  |  0
- src/{hb-ot-shape.c => hb-ot-shape.cc}                  |  4 ++--
- src/{hb-shape.c => hb-shape.cc}                        |  6 +++---
- 15 files changed, 34 insertions(+), 33 deletions(-)
+ 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
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -46726,21 +39799,24 @@ Date: Mon Nov 2 16:28:39 2009 -0500
 
     Add build system
 
- AUTHORS               |   0
- src/COPYING => COPYING |   0
- Makefile.am           |   3 +
- NEWS                  |   0
- src/README => README  |   0
- src/TODO => TODO      |   0
- autogen.sh            | 189
- +++++++++++++++++++++++++++++++++++++++++++++++++
- configure.ac          |  40 +++++++++++
- git.mk                        | 184
- +++++++++++++++++++++++++++++++++++++++++++++++
- harfbuzz.pc.in                |  11 +++
- src/.gitignore                |   1 -
- src/Makefile.ng       |  11 ---
- 12 files changed, 427 insertions(+), 12 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>
@@ -47833,11 +40909,14 @@ Date: Tue Aug 4 22:06:57 2009 -0400
 
     [HB] Rename open-types to open-type; beauty
 
- src/Makefile.am                                          | 2 +-
- src/hb-open-file-private.hh                              | 2 +-
- src/{hb-open-types-private.hh => hb-open-type-private.hh} | 0
- src/hb-ot-layout-common-private.hh                       | 2 +-
- 4 files changed, 3 insertions(+), 3 deletions(-)
+ 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
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -48234,9 +41313,12 @@ Date:  Sun Aug 2 20:06:48 2009 -0400
 
     [HB] Rename hb-font.c to hb-font.cc
 
- src/Makefile.am              | 2 +-
- src/{hb-font.c => hb-font.cc} | 0
- 2 files changed, 1 insertion(+), 1 deletion(-)
+ src/Makefile.am |   2 +-
+ src/hb-font.c  | 349
+ --------------------------------------------------------
+ src/hb-font.cc  | 349
+ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 350 insertions(+), 350 deletions(-)
 
 commit 5f5b24f99f52bbc922e238b65c06061ba07c8548
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -48244,18 +41326,26 @@ Date: Sun Aug 2 20:03:12 2009 -0400
 
     [OT] Rename C++ header files from *.h to *.hh
 
- src/Makefile.am                                           | 14
- +++++++-------
- src/{hb-open-file-private.h => hb-open-file-private.hh}    |  8 ++++----
- src/{hb-open-types-private.h => hb-open-types-private.hh}  |  6 +++---
- ...out-common-private.h => hb-ot-layout-common-private.hh} |  8 ++++----
- ...-layout-gdef-private.h => hb-ot-layout-gdef-private.hh} |  8 ++++----
- ...-layout-gpos-private.h => hb-ot-layout-gpos-private.hh} |  8 ++++----
- ...-layout-gsub-private.h => hb-ot-layout-gsub-private.hh} |  8 ++++----
- ...gsubgpos-private.h => hb-ot-layout-gsubgpos-private.hh} |  8 ++++----
- src/hb-ot-layout.cc                                       |  8 ++++----
- src/main.cc                                               |  6 +++---
- 10 files changed, 41 insertions(+), 41 deletions(-)
+ src/Makefile.am                     |   14 +-
+ src/hb-open-file-private.h          |  145 ----
+ src/hb-open-file-private.hh         |  145 ++++
+ src/hb-open-types-private.h         |  386 ----------
+ src/hb-open-types-private.hh        |  386 ++++++++++
+ src/hb-ot-layout-common-private.h    |  447 -----------
+ src/hb-ot-layout-common-private.hh   |  447 +++++++++++
+ src/hb-ot-layout-gdef-private.h      |  320 --------
+ src/hb-ot-layout-gdef-private.hh     |  320 ++++++++
+ src/hb-ot-layout-gpos-private.h      | 1355
+ ----------------------------------
+ src/hb-ot-layout-gpos-private.hh     | 1355
+ ++++++++++++++++++++++++++++++++++
+ src/hb-ot-layout-gsub-private.h      |  751 -------------------
+ src/hb-ot-layout-gsub-private.hh     |  751 +++++++++++++++++++
+ src/hb-ot-layout-gsubgpos-private.h  |  773 -------------------
+ src/hb-ot-layout-gsubgpos-private.hh |  773 +++++++++++++++++++
+ src/hb-ot-layout.cc                 |    8 +-
+ src/main.cc                         |    6 +-
+ 17 files changed, 4191 insertions(+), 4191 deletions(-)
 
 commit 2098a021a826e76ee27d5db74e32738d7d1c3d30
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -48263,15 +41353,15 @@ Date: Sun Aug 2 19:57:00 2009 -0400
 
     [HB] Move OT file handling out of ot-layout
 
- src/Makefile.am                                   |   3 +-
- src/hb-open-file-private.h                        | 145
- +++++++++++++++++++++
- ...yout-open-private.h => hb-open-types-private.h} | 117
- +----------------
src/hb-ot-layout-common-private.h                 |   4 +-
- src/hb-ot-layout.cc                               |   2 +-
- src/main.cc                                       |   4 +-
6 files changed, 157 insertions(+), 118 deletions(-)
+ 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
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -48427,14 +41517,15 @@ Date: Sat Aug 1 20:29:22 2009 -0400
 
     [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-refcount-private.h => hb-object-private.h} | 14 ++++++--
- src/hb-private.h                                  |  2 ++
- 6 files changed, 27 insertions(+), 35 deletions(-)
+ 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
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -49225,15 +42316,20 @@ Date: Wed May 20 05:42:12 2009 -0400
 
     [HB] Rename harfbuzz-buffer to hb-buffer
 
- src/Makefile.am                                       | 5 +++--
- src/{harfbuzz-buffer-private.h => hb-buffer-private.h} | 8 ++++----
- src/{harfbuzz-buffer.c => hb-buffer.c}                        | 6 ++----
- src/{harfbuzz-buffer.h => hb-buffer.h}                        | 8 ++++----
- 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 +-
- 8 files changed, 19 insertions(+), 19 deletions(-)
+ 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
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -50696,7 +43792,8 @@ Date:   Thu Jan 24 03:11:09 2008 -0500
 
     Starting public interface
 
- src/{Makefile => Makefile.ng}  |  0
+ 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
@@ -50705,7 +43802,7 @@ Date:   Thu Jan 24 03:11:09 2008 -0500
  src/hb-ot-layout.cc            | 67 ++++++++++++++++++++++++++++++
  src/hb-ot-layout.h             | 35 ++++++++++++++--
  src/main.cc                    |  1 +
8 files changed, 225 insertions(+), 41 deletions(-)
9 files changed, 236 insertions(+), 52 deletions(-)
 
 commit 7d6b95b000ec6cd8ca93113b2d81a049ad2f9bbe
 Author: Behdad Esfahbod <behdad@src.gnome.org>
@@ -50785,20 +43882,21 @@ Date: Wed Jan 23 05:00:30 2008 -0500
 
     Clean up file names, add namespace
 
- src/harfbuzz-common.h                                     | 14
- --------------
- src/harfbuzz-gdef.h                                       | 11
- -----------
- src/hb-common.h                                           | 14
- ++++++++++++++
- ...harfbuzz-gdef-private.h => hb-ot-layout-gdef-private.h} |  8 ++++----
- ...harfbuzz-open-private.h => hb-ot-layout-open-private.h} | 10
- +++++-----
- src/{harfbuzz-open.h => hb-ot-layout.h}                   | 12
- ++++++------
- src/{harfbuzz-private.h => hb-private.h}                  |  6 +++---
- src/main.cc                                               |  4 ++--
- 8 files changed, 34 insertions(+), 45 deletions(-)
+ 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
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -51118,24 +44216,26 @@ Date: Thu Oct 25 00:23:46 2007 +0000
            and more
            type renames and moving code around.
 
- src/Makefile.am                  |   3 +-
- 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/{ftglue.c => harfbuzz-impl.c} |  64 ++++++++--------
- 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 +-
- 16 files changed, 289 insertions(+), 381 deletions(-)
+ 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
 Author: Behdad Esfahbod <behdad@gnome.org>
@@ -51635,15 +44735,15 @@ Date: Thu Dec 28 06:10:59 2006 -0500
 
     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 => harfbuzz-open-private.h} | 117
++----------------------
- src/harfbuzz-open.h                            |  13 +++
- src/main.cc                                    |  98
++++++++++++++++++++
6 files changed, 133 insertions(+), 112 deletions(-)
+ 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
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -51771,9 +44871,12 @@ Date:  Mon Dec 25 10:28:31 2006 -0500
 
     Rename to harfbuzz-ng.cc
 
- src/Makefile                               | 2 +-
- src/{hb-types-private.cc => harfbuzz-ng.cc} | 0
- 2 files changed, 1 insertion(+), 1 deletion(-)
+ src/Makefile           |   2 +-
+ src/harfbuzz-ng.cc     | 513
+ ++++++++++++++++++++++++++++++++++++++++++++++++
+ src/hb-types-private.cc | 513
+ ------------------------------------------------
+ 3 files changed, 514 insertions(+), 514 deletions(-)
 
 commit f8ba99f6f322800a915428ffc3b5eaf1be2e6c21
 Author: Behdad Esfahbod <behdad@behdad.org>
@@ -52140,48 +45243,52 @@ Date: Fri Mar 31 12:28:09 2006 +0000
 
            * pango/pango-ot-*: Updated to use HarfBuzz symbol names.
 
- src/COPYING                           |   15 +
- src/{FTL.TXT => COPYING.FTL}          |    0
- src/COPYING.GPL                       |  340 ++
- src/FT-license.txt                    |   28 -
- src/Makefile.am                       |   89 +-
- src/README                            |   44 +-
- src/ftglue.c                          |   88 +-
- src/ftglue.h                          |   68 +-
- src/ftxgdef.c                         | 1225 -------
- src/ftxgdef.h                         |  224 --
- src/ftxgpos.c                         | 6199
- -------------------------------
- src/ftxgpos.h                         |  838 -----
- src/ftxgsub.c                         | 4533 -----------------------
- src/ftxgsub.h                         |  594 ---
- src/ftxopen.c                         | 1552 --------
- src/ftxopen.h                         |  317 --
- src/ftxopenf.h                                |  166 -
- src/harfbuzz-buffer.c                 |  227 ++
- src/harfbuzz-buffer.h                 |  106 +
- src/{ottest.c => harfbuzz-dump-main.c} |   84 +-
- src/{disasm.c => harfbuzz-dump.c}     |  186 +-
- src/{disasm.h => harfbuzz-dump.h}     |   18 +-
- src/harfbuzz-gdef-private.h           |  101 +
- src/harfbuzz-gdef.c                   | 1228 +++++++
- src/harfbuzz-gdef.h                   |  127 +
- src/harfbuzz-gpos-private.h           |  683 ++++
- src/harfbuzz-gpos.c                   | 6269
- ++++++++++++++++++++++++++++++++
- src/harfbuzz-gpos.h                   |  168 +
- src/harfbuzz-gsub-private.h           |  448 +++
- src/harfbuzz-gsub.c                   | 4581 +++++++++++++++++++++++
- src/harfbuzz-gsub.h                   |  132 +
- src/harfbuzz-impl.h                   |   64 +
- src/harfbuzz-open-private.h           |   81 +
- src/harfbuzz-open.c                   | 1426 ++++++++
- src/harfbuzz-open.h                   |  285 ++
- src/harfbuzz.c                                |   19 +
- src/harfbuzz.h                                |   23 +
- src/otlbuffer.c                       |  238 --
- src/otlbuffer.h                       |  103 -
- 39 files changed, 16582 insertions(+), 16335 deletions(-)
+ src/COPYING                |   15 +
+ src/COPYING.FTL            |  174 ++
+ src/COPYING.GPL            |  340 +++
+ src/FT-license.txt         |   28 -
+ src/FTL.TXT                |  174 --
+ src/Makefile.am            |   89 +-
+ src/README                 |   44 +-
+ src/disasm.c               |  720 -----
+ src/disasm.h               |   26 -
+ src/ftglue.c               |   88 +-
+ src/ftglue.h               |   68 +-
+ src/ftxgdef.c              | 1225 ---------
+ src/ftxgdef.h              |  224 --
+ src/ftxgpos.c              | 6199
+ ------------------------------------------
+ src/ftxgpos.h              |  838 ------
+ src/ftxgsub.c              | 4533 -------------------------------
+ src/ftxgsub.h              |  594 ----
+ src/ftxopen.c              | 1552 -----------
+ src/ftxopen.h              |  317 ---
+ src/ftxopenf.h                     |  166 --
+ src/harfbuzz-buffer.c      |  227 ++
+ src/harfbuzz-buffer.h      |  106 +
+ src/harfbuzz-dump-main.c    | 272 ++
+ src/harfbuzz-dump.c        |  720 +++++
+ src/harfbuzz-dump.h        |   34 +
+ src/harfbuzz-gdef-private.h | 101 +
+ src/harfbuzz-gdef.c        | 1228 +++++++++
+ src/harfbuzz-gdef.h        |  127 +
+ src/harfbuzz-gpos-private.h | 683 +++++
+ src/harfbuzz-gpos.c        | 6269
+ +++++++++++++++++++++++++++++++++++++++++++
+ src/harfbuzz-gpos.h        |  168 ++
+ src/harfbuzz-gsub-private.h | 448 ++++
+ src/harfbuzz-gsub.c        | 4581 +++++++++++++++++++++++++++++++
+ src/harfbuzz-gsub.h        |  132 +
+ src/harfbuzz-impl.h        |   64 +
+ src/harfbuzz-open-private.h |  81 +
+ src/harfbuzz-open.c        | 1426 ++++++++++
+ src/harfbuzz-open.h        |  285 ++
+ src/harfbuzz.c                     |   19 +
+ src/harfbuzz.h                     |   23 +
+ src/otlbuffer.c            |  238 --
+ src/otlbuffer.h            |  103 -
+ src/ottest.c               |  274 --
+ 43 files changed, 17635 insertions(+), 17388 deletions(-)
 
 commit dd2a8d4d490df1d310e7553ba6c7c8de661f28a1
 Author: Behdad Esfahbod <behdad@gnome.org>
diff --git a/INSTALL b/INSTALL
index 2099840..007e939 100644 (file)
--- a/INSTALL
+++ b/INSTALL
@@ -12,8 +12,8 @@ without warranty of any kind.
 Basic Installation
 ==================
 
-   Briefly, the shell command `./configure && make && make install'
-should configure, build, and install this package.  The following
+   Briefly, the shell commands `./configure; make; make install' should
+configure, build, and install this package.  The following
 more-detailed instructions are generic; see the `README' file for
 instructions specific to this package.  Some packages provide this
 `INSTALL' file but do not implement all of the features documented
index d56a151..47aeb97 100644 (file)
@@ -4,14 +4,13 @@ NULL =
 
 ACLOCAL_AMFLAGS = -I m4
 
-SUBDIRS = src util test docs win32
+SUBDIRS = src util test docs
 
 EXTRA_DIST = \
        autogen.sh \
        harfbuzz.doap \
        Android.mk \
        README.python \
-       BUILD.md \
        $(NULL)
 
 MAINTAINERCLEANFILES = \
@@ -21,7 +20,6 @@ MAINTAINERCLEANFILES = \
        $(srcdir)/INSTALL \
        $(srcdir)/ChangeLog \
        $(srcdir)/gtk-doc.make \
-       $(srcdir)/m4/gtk-doc.m4 \
        $(NULL)
 
 
index e817519..badd4c0 100644 (file)
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.14 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994-2013 Free Software Foundation, Inc.
@@ -224,8 +224,6 @@ CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
-DIRECTWRITE_CXXFLAGS = @DIRECTWRITE_CXXFLAGS@
-DIRECTWRITE_LIBS = @DIRECTWRITE_LIBS@
 DLLTOOL = @DLLTOOL@
 DSYMUTIL = @DSYMUTIL@
 DUMPBIN = @DUMPBIN@
@@ -235,20 +233,15 @@ ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
 FGREP = @FGREP@
-FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@
-FONTCONFIG_LIBS = @FONTCONFIG_LIBS@
 FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
-FREETYPE_DEPS = @FREETYPE_DEPS@
 FREETYPE_LIBS = @FREETYPE_LIBS@
 GIT = @GIT@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_DEPS = @GLIB_DEPS@
 GLIB_LIBS = @GLIB_LIBS@
 GLIB_MKENUMS = @GLIB_MKENUMS@
 GOBJECT_CFLAGS = @GOBJECT_CFLAGS@
 GOBJECT_LIBS = @GOBJECT_LIBS@
 GRAPHITE2_CFLAGS = @GRAPHITE2_CFLAGS@
-GRAPHITE2_DEPS = @GRAPHITE2_DEPS@
 GRAPHITE2_LIBS = @GRAPHITE2_LIBS@
 GREP = @GREP@
 GTKDOC_CHECK = @GTKDOC_CHECK@
@@ -373,13 +366,12 @@ top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 NULL = 
 ACLOCAL_AMFLAGS = -I m4
-SUBDIRS = src util test docs win32
+SUBDIRS = src util test docs
 EXTRA_DIST = \
        autogen.sh \
        harfbuzz.doap \
        Android.mk \
        README.python \
-       BUILD.md \
        $(NULL)
 
 MAINTAINERCLEANFILES = \
@@ -389,7 +381,6 @@ MAINTAINERCLEANFILES = \
        $(srcdir)/INSTALL \
        $(srcdir)/ChangeLog \
        $(srcdir)/gtk-doc.make \
-       $(srcdir)/m4/gtk-doc.m4 \
        $(NULL)
 
 
@@ -725,10 +716,9 @@ distcheck: dist
          && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
          && am__cwd=`pwd` \
          && $(am__cd) $(distdir)/_build \
-         && ../configure \
+         && ../configure --srcdir=.. --prefix="$$dc_install_base" \
            $(AM_DISTCHECK_CONFIGURE_FLAGS) \
            $(DISTCHECK_CONFIGURE_FLAGS) \
-           --srcdir=.. --prefix="$$dc_install_base" \
          && $(MAKE) $(AM_MAKEFLAGS) \
          && $(MAKE) $(AM_MAKEFLAGS) dvi \
          && $(MAKE) $(AM_MAKEFLAGS) check \
diff --git a/NEWS b/NEWS
index e62b198..c4950e2 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,322 +1,3 @@
-Overview of changes leading to 1.2.7
-Monday, May 2, 2016
-====================================
-
-- Blacklist another version of Times New Roman (Bold) Italic from Windows 7.
-- Fix Mongolian Free Variation Selectors shaping with certain fonts.
-- Fix Tibetan shorthand contractions shaping.
-- Improved list of language tag mappings.
-- Unbreak build on Windows CE.
-- Make 'glyf' table loading lazy in hb-ot-font.
-
-
-Overview of changes leading to 1.2.6
-Friday, April 8, 2016
-====================================
-
-- Blacklist GDEF table of another set of Times New Roman (Bold) Italic.
-- DirectWrite backend improvements.  Note: DirectWrite backend is
-  exclusively for our internal testing and should NOT be used in any
-  production system whatsoever.
-
-
-Overview of changes leading to 1.2.5
-Monday, April 4, 2016
-====================================
-
-- Fix GDEF mark-filtering-set, which was broken in 1.2.3.
-
-
-Overview of changes leading to 1.2.4
-Thursday, March 17, 2016
-====================================
-
-- Synthesize GDEF glyph class for any glyph that does not have one in GDEF.
-  I really hope we don't discover broken fonts that shape badly with this
-  change.
-- Misc build and other minor fixes.
-- API changes:
-  - Added HB_NDEBUG.  It's fine for production systems to define this to
-    disable high-overhead debugging checks.  However, I also reduced the
-    overhead of those checks, so it's a non-issue right now.  You can
-    forget it.  Just not defining anything at all is fine.
-
-
-Overview of changes leading to 1.2.3
-Thursday, February 25, 2016
-====================================
-
-- Blacklist GDEF table of certain versions of Times New Roman (Bold) Italic,
-  due to bug in glyph class of ASCII double-quote character.  This should
-  address "regression" introduced in 1.2.0 when we switched mark zeroing
-  in most shapers from BY_UNICODE_LATE to BY_GDEF_LATE.
-  This fourth release in a week should finally stablize things...
-
-- hb-ot-font's get_glyph() implementation saw some optimizations.  Though,
-  might be really hard to measure in real-world situations.
-
-- Also, two rather small API changes:
-
-We now disable some time-consuming internal bookkeeping if built with NDEBUG
-defined.  This is a first time that we use NDEBUG to disable debug code.  If
-there exist production systems that do NOT want to enable NDEBUG, please let
-me know and I'll add HB_NDEBUG.
-
-Added get_nominal_glyph() and get_variation_glyph() instead of get_glyph()
-
-New API:
-- hb_font_get_nominal_glyph_func_t
-- hb_font_get_variation_glyph_func_t
-- hb_font_funcs_set_nominal_glyph_func()
-- hb_font_funcs_set_variation_glyph_func()
-- hb_font_get_nominal_glyph()
-- hb_font_get_variation_glyph()
-
-Deprecated API:
-- hb_font_get_glyph_func_t
-- hb_font_funcs_set_glyph_func()
-
-Clients that implement their own font-funcs are encouraged to replace
-their get_glyph() implementation with a get_nominal_glyph() and
-get_variation_glyph() pair.  The variation version can assume that
-variation_selector argument is not zero.  Old (deprecated) functions
-will continue working indefinitely using internal gymnastics; it is
-just more efficient to use the new functions.
-
-
-Overview of changes leading to 1.2.2
-Wednesday, February 24, 2016
-====================================
-
-- Fix regression with mark positioning with fonts that have
-  non-zero mark advances.  This was introduced in 1.2.0 while
-  trying to make mark and cursive attachments to work together.
-  I have partially reverted that, so this version is much more
-  like what we had before.  All clients who updated to 1.2.0
-  should update to this version.
-
-
-Overview of changes leading to 1.2.1
-Tuesday, February 23, 2016
-====================================
-
-- CoreText: Fix bug with wrong scale if font scale was changed later.
-  https://github.com/libass/libass/issues/212
-- CoreText: Drastically speed up font initialization.
-- CoreText: Fix tiny leak.
-- Group ZWJ/ZWNJ with previous syllable under cluster-level=0.
-  https://github.com/behdad/harfbuzz/issues/217
-- Add test/shaping/README.md about how to add tests to the suite.
-
-
-Overview of changes leading to 1.2.0
-Friday, February 19, 2016
-====================================
-
-- Fix various issues (hangs mostly) in case of memory allocation failure.
-- Change mark zeroing types of most shapers from BY_UNICODE_LATE to
-  BY_GDEF_LATE.  This seems to be what Uniscribe does.
-- Change mark zeroing of USE shaper from NONE to BY_GDEF_EARLY.  That's
-  what Windows does.
-- Allow GPOS cursive connection on marks, and fix the interaction with
-  mark attachment.  This work resulted in some changes to how mark
-  attachments work.  See:
-  https://github.com/behdad/harfbuzz/issues/211
-  https://github.com/behdad/harfbuzz/commit/86c68c7a2c971efe8e35b1f1bd99401dc8b688d2
-- Graphite2 shaper: improved negative advance handling (eg. Nastaliq).
-- Add nmake-based build system for Windows.
-- Minor speedup.
-- Misc. improvements.
-
-
-Overview of changes leading to 1.1.3
-Monday, January 11, 2016
-====================================
-
-- Ported Indic shaper to Unicode 8.0 data.
-- Universal Shaping Engine fixes.
-- Speed up CoreText shaper when font fallback happens in CoreText.
-- Documentation improvements, thanks to Khaled Hosny.
-- Very rough directwrite shaper for testing, thanks to Ebrahim Byagowi.
-- Misc bug fixes.
-- New API:
-
-  * Font extents:
-      hb_font_extents_t
-      hb_font_get_font_extents_func_t
-      hb_font_get_font_h_extents_func_t
-      hb_font_get_font_v_extents_func_t
-      hb_font_funcs_set_font_h_extents_func
-      hb_font_funcs_set_font_v_extents_func
-      hb_font_get_h_extents
-      hb_font_get_v_extents
-      hb_font_get_extents_for_direction
-
-  * Buffer message (aka debug):
-      hb_buffer_message_func_t
-      hb_buffer_set_message_func()
-    Actual message protocol to be fleshed out later.
-
-
-Overview of changes leading to 1.1.2
-Wednesday, November 26, 2015
-====================================
-
-- Fix badly-broken fallback shaper that affected terminology.
-  https://github.com/behdad/harfbuzz/issues/187
-- Fix y_scaling in Graphite shaper.
-- API changes:
-  * An unset glyph_h_origin() function in font-funcs now (sensibly)
-    implies horizontal origin at 0,0.  Ie, the nil callback returns
-    true instead of false.  As such, implementations that have a
-    glyph_h_origin() that simply returns true, can remove that function
-    with HarfBuzz >= 1.1.2.  This results in a tiny speedup.
-
-
-Overview of changes leading to 1.1.1
-Wednesday, November 24, 2015
-====================================
-
-- Build fixes, specially for hb-coretext.
-
-
-Overview of changes leading to 1.1.0
-Wednesday, November 18, 2015
-====================================
-
-- Implement 'stch' stretch feature for Syriac Abbreviation Mark.
-  https://github.com/behdad/harfbuzz/issues/141
-- Disable use of decompose_compatibility() callback.
-- Implement "shaping" of various Unicode space characters, even
-  if the font does not support them.
-  https://github.com/behdad/harfbuzz/issues/153
-- If font does not support U+2011 NO-BREAK HYPHEN, fallback to
-  U+2010 HYPHEN.
-- Changes resulting from libFuzzer continuous fuzzing:
-  * Reject font tables that need more than 8 edits,
-  * Bound buffer growth during shaping to 32x,
-  * Fix assertions and other issues at OOM / buffer max-growth.
-- Misc fixes and optimizations.
-- API changes:
-  * All fonts created with hb_font_create() now inherit from
-    (ie. have parent) hb_font_get_empty().
-
-
-Overview of changes leading to 1.0.6
-Thursday, October 15, 2015
-====================================
-
-- Reduce max nesting level in OT lookups from 8 to 6.
-  Should not affect any real font as far as I know.
-- Fix memory access issue in ot-font.
-- Revert default load-flags of fonts created using hb_ft_font_create()
-  back to FT_LOAD_DEFAULT|FT_LOAD_NO_HINTING.  This was changed in
-  last release (1.0.5), but caused major issues, so revert.
-  https://github.com/behdad/harfbuzz/issues/143
-
-
-Overview of changes leading to 1.0.5
-Tuesday, October 13, 2015
-====================================
-
-- Fix multiple memory access bugs discovered using libFuzzer.
-  https://github.com/behdad/harfbuzz/issues/139
-  Everyone should upgrade to this version as soon as possible.
-  We now have continuous fuzzing set up, to avoid issues like
-  these creeping in again.
-- Misc fixes.
-
-- New API:
-  * hb_font_set_parent().
-  * hb_ft_font_[sg]et_load_flags()
-    The default flags for fonts created using hb_ft_font_create()
-    has changed to default to FT_LOAD_DEFAULT now.  Previously it
-    was defaulting to FT_LOAD_DFEAULT|FT_LOAD_NO_HINTING.
-
-- API changes:
-  * Fonts now default to units-per-EM as their scale, instead of 0.
-  * hb_font_create_sub_font() does NOT make parent font immutable
-    anymore.  hb_font_make_immutable() does.
-
-
-Overview of changes leading to 1.0.4
-Wednesday, September 30, 2015
-====================================
-
-- Fix minor out-of-bounds read error.
-
-
-Overview of changes leading to 1.0.3
-Tuesday, September 1, 2015
-====================================
-
-- Start of user documentation, from Simon Cozens!
-- Implement glyph_extents() for TrueType fonts in hb-ot-font.
-- Improve GPOS cursive attachments with conflicting lookups.
-- More fixes for cluster-level = 1.
-- Uniscribe positioning fix.
-
-
-Overview of changes leading to 1.0.2
-Wednesday, August 19, 2015
-====================================
-
-- Fix shaping with cluster-level > 0.
-- Fix Uniscribe backend font-size scaling.
-- Declare dependencies in harfbuzz.pc.
-  FreeType is not declared though, to avoid bugs in pkg-config
-  0.26 with recursive dependencies.
-- Slightly improved debug infrastructure.  More to come later.
-- Misc build fixes.
-
-
-Overview of changes leading to 1.0.1
-Monday, July 27, 2015
-====================================
-
-- Fix out-of-bounds access in USE shaper.
-
-
-Overview of changes leading to 1.0.0
-Sunday, July 26, 2015
-====================================
-
-- Implement Universal Shaping Engine:
-  https://www.microsoft.com/typography/OpenTypeDev/USE/intro.htm
-  http://blogs.windows.com/bloggingwindows/2015/02/23/windows-shapes-the-worlds-languages/
-- Bump version to 1.0.0.  The soname was NOT bumped.
-
-
-Overview of changes leading to 0.9.42
-Thursday, July 26, 2015
-=====================================
-
-- New API to allow for retrieving finer-grained cluster
-  mappings if the client desires to handle them.  Default
-  behavior is unchanged.
-- Fix cluster merging when removing default-ignorables.
-- Update to Unicode 8.0
-- hb-graphite2 fixes.
-- Misc fixes.
-- Removed HB_NO_MERGE_CLUSTERS hack.
-- New API:
-  hb_buffer_cluster_level_t enum
-  hb_buffer_get_cluster_level()
-  hb_buffer_set_cluster_level()
-  hb-shape / hb-view --cluster-level
-
-
-Overview of changes leading to 0.9.41
-Thursday, June 18, 2015
-=====================================
-
-- Fix hb-coretext with trailing whitespace in right-to-left.
-- New API: hb_buffer_reverse_range().
-- Allow implementing atomic ops in config.h.
-- Fix hb_language_t in language bindings.
-- Misc fixes.
-
-
 Overview of changes leading to 0.9.40
 Friday, March 20, 2015
 =====================================
diff --git a/README b/README
index 3fcdfb4..d34bc74 100644 (file)
--- a/README
+++ b/README
@@ -1,6 +1,5 @@
 [![Build Status](https://travis-ci.org/behdad/harfbuzz.svg)](https://travis-ci.org/behdad/harfbuzz)
 [![Coverage Status](https://img.shields.io/coveralls/behdad/harfbuzz.svg)](https://coveralls.io/r/behdad/harfbuzz)
-[ABI Tracker](http://abi-laboratory.pro/tracker/timeline/harfbuzz/)
 
 This is HarfBuzz, a text shaping library.
 
index cd31264..eabdf5b 100644 (file)
@@ -1,10 +1,6 @@
 To enable HarfBuzz bindings for Python among other languages, make sure
-you have latest version of gobject-introspection available.  On Ubuntu,
-you can install that this way:
-
-  sudo apt-get install libgirepository1.0-dev
-
-And then run autogen.sh (if building from git), and then:
+you have latest version of gobject-introspection compiled, and then
+run autogen.sh (if building from git), and then:
 
   ./configure --with-gobject --enable-introspection
 
diff --git a/TODO b/TODO
index 4f37f60..e1aa39c 100644 (file)
--- a/TODO
+++ b/TODO
@@ -9,14 +9,26 @@ General fixes:
 
 - mask propagation? (when ligation, "or" the masks).
 
+- Warn at compile time (and runtime with HB_DEBUG?) if no Unicode / font
+  funcs found / set.
 
-API issues:
-===========
+- Do proper rounding when scaling from font space?  May be a non-issue.
+
+- Misc features:
+  * init/medi/fina/isol for non-cursive scripts
+
+
+API issues to fix before 1.0:
+============================
 
 - API to accept a list of languages?
 
 - Add init_func to font_funcs.  Adjust ft.
 
+- hb-ft load_flags issues.
+
+- Add pkg-config files for glue codes (harfbuzz-glib, etc)
+
 - 'const' for getter APIs? (use mutable internally)
 
 - Remove hb_ot_shape_glyphs_closure()?
index c0e8135..0a02487 100644 (file)
@@ -1,4 +1,4 @@
-# generated automatically by aclocal 1.14.1 -*- Autoconf -*-
+# generated automatically by aclocal 1.14 -*- Autoconf -*-
 
 # Copyright (C) 1996-2013 Free Software Foundation, Inc.
 
@@ -132,7 +132,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION],
 [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.
-m4_if([$1], [1.14.1], [],
+m4_if([$1], [1.14], [],
       [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
 ])
 
@@ -148,7 +148,7 @@ 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],
-[AM_AUTOMAKE_VERSION([1.14.1])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]))])
index c4ca473..35395c3 100644 (file)
 /* Have Core Text backend */
 #undef HAVE_CORETEXT
 
-/* Have DirectWrite library */
-#undef HAVE_DIRECTWRITE
-
 /* Define to 1 if you have the <dlfcn.h> header file. */
 #undef HAVE_DLFCN_H
 
-/* Define to 1 if you have the <dwrite.h> header file. */
-#undef HAVE_DWRITE_H
-
 /* Have simple TrueType Layout backend */
 #undef HAVE_FALLBACK
 
-/* Have fontconfig library */
-#undef HAVE_FONTCONFIG
-
 /* Have FreeType 2 library */
 #undef HAVE_FREETYPE
 
@@ -48,9 +39,6 @@
 /* Have ICU library */
 #undef HAVE_ICU
 
-/* Use hb-icu Unicode callbacks */
-#undef HAVE_ICU_BUILTIN
-
 /* Have Intel __sync_* atomic primitives */
 #undef HAVE_INTEL_ATOMIC_PRIMITIVES
 
 /* Define to 1 if you have the <windows.h> header file. */
 #undef HAVE_WINDOWS_H
 
-/* Define to the sub-directory in which libtool stores uninstalled libraries.
-   */
+/* 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. */
index 9633db7..8b612ab 100755 (executable)
@@ -2,7 +2,7 @@
 # Configuration validation subroutine script.
 #   Copyright 1992-2013 Free Software Foundation, Inc.
 
-timestamp='2013-08-10'
+timestamp='2013-04-24'
 
 # 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
@@ -257,7 +257,7 @@ case $basic_machine in
        | avr | avr32 \
        | be32 | be64 \
        | bfin \
-       | c4x | c8051 | clipper \
+       | c4x | clipper \
        | d10v | d30v | dlx | dsp16xx \
        | epiphany \
        | fido | fr30 | frv \
@@ -372,7 +372,7 @@ case $basic_machine in
        | be32-* | be64-* \
        | bfin-* | bs2000-* \
        | c[123]* | c30-* | [cjt]90-* | c4x-* \
-       | c8051-* | clipper-* | craynv-* | cydra-* \
+       | clipper-* | craynv-* | cydra-* \
        | d10v-* | d30v-* | dlx-* \
        | elxsi-* \
        | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
@@ -794,7 +794,7 @@ case $basic_machine in
                os=-mingw64
                ;;
        mingw32)
-               basic_machine=i686-pc
+               basic_machine=i386-pc
                os=-mingw32
                ;;
        mingw32ce)
@@ -830,7 +830,7 @@ case $basic_machine in
                basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
                ;;
        msys)
-               basic_machine=i686-pc
+               basic_machine=i386-pc
                os=-msys
                ;;
        mvs)
@@ -1546,9 +1546,6 @@ case $basic_machine in
        c4x-* | tic4x-*)
                os=-coff
                ;;
-       c8051-*)
-               os=-elf
-               ;;
        hexagon-*)
                os=-elf
                ;;
index 1b45257..1c08cae 100755 (executable)
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for HarfBuzz 1.2.7.
+# Generated by GNU Autoconf 2.69 for HarfBuzz 0.9.40.
 #
 # Report bugs to <http://bugs.freedesktop.org/enter_bug.cgi?product=harfbuzz>.
 #
@@ -591,8 +591,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='HarfBuzz'
 PACKAGE_TARNAME='harfbuzz'
-PACKAGE_VERSION='1.2.7'
-PACKAGE_STRING='HarfBuzz 1.2.7'
+PACKAGE_VERSION='0.9.40'
+PACKAGE_STRING='HarfBuzz 0.9.40'
 PACKAGE_BUGREPORT='http://bugs.freedesktop.org/enter_bug.cgi?product=harfbuzz'
 PACKAGE_URL='http://harfbuzz.org/'
 
@@ -641,10 +641,6 @@ HAVE_CORETEXT_FALSE
 HAVE_CORETEXT_TRUE
 CORETEXT_LIBS
 CORETEXT_CFLAGS
-HAVE_DIRECTWRITE_FALSE
-HAVE_DIRECTWRITE_TRUE
-DIRECTWRITE_LIBS
-DIRECTWRITE_CXXFLAGS
 HAVE_UNISCRIBE_FALSE
 HAVE_UNISCRIBE_TRUE
 UNISCRIBE_LIBS
@@ -653,25 +649,15 @@ HAVE_FREETYPE_FALSE
 HAVE_FREETYPE_TRUE
 FREETYPE_LIBS
 FREETYPE_CFLAGS
-FREETYPE_DEPS
 HAVE_GRAPHITE2_FALSE
 HAVE_GRAPHITE2_TRUE
 GRAPHITE2_LIBS
 GRAPHITE2_CFLAGS
-GRAPHITE2_DEPS
-HAVE_UCDN_FALSE
-HAVE_UCDN_TRUE
-HAVE_ICU_BUILTIN_FALSE
-HAVE_ICU_BUILTIN_TRUE
 HAVE_ICU_FALSE
 HAVE_ICU_TRUE
 ICU_CONFIG
 ICU_LIBS
 ICU_CFLAGS
-HAVE_FONTCONFIG_FALSE
-HAVE_FONTCONFIG_TRUE
-FONTCONFIG_LIBS
-FONTCONFIG_CFLAGS
 HAVE_CAIRO_FT_FALSE
 HAVE_CAIRO_FT_TRUE
 CAIRO_FT_LIBS
@@ -680,6 +666,8 @@ HAVE_CAIRO_FALSE
 HAVE_CAIRO_TRUE
 CAIRO_LIBS
 CAIRO_CFLAGS
+HAVE_UCDN_FALSE
+HAVE_UCDN_TRUE
 HAVE_INTROSPECTION_FALSE
 HAVE_INTROSPECTION_TRUE
 INTROSPECTION_MAKEFILE
@@ -699,7 +687,6 @@ HAVE_GLIB_FALSE
 HAVE_GLIB_TRUE
 GLIB_LIBS
 GLIB_CFLAGS
-GLIB_DEPS
 HAVE_FALLBACK_FALSE
 HAVE_FALLBACK_TRUE
 HAVE_OT_FALSE
@@ -882,12 +869,10 @@ with_glib
 with_gobject
 enable_introspection
 with_cairo
-with_fontconfig
 with_icu
 with_graphite2
 with_freetype
 with_uniscribe
-with_directwrite
 with_coretext
 '
       ac_precious_vars='build_alias
@@ -914,8 +899,6 @@ CAIRO_CFLAGS
 CAIRO_LIBS
 CAIRO_FT_CFLAGS
 CAIRO_FT_LIBS
-FONTCONFIG_CFLAGS
-FONTCONFIG_LIBS
 ICU_CFLAGS
 ICU_LIBS
 GRAPHITE2_CFLAGS
@@ -1462,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
-\`configure' configures HarfBuzz 1.2.7 to adapt to many kinds of systems.
+\`configure' configures HarfBuzz 0.9.40 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1532,7 +1515,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of HarfBuzz 1.2.7:";;
+     short | recursive ) echo "Configuration of HarfBuzz 0.9.40:";;
    esac
   cat <<\_ACEOF
 
@@ -1563,8 +1546,8 @@ 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-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]
@@ -1572,9 +1555,7 @@ Optional Packages:
                           Use gobject [default=auto]
   --with-cairo=[yes/no/auto]
                           Use cairo [default=auto]
-  --with-fontconfig=[yes/no/auto]
-                          Use fontconfig [default=auto]
-  --with-icu=[yes/no/builtin/auto]
+  --with-icu=[yes/no/auto]
                           Use ICU [default=auto]
   --with-graphite2=[yes/no/auto]
                           Use the graphite2 library [default=no]
@@ -1582,9 +1563,6 @@ Optional Packages:
                           Use the FreeType library [default=auto]
   --with-uniscribe=[yes/no/auto]
                           Use the Uniscribe library [default=no]
-  --with-directwrite=[yes/no/auto]
-                          Use the DirectWrite library (experimental)
-                          [default=no]
   --with-coretext=[yes/no/auto]
                           Use CoreText [default=no]
 
@@ -1618,10 +1596,6 @@ Some influential environment variables:
               C compiler flags for CAIRO_FT, overriding pkg-config
   CAIRO_FT_LIBS
               linker flags for CAIRO_FT, overriding pkg-config
-  FONTCONFIG_CFLAGS
-              C compiler flags for FONTCONFIG, overriding pkg-config
-  FONTCONFIG_LIBS
-              linker flags for FONTCONFIG, overriding pkg-config
   ICU_CFLAGS  C compiler flags for ICU, overriding pkg-config
   ICU_LIBS    linker flags for ICU, overriding pkg-config
   GRAPHITE2_CFLAGS
@@ -1700,7 +1674,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-HarfBuzz configure 1.2.7
+HarfBuzz configure 0.9.40
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2370,97 +2344,6 @@ rm -f conftest.val
 
 } # ac_fn_c_compute_int
 
-# ac_fn_cxx_check_header_mongrel LINENO HEADER VAR INCLUDES
-# ---------------------------------------------------------
-# Tests whether HEADER exists, giving a warning if it cannot be compiled using
-# the include files in INCLUDES and setting the cache variable VAR
-# accordingly.
-ac_fn_cxx_check_header_mongrel ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  if eval \${$3+:} false; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
-  $as_echo_n "(cached) " >&6
-fi
-eval ac_res=\$$3
-              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-else
-  # Is the header compilable?
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5
-$as_echo_n "checking $2 usability... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-#include <$2>
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  ac_header_compiler=yes
-else
-  ac_header_compiler=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5
-$as_echo "$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5
-$as_echo_n "checking $2 presence... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <$2>
-_ACEOF
-if ac_fn_cxx_try_cpp "$LINENO"; then :
-  ac_header_preproc=yes
-else
-  ac_header_preproc=no
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
-$as_echo "$ac_header_preproc" >&6; }
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in #((
-  yes:no: )
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
-$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
-$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
-    ;;
-  no:yes:* )
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5
-$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;}
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2:     check for missing prerequisite headers?" >&5
-$as_echo "$as_me: WARNING: $2:     check for missing prerequisite headers?" >&2;}
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5
-$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&5
-$as_echo "$as_me: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
-$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
-( $as_echo "## ------------------------------------------------------------------------- ##
-## Report this to http://bugs.freedesktop.org/enter_bug.cgi?product=harfbuzz ##
-## ------------------------------------------------------------------------- ##"
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
-esac
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  eval "$3=\$ac_header_compiler"
-fi
-eval ac_res=\$$3
-              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-fi
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_cxx_check_header_mongrel
-
 # ac_fn_c_check_type LINENO TYPE VAR INCLUDES
 # -------------------------------------------
 # Tests whether TYPE exists after having included INCLUDES, setting cache
@@ -2518,7 +2401,7 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by HarfBuzz $as_me 1.2.7, which was
+It was created by HarfBuzz $as_me 0.9.40, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -3387,7 +3270,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE='harfbuzz'
- VERSION='1.2.7'
+ VERSION='0.9.40'
 
 
 # Some tools Automake needs.
@@ -3420,47 +3303,16 @@ AMTAR='$${TAR-tar}'
 
 
 # We'll loop over all known methods to create a tar archive until one works.
-_am_tools='gnutar plaintar pax cpio none'
-
-# 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`
-      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether UID '$am_uid' is supported by ustar format" >&5
-$as_echo_n "checking whether UID '$am_uid' is supported by ustar format... " >&6; }
-      if test $am_uid -le $am_max_uid; 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; }
-         _am_tools=none
-      fi
-      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether GID '$am_gid' is supported by ustar format" >&5
-$as_echo_n "checking whether GID '$am_gid' is supported by ustar format... " >&6; }
-      if test $am_gid -le $am_max_gid; 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; }
-        _am_tools=none
-      fi
+_am_tools='gnutar  pax cpio none'
+
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to create a ustar tar archive" >&5
-$as_echo_n "checking how to create a ustar tar archive... " >&6; }
+
+  { $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_ustar-$_am_tools}
+  _am_tools=${am_cv_prog_tar_pax-$_am_tools}
 
   for _am_tool in $_am_tools; do
     case $_am_tool in
@@ -3472,8 +3324,8 @@ $as_echo_n "checking how to create a ustar tar archive... " >&6; }
    echo "$as_me:$LINENO: \$? = $ac_status" >&5
    (exit $ac_status); } && break
       done
-      am__tar="$_am_tar --format=ustar -chf - "'"$$tardir"'
-      am__tar_="$_am_tar --format=ustar -chf - "'"$tardir"'
+      am__tar="$_am_tar --format=posix -chf - "'"$$tardir"'
+      am__tar_="$_am_tar --format=posix -chf - "'"$tardir"'
       am__untar="$_am_tar -xf -"
       ;;
     plaintar)
@@ -3485,14 +3337,14 @@ $as_echo_n "checking how to create a ustar tar archive... " >&6; }
       am__untar='tar xf -'
       ;;
     pax)
-      am__tar='pax -L -x ustar -w "$$tardir"'
-      am__tar_='pax -L -x ustar -w "$tardir"'
+      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 ustar -L'
-      am__tar_='find "$tardir" -print | cpio -o -H ustar -L'
-      am__untar='cpio -i -H ustar -d'
+      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
@@ -3503,7 +3355,7 @@ $as_echo_n "checking how to create a ustar tar archive... " >&6; }
 
     # If the value was cached, stop now.  We just wanted to have am__tar
     # and am__untar set.
-    test -n "${am_cv_prog_tar_ustar}" && break
+    test -n "${am_cv_prog_tar_pax}" && break
 
     # tar/untar a dummy directory, and stop if the command works.
     rm -rf conftest.dir
@@ -3531,14 +3383,14 @@ $as_echo_n "checking how to create a ustar tar archive... " >&6; }
   done
   rm -rf conftest.dir
 
-  if ${am_cv_prog_tar_ustar+:} false; then :
+  if ${am_cv_prog_tar_pax+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  am_cv_prog_tar_ustar=$_am_tool
+  am_cv_prog_tar_pax=$_am_tool
 fi
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_tar_ustar" >&5
-$as_echo "$am_cv_prog_tar_ustar" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_tar_pax" >&5
+$as_echo "$am_cv_prog_tar_pax" >&6; }
 
 
 
@@ -4855,8 +4707,8 @@ esac
 
 
 
-macro_version='2.4.2'
-macro_revision='1.3337'
+macro_version='2.4.2.418'
+macro_revision='2.4.2.418'
 
 
 
@@ -4870,7 +4722,7 @@ macro_revision='1.3337'
 
 
 
-ltmain="$ac_aux_dir/ltmain.sh"
+ltmain=$ac_aux_dir/ltmain.sh
 
 # Make sure we can run config.sub.
 $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
@@ -4990,7 +4842,7 @@ func_echo_all ()
     $ECHO ""
 }
 
-case "$ECHO" in
+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
@@ -5313,19 +5165,19 @@ test -z "$GREP" && GREP=grep
 
 # 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
-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*)
-    # 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` ;;
@@ -5339,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
-      test -z "$LD" && LD="$ac_prog"
+      test -z "$LD" && LD=$ac_prog
       ;;
   "")
     # If it fails, then pretend we aren't using GCC.
@@ -5350,7 +5202,7 @@ $as_echo_n "checking for ld used by $CC... " >&6; }
     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
@@ -5361,32 +5213,32 @@ if ${lt_cv_path_LD+:} false; 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
-    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
-      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'*)
-       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
-  IFS="$lt_save_ifs"
+  IFS=$lt_save_ifs
 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
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
 $as_echo "$LD" >&6; }
@@ -5429,33 +5281,33 @@ if ${lt_cv_path_NM+:} false; then :
 else
   if test -n "$NM"; then
   # Let the user override the test.
-  lt_cv_path_NM="$NM"
+  lt_cv_path_NM=$NM
 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
-    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
-      IFS="$lt_save_ifs"
+      IFS=$lt_save_ifs
       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.
-       # 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"
-         break
+         break 2
          ;;
        *)
          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
@@ -5466,15 +5318,15 @@ else
        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; }
-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 :
@@ -5580,9 +5432,9 @@ esac
   fi
 fi
 
-    case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in
+    case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in
     *COFF*)
-      DUMPBIN="$DUMPBIN -symbols"
+      DUMPBIN="$DUMPBIN -symbols -headers"
       ;;
     *)
       DUMPBIN=:
@@ -5590,8 +5442,8 @@ fi
     esac
   fi
 
-  if test "$DUMPBIN" != ":"; then
-    NM="$DUMPBIN"
+  if test : != "$DUMPBIN"; then
+    NM=$DUMPBIN
   fi
 fi
 test -z "$NM" && NM=nm
@@ -5642,7 +5494,7 @@ if ${lt_cv_sys_max_cmd_len+:} false; then :
   $as_echo_n "(cached) " >&6
 else
     i=0
-  teststring="ABCD"
+  teststring=ABCD
 
   case $build_os in
   msdosdjgpp*)
@@ -5682,7 +5534,7 @@ else
     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`
@@ -5733,22 +5585,22 @@ else
   *)
     lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
     if test -n "$lt_cv_sys_max_cmd_len" && \
-       test undefined != "$lt_cv_sys_max_cmd_len"; then
+       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.
-      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.
-      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 &&
-             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
@@ -5766,7 +5618,7 @@ else
 
 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
@@ -5784,30 +5636,6 @@ max_cmd_len=$lt_cv_sys_max_cmd_len
 : ${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
@@ -5930,13 +5758,13 @@ esac
 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*)
-    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
@@ -6064,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.
-# `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
-# 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]*)
@@ -6097,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.
-  # 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
@@ -6176,7 +6003,7 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
   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
@@ -6194,8 +6021,8 @@ newos6*)
   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)$'
@@ -6405,8 +6232,8 @@ else
 
 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
@@ -6418,7 +6245,7 @@ cygwin* | mingw* | pw32* | cegcc*)
   ;;
 *)
   # fallback: assume linklib IS sharedlib
-  lt_cv_sharedlib_from_linklib_cmd="$ECHO"
+  lt_cv_sharedlib_from_linklib_cmd=$ECHO
   ;;
 esac
 
@@ -6572,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; }
-      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
@@ -6580,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; }
-       if test "$ac_status" -ne 0; then
+       if test 0 -ne "$ac_status"; then
           lt_cv_ar_at_file=@
         fi
       fi
@@ -6593,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; }
 
-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
@@ -6810,7 +6637,7 @@ old_postuninstall_cmds=
 
 if test -n "$RANLIB"; then
   case $host_os in
-  openbsd*)
+  bitrig* | openbsd*)
     old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib"
     ;;
   *)
@@ -6900,7 +6727,7 @@ cygwin* | mingw* | pw32* | cegcc*)
   symcode='[ABCDGISTW]'
   ;;
 hpux*)
-  if test "$host_cpu" = ia64; then
+  if test ia64 = "$host_cpu"; then
     symcode='[ABCDEGRST]'
   fi
   ;;
@@ -6933,14 +6760,44 @@ case `$NM -V 2>&1` in
   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.
-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
-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=
@@ -6958,21 +6815,24 @@ for ac_symprfx in "" "_"; do
 
   # 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};"\
+"     /^ *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};"\
-"     {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'"
@@ -7020,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 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
-#elif defined(__osf__)
+#elif defined __osf__
 /* This system does not cope well with relocations in const data.  */
 # define LT_DLSYM_CONST
 #else
@@ -7050,7 +6910,7 @@ lt__PROGRAM__LTX_preloaded_symbols[] =
 {
   { "@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}
 };
@@ -7070,13 +6930,13 @@ _LT_EOF
          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
-  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
@@ -7097,7 +6957,7 @@ _LT_EOF
   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=
@@ -7150,6 +7010,16 @@ fi
 
 
 
+
+
+
+
+
+
+
+
+
+
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5
 $as_echo_n "checking for sysroot... " >&6; }
 
@@ -7162,9 +7032,9 @@ fi
 
 
 lt_sysroot=
-case ${with_sysroot} in #(
+case $with_sysroot in #(
  yes)
-   if test "$GCC" = yes; then
+   if test yes = "$GCC"; then
      lt_sysroot=`$CC --print-sysroot 2>/dev/null`
    fi
    ;; #(
@@ -7174,8 +7044,8 @@ case ${with_sysroot} in #(
  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
@@ -7192,13 +7062,14 @@ if test "${enable_libtool_lock+set}" = set; then :
   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*)
-  # 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
@@ -7207,24 +7078,25 @@ ia64-*-hpux*)
   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*)
-       HPUX_IA64_MODE="64"
+       HPUX_IA64_MODE=64
        ;;
     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
-    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"
@@ -7253,9 +7125,50 @@ ia64-*-hpux*)
   rm -rf conftest*
   ;;
 
+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*)
-  # 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
@@ -7278,10 +7191,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
                ;;
            esac
            ;;
-         powerpc64le-*)
+         powerpc64le-*linux*)
            LD="${LD-ld} -m elf32lppclinux"
            ;;
-         powerpc64-*)
+         powerpc64-*linux*)
            LD="${LD-ld} -m elf32ppclinux"
            ;;
          s390x-*linux*)
@@ -7300,10 +7213,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
          x86_64-*linux*)
            LD="${LD-ld} -m elf_x86_64"
            ;;
-         powerpcle-*)
+         powerpcle-*linux*)
            LD="${LD-ld} -m elf64lppc"
            ;;
-         powerpc-*)
+         powerpc-*linux*)
            LD="${LD-ld} -m elf64ppc"
            ;;
          s390*-*linux*|s390*-*tpf*)
@@ -7321,7 +7234,7 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
 
 *-*-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; }
@@ -7361,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; }
-  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
-    CFLAGS="$SAVE_CFLAGS"
+    CFLAGS=$SAVE_CFLAGS
   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
@@ -7379,7 +7293,7 @@ $as_echo "$lt_cv_cc_needs_belf" >&6; }
       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*)
@@ -7388,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
-          LD="${LD-ld}_sol2"
+          LD=${LD-ld}_sol2
         fi
         ;;
       *)
@@ -7404,7 +7318,7 @@ $as_echo "$lt_cv_cc_needs_belf" >&6; }
   ;;
 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.
@@ -7515,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; }
-if test "x$lt_cv_path_mainfest_tool" != xyes; then
+if test yes != "$lt_cv_path_mainfest_tool"; then
   MANIFEST_TOOL=:
 fi
 
@@ -8018,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
-      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
@@ -8036,7 +7950,7 @@ else
          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
@@ -8075,7 +7989,7 @@ else
 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
@@ -8104,7 +8018,7 @@ _LT_EOF
       _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
@@ -8117,32 +8031,32 @@ fi
 $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.*)
-      _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]*)
-         _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+         _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
        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.*)
-         _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+         _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
       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
-    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
-      _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
-    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=
@@ -8444,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.
-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
       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
-      IFS="$lt_save_ifs"
+      IFS=$lt_save_ifs
       ;;
     esac
 else
@@ -8482,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.
-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
       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
-      IFS="$lt_save_ifs"
+      IFS=$lt_save_ifs
       ;;
     esac
 else
@@ -8514,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.
-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
       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
-      IFS="$lt_save_ifs"
+      IFS=$lt_save_ifs
       ;;
     esac
 else
@@ -8529,8 +8443,6 @@ else
 fi
 
 
-test -z "$pic_mode" && pic_mode=default
-
 
 
 
@@ -8546,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.
-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
       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
-      IFS="$lt_save_ifs"
+      IFS=$lt_save_ifs
       ;;
     esac
 else
@@ -8571,7 +8483,7 @@ fi
 
 
 # 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'
@@ -8620,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
 
@@ -8659,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.
-  if test "X${COLLECT_NAMES+set}" != Xset; then
+  if test set != "${COLLECT_NAMES+set}"; then
     COLLECT_NAMES=
     export COLLECT_NAMES
   fi
@@ -8670,14 +8582,14 @@ esac
 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
 
-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
@@ -8709,22 +8621,22 @@ if ${lt_cv_path_MAGIC_CMD+:} false; then :
 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
-    IFS="$lt_save_ifs"
+    IFS=$lt_save_ifs
     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 \(.*\)"`
-         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
            :
@@ -8747,13 +8659,13 @@ _LT_EOF
       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
 
-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; }
@@ -8775,22 +8687,22 @@ if ${lt_cv_path_MAGIC_CMD+:} false; then :
 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
-    IFS="$lt_save_ifs"
+    IFS=$lt_save_ifs
     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 \(.*\)"`
-         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
            :
@@ -8813,13 +8725,13 @@ _LT_EOF
       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
 
-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; }
@@ -8840,7 +8752,7 @@ esac
 
 # 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'
@@ -8902,7 +8814,7 @@ if test -n "$compiler"; then
 
 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' ;;
@@ -8918,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_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
@@ -8948,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; }
 
-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
     :
@@ -8966,17 +8878,18 @@ lt_prog_compiler_pic=
 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.
-      if test "$host_cpu" = ia64; then
+      if test ia64 = "$host_cpu"; then
        # AIX 5 now supports IA64 processor
        lt_prog_compiler_static='-Bstatic'
       fi
+      lt_prog_compiler_pic='-fPIC'
       ;;
 
     amigaos*)
@@ -8987,8 +8900,8 @@ lt_prog_compiler_static=
         ;;
       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
@@ -9074,7 +8987,7 @@ lt_prog_compiler_static=
     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
@@ -9082,6 +8995,20 @@ lt_prog_compiler_static=
       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).
@@ -9101,7 +9028,7 @@ lt_prog_compiler_static=
        ;;
       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*)
@@ -9112,7 +9039,7 @@ lt_prog_compiler_static=
 
     linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
       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'
@@ -9137,6 +9064,12 @@ lt_prog_compiler_static=
        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)
@@ -9234,7 +9167,7 @@ lt_prog_compiler_static=
       ;;
 
     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
@@ -9263,7 +9196,7 @@ lt_prog_compiler_static=
   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=
     ;;
@@ -9295,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_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
@@ -9325,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; }
 
-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" ;;
@@ -9357,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
-   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
@@ -9376,13 +9309,13 @@ else
      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; }
 
-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=
@@ -9502,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; }
@@ -9515,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; }
-  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
@@ -9560,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
-  # 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
@@ -9577,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++.
-    if test "$GCC" != yes; then
+    if test yes != "$GCC"; then
       with_gnu_ld=no
     fi
     ;;
@@ -9585,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
     ;;
-  openbsd*)
+  openbsd* | bitrig*)
     with_gnu_ld=no
     ;;
-  linux* | k*bsd*-gnu | gnu*)
-    link_all_deplibs=no
-    ;;
   esac
 
   ld_shlibs=yes
@@ -9598,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
-  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
@@ -9620,24 +9550,24 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
     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
-    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
-    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
-      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
-    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 ...
@@ -9650,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
-      if test "$host_cpu" != ia64; then
+      if test ia64 != "$host_cpu"; then
        ld_shlibs=no
        cat <<_LT_EOF 1>&2
 
@@ -9669,7 +9599,7 @@ _LT_EOF
       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)
@@ -9685,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
-       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
@@ -9695,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'
-      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
@@ -9703,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
-        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*)
-      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
-      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.
-      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
-      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 \
-        && 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
-         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
-         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' ;;
@@ -9768,42 +9698,44 @@ _LT_EOF
        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
-         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
-         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
-       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~
-           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'
-         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'
-         if test "x$supports_anon_versioning" = xyes; then
+         if test yes = "$supports_anon_versioning"; then
            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
@@ -9812,13 +9744,13 @@ _LT_EOF
       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
-       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
       ;;
 
@@ -9836,8 +9768,8 @@ _LT_EOF
 
 _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
@@ -9849,7 +9781,7 @@ _LT_EOF
        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
@@ -9864,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
-           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
@@ -9883,15 +9815,15 @@ _LT_EOF
 
     *)
       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
 
-    if test "$ld_shlibs" = no; then
+    if test no = "$ld_shlibs"; then
       runpath_var=
       hardcode_libdir_flag_spec=
       export_dynamic_flag_spec=
@@ -9907,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
-      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
@@ -9915,12 +9847,12 @@ _LT_EOF
       ;;
 
     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'
-       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
@@ -9938,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
-         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
@@ -9961,13 +9893,13 @@ _LT_EOF
       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+
-         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
@@ -9986,36 +9918,35 @@ _LT_EOF
          ;;
        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
-       link_all_deplibs=no
       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
-         if test "$aix_use_runtimelinking" = yes; then
-           shared_flag='${wl}-G'
+         if test yes = "$aix_use_runtimelinking"; then
+           shared_flag='$wl-G'
          else
-           shared_flag='${wl}-bM:SRE'
+           shared_flag='$wl-bM:SRE'
          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
-      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.
-        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 :
@@ -10050,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
-    lt_cv_aix_libpath_="/usr/lib:/lib"
+    lt_cv_aix_libpath_=/usr/lib:/lib
   fi
 
 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
-       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"
-         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.
-        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 :
@@ -10103,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
-    lt_cv_aix_libpath_="/usr/lib:/lib"
+    lt_cv_aix_libpath_=/usr/lib:/lib
   fi
 
 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.
-         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.
-           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.
-         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
       ;;
@@ -10134,7 +10065,7 @@ fi
       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)
        # 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 $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
        # 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
@@ -10202,7 +10134,7 @@ fi
        # 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.
   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
-  allow_undefined_flag="$_lt_dar_allow_undefined"
+  allow_undefined_flag=$_lt_dar_allow_undefined
   case $cc_basename in
-     ifort*) _lt_dar_can_shared=yes ;;
+     ifort*|nagfor*) _lt_dar_can_shared=yes ;;
      *) _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
-    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
       ;;
 
     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
-       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
-      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
-      export_dynamic_flag_spec='${wl}-E'
+      export_dynamic_flag_spec='$wl-E'
       ;;
 
     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
-      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
-       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
       ;;
 
     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*)
-         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*)
-         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*)
-         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*)
-         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'
          ;;
        *)
 
@@ -10344,7 +10276,7 @@ if ${lt_cv_prog_compiler__b+:} false; then :
   $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
@@ -10363,14 +10295,14 @@ else
      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; }
 
-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
@@ -10378,8 +10310,8 @@ 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
@@ -10390,7 +10322,7 @@ fi
        *)
          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.
@@ -10401,8 +10333,8 @@ fi
       ;;
 
     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.
@@ -10412,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
-  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; }
@@ -10425,25 +10357,25 @@ else
 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; }
-       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
-       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'
-      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
       ;;
 
-    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
@@ -10457,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
-      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
       hardcode_libdir_separator=:
       hardcode_shlibpath_var=no
       ;;
@@ -10465,27 +10397,19 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; }
     *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 -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_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
-         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
@@ -10501,28 +10425,28 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; }
       ;;
 
     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 \*'
-       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'
-      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
-      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 \*'
-       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~
-       $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'
@@ -10533,24 +10457,24 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; }
 
     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~
-         $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=''
-         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~
-         $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~
-         $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
@@ -10560,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,
-       # 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?)
-       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
@@ -10574,10 +10498,10 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; }
       ;;
 
     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.
-       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
@@ -10626,43 +10550,43 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; }
       ;;
 
     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'
 
-      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
-       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*)
-      # 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.
-      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
-      hardcode_libdir_flag_spec='${wl}-R,$libdir'
+      hardcode_libdir_flag_spec='$wl-R,$libdir'
       hardcode_libdir_separator=':'
       link_all_deplibs=yes
-      export_dynamic_flag_spec='${wl}-Bexport'
+      export_dynamic_flag_spec='$wl-Bexport'
       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
-       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
       ;;
 
@@ -10677,10 +10601,10 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; }
       ;;
     esac
 
-    if test x$host_vendor = xsni; then
+    if test sni = "$host_vendor"; then
       case $host in
       sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
-       export_dynamic_flag_spec='${wl}-Blargedynsym'
+       export_dynamic_flag_spec='$wl-Blargedynsym'
        ;;
       esac
     fi
@@ -10688,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; }
-test "$ld_shlibs" = no && can_build_shared=no
+test no = "$ld_shlibs" && can_build_shared=no
 
 with_gnu_ld=$with_gnu_ld
 
@@ -10714,7 +10638,7 @@ x|xyes)
   # 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.
@@ -10929,14 +10853,14 @@ esac
   { $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
-    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
-    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
@@ -10952,28 +10876,35 @@ if test "$GCC" = yes; then
     ;;
   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_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
-    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 '
-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) {
-          lt_foo="/" $lt_i lt_foo;
+          lt_foo = "/" $lt_i lt_foo;
         } else {
           lt_count--;
         }
@@ -10987,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" |\
-      $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
@@ -10996,7 +10927,7 @@ fi
 library_names_spec=
 libname_spec='lib$name'
 soname_spec=
-shrext_cmds=".so"
+shrext_cmds=.so
 postinstall_cmds=
 postuninstall_cmds=
 finish_cmds=
@@ -11016,11 +10947,11 @@ need_version=unknown
 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.
-  soname_spec='${libname}${release}${shared_ext}$major'
+  soname_spec='$libname$release$shared_ext$major'
   ;;
 
 aix[4-9]*)
@@ -11028,40 +10959,40 @@ aix[4-9]*)
   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
-    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
-    # 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 '
-          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
-    # 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.
-    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.
-      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.
-      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
@@ -11072,18 +11003,18 @@ amigaos*)
   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.
-    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*)
-  library_names_spec='${libname}${shared_ext}'
+  library_names_spec='$libname$shared_ext'
   dynamic_linker="$host_os ld.so"
   shlibpath_var=LIBRARY_PATH
   ;;
@@ -11091,8 +11022,8 @@ beos*)
 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"
@@ -11104,7 +11035,7 @@ bsdi[45]*)
 
 cygwin* | mingw* | pw32* | cegcc*)
   version_type=windows
-  shrext_cmds=".dll"
+  shrext_cmds=.dll
   need_version=no
   need_lib_prefix=no
 
@@ -11113,8 +11044,8 @@ cygwin* | mingw* | pw32* | cegcc*)
     # 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~
@@ -11130,17 +11061,17 @@ cygwin* | mingw* | pw32* | cegcc*)
     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
-      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'
-      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'
@@ -11149,8 +11080,8 @@ cygwin* | mingw* | pw32* | cegcc*)
   *,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*)
@@ -11177,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="$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'`
@@ -11190,8 +11121,8 @@ cygwin* | mingw* | pw32* | cegcc*)
     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'
@@ -11204,7 +11135,7 @@ cygwin* | mingw* | pw32* | cegcc*)
 
   *)
     # 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
@@ -11217,8 +11148,8 @@ darwin* | rhapsody*)
   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`'
@@ -11231,8 +11162,8 @@ dgux*)
   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
   ;;
 
@@ -11250,12 +11181,12 @@ freebsd* | dragonfly*)
   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-*)
-      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
@@ -11285,10 +11216,10 @@ haiku*)
   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_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
   ;;
@@ -11306,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.
-    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"
@@ -11321,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.
-    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
     ;;
@@ -11331,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
-    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, ...
@@ -11345,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
-  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
@@ -11357,7 +11288,7 @@ irix5* | irix6* | 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
@@ -11365,8 +11296,8 @@ irix5* | irix6* | nonstopux*)
   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=
@@ -11385,8 +11316,8 @@ irix5* | irix6* | nonstopux*)
   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
   ;;
 
@@ -11395,13 +11326,33 @@ linux*oldld* | linux*aout* | linux*coff*)
   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.
 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
-  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
   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
-    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
-    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
@@ -11492,7 +11431,7 @@ netbsd*)
 
 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
   ;;
@@ -11501,45 +11440,34 @@ newsos6)
   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'
   ;;
 
-openbsd*)
+openbsd* | bitrig*)
   version_type=sunos
-  sys_lib_dlsearch_path_spec="/usr/lib"
+  sys_lib_dlsearch_path_spec=/usr/lib
   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
-    shlibpath_overrides_runpath=yes
+    need_version=yes
   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'
-  shrext_cmds=".dll"
+  shrext_cmds=.dll
   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
   ;;
@@ -11548,11 +11476,11 @@ osf3* | osf4* | osf5*)
   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"
-  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
   ;;
 
 rdos*)
@@ -11563,8 +11491,8 @@ solaris*)
   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
@@ -11574,11 +11502,11 @@ solaris*)
 
 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
-  if test "$with_gnu_ld" = yes; then
+  if test yes = "$with_gnu_ld"; then
     need_lib_prefix=no
   fi
   need_version=yes
@@ -11586,8 +11514,8 @@ sunos4*)
 
 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)
@@ -11608,10 +11536,10 @@ sysv4 | sysv4.3*)
   ;;
 
 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
-    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
   ;;
@@ -11620,12 +11548,12 @@ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
   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
-  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'
@@ -11643,7 +11571,7 @@ tpf*)
   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
@@ -11651,8 +11579,8 @@ tpf*)
 
 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
   ;;
 
@@ -11662,18 +11590,18 @@ uts4*)
 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"
-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
 
-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
-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
 
 
@@ -11772,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" ||
-   test "X$hardcode_automatic" = "Xyes" ; then
+   test yes = "$hardcode_automatic"; then
 
   # 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
-     ## 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
 { $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
-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
@@ -11810,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
@@ -11820,23 +11748,23 @@ else
 
   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="LoadLibrary"
+    lt_cv_dlopen=LoadLibrary
     lt_cv_dlopen_libs=
     ;;
 
   cygwin*)
-    lt_cv_dlopen="dlopen"
+    lt_cv_dlopen=dlopen
     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}: 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
 
-    lt_cv_dlopen="dyld"
+    lt_cv_dlopen=dyld
     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 :
-  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; }
 { $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 :
-  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; }
@@ -11970,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 :
-  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; }
@@ -12009,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 :
-  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; }
@@ -12048,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 :
-  lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"
+  lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld
 fi
 
 
     ;;
   esac
 
-  if test "x$lt_cv_dlopen" != xno; then
-    enable_dlopen=yes
-  else
+  if test no = "$lt_cv_dlopen"; then
     enable_dlopen=no
+  else
+    enable_dlopen=yes
   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\"
 
-    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
@@ -12091,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 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
@@ -12140,7 +12076,7 @@ else
 
 /* 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
 
@@ -12170,7 +12106,7 @@ _LT_EOF
   (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
 { $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
-         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
@@ -12246,7 +12182,7 @@ else
 
 /* 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
 
@@ -12276,7 +12212,7 @@ _LT_EOF
   (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
@@ -12297,9 +12233,9 @@ 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
 
@@ -12343,7 +12279,7 @@ else
 # 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
@@ -12371,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
@@ -12379,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; }
-  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*)
-    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'
@@ -12393,8 +12329,8 @@ $as_echo_n "checking whether to build shared libraries... " >&6; }
     ;;
 
   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
@@ -12404,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.
-  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; }
 
@@ -12418,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
 
-CC="$lt_save_CC"
+CC=$lt_save_CC
 
 
 
 
 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
 
-      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'
@@ -13747,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.
-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;"
 
@@ -13822,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 "$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
 
-    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 :
-  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
-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*)
-    # 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` ;;
@@ -13861,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
-      test -z "$LD" && LD="$ac_prog"
+      test -z "$LD" && LD=$ac_prog
       ;;
   "")
     # If it fails, then pretend we aren't using GCC.
@@ -13872,7 +13808,7 @@ $as_echo_n "checking for ld used by $CC... " >&6; }
     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
@@ -13883,32 +13819,32 @@ if ${lt_cv_path_LD+:} false; 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
-    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
-      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'*)
-       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
-  IFS="$lt_save_ifs"
+  IFS=$lt_save_ifs
 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
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
 $as_echo "$LD" >&6; }
@@ -13944,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.
-      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)
-        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
-          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
@@ -13996,12 +13932,12 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
         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'
-          no_entry_flag=""
+          no_entry_flag=
         else
           aix_use_runtimelinking=no
 
@@ -14035,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
-        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+
-         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
@@ -14059,36 +13995,36 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
          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
-          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
-           if test "$aix_use_runtimelinking" = yes; then
-             shared_flag='${wl}-G'
+           if test yes = "$aix_use_runtimelinking"; then
+             shared_flag='$wl-G'
            else
-             shared_flag='${wl}-bM:SRE'
+             shared_flag='$wl-bM:SRE'
            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
-        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.
-          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 :
@@ -14123,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
-    lt_cv_aix_libpath__CXX="/usr/lib:/lib"
+    lt_cv_aix_libpath__CXX=/usr/lib:/lib
   fi
 
 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
-          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"
-           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.
-           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 :
@@ -14177,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
-    lt_cv_aix_libpath__CXX="/usr/lib:/lib"
+    lt_cv_aix_libpath__CXX=/usr/lib:/lib
   fi
 
 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.
-           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.
-             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'
@@ -14200,7 +14136,7 @@ fi
            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
         ;;
@@ -14210,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
-         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
          # 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_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@"~
-           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'
-         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
-           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
   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
-  allow_undefined_flag_CXX="$_lt_dar_allow_undefined"
+  allow_undefined_flag_CXX=$_lt_dar_allow_undefined
   case $cc_basename in
-     ifort*) _lt_dar_can_shared=yes ;;
+     ifort*|nagfor*) _lt_dar_can_shared=yes ;;
      *) _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
-    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
         ;;
 
       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*)
-        hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir'
+        hardcode_libdir_flag_spec_CXX='$wl+b $wl$libdir'
         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
@@ -14385,7 +14322,7 @@ fi
             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.
             # 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
         ;;
 
       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*)
               ;;
             *)
-             export_dynamic_flag_spec_CXX='${wl}-E'
+             export_dynamic_flag_spec_CXX='$wl-E'
               ;;
           esac
         fi
           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*)
-               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
            # 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*)
-                   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*)
-                   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
       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.
-       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++
-           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
            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
-               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
-        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
         ;;
@@ -14534,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.
-           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.
            # 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.
            # 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
-               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
-           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~
-               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~
-               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~
-               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~
-               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
-             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
 
-           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++
-           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'
            # 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
-           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~
-               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
            ;;
          *)
            *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'
-             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
         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'
-         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
@@ -14738,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.
-           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
           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 \*'
-               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~
-                 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
            # 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*)
-                 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
 
-             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
@@ -14843,9 +14775,9 @@ fi
            # 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~
-             $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
@@ -14853,7 +14785,7 @@ fi
              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'
                ;;
            ;;
           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
-           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
-               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~
-                 $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
-               # g++ 2.7 appears to require `-G' NOT `-shared' on this
+               # g++ 2.7 appears to require '-G' NOT '-shared' on this
                # 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~
-                 $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
                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].*) ;;
                *)
-                 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
         ;;
 
     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_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*)
-       # 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.
-       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
-       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
-       export_dynamic_flag_spec_CXX='${wl}-Bexport'
+       export_dynamic_flag_spec_CXX='$wl-Bexport'
        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"
+              '"$old_archive_cmds_CXX"
            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
       ;;
 
     { $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
@@ -15038,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
-    case ${prev}${p} in
+    case $prev$p in
 
     -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
@@ -15060,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
-       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
-            compiler_lib_search_path_CXX="${prev}${p}"
+            compiler_lib_search_path_CXX=$prev$p
           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
@@ -15077,9 +15009,9 @@ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
         esac
        else
         if test -z "$postdeps_CXX"; then
-          postdeps_CXX="${prev}${p}"
+          postdeps_CXX=$prev$p
         else
-          postdeps_CXX="${postdeps_CXX} ${prev}${p}"
+          postdeps_CXX="${postdeps_CXX} $prev$p"
         fi
        fi
        prev=
@@ -15094,15 +15026,15 @@ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
         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
-          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
-          postdep_objects_CXX="$p"
+          postdep_objects_CXX=$p
         else
           postdep_objects_CXX="$postdep_objects_CXX $p"
         fi
@@ -15148,7 +15080,7 @@ linux*)
       ;;
     esac
 
-    if test "$solaris_use_stlport4" != yes; then
+    if test yes != "$solaris_use_stlport4"; then
       postdeps_CXX='-library=Cstd -library=Crun'
     fi
     ;;
@@ -15171,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.
-    if test "$solaris_use_stlport4" != yes; then
+    if test yes != "$solaris_use_stlport4"; then
       postdeps_CXX='-library=Cstd -library=Crun'
     fi
     ;;
@@ -15185,7 +15117,7 @@ case " $postdeps_CXX " in
 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
 
 
@@ -15224,17 +15156,18 @@ lt_prog_compiler_static_CXX=
 
 
   # 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.
-      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
+      lt_prog_compiler_pic_CXX='-fPIC'
       ;;
 
     amigaos*)
@@ -15245,8 +15178,8 @@ lt_prog_compiler_static_CXX=
         ;;
       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
@@ -15310,7 +15243,7 @@ lt_prog_compiler_static_CXX=
     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
@@ -15350,14 +15283,14 @@ lt_prog_compiler_static_CXX=
        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_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
@@ -15394,7 +15327,7 @@ lt_prog_compiler_static_CXX=
            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'
@@ -15450,7 +15383,7 @@ lt_prog_compiler_static_CXX=
            ;;
        esac
        ;;
-      netbsd* | netbsdelf*-gnu)
+      netbsd*)
        ;;
       *qnx* | *nto*)
         # QNX uses GNU C++, but need to define -shared option too, otherwise
@@ -15539,7 +15472,7 @@ lt_prog_compiler_static_CXX=
   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=
     ;;
@@ -15571,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_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
@@ -15601,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; }
 
-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" ;;
@@ -15627,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
-   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
@@ -15646,13 +15579,13 @@ else
      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; }
 
-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=
@@ -15766,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; }
@@ -15779,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; }
-  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
@@ -15808,7 +15741,7 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
     fi
     ;;
   pw32*)
-    export_symbols_cmds_CXX="$ltdll_cmds"
+    export_symbols_cmds_CXX=$ltdll_cmds
     ;;
   cygwin* | mingw* | cegcc*)
     case $cc_basename in
@@ -15821,9 +15754,6 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
       ;;
     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'
     ;;
@@ -15831,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; }
-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
 
@@ -15848,7 +15778,7 @@ x|xyes)
   # 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.
@@ -15976,7 +15906,7 @@ $as_echo_n "checking dynamic linker characteristics... " >&6; }
 library_names_spec=
 libname_spec='lib$name'
 soname_spec=
-shrext_cmds=".so"
+shrext_cmds=.so
 postinstall_cmds=
 postuninstall_cmds=
 finish_cmds=
@@ -15996,11 +15926,11 @@ need_version=unknown
 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.
-  soname_spec='${libname}${release}${shared_ext}$major'
+  soname_spec='$libname$release$shared_ext$major'
   ;;
 
 aix[4-9]*)
@@ -16008,40 +15938,40 @@ aix[4-9]*)
   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
-    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
-    # 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 '
-          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
-    # 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.
-    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.
-      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.
-      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
@@ -16052,18 +15982,18 @@ amigaos*)
   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.
-    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*)
-  library_names_spec='${libname}${shared_ext}'
+  library_names_spec='$libname$shared_ext'
   dynamic_linker="$host_os ld.so"
   shlibpath_var=LIBRARY_PATH
   ;;
@@ -16071,8 +16001,8 @@ beos*)
 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"
@@ -16084,7 +16014,7 @@ bsdi[45]*)
 
 cygwin* | mingw* | pw32* | cegcc*)
   version_type=windows
-  shrext_cmds=".dll"
+  shrext_cmds=.dll
   need_version=no
   need_lib_prefix=no
 
@@ -16093,8 +16023,8 @@ cygwin* | mingw* | pw32* | cegcc*)
     # 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~
@@ -16110,16 +16040,16 @@ cygwin* | mingw* | pw32* | cegcc*)
     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
-      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'
-      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'
@@ -16128,8 +16058,8 @@ cygwin* | mingw* | pw32* | cegcc*)
   *,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*)
@@ -16156,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="$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'`
@@ -16169,8 +16099,8 @@ cygwin* | mingw* | pw32* | cegcc*)
     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'
@@ -16183,7 +16113,7 @@ cygwin* | mingw* | pw32* | cegcc*)
 
   *)
     # 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
@@ -16196,8 +16126,8 @@ darwin* | rhapsody*)
   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`'
@@ -16209,8 +16139,8 @@ dgux*)
   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
   ;;
 
@@ -16228,12 +16158,12 @@ freebsd* | dragonfly*)
   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-*)
-      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
@@ -16263,10 +16193,10 @@ haiku*)
   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_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
   ;;
@@ -16284,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.
-    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"
@@ -16299,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.
-    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
     ;;
@@ -16309,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
-    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, ...
@@ -16323,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
-  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
@@ -16335,7 +16265,7 @@ irix5* | irix6* | 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
@@ -16343,8 +16273,8 @@ irix5* | irix6* | nonstopux*)
   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=
@@ -16363,8 +16293,8 @@ irix5* | irix6* | nonstopux*)
   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
   ;;
 
@@ -16373,13 +16303,33 @@ linux*oldld* | linux*aout* | linux*coff*)
   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.
 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
-  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
   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
-    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
-    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
@@ -16470,7 +16408,7 @@ netbsd*)
 
 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
   ;;
@@ -16479,45 +16417,34 @@ newsos6)
   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'
   ;;
 
-openbsd*)
+openbsd* | bitrig*)
   version_type=sunos
-  sys_lib_dlsearch_path_spec="/usr/lib"
+  sys_lib_dlsearch_path_spec=/usr/lib
   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
-    shlibpath_overrides_runpath=yes
+    need_version=yes
   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'
-  shrext_cmds=".dll"
+  shrext_cmds=.dll
   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
   ;;
@@ -16526,11 +16453,11 @@ osf3* | osf4* | osf5*)
   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"
-  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
   ;;
 
 rdos*)
@@ -16541,8 +16468,8 @@ solaris*)
   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
@@ -16552,11 +16479,11 @@ solaris*)
 
 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
-  if test "$with_gnu_ld" = yes; then
+  if test yes = "$with_gnu_ld"; then
     need_lib_prefix=no
   fi
   need_version=yes
@@ -16564,8 +16491,8 @@ sunos4*)
 
 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)
@@ -16586,10 +16513,10 @@ sysv4 | sysv4.3*)
   ;;
 
 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
-    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
   ;;
@@ -16598,12 +16525,12 @@ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
   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
-  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'
@@ -16621,7 +16548,7 @@ tpf*)
   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
@@ -16629,8 +16556,8 @@ tpf*)
 
 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
   ;;
 
@@ -16640,18 +16567,18 @@ uts4*)
 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"
-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
 
-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
-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
 
 
@@ -16696,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" ||
-   test "X$hardcode_automatic_CXX" = "Xyes" ; then
+   test yes = "$hardcode_automatic_CXX"; then
 
   # 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
-     ## 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
 { $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
-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
@@ -16747,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
-fi # test "$_lt_caught_CXX_error" != yes
+fi # test yes != "$_lt_caught_CXX_error"
 
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
@@ -16884,10 +16811,10 @@ GIT=${GIT-"${am_missing_run}git"}
 
 
 
-HB_VERSION_MAJOR=1
-HB_VERSION_MINOR=2
-HB_VERSION_MICRO=7
-HB_VERSION=1.2.7
+HB_VERSION_MAJOR=0
+HB_VERSION_MINOR=9
+HB_VERSION_MICRO=40
+HB_VERSION=0.9.40
 
 
 
@@ -16898,7 +16825,7 @@ HB_VERSION=1.2.7
 
 
 
-HB_LIBTOOL_VERSION_INFO=10200:7:10200
+HB_LIBTOOL_VERSION_INFO=940:0:940
 
 
 # Documentation
@@ -17853,8 +17780,6 @@ else
 fi
 
 have_glib=false
-GLIB_DEPS="glib-2.0 >= 2.16"
-
 if test "x$with_glib" = "xyes" -o "x$with_glib" = "xauto"; then
 
 pkg_failed=no
@@ -17866,12 +17791,12 @@ if test -n "$PKG_CONFIG"; then
         pkg_cv_GLIB_CFLAGS="$GLIB_CFLAGS"
     else
         if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$GLIB_DEPS\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "$GLIB_DEPS") 2>&5
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= 2.16\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "glib-2.0 >= 2.16") 2>&5
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
-  pkg_cv_GLIB_CFLAGS=`$PKG_CONFIG --cflags "$GLIB_DEPS" 2>/dev/null`
+  pkg_cv_GLIB_CFLAGS=`$PKG_CONFIG --cflags "glib-2.0 >= 2.16" 2>/dev/null`
 else
   pkg_failed=yes
 fi
@@ -17884,12 +17809,12 @@ if test -n "$PKG_CONFIG"; then
         pkg_cv_GLIB_LIBS="$GLIB_LIBS"
     else
         if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$GLIB_DEPS\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "$GLIB_DEPS") 2>&5
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= 2.16\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "glib-2.0 >= 2.16") 2>&5
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
-  pkg_cv_GLIB_LIBS=`$PKG_CONFIG --libs "$GLIB_DEPS" 2>/dev/null`
+  pkg_cv_GLIB_LIBS=`$PKG_CONFIG --libs "glib-2.0 >= 2.16" 2>/dev/null`
 else
   pkg_failed=yes
 fi
@@ -17908,9 +17833,9 @@ else
         _pkg_short_errors_supported=no
 fi
         if test $_pkg_short_errors_supported = yes; then
-               GLIB_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$GLIB_DEPS"`
+               GLIB_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "glib-2.0 >= 2.16"`
         else
-               GLIB_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$GLIB_DEPS"`
+               GLIB_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "glib-2.0 >= 2.16"`
         fi
        # Put the nasty error message in config.log where it belongs
        echo "$GLIB_PKG_ERRORS" >&5
 
 
 
+have_ucdn=true
+if $have_glib; then
+       have_ucdn=false
+fi
+if $have_ucdn; then
+
+$as_echo "#define HAVE_UCDN 1" >>confdefs.h
+
+fi
+ if $have_ucdn; then
+  HAVE_UCDN_TRUE=
+  HAVE_UCDN_FALSE='#'
+else
+  HAVE_UCDN_TRUE='#'
+  HAVE_UCDN_FALSE=
+fi
+
+
+
 
 # Check whether --with-cairo was given.
 if test "${with_cairo+set}" = set; then :
 
 
 
-# Check whether --with-fontconfig was given.
-if test "${with_fontconfig+set}" = set; then :
-  withval=$with_fontconfig;
-else
-  with_fontconfig=auto
-fi
-
-have_fontconfig=false
-if test "x$with_fontconfig" = "xyes" -o "x$with_fontconfig" = "xauto"; then
-
-pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for FONTCONFIG" >&5
-$as_echo_n "checking for FONTCONFIG... " >&6; }
-
-if test -n "$PKG_CONFIG"; then
-    if test -n "$FONTCONFIG_CFLAGS"; then
-        pkg_cv_FONTCONFIG_CFLAGS="$FONTCONFIG_CFLAGS"
-    else
-        if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"fontconfig\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "fontconfig") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-  pkg_cv_FONTCONFIG_CFLAGS=`$PKG_CONFIG --cflags "fontconfig" 2>/dev/null`
-else
-  pkg_failed=yes
-fi
-    fi
-else
-       pkg_failed=untried
-fi
-if test -n "$PKG_CONFIG"; then
-    if test -n "$FONTCONFIG_LIBS"; then
-        pkg_cv_FONTCONFIG_LIBS="$FONTCONFIG_LIBS"
-    else
-        if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"fontconfig\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "fontconfig") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-  pkg_cv_FONTCONFIG_LIBS=`$PKG_CONFIG --libs "fontconfig" 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
-        if test $_pkg_short_errors_supported = yes; then
-               FONTCONFIG_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "fontconfig"`
-        else
-               FONTCONFIG_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "fontconfig"`
-        fi
-       # Put the nasty error message in config.log where it belongs
-       echo "$FONTCONFIG_PKG_ERRORS" >&5
-
-       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-                :
-elif test $pkg_failed = untried; then
-       :
-else
-       FONTCONFIG_CFLAGS=$pkg_cv_FONTCONFIG_CFLAGS
-       FONTCONFIG_LIBS=$pkg_cv_FONTCONFIG_LIBS
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-       have_fontconfig=true
-fi
-fi
-if test "x$with_fontconfig" = "xyes" -a "x$have_fontconfig" != "xtrue"; then
-       as_fn_error $? "fontconfig support requested but not found" "$LINENO" 5
-fi
-if $have_fontconfig; then
-
-$as_echo "#define HAVE_FONTCONFIG 1" >>confdefs.h
-
-fi
- if $have_fontconfig; then
-  HAVE_FONTCONFIG_TRUE=
-  HAVE_FONTCONFIG_FALSE='#'
-else
-  HAVE_FONTCONFIG_TRUE='#'
-  HAVE_FONTCONFIG_FALSE=
-fi
-
-
-
-
 # Check whether --with-icu was given.
 if test "${with_icu+set}" = set; then :
   withval=$with_icu;
@@ -18460,7 +18304,7 @@ else
 fi
 
 have_icu=false
-if test "x$with_icu" = "xyes" -o "x$with_icu" = "xbuiltin" -o "x$with_icu" = "xauto"; then
+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
@@ -18645,20 +18489,14 @@ $as_echo "no" >&6; }
                fi
        fi
 fi
-if test \( "x$with_icu" = "xyes" -o "x$with_icu" = "xbuiltin" \) -a "x$have_icu" != "xtrue"; 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 1" >>confdefs.h
 
-       if test "x$with_icu" = "xbuiltin"; then
-
-$as_echo "#define HAVE_ICU_BUILTIN 1" >>confdefs.h
-
-       fi
 fi
  if $have_icu; then
   HAVE_ICU_TRUE=
@@ -18668,33 +18506,6 @@ else
   HAVE_ICU_FALSE=
 fi
 
- if $have_icu && test "x$with_icu" = "xbuiltin"; then
-  HAVE_ICU_BUILTIN_TRUE=
-  HAVE_ICU_BUILTIN_FALSE='#'
-else
-  HAVE_ICU_BUILTIN_TRUE='#'
-  HAVE_ICU_BUILTIN_FALSE=
-fi
-
-
-
-have_ucdn=true
-if $have_glib || $have_icu && test "x$with_icu" = "xbuiltin"; then
-       have_ucdn=false
-fi
-if $have_ucdn; then
-
-$as_echo "#define HAVE_UCDN 1" >>confdefs.h
-
-fi
- if $have_ucdn; then
-  HAVE_UCDN_TRUE=
-  HAVE_UCDN_FALSE='#'
-else
-  HAVE_UCDN_TRUE='#'
-  HAVE_UCDN_FALSE=
-fi
-
 
 
 
@@ -18706,8 +18517,6 @@ else
 fi
 
 have_graphite2=false
-GRAPHITE2_DEPS="graphite2"
-
 if test "x$with_graphite2" = "xyes" -o "x$with_graphite2" = "xauto"; then
 
 pkg_failed=no
@@ -18719,12 +18528,12 @@ if test -n "$PKG_CONFIG"; then
         pkg_cv_GRAPHITE2_CFLAGS="$GRAPHITE2_CFLAGS"
     else
         if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$GRAPHITE2_DEPS\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "$GRAPHITE2_DEPS") 2>&5
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"graphite2\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "graphite2") 2>&5
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
-  pkg_cv_GRAPHITE2_CFLAGS=`$PKG_CONFIG --cflags "$GRAPHITE2_DEPS" 2>/dev/null`
+  pkg_cv_GRAPHITE2_CFLAGS=`$PKG_CONFIG --cflags "graphite2" 2>/dev/null`
 else
   pkg_failed=yes
 fi
@@ -18737,12 +18546,12 @@ if test -n "$PKG_CONFIG"; then
         pkg_cv_GRAPHITE2_LIBS="$GRAPHITE2_LIBS"
     else
         if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$GRAPHITE2_DEPS\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "$GRAPHITE2_DEPS") 2>&5
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"graphite2\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "graphite2") 2>&5
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
-  pkg_cv_GRAPHITE2_LIBS=`$PKG_CONFIG --libs "$GRAPHITE2_DEPS" 2>/dev/null`
+  pkg_cv_GRAPHITE2_LIBS=`$PKG_CONFIG --libs "graphite2" 2>/dev/null`
 else
   pkg_failed=yes
 fi
@@ -18761,9 +18570,9 @@ else
         _pkg_short_errors_supported=no
 fi
         if test $_pkg_short_errors_supported = yes; then
-               GRAPHITE2_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$GRAPHITE2_DEPS"`
+               GRAPHITE2_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "graphite2"`
         else
-               GRAPHITE2_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$GRAPHITE2_DEPS"`
+               GRAPHITE2_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "graphite2"`
         fi
        # Put the nasty error message in config.log where it belongs
        echo "$GRAPHITE2_PKG_ERRORS" >&5
@@ -18808,8 +18617,6 @@ else
 fi
 
 have_freetype=false
-FREETYPE_DEPS="freetype2 >= 12.0.6"
-
 if test "x$with_freetype" = "xyes" -o "x$with_freetype" = "xauto"; then
        # See freetype/docs/VERSION.DLL; 12.0.6 means freetype-2.4.2
 
@@ -18822,12 +18629,12 @@ if test -n "$PKG_CONFIG"; then
         pkg_cv_FREETYPE_CFLAGS="$FREETYPE_CFLAGS"
     else
         if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$FREETYPE_DEPS\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "$FREETYPE_DEPS") 2>&5
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"freetype2 >= 12.0.6\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "freetype2 >= 12.0.6") 2>&5
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
-  pkg_cv_FREETYPE_CFLAGS=`$PKG_CONFIG --cflags "$FREETYPE_DEPS" 2>/dev/null`
+  pkg_cv_FREETYPE_CFLAGS=`$PKG_CONFIG --cflags "freetype2 >= 12.0.6" 2>/dev/null`
 else
   pkg_failed=yes
 fi
@@ -18840,12 +18647,12 @@ if test -n "$PKG_CONFIG"; then
         pkg_cv_FREETYPE_LIBS="$FREETYPE_LIBS"
     else
         if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$FREETYPE_DEPS\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "$FREETYPE_DEPS") 2>&5
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"freetype2 >= 12.0.6\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "freetype2 >= 12.0.6") 2>&5
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
-  pkg_cv_FREETYPE_LIBS=`$PKG_CONFIG --libs "$FREETYPE_DEPS" 2>/dev/null`
+  pkg_cv_FREETYPE_LIBS=`$PKG_CONFIG --libs "freetype2 >= 12.0.6" 2>/dev/null`
 else
   pkg_failed=yes
 fi
@@ -18864,9 +18671,9 @@ else
         _pkg_short_errors_supported=no
 fi
         if test $_pkg_short_errors_supported = yes; then
-               FREETYPE_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$FREETYPE_DEPS"`
+               FREETYPE_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "freetype2 >= 12.0.6"`
         else
-               FREETYPE_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$FREETYPE_DEPS"`
+               FREETYPE_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "freetype2 >= 12.0.6"`
         fi
        # Put the nasty error message in config.log where it belongs
        echo "$FREETYPE_PKG_ERRORS" >&5
 
 
 
-# Check whether --with-directwrite was given.
-if test "${with_directwrite+set}" = set; then :
-  withval=$with_directwrite;
-else
-  with_directwrite=no
-fi
-
-have_directwrite=false
-ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
-if test "x$with_directwrite" = "xyes" -o "x$with_directwrite" = "xauto"; then
-
-for ac_header in dwrite.h
-do :
-  ac_fn_cxx_check_header_mongrel "$LINENO" "dwrite.h" "ac_cv_header_dwrite_h" "$ac_includes_default"
-if test "x$ac_cv_header_dwrite_h" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_DWRITE_H 1
-_ACEOF
- have_directwrite=true
-fi
-
-done
-
-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
-
-if test "x$with_directwrite" = "xyes" -a "x$have_directwrite" != "xtrue"; then
-       as_fn_error $? "directwrite support requested but not found" "$LINENO" 5
-fi
-if $have_directwrite; then
-       DIRECTWRITE_CXXFLAGS=
-       DIRECTWRITE_LIBS="-ldwrite"
-
-
-
-$as_echo "#define HAVE_DIRECTWRITE 1" >>confdefs.h
-
-fi
- if $have_directwrite; then
-  HAVE_DIRECTWRITE_TRUE=
-  HAVE_DIRECTWRITE_FALSE='#'
-else
-  HAVE_DIRECTWRITE_TRUE='#'
-  HAVE_DIRECTWRITE_FALSE=
-fi
-
-
-
-
 # Check whether --with-coretext was given.
 if test "${with_coretext+set}" = set; then :
   withval=$with_coretext;
@@ -19220,7 +18969,7 @@ fi
 fi
 
 
-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/fuzzing/Makefile test/shaping/Makefile docs/Makefile docs/version.xml win32/Makefile win32/config.h.win32"
+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
@@ -19428,6 +19177,10 @@ if test -z "${HAVE_INTROSPECTION_TRUE}" && test -z "${HAVE_INTROSPECTION_FALSE}"
   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
@@ -19436,22 +19189,10 @@ if test -z "${HAVE_CAIRO_FT_TRUE}" && test -z "${HAVE_CAIRO_FT_FALSE}"; then
   as_fn_error $? "conditional \"HAVE_CAIRO_FT\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
-if test -z "${HAVE_FONTCONFIG_TRUE}" && test -z "${HAVE_FONTCONFIG_FALSE}"; then
-  as_fn_error $? "conditional \"HAVE_FONTCONFIG\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
 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
-if test -z "${HAVE_ICU_BUILTIN_TRUE}" && test -z "${HAVE_ICU_BUILTIN_FALSE}"; then
-  as_fn_error $? "conditional \"HAVE_ICU_BUILTIN\" 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_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
@@ -19464,10 +19205,6 @@ if test -z "${HAVE_UNISCRIBE_TRUE}" && test -z "${HAVE_UNISCRIBE_FALSE}"; then
   as_fn_error $? "conditional \"HAVE_UNISCRIBE\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
-if test -z "${HAVE_DIRECTWRITE_TRUE}" && test -z "${HAVE_DIRECTWRITE_FALSE}"; then
-  as_fn_error $? "conditional \"HAVE_DIRECTWRITE\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
 if test -z "${HAVE_CORETEXT_TRUE}" && test -z "${HAVE_CORETEXT_FALSE}"; then
   as_fn_error $? "conditional \"HAVE_CORETEXT\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -19869,7 +19606,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by HarfBuzz $as_me 1.2.7, which was
+This file was extended by HarfBuzz $as_me 0.9.40, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -19936,7 +19673,7 @@ _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-HarfBuzz config.status 1.2.7
+HarfBuzz config.status 0.9.40
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
@@ -20120,8 +19857,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"`'
+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_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"`'
@@ -20293,8 +20032,10 @@ CFLAGS \
 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_nm_interface \
 nm_file_list_spec \
 lt_prog_compiler_no_builtin_flag \
 lt_prog_compiler_pic \
@@ -20361,7 +20102,7 @@ postdeps_CXX \
 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\\\\\\""
@@ -20402,7 +20143,7 @@ prelink_cmds_CXX \
 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\\\\\\""
@@ -20411,19 +20152,16 @@ postlink_cmds_CXX; do
 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.
-if test -n "\${ZSH_VERSION+set}" ; then
+if test -n "\${ZSH_VERSION+set}"; then
    setopt NO_GLOB_SUBST
 fi
 
 
     PACKAGE='$PACKAGE'
     VERSION='$VERSION'
-    TIMESTAMP='$TIMESTAMP'
     RM='$RM'
     ofile='$ofile'
 
     "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/fuzzing/Makefile") CONFIG_FILES="$CONFIG_FILES test/fuzzing/Makefile" ;;
     "test/shaping/Makefile") CONFIG_FILES="$CONFIG_FILES test/shaping/Makefile" ;;
     "docs/Makefile") CONFIG_FILES="$CONFIG_FILES docs/Makefile" ;;
-    "docs/version.xml") CONFIG_FILES="$CONFIG_FILES docs/version.xml" ;;
-    "win32/Makefile") CONFIG_FILES="$CONFIG_FILES win32/Makefile" ;;
-    "win32/config.h.win32") CONFIG_FILES="$CONFIG_FILES win32/config.h.win32" ;;
+    "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
@@ -21146,13 +20882,13 @@ $as_echo X"$file" |
  ;;
     "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.
-    if test -n "${ZSH_VERSION+set}" ; then
+    if test -n "${ZSH_VERSION+set}"; then
       setopt NO_GLOB_SUBST
     fi
 
-    cfgfile="${ofile}T"
+    cfgfile=${ofile}T
     trap "$RM \"$cfgfile\"; exit 1" 1 2 15
     $RM "$cfgfile"
 
@@ -21160,7 +20896,7 @@ $as_echo X"$file" |
 #! $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.
 #
@@ -21194,7 +20930,7 @@ $as_echo X"$file" |
 
 
 # The names of the tagged configurations supported by this script.
-available_tags="CXX "
+available_tags='CXX '
 
 # ### BEGIN LIBTOOL CONFIG
 
@@ -21331,16 +21067,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 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
 
+# 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
 
-# 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.
@@ -21527,13 +21269,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
 
-# 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
 
-# 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
-# "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
 
@@ -21605,7 +21347,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.
-if test "X${COLLECT_NAMES+set}" != Xset; then
+if test set != "${COLLECT_NAMES+set}"; then
   COLLECT_NAMES=
   export COLLECT_NAMES
 fi
@@ -21614,7 +21356,7 @@ _LT_EOF
   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
@@ -21624,165 +21366,6 @@ ltmain="$ac_aux_dir/ltmain.sh"
   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"
@@ -21869,13 +21452,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
 
-# 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
 
-# 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
-# "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
 
@@ -21994,7 +21577,6 @@ Font callbacks (the more the better):
 
 Tools used for command-line utilities:
        Cairo:                  ${have_cairo}
-       Fontconfig:             ${have_fontconfig}
 
 Additional shapers (the more the better):
        Graphite2:              ${have_graphite2}
@@ -22002,7 +21584,6 @@ Additional shapers (the more the better):
 Platform shapers (not normally needed):
        CoreText:               ${have_coretext}
        Uniscribe:              ${have_uniscribe}
-       DirectWrite:            ${have_directwrite}
 
 Other features:
        Documentation:          ${have_gtk_doc}
@@ -22023,7 +21604,6 @@ Font callbacks (the more the better):
 
 Tools used for command-line utilities:
        Cairo:                  ${have_cairo}
-       Fontconfig:             ${have_fontconfig}
 
 Additional shapers (the more the better):
        Graphite2:              ${have_graphite2}
@@ -22031,7 +21611,6 @@ Additional shapers (the more the better):
 Platform shapers (not normally needed):
        CoreText:               ${have_coretext}
        Uniscribe:              ${have_uniscribe}
-       DirectWrite:            ${have_directwrite}
 
 Other features:
        Documentation:          ${have_gtk_doc}
index 5ffd494..5baad1f 100644 (file)
@@ -1,6 +1,6 @@
 AC_PREREQ([2.64])
 AC_INIT([HarfBuzz],
-        [1.2.7],
+        [0.9.40],
         [http://bugs.freedesktop.org/enter_bug.cgi?product=harfbuzz],
         [harfbuzz],
         [http://harfbuzz.org/])
@@ -9,7 +9,7 @@ AC_CONFIG_MACRO_DIR([m4])
 AC_CONFIG_SRCDIR([src/harfbuzz.pc.in])
 AC_CONFIG_HEADERS([config.h])
 
-AM_INIT_AUTOMAKE([1.11.1 gnits tar-ustar dist-bzip2 no-dist-gzip -Wall no-define color-tests -Wno-portability])
+AM_INIT_AUTOMAKE([1.11.1 gnits tar-pax dist-bzip2 no-dist-gzip -Wall no-define color-tests -Wno-portability])
 AM_CONDITIONAL(AUTOMAKE_OLDER_THAN_1_13, test $am__api_version = 1.11 -o $am__api_version = 1.12)
 AM_SILENT_RULES([yes])
 
@@ -51,7 +51,7 @@ m4_if(m4_eval(hb_version_minor % 2), [1],
 m4_define([hb_libtool_age],
          m4_eval(hb_version_int - hb_libtool_revision))
 m4_define([hb_libtool_current],
-         m4_eval(hb_libtool_age))
+         m4_eval(hb_version_major + hb_libtool_age))
 HB_LIBTOOL_VERSION_INFO=hb_libtool_current:hb_libtool_revision:hb_libtool_age
 AC_SUBST(HB_LIBTOOL_VERSION_INFO)
 
@@ -145,10 +145,8 @@ AC_ARG_WITH(glib,
                        [Use glib @<:@default=auto@:>@])],,
        [with_glib=auto])
 have_glib=false
-GLIB_DEPS="glib-2.0 >= 2.16"
-AC_SUBST(GLIB_DEPS)
 if test "x$with_glib" = "xyes" -o "x$with_glib" = "xauto"; then
-       PKG_CHECK_MODULES(GLIB, $GLIB_DEPS, have_glib=true, :)
+       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])
@@ -197,6 +195,17 @@ m4_ifdef([GOBJECT_INTROSPECTION_CHECK], [
        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 ==========================================================================
 
 AC_ARG_WITH(cairo,
@@ -226,30 +235,12 @@ AM_CONDITIONAL(HAVE_CAIRO_FT, $have_cairo_ft)
 
 dnl ==========================================================================
 
-AC_ARG_WITH(fontconfig,
-       [AS_HELP_STRING([--with-fontconfig=@<:@yes/no/auto@:>@],
-                       [Use fontconfig @<:@default=auto@:>@])],,
-       [with_fontconfig=auto])
-have_fontconfig=false
-if test "x$with_fontconfig" = "xyes" -o "x$with_fontconfig" = "xauto"; then
-       PKG_CHECK_MODULES(FONTCONFIG, fontconfig, have_fontconfig=true, :)
-fi
-if test "x$with_fontconfig" = "xyes" -a "x$have_fontconfig" != "xtrue"; then
-       AC_MSG_ERROR([fontconfig support requested but not found])
-fi
-if $have_fontconfig; then
-       AC_DEFINE(HAVE_FONTCONFIG, 1, [Have fontconfig library])
-fi
-AM_CONDITIONAL(HAVE_FONTCONFIG, $have_fontconfig)
-
-dnl ==========================================================================
-
 AC_ARG_WITH(icu,
-       [AS_HELP_STRING([--with-icu=@<:@yes/no/builtin/auto@:>@],
+       [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" = "xbuiltin" -o "x$with_icu" = "xauto"; then
+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
@@ -271,30 +262,14 @@ if test "x$with_icu" = "xyes" -o "x$with_icu" = "xbuiltin" -o "x$with_icu" = "xa
                fi
        fi
 fi
-if test \( "x$with_icu" = "xyes" -o "x$with_icu" = "xbuiltin" \) -a "x$have_icu" != "xtrue"; then
+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 test "x$with_icu" = "xbuiltin"; then
-               AC_DEFINE(HAVE_ICU_BUILTIN, 1, [Use hb-icu Unicode callbacks])
-       fi
 fi
 AM_CONDITIONAL(HAVE_ICU, $have_icu)
-AM_CONDITIONAL(HAVE_ICU_BUILTIN, $have_icu && test "x$with_icu" = "xbuiltin")
-
-dnl ===========================================================================
-
-have_ucdn=true
-if $have_glib || $have_icu && test "x$with_icu" = "xbuiltin"; 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 ==========================================================================
 
@@ -303,10 +278,8 @@ AC_ARG_WITH(graphite2,
                        [Use the graphite2 library @<:@default=no@:>@])],,
        [with_graphite2=no])
 have_graphite2=false
-GRAPHITE2_DEPS="graphite2"
-AC_SUBST(GRAPHITE2_DEPS)
 if test "x$with_graphite2" = "xyes" -o "x$with_graphite2" = "xauto"; then
-       PKG_CHECK_MODULES(GRAPHITE2, $GRAPHITE2_DEPS, have_graphite2=true, :)
+       PKG_CHECK_MODULES(GRAPHITE2, graphite2, have_graphite2=true, :)
 fi
 if test "x$with_graphite2" = "xyes" -a "x$have_graphite2" != "xtrue"; then
        AC_MSG_ERROR([graphite2 support requested but libgraphite2 not found])
@@ -323,11 +296,9 @@ AC_ARG_WITH(freetype,
                        [Use the FreeType library @<:@default=auto@:>@])],,
        [with_freetype=auto])
 have_freetype=false
-FREETYPE_DEPS="freetype2 >= 12.0.6"
-AC_SUBST(FREETYPE_DEPS)
 if test "x$with_freetype" = "xyes" -o "x$with_freetype" = "xauto"; then
        # See freetype/docs/VERSION.DLL; 12.0.6 means freetype-2.4.2
-       PKG_CHECK_MODULES(FREETYPE, $FREETYPE_DEPS, have_freetype=true, :)
+       PKG_CHECK_MODULES(FREETYPE, freetype2 >= 12.0.6, 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])
@@ -361,30 +332,6 @@ AM_CONDITIONAL(HAVE_UNISCRIBE, $have_uniscribe)
 
 dnl ===========================================================================
 
-AC_ARG_WITH(directwrite,
-       [AS_HELP_STRING([--with-directwrite=@<:@yes/no/auto@:>@],
-                       [Use the DirectWrite library (experimental) @<:@default=no@:>@])],,
-       [with_directwrite=no])
-have_directwrite=false
-AC_LANG_PUSH([C++])
-if test "x$with_directwrite" = "xyes" -o "x$with_directwrite" = "xauto"; then
-       AC_CHECK_HEADERS(dwrite.h, have_directwrite=true)
-fi
-AC_LANG_POP([C++])
-if test "x$with_directwrite" = "xyes" -a "x$have_directwrite" != "xtrue"; then
-       AC_MSG_ERROR([directwrite support requested but not found])
-fi
-if $have_directwrite; then
-       DIRECTWRITE_CXXFLAGS=
-       DIRECTWRITE_LIBS="-ldwrite"
-       AC_SUBST(DIRECTWRITE_CXXFLAGS)
-       AC_SUBST(DIRECTWRITE_LIBS)
-       AC_DEFINE(HAVE_DIRECTWRITE, 1, [Have DirectWrite library])
-fi
-AM_CONDITIONAL(HAVE_DIRECTWRITE, $have_directwrite)
-
-dnl ===========================================================================
-
 AC_ARG_WITH(coretext,
        [AS_HELP_STRING([--with-coretext=@<:@yes/no/auto@:>@],
                        [Use CoreText @<:@default=no@:>@])],,
@@ -469,12 +416,10 @@ src/hb-ucdn/Makefile
 util/Makefile
 test/Makefile
 test/api/Makefile
-test/fuzzing/Makefile
 test/shaping/Makefile
 docs/Makefile
-docs/version.xml
-win32/Makefile
-win32/config.h.win32
+docs/reference/Makefile
+docs/reference/version.xml
 ])
 
 AC_OUTPUT
@@ -493,7 +438,6 @@ Font callbacks (the more the better):
 
 Tools used for command-line utilities:
        Cairo:                  ${have_cairo}
-       Fontconfig:             ${have_fontconfig}
 
 Additional shapers (the more the better):
        Graphite2:              ${have_graphite2}
@@ -501,7 +445,6 @@ Additional shapers (the more the better):
 Platform shapers (not normally needed):
        CoreText:               ${have_coretext}
        Uniscribe:              ${have_uniscribe}
-       DirectWrite:            ${have_directwrite}
 
 Other features:
        Documentation:          ${have_gtk_doc}
diff --git a/docs/HarfBuzz.png b/docs/HarfBuzz.png
deleted file mode 100644 (file)
index d58d9fc..0000000
Binary files a/docs/HarfBuzz.png and /dev/null differ
index 3916801..034926c 100644 (file)
@@ -1,122 +1,3 @@
-# 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" \
-       --ignore-decorators="HB_EXTERN"
-
-# 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=  \
-       HarfBuzz.png
-
-# 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= \
-       usermanual-buffers-language-script-and-direction.xml \
-       usermanual-clusters.xml \
-       usermanual-fonts-and-faces.xml \
-       usermanual-glyph-information.xml \
-       usermanual-hello-harfbuzz.xml \
-       usermanual-install-harfbuzz.xml \
-       usermanual-opentype-features.xml \
-       usermanual-what-is-harfbuzz.xml \
-       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
+SUBDIRS = reference
 
 -include $(top_srcdir)/git.mk
index 04b9a15..f8fe860 100644 (file)
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.14 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994-2013 Free Software Foundation, Inc.
 # 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 = \
@@ -85,11 +77,8 @@ 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
+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 \
@@ -100,7 +89,7 @@ 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_FILES =
 CONFIG_CLEAN_VPATH_FILES =
 AM_V_P = $(am__v_P_@AM_V@)
 am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
@@ -116,13 +105,73 @@ 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@
@@ -149,8 +198,6 @@ CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
-DIRECTWRITE_CXXFLAGS = @DIRECTWRITE_CXXFLAGS@
-DIRECTWRITE_LIBS = @DIRECTWRITE_LIBS@
 DLLTOOL = @DLLTOOL@
 DSYMUTIL = @DSYMUTIL@
 DUMPBIN = @DUMPBIN@
@@ -160,20 +207,15 @@ ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
 FGREP = @FGREP@
-FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@
-FONTCONFIG_LIBS = @FONTCONFIG_LIBS@
 FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
-FREETYPE_DEPS = @FREETYPE_DEPS@
 FREETYPE_LIBS = @FREETYPE_LIBS@
 GIT = @GIT@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_DEPS = @GLIB_DEPS@
 GLIB_LIBS = @GLIB_LIBS@
 GLIB_MKENUMS = @GLIB_MKENUMS@
 GOBJECT_CFLAGS = @GOBJECT_CFLAGS@
 GOBJECT_LIBS = @GOBJECT_LIBS@
 GRAPHITE2_CFLAGS = @GRAPHITE2_CFLAGS@
-GRAPHITE2_DEPS = @GRAPHITE2_DEPS@
 GRAPHITE2_LIBS = @GRAPHITE2_LIBS@
 GREP = @GREP@
 GTKDOC_CHECK = @GTKDOC_CHECK@
@@ -296,195 +338,11 @@ 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" \
-       --ignore-decorators="HB_EXTERN"
-
-
-# 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 = \
-       HarfBuzz.png
-
-
-# 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 = \
-       usermanual-buffers-language-script-and-direction.xml \
-       usermanual-clusters.xml \
-       usermanual-fonts-and-faces.xml \
-       usermanual-glyph-information.xml \
-       usermanual-hello-harfbuzz.xml \
-       usermanual-install-harfbuzz.xml \
-       usermanual-opentype-features.xml \
-       usermanual-what-is-harfbuzz.xml \
-       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
+SUBDIRS = reference
+all: all-recursive
 
 .SUFFIXES:
-$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am $(top_srcdir)/gtk-doc.make $(am__configure_deps)
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
        @for dep in $?; do \
          case '$(am__configure_deps)' in \
            *$$dep*) \
@@ -505,7 +363,6 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
            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
@@ -515,20 +372,111 @@ $(top_srcdir)/configure:  $(am__configure_deps)
 $(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:
+# 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'`; \
@@ -560,23 +508,45 @@ distdir: $(DISTFILES)
            || exit 1; \
          fi; \
        done
-       $(MAKE) $(AM_MAKEFLAGS) \
-         top_distdir="$(top_distdir)" distdir="$(distdir)" \
-         dist-hook
+       @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-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
+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-am
+installcheck: installcheck-recursive
 install-strip:
        if test -z '$(STRIP)'; then \
          $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
@@ -590,7 +560,6 @@ install-strip:
 mostlyclean-generic:
 
 clean-generic:
-       -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
 
 distclean-generic:
        -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
@@ -599,272 +568,87 @@ distclean-generic:
 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: clean-recursive
 
-clean-am: clean-generic clean-libtool clean-local mostlyclean-am
+clean-am: clean-generic clean-libtool mostlyclean-am
 
-distclean: distclean-am
+distclean: distclean-recursive
        -rm -f Makefile
-distclean-am: clean-am distclean-generic distclean-local
+distclean-am: clean-am distclean-generic distclean-tags
 
-dvi: dvi-am
+dvi: dvi-recursive
 
 dvi-am:
 
-html: html-am
+html: html-recursive
 
 html-am:
 
-info: info-am
+info: info-recursive
 
 info-am:
 
-install-data-am: install-data-local
+install-data-am:
 
-install-dvi: install-dvi-am
+install-dvi: install-dvi-recursive
 
 install-dvi-am:
 
 install-exec-am:
 
-install-html: install-html-am
+install-html: install-html-recursive
 
 install-html-am:
 
-install-info: install-info-am
+install-info: install-info-recursive
 
 install-info-am:
 
 install-man:
 
-install-pdf: install-pdf-am
+install-pdf: install-pdf-recursive
 
 install-pdf-am:
 
-install-ps: install-ps-am
+install-ps: install-ps-recursive
 
 install-ps-am:
 
 installcheck-am:
 
-maintainer-clean: maintainer-clean-am
+maintainer-clean: maintainer-clean-recursive
        -rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic \
-       maintainer-clean-local
+maintainer-clean-am: distclean-am maintainer-clean-generic
 
-mostlyclean: mostlyclean-am
+mostlyclean: mostlyclean-recursive
 
 mostlyclean-am: mostlyclean-generic mostlyclean-libtool
 
-pdf: pdf-am
+pdf: pdf-recursive
 
 pdf-am:
 
-ps: ps-am
+ps: ps-recursive
 
 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
+uninstall-am:
 
-maintainer-clean-local:
-       @rm -rf xml html
+.MAKE: $(am__recursive_targets) install-am install-strip
 
-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
+.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
 
-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
 
diff --git a/docs/harfbuzz-docs.xml b/docs/harfbuzz-docs.xml
deleted file mode 100644 (file)
index 6c03f39..0000000
+++ /dev/null
@@ -1,184 +0,0 @@
-<?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 Manual</title>
-    <abstract>
-      <title>HarfBuzz</title>
-      <graphic fileref="HarfBuzz.png" format="PNG" align="center"/>
-      <para>
-        HarfBuzz is an <ulink url="http://www.microsoft.com/typography/otspec/">OpenType</ulink>
-        text shaping engine.
-      </para>
-      <para>
-        The current HarfBuzz codebase, formerly known as harfbuzz-ng, is
-        versioned 1.x.x and is stable and under active maintenance. This is
-        what is used in latest versions of Firefox, GNOME, ChromeOS, Chrome,
-        LibreOffice, XeTeX, Android, and KDE, among other places. The canonical
-        source tree is available
-        <ulink url="http://cgit.freedesktop.org/harfbuzz/">here</ulink>.
-        Also available on
-        <ulink url="https://github.com/behdad/harfbuzz">github</ulink>.
-        See <xref linkend="download" endterm="download.title"/> for release tarballs.
-      </para>
-      <para>
-        The old HarfBuzz codebase, these days known as harfbuzz-old, was
-        derived from <ulink url="http://freetype.org/">FreeType</ulink>,
-        <ulink url="http://pango.org/">Pango</ulink>, and
-        <ulink url="http://qt-project.org/">Qt</ulink> and is available
-        <ulink url="http://cgit.freedesktop.org/harfbuzz.old/">here</ulink>.
-        It is not actively developed or maintained, and is extremely buggy. All
-        users are encouraged to switch over to the new HarfBuzz as soon as
-        possible.  There are no release tarballs of old HarfBuzz whatsoever.
-      </para>
-    </abstract>
-  </bookinfo>
-
-  <part>
-    <title>User's manual</title>
-      <xi:include href="usermanual-what-is-harfbuzz.xml"/>
-      <xi:include href="usermanual-install-harfbuzz.xml"/>
-      <xi:include href="usermanual-hello-harfbuzz.xml"/>
-      <xi:include href="usermanual-buffers-language-script-and-direction.xml"/>
-      <xi:include href="usermanual-fonts-and-faces.xml"/>
-      <xi:include href="usermanual-opentype-features.xml"/>
-      <xi:include href="usermanual-glyph-information.xml"/>
-  </part>
-
-  <part>
-    <partinfo>
-      <releaseinfo>
-        This document is 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>
-    </partinfo>
-    <title>Reference manual</title>
-      <chapter>
-        <title>Harfbuzz API</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-ot-font.xml"/>
-        <xi:include href="xml/hb-ot-shape.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="api-index-0-9-2" role="0.9.2">
-        <title>Index of new symbols in 0.9.2</title>
-        <xi:include href="xml/api-index-0.9.2.xml"><xi:fallback /></xi:include>
-      </index>
-      <index id="api-index-0-9-5" role="0.9.5">
-        <title>Index of new symbols in 0.9.5</title>
-        <xi:include href="xml/api-index-0.9.5.xml"><xi:fallback /></xi:include>
-      </index>
-      <index id="api-index-0-9-7" role="0.9.7">
-        <title>Index of new symbols in 0.9.7</title>
-        <xi:include href="xml/api-index-0.9.7.xml"><xi:fallback /></xi:include>
-      </index>
-      <index id="api-index-0-9-8" role="0.9.8">
-        <title>Index of new symbols in 0.9.8</title>
-        <xi:include href="xml/api-index-0.9.8.xml"><xi:fallback /></xi:include>
-      </index>
-      <index id="api-index-0-9-10" role="0.9.10">
-        <title>Index of new symbols in 0.9.10</title>
-        <xi:include href="xml/api-index-0.9.10.xml"><xi:fallback /></xi:include>
-      </index>
-      <index id="api-index-0-9-11" role="0.9.11">
-        <title>Index of new symbols in 0.9.11</title>
-        <xi:include href="xml/api-index-0.9.11.xml"><xi:fallback /></xi:include>
-      </index>
-      <index id="api-index-0-9-20" role="0.9.20">
-        <title>Index of new symbols in 0.9.20</title>
-        <xi:include href="xml/api-index-0.9.20.xml"><xi:fallback /></xi:include>
-      </index>
-      <index id="api-index-0-9-22" role="0.9.22">
-        <title>Index of new symbols in 0.9.22</title>
-        <xi:include href="xml/api-index-0.9.22.xml"><xi:fallback /></xi:include>
-      </index>
-      <index id="api-index-0-9-28" role="0.9.28">
-        <title>Index of new symbols in 0.9.28</title>
-        <xi:include href="xml/api-index-0.9.28.xml"><xi:fallback /></xi:include>
-      </index>
-      <index id="api-index-0-9-30" role="0.9.30">
-        <title>Index of new symbols in 0.9.30</title>
-        <xi:include href="xml/api-index-0.9.30.xml"><xi:fallback /></xi:include>
-      </index>
-      <index id="api-index-0-9-31" role="0.9.31">
-        <title>Index of new symbols in 0.9.31</title>
-        <xi:include href="xml/api-index-0.9.31.xml"><xi:fallback /></xi:include>
-      </index>
-      <index id="api-index-0-9-38" role="0.9.38">
-        <title>Index of new symbols in 0.9.38</title>
-        <xi:include href="xml/api-index-0.9.38.xml"><xi:fallback /></xi:include>
-      </index>
-      <index id="api-index-0-9-39" role="0.9.39">
-        <title>Index of new symbols in 0.9.39</title>
-        <xi:include href="xml/api-index-0.9.39.xml"><xi:fallback /></xi:include>
-      </index>
-      <index id="api-index-0-9-41" role="0.9.41">
-        <title>Index of new symbols in 0.9.41</title>
-        <xi:include href="xml/api-index-0.9.41.xml"><xi:fallback /></xi:include>
-      </index>
-      <index id="api-index-0-9-42" role="0.9.42">
-        <title>Index of new symbols in 0.9.42</title>
-        <xi:include href="xml/api-index-0.9.42.xml"><xi:fallback /></xi:include>
-      </index>
-      <index id="api-index-1-0-5" role="1.0.5">
-        <title>Index of new symbols in 1.0.5</title>
-        <xi:include href="xml/api-index-1.0.5.xml"><xi:fallback /></xi:include>
-      </index>
-      <index id="api-index-1-1-2" role="1.1.2">
-        <title>Index of new symbols in 1.1.2</title>
-        <xi:include href="xml/api-index-1.1.2.xml"><xi:fallback /></xi:include>
-      </index>
-      <index id="api-index-1-1-3" role="1.1.3">
-        <title>Index of new symbols in 1.1.3</title>
-        <xi:include href="xml/api-index-1.1.3.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>
-  </part>
-</book>
diff --git a/docs/harfbuzz.types b/docs/harfbuzz.types
deleted file mode 100644 (file)
index d9664df..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-hb_gobject_blob_get_type
-hb_gobject_buffer_cluster_level_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_feature_get_type
-hb_gobject_font_funcs_get_type
-hb_gobject_font_get_type
-hb_gobject_glyph_info_get_type
-hb_gobject_glyph_position_get_type
-hb_gobject_memory_mode_get_type
-hb_gobject_ot_layout_glyph_class_get_type
-hb_gobject_script_get_type
-hb_gobject_segment_properties_get_type
-hb_gobject_set_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
-hb_gobject_user_data_key_get_type
diff --git a/docs/html/HarfBuzz.png b/docs/html/HarfBuzz.png
deleted file mode 100644 (file)
index d58d9fc..0000000
Binary files a/docs/html/HarfBuzz.png and /dev/null differ
diff --git a/docs/html/adding-text-to-the-buffer.html b/docs/html/adding-text-to-the-buffer.html
deleted file mode 100644 (file)
index ccf96bc..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Adding text to the buffer: HarfBuzz Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="HarfBuzz Manual">
-<link rel="up" href="buffers-language-script-and-direction.html" title="Buffers, language, script and direction">
-<link rel="prev" href="buffers-language-script-and-direction.html" title="Buffers, language, script and direction">
-<link rel="next" href="setting-buffer-properties.html" title="Setting buffer properties">
-<meta name="generator" content="GTK-Doc V1.24.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><a accesskey="u" href="buffers-language-script-and-direction.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="buffers-language-script-and-direction.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="setting-buffer-properties.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
-<div class="section">
-<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="adding-text-to-the-buffer"></a>Adding text to the buffer</h2></div></div></div>
-<p>
-      Now we have a brand new Harfbuzz buffer. Let's start filling it
-      with text! From Harfbuzz's perspective, a buffer is just a stream
-      of Unicode codepoints, but your input string is probably in one of
-      the standard Unicode character encodings (UTF-8, UTF-16, UTF-32)
-    </p>
-</div>
-<div class="footer">
-<hr>Generated by GTK-Doc V1.24.1</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/html/annotation-glossary.html b/docs/html/annotation-glossary.html
deleted file mode 100644 (file)
index ccbbafe..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-<!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: HarfBuzz Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="HarfBuzz Manual">
-<link rel="up" href="pt02.html" title="Part II. Reference manual">
-<link rel="prev" href="deprecated-api-index.html" title="Index of deprecated API">
-<meta name="generator" content="GTK-Doc V1.24.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="#glsE">E</a>
-                     <span class="dim">|</span> 
-                  <a class="shortcut" href="#glsI">I</a>
-                     <span class="dim">|</span> 
-                  <a class="shortcut" href="#glsN">N</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><a accesskey="u" href="pt02.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></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><span class="glossterm"><a name="annotation-glossterm-allow-none"></a>allow-none</span></dt>
-<dd class="glossdef"><p>NULL is OK, both for passing and for returning.</p></dd>
-<dt><span class="glossterm"><a name="annotation-glossterm-array"></a>array</span></dt>
-<dd class="glossdef"><p>Parameter points to an array of items.</p></dd>
-<a name="glsC"></a><h3 class="title">C</h3>
-<dt><span class="glossterm"><a name="annotation-glossterm-closure"></a>closure</span></dt>
-<dd class="glossdef"><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><span class="glossterm"><a name="annotation-glossterm-destroy"></a>destroy</span></dt>
-<dd class="glossdef"><p>This parameter is a 'destroy_data', for callbacks.</p></dd>
-<a name="glsE"></a><h3 class="title">E</h3>
-<dt><span class="glossterm"><a name="annotation-glossterm-element-type"></a>element-type</span></dt>
-<dd class="glossdef"><p>Generics and defining elements of containers and arrays.</p></dd>
-<a name="glsI"></a><h3 class="title">I</h3>
-<dt><span class="glossterm"><a name="annotation-glossterm-inout"></a>inout</span></dt>
-<dd class="glossdef"><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="glsN"></a><h3 class="title">N</h3>
-<dt><span class="glossterm"><a name="annotation-glossterm-nullable"></a>nullable</span></dt>
-<dd class="glossdef"><p>NULL may be passed as the value in, out, in-out; or as a return value.</p></dd>
-<a name="glsO"></a><h3 class="title">O</h3>
-<dt><span class="glossterm"><a name="annotation-glossterm-out"></a>out</span></dt>
-<dd class="glossdef"><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><span class="glossterm"><a name="annotation-glossterm-scope%20notified"></a>scope notified</span></dt>
-<dd class="glossdef"><p>The callback is valid until the GDestroyNotify argument is called.</p></dd>
-<dt><span class="glossterm"><a name="annotation-glossterm-skip"></a>skip</span></dt>
-<dd class="glossdef"><p>Exposed in C code, not necessarily available in other languages.</p></dd>
-<a name="glsT"></a><h3 class="title">T</h3>
-<dt><span class="glossterm"><a name="annotation-glossterm-transfer%20full"></a>transfer full</span></dt>
-<dd class="glossdef"><p>Free data after the code is done.</p></dd>
-<dt><span class="glossterm"><a name="annotation-glossterm-transfer%20none"></a>transfer none</span></dt>
-<dd class="glossdef"><p>Don't free data after the code is done.</p></dd>
-</div>
-<div class="footer">
-<hr>Generated by GTK-Doc V1.24.1</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/html/api-index-0-9-10.html b/docs/html/api-index-0-9-10.html
deleted file mode 100644 (file)
index 76ac9c6..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-<!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 new symbols in 0.9.10: HarfBuzz Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="HarfBuzz Manual">
-<link rel="up" href="pt02.html" title="Part II. Reference manual">
-<link rel="prev" href="api-index-0-9-8.html" title="Index of new symbols in 0.9.8">
-<link rel="next" href="api-index-0-9-11.html" title="Index of new symbols in 0.9.11">
-<meta name="generator" content="GTK-Doc V1.24.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="#idxO">O</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><a accesskey="u" href="pt02.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="api-index-0-9-8.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="api-index-0-9-11.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-0-9-10"></a>Index of new symbols in 0.9.10</h2></div></div></div>
-<a name="idx"></a><a name="idxO"></a><h3 class="title">O</h3>
-<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>
-<a name="idxS"></a><h3 class="title">S</h3>
-<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>
-</div>
-<div class="footer">
-<hr>Generated by GTK-Doc V1.24.1</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/html/api-index-0-9-11.html b/docs/html/api-index-0-9-11.html
deleted file mode 100644 (file)
index 83271c7..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-<!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 new symbols in 0.9.11: HarfBuzz Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="HarfBuzz Manual">
-<link rel="up" href="pt02.html" title="Part II. Reference manual">
-<link rel="prev" href="api-index-0-9-10.html" title="Index of new symbols in 0.9.10">
-<link rel="next" href="api-index-0-9-20.html" title="Index of new symbols in 0.9.20">
-<meta name="generator" content="GTK-Doc V1.24.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></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="pt02.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="api-index-0-9-10.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="api-index-0-9-20.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-0-9-11"></a>Index of new symbols in 0.9.11</h2></div></div></div>
-<a name="idx"></a><a name="idxB"></a><h3 class="title">B</h3>
-<dt>
-<a class="link" href="harfbuzz-Buffers.html#hb-buffer-clear-contents" title="hb_buffer_clear_contents ()">hb_buffer_clear_contents</a>, function in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
-</dt>
-<dd></dd>
-</div>
-<div class="footer">
-<hr>Generated by GTK-Doc V1.24.1</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/html/api-index-0-9-2.html b/docs/html/api-index-0-9-2.html
deleted file mode 100644 (file)
index 75ae862..0000000
+++ /dev/null
@@ -1,746 +0,0 @@
-<!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 new symbols in 0.9.2: HarfBuzz Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="HarfBuzz Manual">
-<link rel="up" href="pt02.html" title="Part II. Reference manual">
-<link rel="prev" href="api-index-full.html" title="API Index">
-<link rel="next" href="api-index-0-9-5.html" title="Index of new symbols in 0.9.5">
-<meta name="generator" content="GTK-Doc V1.24.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="#idxD">D</a>
-                     <span class="dim">|</span> 
-                  <a class="shortcut" href="#idxF">F</a>
-                     <span class="dim">|</span> 
-                  <a class="shortcut" href="#idxL">L</a>
-                     <span class="dim">|</span> 
-                  <a class="shortcut" href="#idxO">O</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><a accesskey="u" href="pt02.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></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="api-index-0-9-5.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-0-9-2"></a>Index of new symbols in 0.9.2</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-Buffers.html#hb-buffer-add-utf16" title="hb_buffer_add_utf16 ()">hb_buffer_add_utf16</a>, function in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-Buffers.html#hb-buffer-add-utf32" title="hb_buffer_add_utf32 ()">hb_buffer_add_utf32</a>, function in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-Buffers.html#hb-buffer-add-utf8" title="hb_buffer_add_utf8 ()">hb_buffer_add_utf8</a>, function in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-Buffers.html#hb-buffer-allocation-successful" title="hb_buffer_allocation_successful ()">hb_buffer_allocation_successful</a>, function in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-Buffers.html#hb-buffer-create" title="hb_buffer_create ()">hb_buffer_create</a>, function in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-Buffers.html#hb-buffer-destroy" title="hb_buffer_destroy ()">hb_buffer_destroy</a>, function in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-Buffers.html#hb-buffer-get-direction" title="hb_buffer_get_direction ()">hb_buffer_get_direction</a>, function in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-Buffers.html#hb-buffer-get-empty" title="hb_buffer_get_empty ()">hb_buffer_get_empty</a>, function in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-Buffers.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-Buffers.html" title="Buffers">Buffers</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-Buffers.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-Buffers.html" title="Buffers">Buffers</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-Buffers.html#hb-buffer-get-language" title="hb_buffer_get_language ()">hb_buffer_get_language</a>, function in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-Buffers.html#hb-buffer-get-length" title="hb_buffer_get_length ()">hb_buffer_get_length</a>, function in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-Buffers.html#hb-buffer-get-script" title="hb_buffer_get_script ()">hb_buffer_get_script</a>, function in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-Buffers.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-Buffers.html" title="Buffers">Buffers</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-Buffers.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-Buffers.html" title="Buffers">Buffers</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-Buffers.html#hb-buffer-normalize-glyphs" title="hb_buffer_normalize_glyphs ()">hb_buffer_normalize_glyphs</a>, function in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-Buffers.html#hb-buffer-pre-allocate" title="hb_buffer_pre_allocate ()">hb_buffer_pre_allocate</a>, function in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-Buffers.html#hb-buffer-reference" title="hb_buffer_reference ()">hb_buffer_reference</a>, function in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-Buffers.html#hb-buffer-reset" title="hb_buffer_reset ()">hb_buffer_reset</a>, function in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-Buffers.html#hb-buffer-reverse" title="hb_buffer_reverse ()">hb_buffer_reverse</a>, function in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-Buffers.html#hb-buffer-reverse-clusters" title="hb_buffer_reverse_clusters ()">hb_buffer_reverse_clusters</a>, function in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-Buffers.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-Buffers.html" title="Buffers">Buffers</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-Buffers.html#hb-buffer-set-direction" title="hb_buffer_set_direction ()">hb_buffer_set_direction</a>, function in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-Buffers.html#hb-buffer-set-language" title="hb_buffer_set_language ()">hb_buffer_set_language</a>, function in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-Buffers.html#hb-buffer-set-length" title="hb_buffer_set_length ()">hb_buffer_set_length</a>, function in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-Buffers.html#hb-buffer-set-script" title="hb_buffer_set_script ()">hb_buffer_set_script</a>, function in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-Buffers.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-Buffers.html" title="Buffers">Buffers</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-Buffers.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-Buffers.html" title="Buffers">Buffers</a>
-</dt>
-<dd></dd>
-<a name="idxD"></a><h3 class="title">D</h3>
-<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-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-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-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-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-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-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-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-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-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-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-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-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-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-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-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-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-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-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-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>
-<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-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="idxO"></a><h3 class="title">O</h3>
-<dt>
-<a class="link" href="harfbuzz-hb-ot-shape.html#hb-ot-shape-glyphs-closure" title="hb_ot_shape_glyphs_closure ()">hb_ot_shape_glyphs_closure</a>, function in <a class="link" href="harfbuzz-hb-ot-shape.html" title="hb-ot-shape">hb-ot-shape</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>
-<a name="idxS"></a><h3 class="title">S</h3>
-<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-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-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-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-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-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-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-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-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-Shaping.html#hb-shape" title="hb_shape ()">hb_shape</a>, function in <a class="link" href="harfbuzz-Shaping.html" title="Shaping">Shaping</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-Shaping.html#hb-shape-full" title="hb_shape_full ()">hb_shape_full</a>, function in <a class="link" href="harfbuzz-Shaping.html" title="Shaping">Shaping</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-Shaping.html#hb-shape-list-shapers" title="hb_shape_list_shapers ()">hb_shape_list_shapers</a>, function in <a class="link" href="harfbuzz-Shaping.html" title="Shaping">Shaping</a>
-</dt>
-<dd></dd>
-<a name="idxT"></a><h3 class="title">T</h3>
-<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>
-<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-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-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-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-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-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-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-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>
-<a name="idxV"></a><h3 class="title">V</h3>
-<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-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.24.1</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/html/api-index-0-9-20.html b/docs/html/api-index-0-9-20.html
deleted file mode 100644 (file)
index cb1b1f6..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-<!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 new symbols in 0.9.20: HarfBuzz Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="HarfBuzz Manual">
-<link rel="up" href="pt02.html" title="Part II. Reference manual">
-<link rel="prev" href="api-index-0-9-11.html" title="Index of new symbols in 0.9.11">
-<link rel="next" href="api-index-0-9-22.html" title="Index of new symbols in 0.9.22">
-<meta name="generator" content="GTK-Doc V1.24.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></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="pt02.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="api-index-0-9-11.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="api-index-0-9-22.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-0-9-20"></a>Index of new symbols in 0.9.20</h2></div></div></div>
-<a name="idx"></a><a name="idxB"></a><h3 class="title">B</h3>
-<dt>
-<a class="link" href="harfbuzz-Buffers.html#hb-buffer-flags-t" title="enum hb_buffer_flags_t">hb_buffer_flags_t</a>, enum in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-Buffers.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-Buffers.html" title="Buffers">Buffers</a>
-</dt>
-<dd></dd>
-</div>
-<div class="footer">
-<hr>Generated by GTK-Doc V1.24.1</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/html/api-index-0-9-22.html b/docs/html/api-index-0-9-22.html
deleted file mode 100644 (file)
index 29003d2..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-<!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 new symbols in 0.9.22: HarfBuzz Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="HarfBuzz Manual">
-<link rel="up" href="pt02.html" title="Part II. Reference manual">
-<link rel="prev" href="api-index-0-9-20.html" title="Index of new symbols in 0.9.20">
-<link rel="next" href="api-index-0-9-28.html" title="Index of new symbols in 0.9.28">
-<meta name="generator" content="GTK-Doc V1.24.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="#idxO">O</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="pt02.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="api-index-0-9-20.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="api-index-0-9-28.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-0-9-22"></a>Index of new symbols in 0.9.22</h2></div></div></div>
-<a name="idx"></a><a name="idxO"></a><h3 class="title">O</h3>
-<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>
-</div>
-<div class="footer">
-<hr>Generated by GTK-Doc V1.24.1</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/html/api-index-0-9-28.html b/docs/html/api-index-0-9-28.html
deleted file mode 100644 (file)
index db1a51b..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-<!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 new symbols in 0.9.28: HarfBuzz Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="HarfBuzz Manual">
-<link rel="up" href="pt02.html" title="Part II. Reference manual">
-<link rel="prev" href="api-index-0-9-22.html" title="Index of new symbols in 0.9.22">
-<link rel="next" href="api-index-0-9-30.html" title="Index of new symbols in 0.9.30">
-<meta name="generator" content="GTK-Doc V1.24.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="#idxO">O</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="pt02.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="api-index-0-9-22.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="api-index-0-9-30.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-0-9-28"></a>Index of new symbols in 0.9.28</h2></div></div></div>
-<a name="idx"></a><a name="idxO"></a><h3 class="title">O</h3>
-<dt>
-<a class="link" href="harfbuzz-hb-ot-font.html#hb-ot-font-set-funcs" title="hb_ot_font_set_funcs ()">hb_ot_font_set_funcs</a>, function in <a class="link" href="harfbuzz-hb-ot-font.html" title="hb-ot-font">hb-ot-font</a>
-</dt>
-<dd></dd>
-</div>
-<div class="footer">
-<hr>Generated by GTK-Doc V1.24.1</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/html/api-index-0-9-30.html b/docs/html/api-index-0-9-30.html
deleted file mode 100644 (file)
index e28f4db..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-<!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 new symbols in 0.9.30: HarfBuzz Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="HarfBuzz Manual">
-<link rel="up" href="pt02.html" title="Part II. Reference manual">
-<link rel="prev" href="api-index-0-9-28.html" title="Index of new symbols in 0.9.28">
-<link rel="next" href="api-index-0-9-31.html" title="Index of new symbols in 0.9.31">
-<meta name="generator" content="GTK-Doc V1.24.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="#idxO">O</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><a accesskey="u" href="pt02.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="api-index-0-9-28.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="api-index-0-9-31.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-0-9-30"></a>Index of new symbols in 0.9.30</h2></div></div></div>
-<a name="idx"></a><a name="idxO"></a><h3 class="title">O</h3>
-<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>
-<a name="idxV"></a><h3 class="title">V</h3>
-<dt>
-<a class="link" href="harfbuzz-hb-version.html#hb-version-atleast" title="hb_version_atleast ()">hb_version_atleast</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.24.1</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/html/api-index-0-9-31.html b/docs/html/api-index-0-9-31.html
deleted file mode 100644 (file)
index b011157..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-<!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 new symbols in 0.9.31: HarfBuzz Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="HarfBuzz Manual">
-<link rel="up" href="pt02.html" title="Part II. Reference manual">
-<link rel="prev" href="api-index-0-9-30.html" title="Index of new symbols in 0.9.30">
-<link rel="next" href="api-index-0-9-38.html" title="Index of new symbols in 0.9.38">
-<meta name="generator" content="GTK-Doc V1.24.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></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="pt02.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="api-index-0-9-30.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="api-index-0-9-38.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-0-9-31"></a>Index of new symbols in 0.9.31</h2></div></div></div>
-<a name="idx"></a><a name="idxB"></a><h3 class="title">B</h3>
-<dt>
-<a class="link" href="harfbuzz-Buffers.html#hb-buffer-add-codepoints" title="hb_buffer_add_codepoints ()">hb_buffer_add_codepoints</a>, function in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-Buffers.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-Buffers.html" title="Buffers">Buffers</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-Buffers.html#HB-BUFFER-REPLACEMENT-CODEPOINT-DEFAULT:CAPS" title="HB_BUFFER_REPLACEMENT_CODEPOINT_DEFAULT">HB_BUFFER_REPLACEMENT_CODEPOINT_DEFAULT</a>, macro in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-Buffers.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-Buffers.html" title="Buffers">Buffers</a>
-</dt>
-<dd></dd>
-</div>
-<div class="footer">
-<hr>Generated by GTK-Doc V1.24.1</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/html/api-index-0-9-38.html b/docs/html/api-index-0-9-38.html
deleted file mode 100644 (file)
index 263adb8..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-<!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 new symbols in 0.9.38: HarfBuzz Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="HarfBuzz Manual">
-<link rel="up" href="pt02.html" title="Part II. Reference manual">
-<link rel="prev" href="api-index-0-9-31.html" title="Index of new symbols in 0.9.31">
-<link rel="next" href="api-index-0-9-39.html" title="Index of new symbols in 0.9.39">
-<meta name="generator" content="GTK-Doc V1.24.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="#idxF">F</a>
-                     <span class="dim">|</span> 
-                  <a class="shortcut" href="#idxG">G</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="pt02.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="api-index-0-9-31.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="api-index-0-9-39.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-0-9-38"></a>Index of new symbols in 0.9.38</h2></div></div></div>
-<a name="idx"></a><a name="idxF"></a><h3 class="title">F</h3>
-<dt>
-<a class="link" href="harfbuzz-hb-ft.html#hb-ft-face-create-referenced" title="hb_ft_face_create_referenced ()">hb_ft_face_create_referenced</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-referenced" title="hb_ft_font_create_referenced ()">hb_ft_font_create_referenced</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-blob-create" title="hb_glib_blob_create ()">hb_glib_blob_create</a>, function in <a class="link" href="harfbuzz-hb-glib.html" title="hb-glib">hb-glib</a>
-</dt>
-<dd></dd>
-</div>
-<div class="footer">
-<hr>Generated by GTK-Doc V1.24.1</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/html/api-index-0-9-39.html b/docs/html/api-index-0-9-39.html
deleted file mode 100644 (file)
index dc36815..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-<!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 new symbols in 0.9.39: HarfBuzz Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="HarfBuzz Manual">
-<link rel="up" href="pt02.html" title="Part II. Reference manual">
-<link rel="prev" href="api-index-0-9-38.html" title="Index of new symbols in 0.9.38">
-<link rel="next" href="api-index-0-9-41.html" title="Index of new symbols in 0.9.41">
-<meta name="generator" content="GTK-Doc V1.24.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></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="pt02.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="api-index-0-9-38.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="api-index-0-9-41.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-0-9-39"></a>Index of new symbols in 0.9.39</h2></div></div></div>
-<a name="idx"></a><a name="idxB"></a><h3 class="title">B</h3>
-<dt>
-<a class="link" href="harfbuzz-Buffers.html#hb-buffer-add-latin1" title="hb_buffer_add_latin1 ()">hb_buffer_add_latin1</a>, function in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
-</dt>
-<dd></dd>
-</div>
-<div class="footer">
-<hr>Generated by GTK-Doc V1.24.1</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/html/api-index-0-9-41.html b/docs/html/api-index-0-9-41.html
deleted file mode 100644 (file)
index b4b2466..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-<!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 new symbols in 0.9.41: HarfBuzz Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="HarfBuzz Manual">
-<link rel="up" href="pt02.html" title="Part II. Reference manual">
-<link rel="prev" href="api-index-0-9-39.html" title="Index of new symbols in 0.9.39">
-<link rel="next" href="api-index-0-9-42.html" title="Index of new symbols in 0.9.42">
-<meta name="generator" content="GTK-Doc V1.24.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></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="pt02.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="api-index-0-9-39.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="api-index-0-9-42.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-0-9-41"></a>Index of new symbols in 0.9.41</h2></div></div></div>
-<a name="idx"></a><a name="idxB"></a><h3 class="title">B</h3>
-<dt>
-<a class="link" href="harfbuzz-Buffers.html#hb-buffer-reverse-range" title="hb_buffer_reverse_range ()">hb_buffer_reverse_range</a>, function in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
-</dt>
-<dd></dd>
-</div>
-<div class="footer">
-<hr>Generated by GTK-Doc V1.24.1</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/html/api-index-0-9-42.html b/docs/html/api-index-0-9-42.html
deleted file mode 100644 (file)
index 4fdb417..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-<!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 new symbols in 0.9.42: HarfBuzz Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="HarfBuzz Manual">
-<link rel="up" href="pt02.html" title="Part II. Reference manual">
-<link rel="prev" href="api-index-0-9-41.html" title="Index of new symbols in 0.9.41">
-<link rel="next" href="api-index-1-0-5.html" title="Index of new symbols in 1.0.5">
-<meta name="generator" content="GTK-Doc V1.24.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></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="pt02.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="api-index-0-9-41.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="api-index-1-0-5.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-0-9-42"></a>Index of new symbols in 0.9.42</h2></div></div></div>
-<a name="idx"></a><a name="idxB"></a><h3 class="title">B</h3>
-<dt>
-<a class="link" href="harfbuzz-Buffers.html#hb-buffer-get-cluster-level" title="hb_buffer_get_cluster_level ()">hb_buffer_get_cluster_level</a>, function in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-Buffers.html#hb-buffer-set-cluster-level" title="hb_buffer_set_cluster_level ()">hb_buffer_set_cluster_level</a>, function in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
-</dt>
-<dd></dd>
-</div>
-<div class="footer">
-<hr>Generated by GTK-Doc V1.24.1</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/html/api-index-0-9-5.html b/docs/html/api-index-0-9-5.html
deleted file mode 100644 (file)
index 5f03c6d..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-<!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 new symbols in 0.9.5: HarfBuzz Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="HarfBuzz Manual">
-<link rel="up" href="pt02.html" title="Part II. Reference manual">
-<link rel="prev" href="api-index-0-9-2.html" title="Index of new symbols in 0.9.2">
-<link rel="next" href="api-index-0-9-7.html" title="Index of new symbols in 0.9.7">
-<meta name="generator" content="GTK-Doc V1.24.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="#idxF">F</a>
-                     <span class="dim">|</span> 
-                  <a class="shortcut" href="#idxT">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><a accesskey="u" href="pt02.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="api-index-0-9-2.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="api-index-0-9-7.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-0-9-5"></a>Index of new symbols in 0.9.5</h2></div></div></div>
-<a name="idx"></a><a name="idxB"></a><h3 class="title">B</h3>
-<dt>
-<a class="link" href="harfbuzz-Buffers.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-Buffers.html" title="Buffers">Buffers</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-Buffers.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-Buffers.html" title="Buffers">Buffers</a>
-</dt>
-<dd></dd>
-<a name="idxF"></a><h3 class="title">F</h3>
-<dt>
-<a class="link" href="harfbuzz-Shaping.html#hb-feature-from-string" title="hb_feature_from_string ()">hb_feature_from_string</a>, function in <a class="link" href="harfbuzz-Shaping.html" title="Shaping">Shaping</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-Shaping.html#hb-feature-to-string" title="hb_feature_to_string ()">hb_feature_to_string</a>, function in <a class="link" href="harfbuzz-Shaping.html" title="Shaping">Shaping</a>
-</dt>
-<dd></dd>
-<a name="idxT"></a><h3 class="title">T</h3>
-<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>
-</div>
-<div class="footer">
-<hr>Generated by GTK-Doc V1.24.1</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/html/api-index-0-9-7.html b/docs/html/api-index-0-9-7.html
deleted file mode 100644 (file)
index d948391..0000000
+++ /dev/null
@@ -1,195 +0,0 @@
-<!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 new symbols in 0.9.7: HarfBuzz Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="HarfBuzz Manual">
-<link rel="up" href="pt02.html" title="Part II. Reference manual">
-<link rel="prev" href="api-index-0-9-5.html" title="Index of new symbols in 0.9.5">
-<link rel="next" href="api-index-0-9-8.html" title="Index of new symbols in 0.9.8">
-<meta name="generator" content="GTK-Doc V1.24.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="#idxF">F</a>
-                     <span class="dim">|</span> 
-                  <a class="shortcut" href="#idxO">O</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><a accesskey="u" href="pt02.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="api-index-0-9-5.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="api-index-0-9-8.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-0-9-7"></a>Index of new symbols in 0.9.7</h2></div></div></div>
-<a name="idx"></a><a name="idxB"></a><h3 class="title">B</h3>
-<dt>
-<a class="link" href="harfbuzz-Buffers.html#hb-buffer-add" title="hb_buffer_add ()">hb_buffer_add</a>, function in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-Buffers.html#hb-buffer-deserialize-glyphs" title="hb_buffer_deserialize_glyphs ()">hb_buffer_deserialize_glyphs</a>, function in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-Buffers.html#hb-buffer-get-flags" title="hb_buffer_get_flags ()">hb_buffer_get_flags</a>, function in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-Buffers.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-Buffers.html" title="Buffers">Buffers</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-Buffers.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-Buffers.html" title="Buffers">Buffers</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-Buffers.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-Buffers.html" title="Buffers">Buffers</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-Buffers.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-Buffers.html" title="Buffers">Buffers</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-Buffers.html#hb-buffer-serialize-glyphs" title="hb_buffer_serialize_glyphs ()">hb_buffer_serialize_glyphs</a>, function in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-Buffers.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-Buffers.html" title="Buffers">Buffers</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-Buffers.html#hb-buffer-set-flags" title="hb_buffer_set_flags ()">hb_buffer_set_flags</a>, function in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-Buffers.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-Buffers.html" title="Buffers">Buffers</a>
-</dt>
-<dd></dd>
-<a name="idxF"></a><h3 class="title">F</h3>
-<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-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>
-<a name="idxO"></a><h3 class="title">O</h3>
-<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-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-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-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>
-<a name="idxS"></a><h3 class="title">S</h3>
-<dt>
-<a class="link" href="harfbuzz-Buffers.html#hb-segment-properties-equal" title="hb_segment_properties_equal ()">hb_segment_properties_equal</a>, function in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-Buffers.html#hb-segment-properties-hash" title="hb_segment_properties_hash ()">hb_segment_properties_hash</a>, function in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</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-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-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-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-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-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>
-</div>
-<div class="footer">
-<hr>Generated by GTK-Doc V1.24.1</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/html/api-index-0-9-8.html b/docs/html/api-index-0-9-8.html
deleted file mode 100644 (file)
index 13ef9b1..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-<!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 new symbols in 0.9.8: HarfBuzz Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="HarfBuzz Manual">
-<link rel="up" href="pt02.html" title="Part II. Reference manual">
-<link rel="prev" href="api-index-0-9-7.html" title="Index of new symbols in 0.9.7">
-<link rel="next" href="api-index-0-9-10.html" title="Index of new symbols in 0.9.10">
-<meta name="generator" content="GTK-Doc V1.24.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="#idxO">O</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="pt02.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="api-index-0-9-7.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="api-index-0-9-10.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-0-9-8"></a>Index of new symbols in 0.9.8</h2></div></div></div>
-<a name="idx"></a><a name="idxO"></a><h3 class="title">O</h3>
-<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>
-</div>
-<div class="footer">
-<hr>Generated by GTK-Doc V1.24.1</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/html/api-index-1-0-5.html b/docs/html/api-index-1-0-5.html
deleted file mode 100644 (file)
index 243d7b8..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-<!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 new symbols in 1.0.5: HarfBuzz Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="HarfBuzz Manual">
-<link rel="up" href="pt02.html" title="Part II. Reference manual">
-<link rel="prev" href="api-index-0-9-42.html" title="Index of new symbols in 0.9.42">
-<link rel="next" href="api-index-1-1-2.html" title="Index of new symbols in 1.1.2">
-<meta name="generator" content="GTK-Doc V1.24.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="#idxF">F</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="pt02.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="api-index-0-9-42.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="api-index-1-1-2.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-1-0-5"></a>Index of new symbols in 1.0.5</h2></div></div></div>
-<a name="idx"></a><a name="idxF"></a><h3 class="title">F</h3>
-<dt>
-<a class="link" href="harfbuzz-hb-font.html#hb-font-set-parent" title="hb_font_set_parent ()">hb_font_set_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-ft.html#hb-ft-font-get-load-flags" title="hb_ft_font_get_load_flags ()">hb_ft_font_get_load_flags</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-load-flags" title="hb_ft_font_set_load_flags ()">hb_ft_font_set_load_flags</a>, function in <a class="link" href="harfbuzz-hb-ft.html" title="hb-ft">hb-ft</a>
-</dt>
-<dd></dd>
-</div>
-<div class="footer">
-<hr>Generated by GTK-Doc V1.24.1</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/html/api-index-1-1-2.html b/docs/html/api-index-1-1-2.html
deleted file mode 100644 (file)
index 2d8ba8a..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-<!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 new symbols in 1.1.2: HarfBuzz Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="HarfBuzz Manual">
-<link rel="up" href="pt02.html" title="Part II. Reference manual">
-<link rel="prev" href="api-index-1-0-5.html" title="Index of new symbols in 1.0.5">
-<link rel="next" href="api-index-1-1-3.html" title="Index of new symbols in 1.1.3">
-<meta name="generator" content="GTK-Doc V1.24.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="#idxF">F</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="pt02.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="api-index-1-0-5.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="api-index-1-1-3.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-1-1-2"></a>Index of new symbols in 1.1.2</h2></div></div></div>
-<a name="idx"></a><a name="idxF"></a><h3 class="title">F</h3>
-<dt>
-<a class="link" href="harfbuzz-hb-font.html#hb-font-funcs-set-font-h-extents-func" title="hb_font_funcs_set_font_h_extents_func ()">hb_font_funcs_set_font_h_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-font-v-extents-func" title="hb_font_funcs_set_font_v_extents_func ()">hb_font_funcs_set_font_v_extents_func</a>, function in <a class="link" href="harfbuzz-hb-font.html" title="hb-font">hb-font</a>
-</dt>
-<dd></dd>
-</div>
-<div class="footer">
-<hr>Generated by GTK-Doc V1.24.1</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/html/api-index-1-1-3.html b/docs/html/api-index-1-1-3.html
deleted file mode 100644 (file)
index 545ed99..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-<!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 new symbols in 1.1.3: HarfBuzz Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="HarfBuzz Manual">
-<link rel="up" href="pt02.html" title="Part II. Reference manual">
-<link rel="prev" href="api-index-1-1-2.html" title="Index of new symbols in 1.1.2">
-<link rel="next" href="deprecated-api-index.html" title="Index of deprecated API">
-<meta name="generator" content="GTK-Doc V1.24.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="#idxF">F</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="pt02.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="api-index-1-1-2.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-1-1-3"></a>Index of new symbols in 1.1.3</h2></div></div></div>
-<a name="idx"></a><a name="idxB"></a><h3 class="title">B</h3>
-<dt>
-<a class="link" href="harfbuzz-Buffers.html#hb-buffer-set-message-func" title="hb_buffer_set_message_func ()">hb_buffer_set_message_func</a>, function in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
-</dt>
-<dd></dd>
-<a name="idxF"></a><h3 class="title">F</h3>
-<dt>
-<a class="link" href="harfbuzz-hb-font.html#hb-font-get-extents-for-direction" title="hb_font_get_extents_for_direction ()">hb_font_get_extents_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-h-extents" title="hb_font_get_h_extents ()">hb_font_get_h_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-v-extents" title="hb_font_get_v_extents ()">hb_font_get_v_extents</a>, function in <a class="link" href="harfbuzz-hb-font.html" title="hb-font">hb-font</a>
-</dt>
-<dd></dd>
-</div>
-<div class="footer">
-<hr>Generated by GTK-Doc V1.24.1</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/html/buffers-language-script-and-direction.html b/docs/html/buffers-language-script-and-direction.html
deleted file mode 100644 (file)
index 5447496..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Buffers, language, script and direction: HarfBuzz Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="HarfBuzz Manual">
-<link rel="up" href="pt01.html" title="Part I. User's manual">
-<link rel="prev" href="hello-harfbuzz.html" title="Hello, Harfbuzz">
-<link rel="next" href="adding-text-to-the-buffer.html" title="Adding text to the buffer">
-<meta name="generator" content="GTK-Doc V1.24.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><a accesskey="u" href="pt01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="hello-harfbuzz.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="adding-text-to-the-buffer.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="buffers-language-script-and-direction"></a>Buffers, language, script and direction</h2></div></div></div>
-<div class="toc"><dl class="toc">
-<dt><span class="section"><a href="buffers-language-script-and-direction.html#creating-and-destroying-buffers">Creating and destroying buffers</a></span></dt>
-<dt><span class="section"><a href="adding-text-to-the-buffer.html">Adding text to the buffer</a></span></dt>
-<dt><span class="section"><a href="setting-buffer-properties.html">Setting buffer properties</a></span></dt>
-<dt><span class="section"><a href="what-about-the-other-scripts.html">What about the other scripts?</a></span></dt>
-<dt><span class="section"><a href="customizing-unicode-functions.html">Customizing Unicode functions</a></span></dt>
-</dl></div>
-<p>
-    The input to Harfbuzz is a series of Unicode characters, stored in a
-    buffer. In this chapter, we'll look at how to set up a buffer with
-    the text that we want and then customize the properties of the
-    buffer.
-  </p>
-<div class="section">
-<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="creating-and-destroying-buffers"></a>Creating and destroying buffers</h2></div></div></div>
-<p>
-      As we saw in our initial example, a buffer is created and
-      initialized with <code class="literal">hb_buffer_create()</code>. This
-      produces a new, empty buffer object, instantiated with some
-      default values and ready to accept your Unicode strings.
-    </p>
-<p>
-      Harfbuzz manages the memory of objects that it creates (such as
-      buffers), so you don't have to. When you have finished working on
-      a buffer, you can call <code class="literal">hb_buffer_destroy()</code>:
-    </p>
-<pre class="programlisting">
-  hb_buffer_t *buffer = hb_buffer_create();
-  ...
-  hb_buffer_destroy(buffer);
-</pre>
-<p>
-      This will destroy the object and free its associated memory -
-      unless some other part of the program holds a reference to this
-      buffer. If you acquire a Harfbuzz buffer from another subsystem
-      and want to ensure that it is not garbage collected by someone
-      else destroying it, you should increase its reference count:
-    </p>
-<pre class="programlisting">
-void somefunc(hb_buffer_t *buffer) {
-  buffer = hb_buffer_reference(buffer);
-  ...
-</pre>
-<p>
-      And then decrease it once you're done with it:
-    </p>
-<pre class="programlisting">
-  hb_buffer_destroy(buffer);
-}
-</pre>
-<p>
-      To throw away all the data in your buffer and start from scratch,
-      call <code class="literal">hb_buffer_reset(buffer)</code>. If you want to
-      throw away the string in the buffer but keep the options, you can
-      instead call <code class="literal">hb_buffer_clear_contents(buffer)</code>.
-    </p>
-</div>
-</div>
-<div class="footer">
-<hr>Generated by GTK-Doc V1.24.1</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/html/building.html b/docs/html/building.html
deleted file mode 100644 (file)
index 0351b6c..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Building: HarfBuzz Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="HarfBuzz Manual">
-<link rel="up" href="install-harfbuzz.html" title="Install Harfbuzz">
-<link rel="prev" href="install-harfbuzz.html" title="Install Harfbuzz">
-<link rel="next" href="hello-harfbuzz.html" title="Hello, Harfbuzz">
-<meta name="generator" content="GTK-Doc V1.24.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><a accesskey="u" href="install-harfbuzz.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="install-harfbuzz.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="hello-harfbuzz.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
-<div class="section">
-<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="building"></a>Building</h2></div></div></div>
-<p>
-      On Linux, install the development packages for FreeType, Cairo, and GLib.
-      For example, on Ubuntu / Debian, you would do:
-      </p>
-<pre class="programlisting">
-<span class="command"><strong>sudo apt-get install</strong></span> <span class="package">gcc g++ libfreetype6-dev libglib2.0-dev libcairo2-dev</span>
-      </pre>
-<p>
-      whereas on Fedora, RHEL, CentOS, and other Red Hat based systems you would do:
-      </p>
-<pre class="programlisting">
-<span class="command"><strong>sudo yum install</strong></span> <span class="package">gcc gcc-c++ freetype-devel glib2-devel cairo-devel</span>
-      </pre>
-<p>
-      or using MacPorts:
-      </p>
-<pre class="programlisting">
-<span class="command"><strong>sudo port install</strong></span> <span class="package">freetype glib2 cairo</span>
-      </pre>
-<p>
-    </p>
-<p>
-      If you are using a tarball, you can now proceed to running
-      <span class="command"><strong>configure</strong></span> and <span class="command"><strong>make</strong></span> as with any
-      other standard package. That should leave you with a shared library in
-      <code class="filename">src/</code>, and a few utility programs including hb-view
-      and hb-shape under <code class="filename">util/</code>.
-    </p>
-<p>
-      If you are bootstraping from git, you need a few more tools before you
-      can run <code class="filename">autogen.sh</code> for the first time. Namely,
-      pkg-config and <a class="ulink" href="http://www.complang.org/ragel/" target="_top">ragel</a>.
-      Again, on Ubuntu / Debian:
-      </p>
-<pre class="programlisting">
-<span class="command"><strong>sudo apt-get install</strong></span> <span class="package">autoconf automake libtool pkg-config ragel gtk-doc-tools</span>
-      </pre>
-<p>
-      and on Fedora, RHEL, CentOS:
-      </p>
-<pre class="programlisting">
-<span class="command"><strong>sudo yum install</strong></span> <span class="package">autoconf automake libtool pkgconfig ragel gtk-doc</span>
-      </pre>
-<p>
-      or using MacPorts:
-      </p>
-<pre class="programlisting">
-<span class="command"><strong>sudo port install</strong></span> <span class="package">autoconf automake libtool pkgconfig ragel gtk-doc</span>
-      </pre>
-<p>
-    </p>
-</div>
-<div class="footer">
-<hr>Generated by GTK-Doc V1.24.1</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/html/customizing-unicode-functions.html b/docs/html/customizing-unicode-functions.html
deleted file mode 100644 (file)
index f496df4..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Customizing Unicode functions: HarfBuzz Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="HarfBuzz Manual">
-<link rel="up" href="buffers-language-script-and-direction.html" title="Buffers, language, script and direction">
-<link rel="prev" href="what-about-the-other-scripts.html" title="What about the other scripts?">
-<link rel="next" href="fonts-and-faces.html" title="Fonts and faces">
-<meta name="generator" content="GTK-Doc V1.24.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><a accesskey="u" href="buffers-language-script-and-direction.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="what-about-the-other-scripts.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="fonts-and-faces.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
-<div class="section">
-<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="customizing-unicode-functions"></a>Customizing Unicode functions</h2></div></div></div>
-<p>
-    </p>
-</div>
-<div class="footer">
-<hr>Generated by GTK-Doc V1.24.1</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/html/fonts-and-faces.html b/docs/html/fonts-and-faces.html
deleted file mode 100644 (file)
index 0700a1c..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Fonts and faces: HarfBuzz Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="HarfBuzz Manual">
-<link rel="up" href="pt01.html" title="Part I. User's manual">
-<link rel="prev" href="customizing-unicode-functions.html" title="Customizing Unicode functions">
-<link rel="next" href="using-harfbuzzs-native-opentype-implementation.html" title="Using Harfbuzz's native OpenType implementation">
-<meta name="generator" content="GTK-Doc V1.24.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><a accesskey="u" href="pt01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="customizing-unicode-functions.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="using-harfbuzzs-native-opentype-implementation.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="fonts-and-faces"></a>Fonts and faces</h2></div></div></div>
-<div class="toc"><dl class="toc">
-<dt><span class="section"><a href="fonts-and-faces.html#using-freetype">Using FreeType</a></span></dt>
-<dt><span class="section"><a href="using-harfbuzzs-native-opentype-implementation.html">Using Harfbuzz's native OpenType implementation</a></span></dt>
-<dt><span class="section"><a href="using-your-own-font-functions.html">Using your own font functions</a></span></dt>
-</dl></div>
-<div class="section">
-<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="using-freetype"></a>Using FreeType</h2></div></div></div>
-<p>
-    </p>
-</div>
-</div>
-<div class="footer">
-<hr>Generated by GTK-Doc V1.24.1</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/html/harfbuzz-Buffers.html b/docs/html/harfbuzz-Buffers.html
deleted file mode 100644 (file)
index 6c7d0e9..0000000
+++ /dev/null
@@ -1,2722 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Buffers: HarfBuzz Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="HarfBuzz Manual">
-<link rel="up" href="ch07.html" title="Harfbuzz API">
-<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.24.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-Buffers.description" class="shortcut">Description</a></span><span id="nav_hierarchy">  <span class="dim">|</span> 
-                  <a href="#harfbuzz-Buffers.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="ch07.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-Buffers"></a><div class="titlepage"></div>
-<div class="refnamediv"><table width="100%"><tr>
-<td valign="top">
-<h2><span class="refentrytitle"><a name="harfbuzz-Buffers.top_of_page"></a>Buffers</span></h2>
-<p>Buffers — Input and output buffers</p>
-</td>
-<td class="gallery_image" valign="top" align="right"></td>
-</tr></table></div>
-<div class="refsect1">
-<a name="harfbuzz-Buffers.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-Buffers.html#hb-buffer-t"><span class="returnvalue">hb_buffer_t</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="harfbuzz-Buffers.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-Buffers.html#hb-buffer-t"><span class="returnvalue">hb_buffer_t</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="harfbuzz-Buffers.html#hb-buffer-reference" title="hb_buffer_reference ()">hb_buffer_reference</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="harfbuzz-Buffers.html#hb-buffer-t"><span class="returnvalue">hb_buffer_t</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="harfbuzz-Buffers.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">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="harfbuzz-Buffers.html#hb-buffer-destroy" title="hb_buffer_destroy ()">hb_buffer_destroy</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-Buffers.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-Buffers.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-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-Buffers.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-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-Buffers.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-Buffers.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-Buffers.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">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="harfbuzz-Buffers.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-Buffers.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-Buffers.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-Buffers.html#hb-buffer-add-latin1" title="hb_buffer_add_latin1 ()">hb_buffer_add_latin1</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-Buffers.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">
-<a class="link" href="harfbuzz-Buffers.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-Buffers.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">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="harfbuzz-Buffers.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">
-<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-Buffers.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">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="harfbuzz-Buffers.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">
-<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-Buffers.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-Buffers.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-language-t" title="hb_language_t"><span class="returnvalue">hb_language_t</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="harfbuzz-Buffers.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">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="harfbuzz-Buffers.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">
-<a class="link" href="harfbuzz-Buffers.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-Buffers.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">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="harfbuzz-Buffers.html#hb-buffer-set-cluster-level" title="hb_buffer_set_cluster_level ()">hb_buffer_set_cluster_level</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="harfbuzz-Buffers.html#hb-buffer-cluster-level-t" title="enum hb_buffer_cluster_level_t"><span class="returnvalue">hb_buffer_cluster_level_t</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="harfbuzz-Buffers.html#hb-buffer-get-cluster-level" title="hb_buffer_get_cluster_level ()">hb_buffer_get_cluster_level</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-Buffers.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">unsigned <span class="returnvalue">int</span>
-</td>
-<td class="function_name">
-<a class="link" href="harfbuzz-Buffers.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">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="harfbuzz-Buffers.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-Buffers.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">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="harfbuzz-Buffers.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-Buffers.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-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-Buffers.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">
-<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-Buffers.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">
-<span class="returnvalue">void</span> *
-</td>
-<td class="function_name">
-<a class="link" href="harfbuzz-Buffers.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">
-<a class="link" href="harfbuzz-Buffers.html#hb-glyph-info-t"><span class="returnvalue">hb_glyph_info_t</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="harfbuzz-Buffers.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-Buffers.html#hb-glyph-position-t"><span class="returnvalue">hb_glyph_position_t</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="harfbuzz-Buffers.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">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="harfbuzz-Buffers.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">
-<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-Buffers.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">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="harfbuzz-Buffers.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">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="harfbuzz-Buffers.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-Buffers.html#hb-buffer-reverse-range" title="hb_buffer_reverse_range ()">hb_buffer_reverse_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-Buffers.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">unsigned <span class="returnvalue">int</span>
-</td>
-<td class="function_name">
-<a class="link" href="harfbuzz-Buffers.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">
-<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-Buffers.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">
-<a class="link" href="harfbuzz-Buffers.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-Buffers.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-Buffers.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">const <span class="returnvalue">char</span> **
-</td>
-<td class="function_name">
-<a class="link" href="harfbuzz-Buffers.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">
-<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-Buffers.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-Buffers.html#hb-segment-properties-hash" title="hb_segment_properties_hash ()">hb_segment_properties_hash</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-Buffers.html#hb-buffer-set-message-func" title="hb_buffer_set_message_func ()">hb_buffer_set_message_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">
-<span class="c_punctuation">(</span><a class="link" href="harfbuzz-Buffers.html#hb-buffer-message-func-t" title="hb_buffer_message_func_t ()">*hb_buffer_message_func_t</a><span class="c_punctuation">)</span> <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-Buffers.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-Buffers.html#HB-SEGMENT-PROPERTIES-DEFAULT:CAPS" title="HB_SEGMENT_PROPERTIES_DEFAULT">HB_SEGMENT_PROPERTIES_DEFAULT</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="harfbuzz-Buffers.html#HB-BUFFER-REPLACEMENT-CODEPOINT-DEFAULT:CAPS" title="HB_BUFFER_REPLACEMENT_CODEPOINT_DEFAULT">HB_BUFFER_REPLACEMENT_CODEPOINT_DEFAULT</a></td>
-</tr>
-<tr>
-<td class="typedef_keyword">typedef</td>
-<td class="function_name"><a class="link" href="harfbuzz-Buffers.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-Buffers.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-Buffers.html#hb-glyph-position-t-struct" title="hb_glyph_position_t">hb_glyph_position_t</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="harfbuzz-Buffers.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-Buffers.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-Buffers.html#hb-buffer-cluster-level-t" title="enum hb_buffer_cluster_level_t">hb_buffer_cluster_level_t</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword"> </td>
-<td class="function_name"><a class="link" href="harfbuzz-Buffers.html#hb-segment-properties-t-struct" title="hb_segment_properties_t">hb_segment_properties_t</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="harfbuzz-Buffers.html#hb-buffer-serialize-format-t" title="enum hb_buffer_serialize_format_t">hb_buffer_serialize_format_t</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="harfbuzz-Buffers.html#hb-buffer-serialize-flags-t" title="enum hb_buffer_serialize_flags_t">hb_buffer_serialize_flags_t</a></td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect1">
-<a name="harfbuzz-Buffers.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen">    <a href="/home/behdad/.local/share/gtk-doc/html/gobject/gobject-Boxed-Types.html">GBoxed</a>
-    <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
-    <a href="/home/behdad/.local/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html">GEnum</a>
-    <span class="lineart">├──</span> hb_buffer_cluster_level_t
-    <span class="lineart">├──</span> hb_buffer_content_type_t
-    <span class="lineart">╰──</span> hb_buffer_serialize_format_t
-    <a href="/home/behdad/.local/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html">GFlags</a>
-    <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-Buffers.includes"></a><h2>Includes</h2>
-<pre class="synopsis">#include &lt;hb.h&gt;
-</pre>
-</div>
-<div class="refsect1">
-<a name="harfbuzz-Buffers.description"></a><h2>Description</h2>
-<p>Buffers serve dual role in HarfBuzz; they hold the input characters that are
-passed <a class="link" href="harfbuzz-Shaping.html#hb-shape" title="hb_shape ()"><code class="function">hb_shape()</code></a>, and after shaping they hold the output glyphs.</p>
-</div>
-<div class="refsect1">
-<a name="harfbuzz-Buffers.functions_details"></a><h2>Functions</h2>
-<div class="refsect2">
-<a name="hb-buffer-create"></a><h3>hb_buffer_create ()</h3>
-<pre class="programlisting"><a class="link" href="harfbuzz-Buffers.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>Creates a new <a class="link" href="harfbuzz-Buffers.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> with all properties to defaults.</p>
-<p><span class="annotation">[Xconstructor]</span></p>
-<div class="refsect3">
-<a name="hb-buffer-create.returns"></a><h4>Returns</h4>
-<p>A newly allocated <a class="link" href="harfbuzz-Buffers.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> with a reference count of 1. The initial
-reference count should be released with <a class="link" href="harfbuzz-Buffers.html#hb-buffer-destroy" title="hb_buffer_destroy ()"><code class="function">hb_buffer_destroy()</code></a> when you are done
-using the <a class="link" href="harfbuzz-Buffers.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a>. This function never returns <code class="literal">NULL</code>. If memory cannot
-be allocated, a special <a class="link" href="harfbuzz-Buffers.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> object will be returned on which
-<a class="link" href="harfbuzz-Buffers.html#hb-buffer-allocation-successful" title="hb_buffer_allocation_successful ()"><code class="function">hb_buffer_allocation_successful()</code></a> returns <code class="literal">false</code>. </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: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></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-Buffers.html#hb-buffer-t"><span class="returnvalue">hb_buffer_t</span></a> *
-hb_buffer_reference (<em class="parameter"><code><a class="link" href="harfbuzz-Buffers.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>);</pre>
-<p>Increases the reference count on <em class="parameter"><code>buffer</code></em>
- by one. This prevents <em class="parameter"><code>buffer</code></em>
- from
-being destroyed until a matching call to <a class="link" href="harfbuzz-Buffers.html#hb-buffer-destroy" title="hb_buffer_destroy ()"><code class="function">hb_buffer_destroy()</code></a> is made.</p>
-<p><span class="annotation">[<acronym title="Exposed in C code, not necessarily available in other languages."><span class="acronym">skip</span></acronym>]</span></p>
-<div class="refsect3">
-<a name="hb-buffer-reference.parameters"></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>an <a class="link" href="harfbuzz-Buffers.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a>.</p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="hb-buffer-reference.returns"></a><h4>Returns</h4>
-<p>The referenced <a class="link" href="harfbuzz-Buffers.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a>. </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: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></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-Buffers.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="hb-buffer-get-empty.returns"></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: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></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-Buffers.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>);</pre>
-<p>Deallocate the <em class="parameter"><code>buffer</code></em>
-.
-Decreases the reference count on <em class="parameter"><code>buffer</code></em>
- by one. If the result is zero, then
-<em class="parameter"><code>buffer</code></em>
- and all associated resources are freed. See <a class="link" href="harfbuzz-Buffers.html#hb-buffer-reference" title="hb_buffer_reference ()"><code class="function">hb_buffer_reference()</code></a>.</p>
-<p><span class="annotation">[<acronym title="Exposed in C code, not necessarily available in other languages."><span class="acronym">skip</span></acronym>]</span></p>
-<div class="refsect3">
-<a name="hb-buffer-destroy.parameters"></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>an <a class="link" href="harfbuzz-Buffers.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a>.</p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></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-Buffers.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>);</pre>
-<p>Resets the buffer to its initial status, as if it was just newly created
-with <a class="link" href="harfbuzz-Buffers.html#hb-buffer-create" title="hb_buffer_create ()"><code class="function">hb_buffer_create()</code></a>.</p>
-<div class="refsect3">
-<a name="hb-buffer-reset.parameters"></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>an <a class="link" href="harfbuzz-Buffers.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a>.</p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></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-Buffers.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>);</pre>
-<p>Similar to <a class="link" href="harfbuzz-Buffers.html#hb-buffer-reset" title="hb_buffer_reset ()"><code class="function">hb_buffer_reset()</code></a>, but does not clear the Unicode functions and
-the replacement code point.</p>
-<div class="refsect3">
-<a name="hb-buffer-clear-contents.parameters"></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>an <a class="link" href="harfbuzz-Buffers.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a>.</p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<p class="since">Since: <a class="link" href="api-index-0-9-11.html#api-index-0.9.11">0.9.11</a></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-Buffers.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>
-<p>Pre allocates memory for <em class="parameter"><code>buffer</code></em>
- to fit at least <em class="parameter"><code>size</code></em>
- number of items.</p>
-<div class="refsect3">
-<a name="hb-buffer-pre-allocate.parameters"></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>an <a class="link" href="harfbuzz-Buffers.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a>.</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>size</p></td>
-<td class="parameter_description"><p>number of items to pre allocate.</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="hb-buffer-pre-allocate.returns"></a><h4>Returns</h4>
-<p><code class="literal">true</code> if <em class="parameter"><code>buffer</code></em>
-memory allocation succeeded, <code class="literal">false</code> otherwise.</p>
-</div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></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-Buffers.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>);</pre>
-<p>Check if allocating memory for the buffer succeeded.</p>
-<div class="refsect3">
-<a name="hb-buffer-allocation-successful.parameters"></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>an <a class="link" href="harfbuzz-Buffers.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a>.</p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="hb-buffer-allocation-successful.returns"></a><h4>Returns</h4>
-<p><code class="literal">true</code> if <em class="parameter"><code>buffer</code></em>
-memory allocation succeeded, <code class="literal">false</code> otherwise.</p>
-</div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
-</div>
-<hr>
-<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-Buffers.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>
-<p>Appends a character with the Unicode value of <em class="parameter"><code>codepoint</code></em>
- to <em class="parameter"><code>buffer</code></em>
-, and
-gives it the initial cluster value of <em class="parameter"><code>cluster</code></em>
-. Clusters can be any thing
-the client wants, they are usually used to refer to the index of the
-character in the input text stream and are output in
-<span class="type">hb_glyph_info_t.cluster</span> field.</p>
-<p>This function does not check the validity of <em class="parameter"><code>codepoint</code></em>
-, it is up to the
-caller to ensure it is a valid Unicode code point.</p>
-<div class="refsect3">
-<a name="hb-buffer-add.parameters"></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>an <a class="link" href="harfbuzz-Buffers.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a>.</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>codepoint</p></td>
-<td class="parameter_description"><p>a Unicode code point.</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>cluster</p></td>
-<td class="parameter_description"><p>the cluster value of <em class="parameter"><code>codepoint</code></em>
-.</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<p class="since">Since: <a class="link" href="api-index-0-9-7.html#api-index-0.9.7">0.9.7</a></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-Buffers.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>Appends characters from <em class="parameter"><code>text</code></em>
- array to <em class="parameter"><code>buffer</code></em>
-. The <em class="parameter"><code>item_offset</code></em>
- is the
-position of the first character from <em class="parameter"><code>text</code></em>
- that will be appended, and
-<em class="parameter"><code>item_length</code></em>
- is the number of character. When shaping part of a larger text
-(e.g. a run of text from a paragraph), instead of passing just the substring
-corresponding to the run, it is preferable to pass the whole
-paragraph and specify the run start and length as <em class="parameter"><code>item_offset</code></em>
- and
-<em class="parameter"><code>item_length</code></em>
-, respectively, to give HarfBuzz the full context to be able,
-for example, to do cross-run Arabic shaping or properly handle combining
-marks at stat of run.</p>
-<p>This function does not check the validity of <em class="parameter"><code>text</code></em>
-, it is up to the caller
-to ensure it contains a valid Unicode code points.</p>
-<div class="refsect3">
-<a name="hb-buffer-add-codepoints.parameters"></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 <a class="link" href="harfbuzz-Buffers.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> to append characters to.</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>text</p></td>
-<td class="parameter_description"><p> an array of Unicode code points to append. </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>
-<tr>
-<td class="parameter_name"><p>text_length</p></td>
-<td class="parameter_description"><p>the length of the <em class="parameter"><code>text</code></em>
-, or -1 if it is <code class="literal">NULL</code> terminated.</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>item_offset</p></td>
-<td class="parameter_description"><p>the offset of the first code point to add to the <em class="parameter"><code>buffer</code></em>
-.</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>item_length</p></td>
-<td class="parameter_description"><p>the number of code points to add to the <em class="parameter"><code>buffer</code></em>
-, or -1 for the
-end of <em class="parameter"><code>text</code></em>
-(assuming it is <code class="literal">NULL</code> terminated).</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<p class="since">Since: <a class="link" href="api-index-0-9-31.html#api-index-0.9.31">0.9.31</a></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-Buffers.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>
-<p>See <a class="link" href="harfbuzz-Buffers.html#hb-buffer-add-codepoints" title="hb_buffer_add_codepoints ()"><code class="function">hb_buffer_add_codepoints()</code></a>.</p>
-<p>Replaces invalid UTF-32 characters with the <em class="parameter"><code>buffer</code></em>
- replacement code point,
-see <a class="link" href="harfbuzz-Buffers.html#hb-buffer-set-replacement-codepoint" title="hb_buffer_set_replacement_codepoint ()"><code class="function">hb_buffer_set_replacement_codepoint()</code></a>.</p>
-<div class="refsect3">
-<a name="hb-buffer-add-utf32.parameters"></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>an <a class="link" href="harfbuzz-Buffers.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a>.</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>text</p></td>
-<td class="parameter_description"><p> an array of UTF-32 characters to append. </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>
-<tr>
-<td class="parameter_name"><p>text_length</p></td>
-<td class="parameter_description"><p>the length of the <em class="parameter"><code>text</code></em>
-, or -1 if it is <code class="literal">NULL</code> terminated.</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>item_offset</p></td>
-<td class="parameter_description"><p>the offset of the first character to add to the <em class="parameter"><code>buffer</code></em>
-.</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>item_length</p></td>
-<td class="parameter_description"><p>the number of characters to add to the <em class="parameter"><code>buffer</code></em>
-, or -1 for the
-end of <em class="parameter"><code>text</code></em>
-(assuming it is <code class="literal">NULL</code> terminated).</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></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-Buffers.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>
-<p>See <a class="link" href="harfbuzz-Buffers.html#hb-buffer-add-codepoints" title="hb_buffer_add_codepoints ()"><code class="function">hb_buffer_add_codepoints()</code></a>.</p>
-<p>Replaces invalid UTF-16 characters with the <em class="parameter"><code>buffer</code></em>
- replacement code point,
-see <a class="link" href="harfbuzz-Buffers.html#hb-buffer-set-replacement-codepoint" title="hb_buffer_set_replacement_codepoint ()"><code class="function">hb_buffer_set_replacement_codepoint()</code></a>.</p>
-<div class="refsect3">
-<a name="hb-buffer-add-utf16.parameters"></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>an <a class="link" href="harfbuzz-Buffers.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a>.</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>text</p></td>
-<td class="parameter_description"><p> an array of UTF-16 characters to append. </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>
-<tr>
-<td class="parameter_name"><p>text_length</p></td>
-<td class="parameter_description"><p>the length of the <em class="parameter"><code>text</code></em>
-, or -1 if it is <code class="literal">NULL</code> terminated.</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>item_offset</p></td>
-<td class="parameter_description"><p>the offset of the first character to add to the <em class="parameter"><code>buffer</code></em>
-.</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>item_length</p></td>
-<td class="parameter_description"><p>the number of characters to add to the <em class="parameter"><code>buffer</code></em>
-, or -1 for the
-end of <em class="parameter"><code>text</code></em>
-(assuming it is <code class="literal">NULL</code> terminated).</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></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-Buffers.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>
-<p>See <a class="link" href="harfbuzz-Buffers.html#hb-buffer-add-codepoints" title="hb_buffer_add_codepoints ()"><code class="function">hb_buffer_add_codepoints()</code></a>.</p>
-<p>Replaces invalid UTF-8 characters with the <em class="parameter"><code>buffer</code></em>
- replacement code point,
-see <a class="link" href="harfbuzz-Buffers.html#hb-buffer-set-replacement-codepoint" title="hb_buffer_set_replacement_codepoint ()"><code class="function">hb_buffer_set_replacement_codepoint()</code></a>.</p>
-<div class="refsect3">
-<a name="hb-buffer-add-utf8.parameters"></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>an <a class="link" href="harfbuzz-Buffers.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a>.</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>text</p></td>
-<td class="parameter_description"><p> an array of UTF-8
-characters to append. </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][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> uint8_t]</span></td>
-</tr>
-<tr>
-<td class="parameter_name"><p>text_length</p></td>
-<td class="parameter_description"><p>the length of the <em class="parameter"><code>text</code></em>
-, or -1 if it is <code class="literal">NULL</code> terminated.</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>item_offset</p></td>
-<td class="parameter_description"><p>the offset of the first character to add to the <em class="parameter"><code>buffer</code></em>
-.</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>item_length</p></td>
-<td class="parameter_description"><p>the number of characters to add to the <em class="parameter"><code>buffer</code></em>
-, or -1 for the
-end of <em class="parameter"><code>text</code></em>
-(assuming it is <code class="literal">NULL</code> terminated).</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="hb-buffer-add-latin1"></a><h3>hb_buffer_add_latin1 ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-hb_buffer_add_latin1 (<em class="parameter"><code><a class="link" href="harfbuzz-Buffers.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>,
-                      <em class="parameter"><code>const <span class="type">uint8_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>
-<p>Similar to <a class="link" href="harfbuzz-Buffers.html#hb-buffer-add-codepoints" title="hb_buffer_add_codepoints ()"><code class="function">hb_buffer_add_codepoints()</code></a>, but allows only access to first 256
-Unicode code points that can fit in 8-bit strings.</p>
-<div class="note">Has nothing to do with non-Unicode Latin-1 encoding.</div>
-<div class="refsect3">
-<a name="hb-buffer-add-latin1.parameters"></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>an <a class="link" href="harfbuzz-Buffers.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a>.</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>text</p></td>
-<td class="parameter_description"><p> an array of UTF-8
-characters to append. </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][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> uint8_t]</span></td>
-</tr>
-<tr>
-<td class="parameter_name"><p>text_length</p></td>
-<td class="parameter_description"><p>the length of the <em class="parameter"><code>text</code></em>
-, or -1 if it is <code class="literal">NULL</code> terminated.</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>item_offset</p></td>
-<td class="parameter_description"><p>the offset of the first character to add to the <em class="parameter"><code>buffer</code></em>
-.</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>item_length</p></td>
-<td class="parameter_description"><p>the number of characters to add to the <em class="parameter"><code>buffer</code></em>
-, or -1 for the
-end of <em class="parameter"><code>text</code></em>
-(assuming it is <code class="literal">NULL</code> terminated).</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<p class="since">Since: <a class="link" href="api-index-0-9-39.html#api-index-0.9.39">0.9.39</a></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-Buffers.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>,
-                            <em class="parameter"><code><a class="link" href="harfbuzz-Buffers.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>
-<p>Sets the type of <em class="parameter"><code>buffer</code></em>
- contents, buffers are either empty, contain
-characters (before shaping) or glyphs (the result of shaping).</p>
-<div class="refsect3">
-<a name="hb-buffer-set-content-type.parameters"></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>an <a class="link" href="harfbuzz-Buffers.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a>.</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>content_type</p></td>
-<td class="parameter_description"><p>the type of buffer contents to set</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<p class="since">Since: <a class="link" href="api-index-0-9-5.html#api-index-0.9.5">0.9.5</a></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-Buffers.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-Buffers.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>);</pre>
-<p>see <a class="link" href="harfbuzz-Buffers.html#hb-buffer-set-content-type" title="hb_buffer_set_content_type ()"><code class="function">hb_buffer_set_content_type()</code></a>.</p>
-<div class="refsect3">
-<a name="hb-buffer-get-content-type.parameters"></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>an <a class="link" href="harfbuzz-Buffers.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a>.</p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="hb-buffer-get-content-type.returns"></a><h4>Returns</h4>
-<p>The type of <em class="parameter"><code>buffer</code></em>
-contents.</p>
-</div>
-<p class="since">Since: <a class="link" href="api-index-0-9-5.html#api-index-0.9.5">0.9.5</a></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-Buffers.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>
-<p>Set the text flow direction of the buffer. No shaping can happen without
-setting <em class="parameter"><code>buffer</code></em>
- direction, and it controls the visual direction for the
-output glyphs; for RTL direction the glyphs will be reversed. Many layout
-features depend on the proper setting of the direction, for example,
-reversing RTL text before shaping, then shaping with LTR direction is not
-the same as keeping the text in logical order and shaping with RTL
-direction.</p>
-<div class="refsect3">
-<a name="hb-buffer-set-direction.parameters"></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>an <a class="link" href="harfbuzz-Buffers.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a>.</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>direction</p></td>
-<td class="parameter_description"><p>the <a class="link" href="harfbuzz-hb-common.html#hb-direction-t" title="enum hb_direction_t"><span class="type">hb_direction_t</span></a> of the <em class="parameter"><code>buffer</code></em>
-</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></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-Buffers.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>);</pre>
-<p>See <a class="link" href="harfbuzz-Buffers.html#hb-buffer-set-direction" title="hb_buffer_set_direction ()"><code class="function">hb_buffer_set_direction()</code></a></p>
-<div class="refsect3">
-<a name="hb-buffer-get-direction.parameters"></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>an <a class="link" href="harfbuzz-Buffers.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a>.</p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="hb-buffer-get-direction.returns"></a><h4>Returns</h4>
-<p>The direction of the <em class="parameter"><code>buffer</code></em>
-.</p>
-</div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></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-Buffers.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>
-<p>Sets the script of <em class="parameter"><code>buffer</code></em>
- to <em class="parameter"><code>script</code></em>
-.</p>
-<p>Script is crucial for choosing the proper shaping behaviour for scripts that
-require it (e.g. Arabic) and the which OpenType features defined in the font
-to be applied.</p>
-<p>You can pass one of the predefined <a class="link" href="harfbuzz-hb-common.html#hb-script-t" title="enum hb_script_t"><span class="type">hb_script_t</span></a> values, or use
-<a class="link" href="harfbuzz-hb-common.html#hb-script-from-string" title="hb_script_from_string ()"><code class="function">hb_script_from_string()</code></a> or <a class="link" href="harfbuzz-hb-common.html#hb-script-from-iso15924-tag" title="hb_script_from_iso15924_tag ()"><code class="function">hb_script_from_iso15924_tag()</code></a> to get the
-corresponding script from an ISO 15924 script tag.</p>
-<div class="refsect3">
-<a name="hb-buffer-set-script.parameters"></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>an <a class="link" href="harfbuzz-Buffers.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a>.</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>script</p></td>
-<td class="parameter_description"><p>an <a class="link" href="harfbuzz-hb-common.html#hb-script-t" title="enum hb_script_t"><span class="type">hb_script_t</span></a> to set.</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></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-Buffers.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>);</pre>
-<p>See <a class="link" href="harfbuzz-Buffers.html#hb-buffer-set-script" title="hb_buffer_set_script ()"><code class="function">hb_buffer_set_script()</code></a>.</p>
-<div class="refsect3">
-<a name="hb-buffer-get-script.parameters"></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>an <a class="link" href="harfbuzz-Buffers.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a>.</p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="hb-buffer-get-script.returns"></a><h4>Returns</h4>
-<p>The <a class="link" href="harfbuzz-hb-common.html#hb-script-t" title="enum hb_script_t"><span class="type">hb_script_t</span></a> of the <em class="parameter"><code>buffer</code></em>
-.</p>
-</div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></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-Buffers.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" title="hb_language_t"><span class="type">hb_language_t</span></a> language</code></em>);</pre>
-<p>Sets the language of <em class="parameter"><code>buffer</code></em>
- to <em class="parameter"><code>language</code></em>
-.</p>
-<p>Languages are crucial for selecting which OpenType feature to apply to the
-buffer which can result in applying language-specific behaviour. Languages
-are orthogonal to the scripts, and though they are related, they are
-different concepts and should not be confused with each other.</p>
-<p>Use <a class="link" href="harfbuzz-hb-common.html#hb-language-from-string" title="hb_language_from_string ()"><code class="function">hb_language_from_string()</code></a> to convert from ISO 639 language codes to
-<a class="link" href="harfbuzz-hb-common.html#hb-language-t" title="hb_language_t"><span class="type">hb_language_t</span></a>.</p>
-<div class="refsect3">
-<a name="hb-buffer-set-language.parameters"></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>an <a class="link" href="harfbuzz-Buffers.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a>.</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>language</p></td>
-<td class="parameter_description"><p>an hb_language_t to set.</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></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" title="hb_language_t"><span class="returnvalue">hb_language_t</span></a>
-hb_buffer_get_language (<em class="parameter"><code><a class="link" href="harfbuzz-Buffers.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>);</pre>
-<p>See <a class="link" href="harfbuzz-Buffers.html#hb-buffer-set-language" title="hb_buffer_set_language ()"><code class="function">hb_buffer_set_language()</code></a>.</p>
-<div class="refsect3">
-<a name="hb-buffer-get-language.parameters"></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>an <a class="link" href="harfbuzz-Buffers.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a>.</p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="hb-buffer-get-language.returns"></a><h4>Returns</h4>
-<p>The <a class="link" href="harfbuzz-hb-common.html#hb-language-t" title="hb_language_t"><span class="type">hb_language_t</span></a> of the buffer. Must not be freed by the caller. </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: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></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-Buffers.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>,
-                     <em class="parameter"><code><a class="link" href="harfbuzz-Buffers.html#hb-buffer-flags-t" title="enum hb_buffer_flags_t"><span class="type">hb_buffer_flags_t</span></a> flags</code></em>);</pre>
-<p>Sets <em class="parameter"><code>buffer</code></em>
- flags to <em class="parameter"><code>flags</code></em>
-. See <a class="link" href="harfbuzz-Buffers.html#hb-buffer-flags-t" title="enum hb_buffer_flags_t"><span class="type">hb_buffer_flags_t</span></a>.</p>
-<div class="refsect3">
-<a name="hb-buffer-set-flags.parameters"></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>an <a class="link" href="harfbuzz-Buffers.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a>.</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>flags</p></td>
-<td class="parameter_description"><p>the buffer flags to set.</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<p class="since">Since: <a class="link" href="api-index-0-9-7.html#api-index-0.9.7">0.9.7</a></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-Buffers.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-Buffers.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>);</pre>
-<p>See <a class="link" href="harfbuzz-Buffers.html#hb-buffer-set-flags" title="hb_buffer_set_flags ()"><code class="function">hb_buffer_set_flags()</code></a>.</p>
-<div class="refsect3">
-<a name="hb-buffer-get-flags.parameters"></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>an <a class="link" href="harfbuzz-Buffers.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a>.</p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="hb-buffer-get-flags.returns"></a><h4>Returns</h4>
-<p>The <em class="parameter"><code>buffer</code></em>
-flags.</p>
-</div>
-<p class="since">Since: <a class="link" href="api-index-0-9-7.html#api-index-0.9.7">0.9.7</a></p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="hb-buffer-set-cluster-level"></a><h3>hb_buffer_set_cluster_level ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-hb_buffer_set_cluster_level (<em class="parameter"><code><a class="link" href="harfbuzz-Buffers.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>,
-                             <em class="parameter"><code><a class="link" href="harfbuzz-Buffers.html#hb-buffer-cluster-level-t" title="enum hb_buffer_cluster_level_t"><span class="type">hb_buffer_cluster_level_t</span></a> cluster_level</code></em>);</pre>
-<div class="refsect3">
-<a name="hb-buffer-set-cluster-level.parameters"></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>an <a class="link" href="harfbuzz-Buffers.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a>.</p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<p class="since">Since: <a class="link" href="api-index-0-9-42.html#api-index-0.9.42">0.9.42</a></p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="hb-buffer-get-cluster-level"></a><h3>hb_buffer_get_cluster_level ()</h3>
-<pre class="programlisting"><a class="link" href="harfbuzz-Buffers.html#hb-buffer-cluster-level-t" title="enum hb_buffer_cluster_level_t"><span class="returnvalue">hb_buffer_cluster_level_t</span></a>
-hb_buffer_get_cluster_level (<em class="parameter"><code><a class="link" href="harfbuzz-Buffers.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>);</pre>
-<div class="refsect3">
-<a name="hb-buffer-get-cluster-level.parameters"></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>an <a class="link" href="harfbuzz-Buffers.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a>.</p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<p class="since">Since: <a class="link" href="api-index-0-9-42.html#api-index-0.9.42">0.9.42</a></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-Buffers.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>Similar to <a class="link" href="harfbuzz-Buffers.html#hb-buffer-pre-allocate" title="hb_buffer_pre_allocate ()"><code class="function">hb_buffer_pre_allocate()</code></a>, but clears any new items added at the
-end.</p>
-<div class="refsect3">
-<a name="hb-buffer-set-length.parameters"></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>an <a class="link" href="harfbuzz-Buffers.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a>.</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>length</p></td>
-<td class="parameter_description"><p>the new length of <em class="parameter"><code>buffer</code></em>
-.</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="hb-buffer-set-length.returns"></a><h4>Returns</h4>
-<p><code class="literal">true</code> if <em class="parameter"><code>buffer</code></em>
-memory allocation succeeded, <code class="literal">false</code> otherwise.</p>
-</div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></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-Buffers.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="hb-buffer-get-length.parameters"></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>an <a class="link" href="harfbuzz-Buffers.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a>.</p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="hb-buffer-get-length.returns"></a><h4>Returns</h4>
-<p>The <em class="parameter"><code>buffer</code></em>
-length.
-The value valid as long as buffer has not been modified.</p>
-</div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></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-Buffers.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-Buffers.html#hb-segment-properties-t"><span class="type">hb_segment_properties_t</span></a> *props</code></em>);</pre>
-<p>Sets the segment properties of the buffer, a shortcut for calling
-<a class="link" href="harfbuzz-Buffers.html#hb-buffer-set-direction" title="hb_buffer_set_direction ()"><code class="function">hb_buffer_set_direction()</code></a>, <a class="link" href="harfbuzz-Buffers.html#hb-buffer-set-script" title="hb_buffer_set_script ()"><code class="function">hb_buffer_set_script()</code></a> and
-<a class="link" href="harfbuzz-Buffers.html#hb-buffer-set-language" title="hb_buffer_set_language ()"><code class="function">hb_buffer_set_language()</code></a> individually.</p>
-<div class="refsect3">
-<a name="hb-buffer-set-segment-properties.parameters"></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>an <a class="link" href="harfbuzz-Buffers.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a>.</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>props</p></td>
-<td class="parameter_description"><p>an <a class="link" href="harfbuzz-Buffers.html#hb-segment-properties-t"><span class="type">hb_segment_properties_t</span></a> to use.</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<p class="since">Since: <a class="link" href="api-index-0-9-7.html#api-index-0.9.7">0.9.7</a></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-Buffers.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>,
-                                  <em class="parameter"><code><a class="link" href="harfbuzz-Buffers.html#hb-segment-properties-t"><span class="type">hb_segment_properties_t</span></a> *props</code></em>);</pre>
-<p>Sets <em class="parameter"><code>props</code></em>
- to the <a class="link" href="harfbuzz-Buffers.html#hb-segment-properties-t"><span class="type">hb_segment_properties_t</span></a> of <em class="parameter"><code>buffer</code></em>
-.</p>
-<div class="refsect3">
-<a name="hb-buffer-get-segment-properties.parameters"></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>an <a class="link" href="harfbuzz-Buffers.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a>.</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>props</p></td>
-<td class="parameter_description"><p> the output <a class="link" href="harfbuzz-Buffers.html#hb-segment-properties-t"><span class="type">hb_segment_properties_t</span></a>. </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: <a class="link" href="api-index-0-9-7.html#api-index-0.9.7">0.9.7</a></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-Buffers.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-Buffers.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="hb-buffer-guess-segment-properties.parameters"></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>an <a class="link" href="harfbuzz-Buffers.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a>.</p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<p class="since">Since: <a class="link" href="api-index-0-9-7.html#api-index-0.9.7">0.9.7</a></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-Buffers.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="hb-buffer-set-unicode-funcs.parameters"></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>an <a class="link" href="harfbuzz-Buffers.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a>.</p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></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-Buffers.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>);</pre>
-<div class="refsect3">
-<a name="hb-buffer-get-unicode-funcs.parameters"></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>an <a class="link" href="harfbuzz-Buffers.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a>.</p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></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-Buffers.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>
-<p><span class="annotation">[<acronym title="Exposed in C code, not necessarily available in other languages."><span class="acronym">skip</span></acronym>]</span></p>
-<div class="refsect3">
-<a name="hb-buffer-set-user-data.parameters"></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>an <a class="link" href="harfbuzz-Buffers.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a>.</p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></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-Buffers.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>
-<p><span class="annotation">[<acronym title="Exposed in C code, not necessarily available in other languages."><span class="acronym">skip</span></acronym>]</span></p>
-<div class="refsect3">
-<a name="hb-buffer-get-user-data.parameters"></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>an <a class="link" href="harfbuzz-Buffers.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a>.</p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></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-Buffers.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-Buffers.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 <em class="parameter"><code>buffer</code></em>
- glyph information array.  Returned pointer
-is valid as long as <em class="parameter"><code>buffer</code></em>
- contents are not modified.</p>
-<div class="refsect3">
-<a name="hb-buffer-get-glyph-infos.parameters"></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>an <a class="link" href="harfbuzz-Buffers.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a>.</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="hb-buffer-get-glyph-infos.returns"></a><h4>Returns</h4>
-<p>The <em class="parameter"><code>buffer</code></em>
-glyph information array.
-The value valid as long as buffer has not been modified. </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: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></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-Buffers.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-Buffers.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 <em class="parameter"><code>buffer</code></em>
- glyph position array.  Returned pointer
-is valid as long as <em class="parameter"><code>buffer</code></em>
- contents are not modified.</p>
-<div class="refsect3">
-<a name="hb-buffer-get-glyph-positions.parameters"></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>an <a class="link" href="harfbuzz-Buffers.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a>.</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="hb-buffer-get-glyph-positions.returns"></a><h4>Returns</h4>
-<p>The <em class="parameter"><code>buffer</code></em>
-glyph position array.
-The value valid as long as buffer has not been modified. </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: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></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-Buffers.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>Sets the <a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> that replaces invalid entries for a given encoding
-when adding text to <em class="parameter"><code>buffer</code></em>
-.</p>
-<p>Default is <a class="link" href="harfbuzz-Buffers.html#HB-BUFFER-REPLACEMENT-CODEPOINT-DEFAULT:CAPS" title="HB_BUFFER_REPLACEMENT_CODEPOINT_DEFAULT"><code class="literal">HB_BUFFER_REPLACEMENT_CODEPOINT_DEFAULT</code></a>.</p>
-<div class="refsect3">
-<a name="hb-buffer-set-replacement-codepoint.parameters"></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>an <a class="link" href="harfbuzz-Buffers.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a>.</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>replacement</p></td>
-<td class="parameter_description"><p>the replacement <a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<p class="since">Since: <a class="link" href="api-index-0-9-31.html#api-index-0.9.31">0.9.31</a></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-Buffers.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>);</pre>
-<p>See <a class="link" href="harfbuzz-Buffers.html#hb-buffer-set-replacement-codepoint" title="hb_buffer_set_replacement_codepoint ()"><code class="function">hb_buffer_set_replacement_codepoint()</code></a>.</p>
-<div class="refsect3">
-<a name="hb-buffer-get-replacement-codepoint.parameters"></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>an <a class="link" href="harfbuzz-Buffers.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a>.</p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="hb-buffer-get-replacement-codepoint.returns"></a><h4>Returns</h4>
-<p>The <em class="parameter"><code>buffer</code></em>
-replacement <a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a>.</p>
-</div>
-<p class="since">Since: <a class="link" href="api-index-0-9-31.html#api-index-0.9.31">0.9.31</a></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-Buffers.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>);</pre>
-<p>Reorders a glyph buffer to have canonical in-cluster glyph order / position.
-The resulting clusters should behave identical to pre-reordering clusters.</p>
-<div class="note">This has nothing to do with Unicode normalization.</div>
-<div class="refsect3">
-<a name="hb-buffer-normalize-glyphs.parameters"></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>an <a class="link" href="harfbuzz-Buffers.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a>.</p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></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-Buffers.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="hb-buffer-reverse.parameters"></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>an <a class="link" href="harfbuzz-Buffers.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a>.</p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="hb-buffer-reverse-range"></a><h3>hb_buffer_reverse_range ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-hb_buffer_reverse_range (<em class="parameter"><code><a class="link" href="harfbuzz-Buffers.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>);</pre>
-<p>Reverses buffer contents between start to end.</p>
-<div class="refsect3">
-<a name="hb-buffer-reverse-range.parameters"></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>an <a class="link" href="harfbuzz-Buffers.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a>.</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>start</p></td>
-<td class="parameter_description"><p>start index.</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>end</p></td>
-<td class="parameter_description"><p>end index.</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<p class="since">Since: <a class="link" href="api-index-0-9-41.html#api-index-0.9.41">0.9.41</a></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-Buffers.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="hb-buffer-reverse-clusters.parameters"></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>an <a class="link" href="harfbuzz-Buffers.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a>.</p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></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-Buffers.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-Buffers.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-Buffers.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>
-<p>Serializes <em class="parameter"><code>buffer</code></em>
- into a textual representation of its glyph content,
-useful for showing the contents of the buffer, for example during debugging.
-There are currently two supported serialization formats:</p>
-<div class="refsect3">
-<a name="id-1.3.3.5.12.45.5"></a><h4>text</h4>
-<p>A human-readable, plain text format.
-The serialized glyphs will look something like:</p>
-<p><code class="literal">
-[uni0651=0@518,0+0|uni0628=0+1897]
-</code></p>
-<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
-<li class="listitem"><p>The serialized glyphs are delimited with <code class="literal">[</code> and <code class="literal">]</code>.</p></li>
-<li class="listitem"><p>Glyphs are separated with <code class="literal">|</code></p></li>
-<li class="listitem">
-<p>Each glyph starts with glyph name, or glyph index if
-<a class="link" href="harfbuzz-Buffers.html#HB-BUFFER-SERIALIZE-FLAG-NO-GLYPH-NAMES:CAPS"><span class="type">HB_BUFFER_SERIALIZE_FLAG_NO_GLYPH_NAMES</span></a> flag is set. Then,</p>
-<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; ">
-<li class="listitem"><p>If <a class="link" href="harfbuzz-Buffers.html#HB-BUFFER-SERIALIZE-FLAG-NO-CLUSTERS:CAPS"><span class="type">HB_BUFFER_SERIALIZE_FLAG_NO_CLUSTERS</span></a> is not set, <code class="literal">=</code> then <span class="type">hb_glyph_info_t.cluster</span>.</p></li>
-<li class="listitem">
-<p>If <a class="link" href="harfbuzz-Buffers.html#HB-BUFFER-SERIALIZE-FLAG-NO-POSITIONS:CAPS"><span class="type">HB_BUFFER_SERIALIZE_FLAG_NO_POSITIONS</span></a> is not set, the <a class="link" href="harfbuzz-Buffers.html#hb-glyph-position-t"><span class="type">hb_glyph_position_t</span></a> in the format:</p>
-<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: square; ">
-<li class="listitem"><p>If both <span class="type">hb_glyph_position_t.x_offset</span> and <span class="type">hb_glyph_position_t.y_offset</span> are not 0, <code class="literal">@x_offset,y_offset</code>. Then,</p></li>
-<li class="listitem"><p><code class="literal">+x_advance</code>, then <code class="literal">,y_advance</code> if <span class="type">hb_glyph_position_t.y_advance</span> is not 0. Then,</p></li>
-</ul></div>
-</li>
-<li class="listitem"><p>If <a class="link" href="harfbuzz-Buffers.html#HB-BUFFER-SERIALIZE-FLAG-GLYPH-EXTENTS:CAPS"><span class="type">HB_BUFFER_SERIALIZE_FLAG_GLYPH_EXTENTS</span></a> is set, the
-<span class="type">hb_glyph_extents_t</span> in the format
-<code class="literal">&lt;x_bearing,y_bearing,width,height&gt;</code></p></li>
-</ul></div>
-</li>
-</ul></div>
-</div>
-<div class="refsect3">
-<a name="id-1.3.3.5.12.45.6"></a><h4>json</h4>
-<p>TODO.</p>
-</div>
-<div class="refsect3">
-<a name="hb-buffer-serialize-glyphs.parameters"></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>an <a class="link" href="harfbuzz-Buffers.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> buffer.</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>start</p></td>
-<td class="parameter_description"><p>the first item in <em class="parameter"><code>buffer</code></em>
-to serialize.</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>end</p></td>
-<td class="parameter_description"><p>the last item in <em class="parameter"><code>buffer</code></em>
-to serialize.</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>buf</p></td>
-<td class="parameter_description"><p> output string to
-write serialized buffer into. </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="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=buf_size][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> uint8_t]</span></td>
-</tr>
-<tr>
-<td class="parameter_name"><p>buf_size</p></td>
-<td class="parameter_description"><p>the size of <em class="parameter"><code>buf</code></em>
-.</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>buf_consumed</p></td>
-<td class="parameter_description"><p> if not <code class="literal">NULL</code>, will be set to the number of byes written into <em class="parameter"><code>buf</code></em>
-. </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>
-<tr>
-<td class="parameter_name"><p>font</p></td>
-<td class="parameter_description"><p> the <a class="link" href="harfbuzz-hb-font.html#hb-font-t"><span class="type">hb_font_t</span></a> used to shape this buffer, needed to
-read glyph names and extents. If <code class="literal">NULL</code>, and empty font will be used. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
-</tr>
-<tr>
-<td class="parameter_name"><p>format</p></td>
-<td class="parameter_description"><p>the <a class="link" href="harfbuzz-Buffers.html#hb-buffer-serialize-format-t" title="enum hb_buffer_serialize_format_t"><span class="type">hb_buffer_serialize_format_t</span></a> to use for formatting the output.</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>flags</p></td>
-<td class="parameter_description"><p>the <a class="link" href="harfbuzz-Buffers.html#hb-buffer-serialize-flags-t" title="enum hb_buffer_serialize_flags_t"><span class="type">hb_buffer_serialize_flags_t</span></a> that control what glyph properties
-to serialize.</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="hb-buffer-serialize-glyphs.returns"></a><h4>Returns</h4>
-<p>The number of serialized items.</p>
-</div>
-<p class="since">Since: <a class="link" href="api-index-0-9-7.html#api-index-0.9.7">0.9.7</a></p>
-</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-Buffers.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-Buffers.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="hb-buffer-deserialize-glyphs.parameters"></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>an <a class="link" href="harfbuzz-Buffers.html#hb-buffer-t"><span class="type">hb_buffer_t</span></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>
-<p class="since">Since: <a class="link" href="api-index-0-9-7.html#api-index-0.9.7">0.9.7</a></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-Buffers.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>
-<p>Parses a string into an <a class="link" href="harfbuzz-Buffers.html#hb-buffer-serialize-format-t" title="enum hb_buffer_serialize_format_t"><span class="type">hb_buffer_serialize_format_t</span></a>. Does not check if
-<em class="parameter"><code>str</code></em>
- is a valid buffer serialization format, use
-<a class="link" href="harfbuzz-Buffers.html#hb-buffer-serialize-list-formats" title="hb_buffer_serialize_list_formats ()"><code class="function">hb_buffer_serialize_list_formats()</code></a> to get the list of supported formats.</p>
-<div class="refsect3">
-<a name="hb-buffer-serialize-format-from-string.parameters"></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> a string to parse. </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][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> uint8_t]</span></td>
-</tr>
-<tr>
-<td class="parameter_name"><p>len</p></td>
-<td class="parameter_description"><p>length of <em class="parameter"><code>str</code></em>
-, or -1 if string is <code class="literal">NULL</code> terminated</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="hb-buffer-serialize-format-from-string.returns"></a><h4>Returns</h4>
-<p>The parsed <a class="link" href="harfbuzz-Buffers.html#hb-buffer-serialize-format-t" title="enum hb_buffer_serialize_format_t"><span class="type">hb_buffer_serialize_format_t</span></a>.</p>
-</div>
-<p class="since">Since: <a class="link" href="api-index-0-9-7.html#api-index-0.9.7">0.9.7</a></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-Buffers.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>
-<p>Converts <em class="parameter"><code>format</code></em>
- to the string corresponding it, or <code class="literal">NULL</code> if it is not a valid
-<a class="link" href="harfbuzz-Buffers.html#hb-buffer-serialize-format-t" title="enum hb_buffer_serialize_format_t"><span class="type">hb_buffer_serialize_format_t</span></a>.</p>
-<div class="refsect3">
-<a name="hb-buffer-serialize-format-to-string.parameters"></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>format</p></td>
-<td class="parameter_description"><p>an <a class="link" href="harfbuzz-Buffers.html#hb-buffer-serialize-format-t" title="enum hb_buffer_serialize_format_t"><span class="type">hb_buffer_serialize_format_t</span></a> to convert.</p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="hb-buffer-serialize-format-to-string.returns"></a><h4>Returns</h4>
-<p>A <code class="literal">NULL</code> terminated string corresponding to <em class="parameter"><code>format</code></em>
-. Should not be freed. </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: <a class="link" href="api-index-0-9-7.html#api-index-0.9.7">0.9.7</a></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>
-<p>Returns a list of supported buffer serialization formats.</p>
-<div class="refsect3">
-<a name="hb-buffer-serialize-list-formats.returns"></a><h4>Returns</h4>
-<p>A string array of buffer serialization formats. Should not be freed. </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: <a class="link" href="api-index-0-9-7.html#api-index-0.9.7">0.9.7</a></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-Buffers.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-Buffers.html#hb-segment-properties-t"><span class="type">hb_segment_properties_t</span></a> *b</code></em>);</pre>
-<p>Checks the equality of two <a class="link" href="harfbuzz-Buffers.html#hb-segment-properties-t"><span class="type">hb_segment_properties_t</span></a>'s.</p>
-<div class="refsect3">
-<a name="hb-segment-properties-equal.parameters"></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>a</p></td>
-<td class="parameter_description"><p>first <a class="link" href="harfbuzz-Buffers.html#hb-segment-properties-t"><span class="type">hb_segment_properties_t</span></a> to compare.</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>b</p></td>
-<td class="parameter_description"><p>second <a class="link" href="harfbuzz-Buffers.html#hb-segment-properties-t"><span class="type">hb_segment_properties_t</span></a> to compare.</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="hb-segment-properties-equal.returns"></a><h4>Returns</h4>
-<p><code class="literal">true</code> if all properties of <em class="parameter"><code>a</code></em>
-equal those of <em class="parameter"><code>b</code></em>
-, false otherwise. </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: <a class="link" href="api-index-0-9-7.html#api-index-0.9.7">0.9.7</a></p>
-</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-Buffers.html#hb-segment-properties-t"><span class="type">hb_segment_properties_t</span></a> *p</code></em>);</pre>
-<p>Creates a hash representing <em class="parameter"><code>p</code></em>
-.</p>
-<div class="refsect3">
-<a name="hb-segment-properties-hash.parameters"></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>p</p></td>
-<td class="parameter_description"><p><a class="link" href="harfbuzz-Buffers.html#hb-segment-properties-t"><span class="type">hb_segment_properties_t</span></a> to hash.</p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="hb-segment-properties-hash.returns"></a><h4>Returns</h4>
-<p>A hash of <em class="parameter"><code>p</code></em>
-.</p>
-</div>
-<p class="since">Since: <a class="link" href="api-index-0-9-7.html#api-index-0.9.7">0.9.7</a></p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="hb-buffer-set-message-func"></a><h3>hb_buffer_set_message_func ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-hb_buffer_set_message_func (<em class="parameter"><code><a class="link" href="harfbuzz-Buffers.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>,
-                            <em class="parameter"><code><a class="link" href="harfbuzz-Buffers.html#hb-buffer-message-func-t" title="hb_buffer_message_func_t ()"><span class="type">hb_buffer_message_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="hb-buffer-set-message-func.parameters"></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>an <a class="link" href="harfbuzz-Buffers.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a>.</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: <a class="link" href="api-index-1-1-3.html#api-index-1.1.3">1.1.3</a></p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="hb-buffer-message-func-t"></a><h3>hb_buffer_message_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_buffer_message_func_t<span class="c_punctuation">)</span> (<em class="parameter"><code><a class="link" href="harfbuzz-Buffers.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-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> *message</code></em>,
-                             <em class="parameter"><code><span class="type">void</span> *user_data</code></em>);</pre>
-</div>
-</div>
-<div class="refsect1">
-<a name="harfbuzz-Buffers.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>
-</div>
-<hr>
-<div class="refsect2">
-<a name="HB-BUFFER-REPLACEMENT-CODEPOINT-DEFAULT:CAPS"></a><h3>HB_BUFFER_REPLACEMENT_CODEPOINT_DEFAULT</h3>
-<pre class="programlisting">#define HB_BUFFER_REPLACEMENT_CODEPOINT_DEFAULT 0xFFFDu
-</pre>
-<p>The default code point for replacing invalid characters in a given encoding.
-Set to U+FFFD REPLACEMENT CHARACTER.</p>
-<p class="since">Since: <a class="link" href="api-index-0-9-31.html#api-index-0.9.31">0.9.31</a></p>
-</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>The main structure holding the input text and its properties before shaping,
-and output glyphs and their information after shaping.</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>The <a class="link" href="harfbuzz-Buffers.html#hb-glyph-info-t"><span class="type">hb_glyph_info_t</span></a> is the structure that holds information about the
-glyphs and their relation to input text.</p>
-<div class="refsect3">
-<a name="hb-glyph-info-t.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="300px" class="struct_members_name">
-<col class="struct_members_description">
-<col width="200px" class="struct_members_annotations">
-</colgroup>
-<tbody>
-<tr>
-<td class="struct_member_name"><p><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> <em class="structfield"><code><a name="hb-glyph-info-t-struct.codepoint"></a>codepoint</code></em>;</p></td>
-<td class="struct_member_description"><p>either a Unicode code point (before shaping) or a glyph index
-(after shaping).</p></td>
-<td class="struct_member_annotations"> </td>
-</tr>
-<tr>
-<td class="struct_member_name"><p><a class="link" href="harfbuzz-hb-common.html#hb-mask-t" title="hb_mask_t"><span class="type">hb_mask_t</span></a> <em class="structfield"><code><a name="hb-glyph-info-t-struct.mask"></a>mask</code></em>;</p></td>
-<td class="struct_member_description"> </td>
-<td class="struct_member_annotations"> </td>
-</tr>
-<tr>
-<td class="struct_member_name"><p><span class="type">uint32_t</span> <em class="structfield"><code><a name="hb-glyph-info-t-struct.cluster"></a>cluster</code></em>;</p></td>
-<td class="struct_member_description"><p>the index of the character in the original text that corresponds
-to this <a class="link" href="harfbuzz-Buffers.html#hb-glyph-info-t"><span class="type">hb_glyph_info_t</span></a>, or whatever the client passes to
-<a class="link" href="harfbuzz-Buffers.html#hb-buffer-add" title="hb_buffer_add ()"><code class="function">hb_buffer_add()</code></a>. More than one <a class="link" href="harfbuzz-Buffers.html#hb-glyph-info-t"><span class="type">hb_glyph_info_t</span></a> can have the same
-<em class="parameter"><code>cluster</code></em>
-value, if they resulted from the same character (e.g. one
-to many glyph substitution), and when more than one character gets
-merged in the same glyph (e.g. many to one glyph substitution) the
-<a class="link" href="harfbuzz-Buffers.html#hb-glyph-info-t"><span class="type">hb_glyph_info_t</span></a> will have the smallest cluster value of them.
-By default some characters are merged into the same cluster
-(e.g. combining marks have the same cluster as their bases)
-even if they are separate glyphs, <a class="link" href="harfbuzz-Buffers.html#hb-buffer-set-cluster-level" title="hb_buffer_set_cluster_level ()"><code class="function">hb_buffer_set_cluster_level()</code></a>
-allow selecting more fine-grained cluster handling.</p></td>
-<td class="struct_member_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-</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>The <a class="link" href="harfbuzz-Buffers.html#hb-glyph-position-t"><span class="type">hb_glyph_position_t</span></a> is the structure that holds the positions of the
-glyph in both horizontal and vertical directions. All positions in
-<a class="link" href="harfbuzz-Buffers.html#hb-glyph-position-t"><span class="type">hb_glyph_position_t</span></a> are relative to the current point.</p>
-<div class="refsect3">
-<a name="hb-glyph-position-t.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="300px" class="struct_members_name">
-<col class="struct_members_description">
-<col width="200px" class="struct_members_annotations">
-</colgroup>
-<tbody>
-<tr>
-<td class="struct_member_name"><p><a class="link" href="harfbuzz-hb-common.html#hb-position-t" title="hb_position_t"><span class="type">hb_position_t</span></a> <em class="structfield"><code><a name="hb-glyph-position-t-struct.x-advance"></a>x_advance</code></em>;</p></td>
-<td class="struct_member_description"><p>how much the line advances after drawing this glyph when setting
-text in horizontal direction.</p></td>
-<td class="struct_member_annotations"> </td>
-</tr>
-<tr>
-<td class="struct_member_name"><p><a class="link" href="harfbuzz-hb-common.html#hb-position-t" title="hb_position_t"><span class="type">hb_position_t</span></a> <em class="structfield"><code><a name="hb-glyph-position-t-struct.y-advance"></a>y_advance</code></em>;</p></td>
-<td class="struct_member_description"><p>how much the line advances after drawing this glyph when setting
-text in vertical direction.</p></td>
-<td class="struct_member_annotations"> </td>
-</tr>
-<tr>
-<td class="struct_member_name"><p><a class="link" href="harfbuzz-hb-common.html#hb-position-t" title="hb_position_t"><span class="type">hb_position_t</span></a> <em class="structfield"><code><a name="hb-glyph-position-t-struct.x-offset"></a>x_offset</code></em>;</p></td>
-<td class="struct_member_description"><p>how much the glyph moves on the X-axis before drawing it, this
-should not affect how much the line advances.</p></td>
-<td class="struct_member_annotations"> </td>
-</tr>
-<tr>
-<td class="struct_member_name"><p><a class="link" href="harfbuzz-hb-common.html#hb-position-t" title="hb_position_t"><span class="type">hb_position_t</span></a> <em class="structfield"><code><a name="hb-glyph-position-t-struct.y-offset"></a>y_offset</code></em>;</p></td>
-<td class="struct_member_description"><p>how much the glyph moves on the Y-axis before drawing it, this
-should not affect how much the line advances.</p></td>
-<td class="struct_member_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="hb-buffer-content-type-t"></a><h3>enum hb_buffer_content_type_t</h3>
-<div class="refsect3">
-<a name="hb-buffer-content-type-t.members"></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">
-<p>Initial value for new buffer.</p>
-</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">
-<p>The buffer contains input characters (before shaping).</p>
-</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">
-<p>The buffer contains output glyphs (after shaping).</p>
-</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>
-<div class="refsect3">
-<a name="hb-buffer-flags-t.members"></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">
-<p>the default buffer flag.</p>
-</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">
-<p>flag indicating that special handling of the beginning
-                     of text paragraph can be applied to this buffer. Should usually
-                     be set, unless you are passing to the buffer only part
-                     of the text without the full context.</p>
-</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">
-<p>flag indicating that special handling of the end of text
-                     paragraph can be applied to this buffer, similar to
-                     <em class="parameter"><code>HB_BUFFER_FLAG_EOT</code></em>
-.</p>
-</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">
-<p>                     flag indication that character with Default_Ignorable
-                     Unicode property should use the corresponding glyph
-                     from the font, instead of hiding them (currently done
-                     by replacing them with the space glyph and zeroing the
-                     advance width.)</p>
-</td>
-<td class="enum_member_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<p class="since">Since: <a class="link" href="api-index-0-9-20.html#api-index-0.9.20">0.9.20</a></p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="hb-buffer-cluster-level-t"></a><h3>enum hb_buffer_cluster_level_t</h3>
-<div class="refsect3">
-<a name="hb-buffer-cluster-level-t.members"></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-CLUSTER-LEVEL-MONOTONE-GRAPHEMES:CAPS"></a>HB_BUFFER_CLUSTER_LEVEL_MONOTONE_GRAPHEMES</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="HB-BUFFER-CLUSTER-LEVEL-MONOTONE-CHARACTERS:CAPS"></a>HB_BUFFER_CLUSTER_LEVEL_MONOTONE_CHARACTERS</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="HB-BUFFER-CLUSTER-LEVEL-CHARACTERS:CAPS"></a>HB_BUFFER_CLUSTER_LEVEL_CHARACTERS</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="HB-BUFFER-CLUSTER-LEVEL-DEFAULT:CAPS"></a>HB_BUFFER_CLUSTER_LEVEL_DEFAULT</p></td>
-<td> </td>
-<td> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-</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>The structure that holds various text properties of an <a class="link" href="harfbuzz-Buffers.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a>. Can be
-set and retrieved using <a class="link" href="harfbuzz-Buffers.html#hb-buffer-set-segment-properties" title="hb_buffer_set_segment_properties ()"><code class="function">hb_buffer_set_segment_properties()</code></a> and
-<a class="link" href="harfbuzz-Buffers.html#hb-buffer-get-segment-properties" title="hb_buffer_get_segment_properties ()"><code class="function">hb_buffer_get_segment_properties()</code></a>, respectively.</p>
-<div class="refsect3">
-<a name="hb-segment-properties-t.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="300px" class="struct_members_name">
-<col class="struct_members_description">
-<col width="200px" class="struct_members_annotations">
-</colgroup>
-<tbody>
-<tr>
-<td class="struct_member_name"><p><a class="link" href="harfbuzz-hb-common.html#hb-direction-t" title="enum hb_direction_t"><span class="type">hb_direction_t</span></a> <em class="structfield"><code><a name="hb-segment-properties-t-struct.direction"></a>direction</code></em>;</p></td>
-<td class="struct_member_description"><p>the <a class="link" href="harfbuzz-hb-common.html#hb-direction-t" title="enum hb_direction_t"><span class="type">hb_direction_t</span></a> of the buffer, see <a class="link" href="harfbuzz-Buffers.html#hb-buffer-set-direction" title="hb_buffer_set_direction ()"><code class="function">hb_buffer_set_direction()</code></a>.</p></td>
-<td class="struct_member_annotations"> </td>
-</tr>
-<tr>
-<td class="struct_member_name"><p><a class="link" href="harfbuzz-hb-common.html#hb-script-t" title="enum hb_script_t"><span class="type">hb_script_t</span></a> <em class="structfield"><code><a name="hb-segment-properties-t-struct.script"></a>script</code></em>;</p></td>
-<td class="struct_member_description"><p>the <a class="link" href="harfbuzz-hb-common.html#hb-script-t" title="enum hb_script_t"><span class="type">hb_script_t</span></a> of the buffer, see <a class="link" href="harfbuzz-Buffers.html#hb-buffer-set-script" title="hb_buffer_set_script ()"><code class="function">hb_buffer_set_script()</code></a>.</p></td>
-<td class="struct_member_annotations"> </td>
-</tr>
-<tr>
-<td class="struct_member_name"><p><a class="link" href="harfbuzz-hb-common.html#hb-language-t" title="hb_language_t"><span class="type">hb_language_t</span></a> <em class="structfield"><code><a name="hb-segment-properties-t-struct.language"></a>language</code></em>;</p></td>
-<td class="struct_member_description"><p>the <a class="link" href="harfbuzz-hb-common.html#hb-language-t" title="hb_language_t"><span class="type">hb_language_t</span></a> of the buffer, see <a class="link" href="harfbuzz-Buffers.html#hb-buffer-set-language" title="hb_buffer_set_language ()"><code class="function">hb_buffer_set_language()</code></a>.</p></td>
-<td class="struct_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>The buffer serialization and de-serialization format used in
-<a class="link" href="harfbuzz-Buffers.html#hb-buffer-serialize-glyphs" title="hb_buffer_serialize_glyphs ()"><code class="function">hb_buffer_serialize_glyphs()</code></a> and <a class="link" href="harfbuzz-Buffers.html#hb-buffer-deserialize-glyphs" title="hb_buffer_deserialize_glyphs ()"><code class="function">hb_buffer_deserialize_glyphs()</code></a>.</p>
-<div class="refsect3">
-<a name="hb-buffer-serialize-format-t.members"></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">
-<p>a human-readable, plain text format.</p>
-</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">
-<p>a machine-readable JSON format.</p>
-</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">
-<p>invalid format.</p>
-</td>
-<td class="enum_member_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="hb-buffer-serialize-flags-t"></a><h3>enum hb_buffer_serialize_flags_t</h3>
-<p>Flags that control what glyph information are serialized in <a class="link" href="harfbuzz-Buffers.html#hb-buffer-serialize-glyphs" title="hb_buffer_serialize_glyphs ()"><code class="function">hb_buffer_serialize_glyphs()</code></a>.</p>
-<div class="refsect3">
-<a name="hb-buffer-serialize-flags-t.members"></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">
-<p>serialize glyph names, clusters and positions.</p>
-</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">
-<p>do not serialize glyph cluster.</p>
-</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">
-<p>do not serialize glyph position information.</p>
-</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">
-<p>do no serialize glyph name.</p>
-</td>
-<td class="enum_member_annotations"> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="HB-BUFFER-SERIALIZE-FLAG-GLYPH-EXTENTS:CAPS"></a>HB_BUFFER_SERIALIZE_FLAG_GLYPH_EXTENTS</p></td>
-<td class="enum_member_description">
-<p>serialize glyph extents.</p>
-</td>
-<td class="enum_member_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<p class="since">Since: <a class="link" href="api-index-0-9-20.html#api-index-0.9.20">0.9.20</a></p>
-</div>
-</div>
-</div>
-<div class="footer">
-<hr>Generated by GTK-Doc V1.24.1</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/html/harfbuzz-Shaping.html b/docs/html/harfbuzz-Shaping.html
deleted file mode 100644 (file)
index 3e35150..0000000
+++ /dev/null
@@ -1,347 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Shaping: HarfBuzz Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="HarfBuzz Manual">
-<link rel="up" href="ch07.html" title="Harfbuzz API">
-<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.24.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-Shaping.description" class="shortcut">Description</a></span><span id="nav_hierarchy">  <span class="dim">|</span> 
-                  <a href="#harfbuzz-Shaping.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="ch07.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-Shaping"></a><div class="titlepage"></div>
-<div class="refnamediv"><table width="100%"><tr>
-<td valign="top">
-<h2><span class="refentrytitle"><a name="harfbuzz-Shaping.top_of_page"></a>Shaping</span></h2>
-<p>Shaping — Conversion of text strings into positioned glyphs</p>
-</td>
-<td class="gallery_image" valign="top" align="right"></td>
-</tr></table></div>
-<div class="refsect1">
-<a name="harfbuzz-Shaping.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-Shaping.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-Shaping.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-Shaping.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-Shaping.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-Shaping.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-Shaping.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-Shaping.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-Shaping.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen">    <a href="/home/behdad/.local/share/gtk-doc/html/gobject/gobject-Boxed-Types.html">GBoxed</a>
-    <span class="lineart">╰──</span> hb_feature_t
-</pre>
-</div>
-<div class="refsect1">
-<a name="harfbuzz-Shaping.includes"></a><h2>Includes</h2>
-<pre class="synopsis">#include &lt;hb.h&gt;
-</pre>
-</div>
-<div class="refsect1">
-<a name="harfbuzz-Shaping.description"></a><h2>Description</h2>
-<p>Shaping is the central operation of HarfBuzz. Shaping operates on buffers,
-which are sequences of Unicode characters that use the same font and have
-the same text direction, script and language. After shaping the buffer
-contains the output glyphs and their positions.</p>
-</div>
-<div class="refsect1">
-<a name="harfbuzz-Shaping.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-Shaping.html#hb-feature-t"><span class="type">hb_feature_t</span></a> *feature</code></em>);</pre>
-<p>Parses a string into a <a class="link" href="harfbuzz-Shaping.html#hb-feature-t"><span class="type">hb_feature_t</span></a>.</p>
-<p>TODO: document the syntax here.</p>
-<div class="refsect3">
-<a name="hb-feature-from-string.parameters"></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> a string to parse. </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][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> uint8_t]</span></td>
-</tr>
-<tr>
-<td class="parameter_name"><p>len</p></td>
-<td class="parameter_description"><p>length of <em class="parameter"><code>str</code></em>
-, or -1 if string is <code class="literal">NULL</code> terminated</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>feature</p></td>
-<td class="parameter_description"><p> the <a class="link" href="harfbuzz-Shaping.html#hb-feature-t"><span class="type">hb_feature_t</span></a> to initialize with the parsed values. </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="hb-feature-from-string.returns"></a><h4>Returns</h4>
-<p><code class="literal">true</code> if <em class="parameter"><code>str</code></em>
-is successfully parsed, <code class="literal">false</code> otherwise.</p>
-</div>
-<p class="since">Since: <a class="link" href="api-index-0-9-5.html#api-index-0.9.5">0.9.5</a></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-Shaping.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>
-<p>Converts a <a class="link" href="harfbuzz-Shaping.html#hb-feature-t"><span class="type">hb_feature_t</span></a> into a <code class="literal">NULL</code>-terminated string in the format
-understood by <a class="link" href="harfbuzz-Shaping.html#hb-feature-from-string" title="hb_feature_from_string ()"><code class="function">hb_feature_from_string()</code></a>. The client in responsible for
-allocating big enough size for <em class="parameter"><code>buf</code></em>
-, 128 bytes is more than enough.</p>
-<div class="refsect3">
-<a name="hb-feature-to-string.parameters"></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>feature</p></td>
-<td class="parameter_description"><p>an <a class="link" href="harfbuzz-Shaping.html#hb-feature-t"><span class="type">hb_feature_t</span></a> to convert</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>buf</p></td>
-<td class="parameter_description"><p> output string. </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][<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>size</p></td>
-<td class="parameter_description"><p>the allocated size of <em class="parameter"><code>buf</code></em>
-</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<p class="since">Since: <a class="link" href="api-index-0-9-5.html#api-index-0.9.5">0.9.5</a></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-Buffers.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-Shaping.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>
-<p>Shapes <em class="parameter"><code>buffer</code></em>
- using <em class="parameter"><code>font</code></em>
- turning its Unicode characters content to
-positioned glyphs. If <em class="parameter"><code>features</code></em>
- is not <code class="literal">NULL</code>, it will be used to control the
-features applied during shaping.</p>
-<div class="refsect3">
-<a name="hb-shape.parameters"></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>an <a class="link" href="harfbuzz-hb-font.html#hb-font-t"><span class="type">hb_font_t</span></a> to use for shaping</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>buffer</p></td>
-<td class="parameter_description"><p>an <a class="link" href="harfbuzz-Buffers.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> to shape</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>features</p></td>
-<td class="parameter_description"><p> an array of user
-specified <a class="link" href="harfbuzz-Shaping.html#hb-feature-t"><span class="type">hb_feature_t</span></a> or <code class="literal">NULL</code>. </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][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
-</tr>
-<tr>
-<td class="parameter_name"><p>num_features</p></td>
-<td class="parameter_description"><p>the length of <em class="parameter"><code>features</code></em>
-array</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="hb-shape.returns"></a><h4>Returns</h4>
-<p> <code class="literal">FALSE</code> if all shapers failed, <code class="literal">TRUE</code> otherwise</p>
-</div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></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-Buffers.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-Shaping.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>
-<p>See <a class="link" href="harfbuzz-Shaping.html#hb-shape" title="hb_shape ()"><code class="function">hb_shape()</code></a> for details. If <em class="parameter"><code>shaper_list</code></em>
- is not <code class="literal">NULL</code>, the specified
-shapers will be used in the given order, otherwise the default shapers list
-will be used.</p>
-<div class="refsect3">
-<a name="hb-shape-full.parameters"></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>an <a class="link" href="harfbuzz-hb-font.html#hb-font-t"><span class="type">hb_font_t</span></a> to use for shaping</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>buffer</p></td>
-<td class="parameter_description"><p>an <a class="link" href="harfbuzz-Buffers.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> to shape</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>features</p></td>
-<td class="parameter_description"><p> an array of user
-specified <a class="link" href="harfbuzz-Shaping.html#hb-feature-t"><span class="type">hb_feature_t</span></a> or <code class="literal">NULL</code>. </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][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
-</tr>
-<tr>
-<td class="parameter_name"><p>num_features</p></td>
-<td class="parameter_description"><p>the length of <em class="parameter"><code>features</code></em>
-array</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>shaper_list</p></td>
-<td class="parameter_description"><p> a <code class="literal">NULL</code>-terminated
-array of shapers to use or <code class="literal">NULL</code>. </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][<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="hb-shape-full.returns"></a><h4>Returns</h4>
-<p> <code class="literal">FALSE</code> if all shapers failed, <code class="literal">TRUE</code> otherwise</p>
-</div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></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>
-<p>Retrieves the list of shapers supported by HarfBuzz.</p>
-<div class="refsect3">
-<a name="hb-shape-list-shapers.returns"></a><h4>Returns</h4>
-<p> an array of
-constant strings. </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> zero-terminated=1]</span></p>
-</div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
-</div>
-</div>
-<div class="refsect1">
-<a name="harfbuzz-Shaping.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>
-</div>
-</div>
-</div>
-<div class="footer">
-<hr>Generated by GTK-Doc V1.24.1</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/html/harfbuzz-hb-gobject.html b/docs/html/harfbuzz-hb-gobject.html
deleted file mode 100644 (file)
index 6dfcd08..0000000
+++ /dev/null
@@ -1,651 +0,0 @@
-<!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: HarfBuzz Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="HarfBuzz Manual">
-<link rel="up" href="ch07.html" title="Harfbuzz API">
-<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.24.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="ch07.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.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">GType</span>
-</td>
-<td class="function_name">
-<a class="link" href="harfbuzz-hb-gobject.html#hb-gobject-blob-get-type" title="hb_gobject_blob_get_type ()">hb_gobject_blob_get_type</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">GType</span>
-</td>
-<td class="function_name">
-<a class="link" href="harfbuzz-hb-gobject.html#hb-gobject-buffer-content-type-get-type" title="hb_gobject_buffer_content_type_get_type ()">hb_gobject_buffer_content_type_get_type</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">GType</span>
-</td>
-<td class="function_name">
-<a class="link" href="harfbuzz-hb-gobject.html#hb-gobject-buffer-flags-get-type" title="hb_gobject_buffer_flags_get_type ()">hb_gobject_buffer_flags_get_type</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">GType</span>
-</td>
-<td class="function_name">
-<a class="link" href="harfbuzz-hb-gobject.html#hb-gobject-buffer-get-type" title="hb_gobject_buffer_get_type ()">hb_gobject_buffer_get_type</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">GType</span>
-</td>
-<td class="function_name">
-<a class="link" href="harfbuzz-hb-gobject.html#hb-gobject-buffer-serialize-flags-get-type" title="hb_gobject_buffer_serialize_flags_get_type ()">hb_gobject_buffer_serialize_flags_get_type</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">GType</span>
-</td>
-<td class="function_name">
-<a class="link" href="harfbuzz-hb-gobject.html#hb-gobject-buffer-serialize-format-get-type" title="hb_gobject_buffer_serialize_format_get_type ()">hb_gobject_buffer_serialize_format_get_type</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">GType</span>
-</td>
-<td class="function_name">
-<a class="link" href="harfbuzz-hb-gobject.html#hb-gobject-direction-get-type" title="hb_gobject_direction_get_type ()">hb_gobject_direction_get_type</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">GType</span>
-</td>
-<td class="function_name">
-<a class="link" href="harfbuzz-hb-gobject.html#hb-gobject-face-get-type" title="hb_gobject_face_get_type ()">hb_gobject_face_get_type</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">GType</span>
-</td>
-<td class="function_name">
-<a class="link" href="harfbuzz-hb-gobject.html#hb-gobject-font-funcs-get-type" title="hb_gobject_font_funcs_get_type ()">hb_gobject_font_funcs_get_type</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">GType</span>
-</td>
-<td class="function_name">
-<a class="link" href="harfbuzz-hb-gobject.html#hb-gobject-font-get-type" title="hb_gobject_font_get_type ()">hb_gobject_font_get_type</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">GType</span>
-</td>
-<td class="function_name">
-<a class="link" href="harfbuzz-hb-gobject.html#hb-gobject-memory-mode-get-type" title="hb_gobject_memory_mode_get_type ()">hb_gobject_memory_mode_get_type</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">GType</span>
-</td>
-<td class="function_name">
-<a class="link" href="harfbuzz-hb-gobject.html#hb-gobject-ot-layout-glyph-class-get-type" title="hb_gobject_ot_layout_glyph_class_get_type ()">hb_gobject_ot_layout_glyph_class_get_type</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">GType</span>
-</td>
-<td class="function_name">
-<a class="link" href="harfbuzz-hb-gobject.html#hb-gobject-script-get-type" title="hb_gobject_script_get_type ()">hb_gobject_script_get_type</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">GType</span>
-</td>
-<td class="function_name">
-<a class="link" href="harfbuzz-hb-gobject.html#hb-gobject-shape-plan-get-type" title="hb_gobject_shape_plan_get_type ()">hb_gobject_shape_plan_get_type</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">GType</span>
-</td>
-<td class="function_name">
-<a class="link" href="harfbuzz-hb-gobject.html#hb-gobject-unicode-combining-class-get-type" title="hb_gobject_unicode_combining_class_get_type ()">hb_gobject_unicode_combining_class_get_type</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">GType</span>
-</td>
-<td class="function_name">
-<a class="link" href="harfbuzz-hb-gobject.html#hb-gobject-unicode-funcs-get-type" title="hb_gobject_unicode_funcs_get_type ()">hb_gobject_unicode_funcs_get_type</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">GType</span>
-</td>
-<td class="function_name">
-<a class="link" href="harfbuzz-hb-gobject.html#hb-gobject-unicode-general-category-get-type" title="hb_gobject_unicode_general_category_get_type ()">hb_gobject_unicode_general_category_get_type</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">GType</span>
-</td>
-<td class="function_name">
-<a class="link" href="harfbuzz-hb-gobject.html#hb-gobject-buffer-cluster-level-get-type" title="hb_gobject_buffer_cluster_level_get_type ()">hb_gobject_buffer_cluster_level_get_type</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">GType</span>
-</td>
-<td class="function_name">
-<a class="link" href="harfbuzz-hb-gobject.html#hb-gobject-feature-get-type" title="hb_gobject_feature_get_type ()">hb_gobject_feature_get_type</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">GType</span>
-</td>
-<td class="function_name">
-<a class="link" href="harfbuzz-hb-gobject.html#hb-gobject-glyph-info-get-type" title="hb_gobject_glyph_info_get_type ()">hb_gobject_glyph_info_get_type</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">GType</span>
-</td>
-<td class="function_name">
-<a class="link" href="harfbuzz-hb-gobject.html#hb-gobject-glyph-position-get-type" title="hb_gobject_glyph_position_get_type ()">hb_gobject_glyph_position_get_type</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">GType</span>
-</td>
-<td class="function_name">
-<a class="link" href="harfbuzz-hb-gobject.html#hb-gobject-segment-properties-get-type" title="hb_gobject_segment_properties_get_type ()">hb_gobject_segment_properties_get_type</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">GType</span>
-</td>
-<td class="function_name">
-<a class="link" href="harfbuzz-hb-gobject.html#hb-gobject-set-get-type" title="hb_gobject_set_get_type ()">hb_gobject_set_get_type</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">GType</span>
-</td>
-<td class="function_name">
-<a class="link" href="harfbuzz-hb-gobject.html#hb-gobject-user-data-key-get-type" title="hb_gobject_user_data_key_get_type ()">hb_gobject_user_data_key_get_type</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect1">
-<a name="harfbuzz-hb-gobject.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-gobject.html#HB-GOBJECT-TYPE-BLOB:CAPS" title="HB_GOBJECT_TYPE_BLOB">HB_GOBJECT_TYPE_BLOB</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="harfbuzz-hb-gobject.html#HB-GOBJECT-TYPE-BUFFER:CAPS" title="HB_GOBJECT_TYPE_BUFFER">HB_GOBJECT_TYPE_BUFFER</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="harfbuzz-hb-gobject.html#HB-GOBJECT-TYPE-BUFFER-CONTENT-TYPE:CAPS" title="HB_GOBJECT_TYPE_BUFFER_CONTENT_TYPE">HB_GOBJECT_TYPE_BUFFER_CONTENT_TYPE</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="harfbuzz-hb-gobject.html#HB-GOBJECT-TYPE-BUFFER-FLAGS:CAPS" title="HB_GOBJECT_TYPE_BUFFER_FLAGS">HB_GOBJECT_TYPE_BUFFER_FLAGS</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="harfbuzz-hb-gobject.html#HB-GOBJECT-TYPE-BUFFER-SERIALIZE-FLAGS:CAPS" title="HB_GOBJECT_TYPE_BUFFER_SERIALIZE_FLAGS">HB_GOBJECT_TYPE_BUFFER_SERIALIZE_FLAGS</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="harfbuzz-hb-gobject.html#HB-GOBJECT-TYPE-BUFFER-SERIALIZE-FORMAT:CAPS" title="HB_GOBJECT_TYPE_BUFFER_SERIALIZE_FORMAT">HB_GOBJECT_TYPE_BUFFER_SERIALIZE_FORMAT</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="harfbuzz-hb-gobject.html#HB-GOBJECT-TYPE-DIRECTION:CAPS" title="HB_GOBJECT_TYPE_DIRECTION">HB_GOBJECT_TYPE_DIRECTION</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="harfbuzz-hb-gobject.html#HB-GOBJECT-TYPE-FACE:CAPS" title="HB_GOBJECT_TYPE_FACE">HB_GOBJECT_TYPE_FACE</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="harfbuzz-hb-gobject.html#HB-GOBJECT-TYPE-FONT:CAPS" title="HB_GOBJECT_TYPE_FONT">HB_GOBJECT_TYPE_FONT</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="harfbuzz-hb-gobject.html#HB-GOBJECT-TYPE-FONT-FUNCS:CAPS" title="HB_GOBJECT_TYPE_FONT_FUNCS">HB_GOBJECT_TYPE_FONT_FUNCS</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="harfbuzz-hb-gobject.html#HB-GOBJECT-TYPE-MEMORY-MODE:CAPS" title="HB_GOBJECT_TYPE_MEMORY_MODE">HB_GOBJECT_TYPE_MEMORY_MODE</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="harfbuzz-hb-gobject.html#HB-GOBJECT-TYPE-OT-LAYOUT-GLYPH-CLASS:CAPS" title="HB_GOBJECT_TYPE_OT_LAYOUT_GLYPH_CLASS">HB_GOBJECT_TYPE_OT_LAYOUT_GLYPH_CLASS</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="harfbuzz-hb-gobject.html#HB-GOBJECT-TYPE-SCRIPT:CAPS" title="HB_GOBJECT_TYPE_SCRIPT">HB_GOBJECT_TYPE_SCRIPT</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="harfbuzz-hb-gobject.html#HB-GOBJECT-TYPE-SHAPE-PLAN:CAPS" title="HB_GOBJECT_TYPE_SHAPE_PLAN">HB_GOBJECT_TYPE_SHAPE_PLAN</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="harfbuzz-hb-gobject.html#HB-GOBJECT-TYPE-UNICODE-COMBINING-CLASS:CAPS" title="HB_GOBJECT_TYPE_UNICODE_COMBINING_CLASS">HB_GOBJECT_TYPE_UNICODE_COMBINING_CLASS</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="harfbuzz-hb-gobject.html#HB-GOBJECT-TYPE-UNICODE-FUNCS:CAPS" title="HB_GOBJECT_TYPE_UNICODE_FUNCS">HB_GOBJECT_TYPE_UNICODE_FUNCS</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="harfbuzz-hb-gobject.html#HB-GOBJECT-TYPE-UNICODE-GENERAL-CATEGORY:CAPS" title="HB_GOBJECT_TYPE_UNICODE_GENERAL_CATEGORY">HB_GOBJECT_TYPE_UNICODE_GENERAL_CATEGORY</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="harfbuzz-hb-gobject.html#HB-GOBJECT-TYPE-BUFFER-CLUSTER-LEVEL:CAPS" title="HB_GOBJECT_TYPE_BUFFER_CLUSTER_LEVEL">HB_GOBJECT_TYPE_BUFFER_CLUSTER_LEVEL</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="harfbuzz-hb-gobject.html#HB-GOBJECT-TYPE-FEATURE:CAPS" title="HB_GOBJECT_TYPE_FEATURE">HB_GOBJECT_TYPE_FEATURE</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="harfbuzz-hb-gobject.html#HB-GOBJECT-TYPE-GLYPH-INFO:CAPS" title="HB_GOBJECT_TYPE_GLYPH_INFO">HB_GOBJECT_TYPE_GLYPH_INFO</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="harfbuzz-hb-gobject.html#HB-GOBJECT-TYPE-GLYPH-POSITION:CAPS" title="HB_GOBJECT_TYPE_GLYPH_POSITION">HB_GOBJECT_TYPE_GLYPH_POSITION</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="harfbuzz-hb-gobject.html#HB-GOBJECT-TYPE-SEGMENT-PROPERTIES:CAPS" title="HB_GOBJECT_TYPE_SEGMENT_PROPERTIES">HB_GOBJECT_TYPE_SEGMENT_PROPERTIES</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="harfbuzz-hb-gobject.html#HB-GOBJECT-TYPE-SET:CAPS" title="HB_GOBJECT_TYPE_SET">HB_GOBJECT_TYPE_SET</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="harfbuzz-hb-gobject.html#HB-GOBJECT-TYPE-USER-DATA-KEY:CAPS" title="HB_GOBJECT_TYPE_USER_DATA_KEY">HB_GOBJECT_TYPE_USER_DATA_KEY</a></td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect1">
-<a name="harfbuzz-hb-gobject.description"></a><h2>Description</h2>
-</div>
-<div class="refsect1">
-<a name="harfbuzz-hb-gobject.functions_details"></a><h2>Functions</h2>
-<div class="refsect2">
-<a name="hb-gobject-blob-get-type"></a><h3>hb_gobject_blob_get_type ()</h3>
-<pre class="programlisting"><span class="returnvalue">GType</span>
-hb_gobject_blob_get_type (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="hb-gobject-buffer-content-type-get-type"></a><h3>hb_gobject_buffer_content_type_get_type ()</h3>
-<pre class="programlisting"><span class="returnvalue">GType</span>
-hb_gobject_buffer_content_type_get_type
-                               (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="hb-gobject-buffer-flags-get-type"></a><h3>hb_gobject_buffer_flags_get_type ()</h3>
-<pre class="programlisting"><span class="returnvalue">GType</span>
-hb_gobject_buffer_flags_get_type (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="hb-gobject-buffer-get-type"></a><h3>hb_gobject_buffer_get_type ()</h3>
-<pre class="programlisting"><span class="returnvalue">GType</span>
-hb_gobject_buffer_get_type (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="hb-gobject-buffer-serialize-flags-get-type"></a><h3>hb_gobject_buffer_serialize_flags_get_type ()</h3>
-<pre class="programlisting"><span class="returnvalue">GType</span>
-hb_gobject_buffer_serialize_flags_get_type
-                               (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="hb-gobject-buffer-serialize-format-get-type"></a><h3>hb_gobject_buffer_serialize_format_get_type ()</h3>
-<pre class="programlisting"><span class="returnvalue">GType</span>
-hb_gobject_buffer_serialize_format_get_type
-                               (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="hb-gobject-direction-get-type"></a><h3>hb_gobject_direction_get_type ()</h3>
-<pre class="programlisting"><span class="returnvalue">GType</span>
-hb_gobject_direction_get_type (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="hb-gobject-face-get-type"></a><h3>hb_gobject_face_get_type ()</h3>
-<pre class="programlisting"><span class="returnvalue">GType</span>
-hb_gobject_face_get_type (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="hb-gobject-font-funcs-get-type"></a><h3>hb_gobject_font_funcs_get_type ()</h3>
-<pre class="programlisting"><span class="returnvalue">GType</span>
-hb_gobject_font_funcs_get_type (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="hb-gobject-font-get-type"></a><h3>hb_gobject_font_get_type ()</h3>
-<pre class="programlisting"><span class="returnvalue">GType</span>
-hb_gobject_font_get_type (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="hb-gobject-memory-mode-get-type"></a><h3>hb_gobject_memory_mode_get_type ()</h3>
-<pre class="programlisting"><span class="returnvalue">GType</span>
-hb_gobject_memory_mode_get_type (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="hb-gobject-ot-layout-glyph-class-get-type"></a><h3>hb_gobject_ot_layout_glyph_class_get_type ()</h3>
-<pre class="programlisting"><span class="returnvalue">GType</span>
-hb_gobject_ot_layout_glyph_class_get_type
-                               (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="hb-gobject-script-get-type"></a><h3>hb_gobject_script_get_type ()</h3>
-<pre class="programlisting"><span class="returnvalue">GType</span>
-hb_gobject_script_get_type (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="hb-gobject-shape-plan-get-type"></a><h3>hb_gobject_shape_plan_get_type ()</h3>
-<pre class="programlisting"><span class="returnvalue">GType</span>
-hb_gobject_shape_plan_get_type (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="hb-gobject-unicode-combining-class-get-type"></a><h3>hb_gobject_unicode_combining_class_get_type ()</h3>
-<pre class="programlisting"><span class="returnvalue">GType</span>
-hb_gobject_unicode_combining_class_get_type
-                               (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="hb-gobject-unicode-funcs-get-type"></a><h3>hb_gobject_unicode_funcs_get_type ()</h3>
-<pre class="programlisting"><span class="returnvalue">GType</span>
-hb_gobject_unicode_funcs_get_type (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="hb-gobject-unicode-general-category-get-type"></a><h3>hb_gobject_unicode_general_category_get_type ()</h3>
-<pre class="programlisting"><span class="returnvalue">GType</span>
-hb_gobject_unicode_general_category_get_type
-                               (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="hb-gobject-buffer-cluster-level-get-type"></a><h3>hb_gobject_buffer_cluster_level_get_type ()</h3>
-<pre class="programlisting"><span class="returnvalue">GType</span>
-hb_gobject_buffer_cluster_level_get_type
-                               (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="hb-gobject-feature-get-type"></a><h3>hb_gobject_feature_get_type ()</h3>
-<pre class="programlisting"><span class="returnvalue">GType</span>
-hb_gobject_feature_get_type (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="hb-gobject-glyph-info-get-type"></a><h3>hb_gobject_glyph_info_get_type ()</h3>
-<pre class="programlisting"><span class="returnvalue">GType</span>
-hb_gobject_glyph_info_get_type (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="hb-gobject-glyph-position-get-type"></a><h3>hb_gobject_glyph_position_get_type ()</h3>
-<pre class="programlisting"><span class="returnvalue">GType</span>
-hb_gobject_glyph_position_get_type (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="hb-gobject-segment-properties-get-type"></a><h3>hb_gobject_segment_properties_get_type ()</h3>
-<pre class="programlisting"><span class="returnvalue">GType</span>
-hb_gobject_segment_properties_get_type
-                               (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="hb-gobject-set-get-type"></a><h3>hb_gobject_set_get_type ()</h3>
-<pre class="programlisting"><span class="returnvalue">GType</span>
-hb_gobject_set_get_type (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="hb-gobject-user-data-key-get-type"></a><h3>hb_gobject_user_data_key_get_type ()</h3>
-<pre class="programlisting"><span class="returnvalue">GType</span>
-hb_gobject_user_data_key_get_type (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-</div>
-</div>
-<div class="refsect1">
-<a name="harfbuzz-hb-gobject.other_details"></a><h2>Types and Values</h2>
-<div class="refsect2">
-<a name="HB-GOBJECT-TYPE-BLOB:CAPS"></a><h3>HB_GOBJECT_TYPE_BLOB</h3>
-<pre class="programlisting">#define HB_GOBJECT_TYPE_BLOB (hb_gobject_blob_get_type ())
-</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="HB-GOBJECT-TYPE-BUFFER:CAPS"></a><h3>HB_GOBJECT_TYPE_BUFFER</h3>
-<pre class="programlisting">#define HB_GOBJECT_TYPE_BUFFER (hb_gobject_buffer_get_type ())
-</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="HB-GOBJECT-TYPE-BUFFER-CONTENT-TYPE:CAPS"></a><h3>HB_GOBJECT_TYPE_BUFFER_CONTENT_TYPE</h3>
-<pre class="programlisting">#define HB_GOBJECT_TYPE_BUFFER_CONTENT_TYPE (hb_gobject_buffer_content_type_get_type ())
-</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="HB-GOBJECT-TYPE-BUFFER-FLAGS:CAPS"></a><h3>HB_GOBJECT_TYPE_BUFFER_FLAGS</h3>
-<pre class="programlisting">#define HB_GOBJECT_TYPE_BUFFER_FLAGS (hb_gobject_buffer_flags_get_type ())
-</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="HB-GOBJECT-TYPE-BUFFER-SERIALIZE-FLAGS:CAPS"></a><h3>HB_GOBJECT_TYPE_BUFFER_SERIALIZE_FLAGS</h3>
-<pre class="programlisting">#define HB_GOBJECT_TYPE_BUFFER_SERIALIZE_FLAGS (hb_gobject_buffer_serialize_flags_get_type ())
-</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="HB-GOBJECT-TYPE-BUFFER-SERIALIZE-FORMAT:CAPS"></a><h3>HB_GOBJECT_TYPE_BUFFER_SERIALIZE_FORMAT</h3>
-<pre class="programlisting">#define HB_GOBJECT_TYPE_BUFFER_SERIALIZE_FORMAT (hb_gobject_buffer_serialize_format_get_type ())
-</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="HB-GOBJECT-TYPE-DIRECTION:CAPS"></a><h3>HB_GOBJECT_TYPE_DIRECTION</h3>
-<pre class="programlisting">#define HB_GOBJECT_TYPE_DIRECTION (hb_gobject_direction_get_type ())
-</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="HB-GOBJECT-TYPE-FACE:CAPS"></a><h3>HB_GOBJECT_TYPE_FACE</h3>
-<pre class="programlisting">#define HB_GOBJECT_TYPE_FACE (hb_gobject_face_get_type ())
-</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="HB-GOBJECT-TYPE-FONT:CAPS"></a><h3>HB_GOBJECT_TYPE_FONT</h3>
-<pre class="programlisting">#define HB_GOBJECT_TYPE_FONT (hb_gobject_font_get_type ())
-</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="HB-GOBJECT-TYPE-FONT-FUNCS:CAPS"></a><h3>HB_GOBJECT_TYPE_FONT_FUNCS</h3>
-<pre class="programlisting">#define HB_GOBJECT_TYPE_FONT_FUNCS (hb_gobject_font_funcs_get_type ())
-</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="HB-GOBJECT-TYPE-MEMORY-MODE:CAPS"></a><h3>HB_GOBJECT_TYPE_MEMORY_MODE</h3>
-<pre class="programlisting">#define HB_GOBJECT_TYPE_MEMORY_MODE (hb_gobject_memory_mode_get_type ())
-</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="HB-GOBJECT-TYPE-OT-LAYOUT-GLYPH-CLASS:CAPS"></a><h3>HB_GOBJECT_TYPE_OT_LAYOUT_GLYPH_CLASS</h3>
-<pre class="programlisting">#define HB_GOBJECT_TYPE_OT_LAYOUT_GLYPH_CLASS (hb_gobject_ot_layout_glyph_class_get_type ())
-</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="HB-GOBJECT-TYPE-SCRIPT:CAPS"></a><h3>HB_GOBJECT_TYPE_SCRIPT</h3>
-<pre class="programlisting">#define HB_GOBJECT_TYPE_SCRIPT (hb_gobject_script_get_type ())
-</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="HB-GOBJECT-TYPE-SHAPE-PLAN:CAPS"></a><h3>HB_GOBJECT_TYPE_SHAPE_PLAN</h3>
-<pre class="programlisting">#define HB_GOBJECT_TYPE_SHAPE_PLAN (hb_gobject_shape_plan_get_type ())
-</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="HB-GOBJECT-TYPE-UNICODE-COMBINING-CLASS:CAPS"></a><h3>HB_GOBJECT_TYPE_UNICODE_COMBINING_CLASS</h3>
-<pre class="programlisting">#define HB_GOBJECT_TYPE_UNICODE_COMBINING_CLASS (hb_gobject_unicode_combining_class_get_type ())
-</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="HB-GOBJECT-TYPE-UNICODE-FUNCS:CAPS"></a><h3>HB_GOBJECT_TYPE_UNICODE_FUNCS</h3>
-<pre class="programlisting">#define HB_GOBJECT_TYPE_UNICODE_FUNCS (hb_gobject_unicode_funcs_get_type ())
-</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="HB-GOBJECT-TYPE-UNICODE-GENERAL-CATEGORY:CAPS"></a><h3>HB_GOBJECT_TYPE_UNICODE_GENERAL_CATEGORY</h3>
-<pre class="programlisting">#define HB_GOBJECT_TYPE_UNICODE_GENERAL_CATEGORY (hb_gobject_unicode_general_category_get_type ())
-</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="HB-GOBJECT-TYPE-BUFFER-CLUSTER-LEVEL:CAPS"></a><h3>HB_GOBJECT_TYPE_BUFFER_CLUSTER_LEVEL</h3>
-<pre class="programlisting">#define HB_GOBJECT_TYPE_BUFFER_CLUSTER_LEVEL (hb_gobject_buffer_cluster_level_get_type ())
-</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="HB-GOBJECT-TYPE-FEATURE:CAPS"></a><h3>HB_GOBJECT_TYPE_FEATURE</h3>
-<pre class="programlisting">#define HB_GOBJECT_TYPE_FEATURE (hb_gobject_feature_get_type ())
-</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="HB-GOBJECT-TYPE-GLYPH-INFO:CAPS"></a><h3>HB_GOBJECT_TYPE_GLYPH_INFO</h3>
-<pre class="programlisting">#define HB_GOBJECT_TYPE_GLYPH_INFO (hb_gobject_glyph_info_get_type ())
-</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="HB-GOBJECT-TYPE-GLYPH-POSITION:CAPS"></a><h3>HB_GOBJECT_TYPE_GLYPH_POSITION</h3>
-<pre class="programlisting">#define HB_GOBJECT_TYPE_GLYPH_POSITION (hb_gobject_glyph_position_get_type ())
-</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="HB-GOBJECT-TYPE-SEGMENT-PROPERTIES:CAPS"></a><h3>HB_GOBJECT_TYPE_SEGMENT_PROPERTIES</h3>
-<pre class="programlisting">#define HB_GOBJECT_TYPE_SEGMENT_PROPERTIES (hb_gobject_segment_properties_get_type ())
-</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="HB-GOBJECT-TYPE-SET:CAPS"></a><h3>HB_GOBJECT_TYPE_SET</h3>
-<pre class="programlisting">#define HB_GOBJECT_TYPE_SET (hb_gobject_set_get_type ())
-</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="HB-GOBJECT-TYPE-USER-DATA-KEY:CAPS"></a><h3>HB_GOBJECT_TYPE_USER_DATA_KEY</h3>
-<pre class="programlisting">#define HB_GOBJECT_TYPE_USER_DATA_KEY (hb_gobject_user_data_key_get_type ())
-</pre>
-</div>
-</div>
-</div>
-<div class="footer">
-<hr>Generated by GTK-Doc V1.24.1</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/html/harfbuzz-hb-ot-font.html b/docs/html/harfbuzz-hb-ot-font.html
deleted file mode 100644 (file)
index 289d871..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-<!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-font: HarfBuzz Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="HarfBuzz Manual">
-<link rel="up" href="ch07.html" title="Harfbuzz API">
-<link rel="prev" href="harfbuzz-hb-ot-tag.html" title="hb-ot-tag">
-<link rel="next" href="harfbuzz-hb-ot-shape.html" title="hb-ot-shape">
-<meta name="generator" content="GTK-Doc V1.24.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-font.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="ch07.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-ot-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-ot-font"></a><div class="titlepage"></div>
-<div class="refnamediv"><table width="100%"><tr>
-<td valign="top">
-<h2><span class="refentrytitle"><a name="harfbuzz-hb-ot-font.top_of_page"></a>hb-ot-font</span></h2>
-<p>hb-ot-font</p>
-</td>
-<td class="gallery_image" valign="top" align="right"></td>
-</tr></table></div>
-<div class="refsect1">
-<a name="harfbuzz-hb-ot-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-ot-font.html#hb-ot-font-set-funcs" title="hb_ot_font_set_funcs ()">hb_ot_font_set_funcs</a> <span class="c_punctuation">()</span>
-</td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect1">
-<a name="harfbuzz-hb-ot-font.description"></a><h2>Description</h2>
-</div>
-<div class="refsect1">
-<a name="harfbuzz-hb-ot-font.functions_details"></a><h2>Functions</h2>
-<div class="refsect2">
-<a name="hb-ot-font-set-funcs"></a><h3>hb_ot_font_set_funcs ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-hb_ot_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 class="since">Since: <a class="link" href="api-index-0-9-28.html#api-index-0.9.28">0.9.28</a></p>
-</div>
-</div>
-<div class="refsect1">
-<a name="harfbuzz-hb-ot-font.other_details"></a><h2>Types and Values</h2>
-</div>
-</div>
-<div class="footer">
-<hr>Generated by GTK-Doc V1.24.1</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/html/harfbuzz-hb-ot-shape.html b/docs/html/harfbuzz-hb-ot-shape.html
deleted file mode 100644 (file)
index fa22099..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-<!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-shape: HarfBuzz Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="HarfBuzz Manual">
-<link rel="up" href="ch07.html" title="Harfbuzz API">
-<link rel="prev" href="harfbuzz-hb-ot-font.html" title="hb-ot-font">
-<link rel="next" href="harfbuzz-hb-shape-plan.html" title="hb-shape-plan">
-<meta name="generator" content="GTK-Doc V1.24.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-shape.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="ch07.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="harfbuzz-hb-ot-font.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-shape"></a><div class="titlepage"></div>
-<div class="refnamediv"><table width="100%"><tr>
-<td valign="top">
-<h2><span class="refentrytitle"><a name="harfbuzz-hb-ot-shape.top_of_page"></a>hb-ot-shape</span></h2>
-<p>hb-ot-shape</p>
-</td>
-<td class="gallery_image" valign="top" align="right"></td>
-</tr></table></div>
-<div class="refsect1">
-<a name="harfbuzz-hb-ot-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">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="harfbuzz-hb-ot-shape.html#hb-ot-shape-glyphs-closure" title="hb_ot_shape_glyphs_closure ()">hb_ot_shape_glyphs_closure</a> <span class="c_punctuation">()</span>
-</td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect1">
-<a name="harfbuzz-hb-ot-shape.description"></a><h2>Description</h2>
-</div>
-<div class="refsect1">
-<a name="harfbuzz-hb-ot-shape.functions_details"></a><h2>Functions</h2>
-<div class="refsect2">
-<a name="hb-ot-shape-glyphs-closure"></a><h3>hb_ot_shape_glyphs_closure ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-hb_ot_shape_glyphs_closure (<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-Buffers.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-Shaping.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><a class="link" href="harfbuzz-hb-set.html#hb-set-t"><span class="type">hb_set_t</span></a> *glyphs</code></em>);</pre>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
-</div>
-</div>
-<div class="refsect1">
-<a name="harfbuzz-hb-ot-shape.other_details"></a><h2>Types and Values</h2>
-</div>
-</div>
-<div class="footer">
-<hr>Generated by GTK-Doc V1.24.1</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/html/harfbuzz.devhelp2 b/docs/html/harfbuzz.devhelp2
deleted file mode 100644 (file)
index 15ffc29..0000000
+++ /dev/null
@@ -1,771 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="no"?>
-<book xmlns="http://www.devhelp.net/book" title="HarfBuzz Manual" link="index.html" author="" name="harfbuzz" version="2" language="c">
-  <chapters>
-    <sub name="User's manual" link="pt01.html">
-      <sub name="What is Harfbuzz?" link="what-is-harfbuzz.html">
-        <sub name="Why do I need it?" link="what-is-harfbuzz.html#why-do-i-need-it"/>
-        <sub name="Why is it called Harfbuzz?" link="why-is-it-called-harfbuzz.html"/>
-      </sub>
-      <sub name="Install Harfbuzz" link="install-harfbuzz.html">
-        <sub name="Download" link="install-harfbuzz.html#download"/>
-        <sub name="Building" link="building.html"/>
-      </sub>
-      <sub name="Hello, Harfbuzz" link="hello-harfbuzz.html">
-        <sub name="What Harfbuzz doesn't do" link="hello-harfbuzz.html#what-harfbuzz-doesnt-do"/>
-      </sub>
-      <sub name="Buffers, language, script and direction" link="buffers-language-script-and-direction.html">
-        <sub name="Creating and destroying buffers" link="buffers-language-script-and-direction.html#creating-and-destroying-buffers"/>
-        <sub name="Adding text to the buffer" link="adding-text-to-the-buffer.html"/>
-        <sub name="Setting buffer properties" link="setting-buffer-properties.html"/>
-        <sub name="What about the other scripts?" link="what-about-the-other-scripts.html"/>
-        <sub name="Customizing Unicode functions" link="customizing-unicode-functions.html"/>
-      </sub>
-      <sub name="Fonts and faces" link="fonts-and-faces.html">
-        <sub name="Using FreeType" link="fonts-and-faces.html#using-freetype"/>
-        <sub name="Using Harfbuzz's native OpenType implementation" link="using-harfbuzzs-native-opentype-implementation.html"/>
-        <sub name="Using your own font functions" link="using-your-own-font-functions.html"/>
-      </sub>
-      <sub name="Shaping and shape plans" link="shaping-and-shape-plans.html">
-        <sub name="OpenType features" link="shaping-and-shape-plans.html#opentype-features"/>
-        <sub name="Plans and caching" link="plans-and-caching.html"/>
-      </sub>
-      <sub name="Glyph information" link="pt01.html#glyph-information"/>
-    </sub>
-    <sub name="Reference manual" link="pt02.html">
-      <sub name="Harfbuzz API" link="ch07.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="Buffers" link="harfbuzz-Buffers.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="Shaping" link="harfbuzz-Shaping.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-ot-font" link="harfbuzz-hb-ot-font.html"/>
-        <sub name="hb-ot-shape" link="harfbuzz-hb-ot-shape.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 new symbols in 0.9.2" link="api-index-0-9-2.html"/>
-      <sub name="Index of new symbols in 0.9.5" link="api-index-0-9-5.html"/>
-      <sub name="Index of new symbols in 0.9.7" link="api-index-0-9-7.html"/>
-      <sub name="Index of new symbols in 0.9.8" link="api-index-0-9-8.html"/>
-      <sub name="Index of new symbols in 0.9.10" link="api-index-0-9-10.html"/>
-      <sub name="Index of new symbols in 0.9.11" link="api-index-0-9-11.html"/>
-      <sub name="Index of new symbols in 0.9.20" link="api-index-0-9-20.html"/>
-      <sub name="Index of new symbols in 0.9.22" link="api-index-0-9-22.html"/>
-      <sub name="Index of new symbols in 0.9.28" link="api-index-0-9-28.html"/>
-      <sub name="Index of new symbols in 0.9.30" link="api-index-0-9-30.html"/>
-      <sub name="Index of new symbols in 0.9.31" link="api-index-0-9-31.html"/>
-      <sub name="Index of new symbols in 0.9.38" link="api-index-0-9-38.html"/>
-      <sub name="Index of new symbols in 0.9.39" link="api-index-0-9-39.html"/>
-      <sub name="Index of new symbols in 0.9.41" link="api-index-0-9-41.html"/>
-      <sub name="Index of new symbols in 0.9.42" link="api-index-0-9-42.html"/>
-      <sub name="Index of new symbols in 1.0.5" link="api-index-1-0-5.html"/>
-      <sub name="Index of new symbols in 1.1.2" link="api-index-1-1-2.html"/>
-      <sub name="Index of new symbols in 1.1.3" link="api-index-1-1-3.html"/>
-      <sub name="Index of deprecated API" link="deprecated-api-index.html"/>
-      <sub name="Annotation Glossary" link="annotation-glossary.html"/>
-    </sub>
-  </chapters>
-  <functions>
-    <keyword type="function" name="hb_tag_from_string ()" link="harfbuzz-hb-common.html#hb-tag-from-string" since="0.9.2"/>
-    <keyword type="function" name="hb_tag_to_string ()" link="harfbuzz-hb-common.html#hb-tag-to-string" since="0.9.5"/>
-    <keyword type="function" name="hb_direction_from_string ()" link="harfbuzz-hb-common.html#hb-direction-from-string" since="0.9.2"/>
-    <keyword type="function" name="hb_direction_to_string ()" link="harfbuzz-hb-common.html#hb-direction-to-string" since="0.9.2"/>
-    <keyword type="function" name="hb_script_from_iso15924_tag ()" link="harfbuzz-hb-common.html#hb-script-from-iso15924-tag" since="0.9.2"/>
-    <keyword type="function" name="hb_script_from_string ()" link="harfbuzz-hb-common.html#hb-script-from-string" since="0.9.2"/>
-    <keyword type="function" name="hb_script_to_iso15924_tag ()" link="harfbuzz-hb-common.html#hb-script-to-iso15924-tag" since="0.9.2"/>
-    <keyword type="function" name="hb_script_get_horizontal_direction ()" link="harfbuzz-hb-common.html#hb-script-get-horizontal-direction" since="0.9.2"/>
-    <keyword type="function" name="hb_language_from_string ()" link="harfbuzz-hb-common.html#hb-language-from-string" since="0.9.2"/>
-    <keyword type="function" name="hb_language_to_string ()" link="harfbuzz-hb-common.html#hb-language-to-string" since="0.9.2"/>
-    <keyword type="function" name="hb_language_get_default ()" link="harfbuzz-hb-common.html#hb-language-get-default" since="0.9.2"/>
-    <keyword type="function" name="hb_destroy_func_t ()" link="harfbuzz-hb-common.html#hb-destroy-func-t"/>
-    <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="macro" name="HB_DIRECTION_REVERSE()" link="harfbuzz-hb-common.html#HB-DIRECTION-REVERSE:CAPS"/>
-    <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="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="typedef" name="hb_tag_t" link="harfbuzz-hb-common.html#hb-tag-t"/>
-    <keyword type="enum" name="enum hb_script_t" link="harfbuzz-hb-common.html#hb-script-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_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="macro" name="HB_TAG_MAX_SIGNED" link="harfbuzz-hb-common.html#HB-TAG-MAX-SIGNED:CAPS"/>
-    <keyword type="macro" name="HB_LANGUAGE_INVALID" link="harfbuzz-hb-common.html#HB-LANGUAGE-INVALID:CAPS"/>
-    <keyword type="function" name="hb_unicode_combining_class ()" link="harfbuzz-hb-unicode.html#hb-unicode-combining-class" since="0.9.2"/>
-    <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="0.9.2"/>
-    <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="0.9.2"/>
-    <keyword type="function" name="hb_unicode_decompose_compatibility ()" link="harfbuzz-hb-unicode.html#hb-unicode-decompose-compatibility" since="0.9.2"/>
-    <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" since="0.9.2"/>
-    <keyword type="function" name="hb_unicode_funcs_create ()" link="harfbuzz-hb-unicode.html#hb-unicode-funcs-create" since="0.9.2"/>
-    <keyword type="function" name="hb_unicode_funcs_destroy ()" link="harfbuzz-hb-unicode.html#hb-unicode-funcs-destroy" since="0.9.2"/>
-    <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="0.9.2"/>
-    <keyword type="function" name="hb_unicode_funcs_get_parent ()" link="harfbuzz-hb-unicode.html#hb-unicode-funcs-get-parent" since="0.9.2"/>
-    <keyword type="function" name="hb_unicode_funcs_get_user_data ()" link="harfbuzz-hb-unicode.html#hb-unicode-funcs-get-user-data" since="0.9.2"/>
-    <keyword type="function" name="hb_unicode_funcs_is_immutable ()" link="harfbuzz-hb-unicode.html#hb-unicode-funcs-is-immutable" since="0.9.2"/>
-    <keyword type="function" name="hb_unicode_funcs_make_immutable ()" link="harfbuzz-hb-unicode.html#hb-unicode-funcs-make-immutable" since="0.9.2"/>
-    <keyword type="function" name="hb_unicode_funcs_reference ()" link="harfbuzz-hb-unicode.html#hb-unicode-funcs-reference" since="0.9.2"/>
-    <keyword type="function" name="hb_unicode_funcs_set_combining_class_func ()" link="harfbuzz-hb-unicode.html#hb-unicode-funcs-set-combining-class-func" since="0.9.2"/>
-    <keyword type="function" name="hb_unicode_funcs_set_compose_func ()" link="harfbuzz-hb-unicode.html#hb-unicode-funcs-set-compose-func" since="0.9.2"/>
-    <keyword type="function" name="hb_unicode_funcs_set_decompose_compatibility_func ()" link="harfbuzz-hb-unicode.html#hb-unicode-funcs-set-decompose-compatibility-func" since="0.9.2"/>
-    <keyword type="function" name="hb_unicode_funcs_set_decompose_func ()" link="harfbuzz-hb-unicode.html#hb-unicode-funcs-set-decompose-func" since="0.9.2"/>
-    <keyword type="function" name="hb_unicode_funcs_set_eastasian_width_func ()" link="harfbuzz-hb-unicode.html#hb-unicode-funcs-set-eastasian-width-func" since="0.9.2"/>
-    <keyword type="function" name="hb_unicode_funcs_set_general_category_func ()" link="harfbuzz-hb-unicode.html#hb-unicode-funcs-set-general-category-func" since="0.9.2"/>
-    <keyword type="function" name="hb_unicode_funcs_set_mirroring_func ()" link="harfbuzz-hb-unicode.html#hb-unicode-funcs-set-mirroring-func" since="0.9.2"/>
-    <keyword type="function" name="hb_unicode_funcs_set_script_func ()" link="harfbuzz-hb-unicode.html#hb-unicode-funcs-set-script-func" since="0.9.2"/>
-    <keyword type="function" name="hb_unicode_funcs_set_user_data ()" link="harfbuzz-hb-unicode.html#hb-unicode-funcs-set-user-data" since="0.9.2"/>
-    <keyword type="function" name="hb_unicode_general_category ()" link="harfbuzz-hb-unicode.html#hb-unicode-general-category" since="0.9.2"/>
-    <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" since="0.9.2"/>
-    <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" since="0.9.2"/>
-    <keyword type="function" name="hb_unicode_script_func_t ()" link="harfbuzz-hb-unicode.html#hb-unicode-script-func-t"/>
-    <keyword type="macro" name="HB_UNICODE_MAX_DECOMPOSITION_LEN" link="harfbuzz-hb-unicode.html#HB-UNICODE-MAX-DECOMPOSITION-LEN:CAPS"/>
-    <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_create ()" link="harfbuzz-Buffers.html#hb-buffer-create" since="0.9.2"/>
-    <keyword type="function" name="hb_buffer_reference ()" link="harfbuzz-Buffers.html#hb-buffer-reference" since="0.9.2"/>
-    <keyword type="function" name="hb_buffer_get_empty ()" link="harfbuzz-Buffers.html#hb-buffer-get-empty" since="0.9.2"/>
-    <keyword type="function" name="hb_buffer_destroy ()" link="harfbuzz-Buffers.html#hb-buffer-destroy" since="0.9.2"/>
-    <keyword type="function" name="hb_buffer_reset ()" link="harfbuzz-Buffers.html#hb-buffer-reset" since="0.9.2"/>
-    <keyword type="function" name="hb_buffer_clear_contents ()" link="harfbuzz-Buffers.html#hb-buffer-clear-contents" since="0.9.11"/>
-    <keyword type="function" name="hb_buffer_pre_allocate ()" link="harfbuzz-Buffers.html#hb-buffer-pre-allocate" since="0.9.2"/>
-    <keyword type="function" name="hb_buffer_allocation_successful ()" link="harfbuzz-Buffers.html#hb-buffer-allocation-successful" since="0.9.2"/>
-    <keyword type="function" name="hb_buffer_add ()" link="harfbuzz-Buffers.html#hb-buffer-add" since="0.9.7"/>
-    <keyword type="function" name="hb_buffer_add_codepoints ()" link="harfbuzz-Buffers.html#hb-buffer-add-codepoints" since="0.9.31"/>
-    <keyword type="function" name="hb_buffer_add_utf32 ()" link="harfbuzz-Buffers.html#hb-buffer-add-utf32" since="0.9.2"/>
-    <keyword type="function" name="hb_buffer_add_utf16 ()" link="harfbuzz-Buffers.html#hb-buffer-add-utf16" since="0.9.2"/>
-    <keyword type="function" name="hb_buffer_add_utf8 ()" link="harfbuzz-Buffers.html#hb-buffer-add-utf8" since="0.9.2"/>
-    <keyword type="function" name="hb_buffer_add_latin1 ()" link="harfbuzz-Buffers.html#hb-buffer-add-latin1" since="0.9.39"/>
-    <keyword type="function" name="hb_buffer_set_content_type ()" link="harfbuzz-Buffers.html#hb-buffer-set-content-type" since="0.9.5"/>
-    <keyword type="function" name="hb_buffer_get_content_type ()" link="harfbuzz-Buffers.html#hb-buffer-get-content-type" since="0.9.5"/>
-    <keyword type="function" name="hb_buffer_set_direction ()" link="harfbuzz-Buffers.html#hb-buffer-set-direction" since="0.9.2"/>
-    <keyword type="function" name="hb_buffer_get_direction ()" link="harfbuzz-Buffers.html#hb-buffer-get-direction" since="0.9.2"/>
-    <keyword type="function" name="hb_buffer_set_script ()" link="harfbuzz-Buffers.html#hb-buffer-set-script" since="0.9.2"/>
-    <keyword type="function" name="hb_buffer_get_script ()" link="harfbuzz-Buffers.html#hb-buffer-get-script" since="0.9.2"/>
-    <keyword type="function" name="hb_buffer_set_language ()" link="harfbuzz-Buffers.html#hb-buffer-set-language" since="0.9.2"/>
-    <keyword type="function" name="hb_buffer_get_language ()" link="harfbuzz-Buffers.html#hb-buffer-get-language" since="0.9.2"/>
-    <keyword type="function" name="hb_buffer_set_flags ()" link="harfbuzz-Buffers.html#hb-buffer-set-flags" since="0.9.7"/>
-    <keyword type="function" name="hb_buffer_get_flags ()" link="harfbuzz-Buffers.html#hb-buffer-get-flags" since="0.9.7"/>
-    <keyword type="function" name="hb_buffer_set_cluster_level ()" link="harfbuzz-Buffers.html#hb-buffer-set-cluster-level" since="0.9.42"/>
-    <keyword type="function" name="hb_buffer_get_cluster_level ()" link="harfbuzz-Buffers.html#hb-buffer-get-cluster-level" since="0.9.42"/>
-    <keyword type="function" name="hb_buffer_set_length ()" link="harfbuzz-Buffers.html#hb-buffer-set-length" since="0.9.2"/>
-    <keyword type="function" name="hb_buffer_get_length ()" link="harfbuzz-Buffers.html#hb-buffer-get-length" since="0.9.2"/>
-    <keyword type="function" name="hb_buffer_set_segment_properties ()" link="harfbuzz-Buffers.html#hb-buffer-set-segment-properties" since="0.9.7"/>
-    <keyword type="function" name="hb_buffer_get_segment_properties ()" link="harfbuzz-Buffers.html#hb-buffer-get-segment-properties" since="0.9.7"/>
-    <keyword type="function" name="hb_buffer_guess_segment_properties ()" link="harfbuzz-Buffers.html#hb-buffer-guess-segment-properties" since="0.9.7"/>
-    <keyword type="function" name="hb_buffer_set_unicode_funcs ()" link="harfbuzz-Buffers.html#hb-buffer-set-unicode-funcs" since="0.9.2"/>
-    <keyword type="function" name="hb_buffer_get_unicode_funcs ()" link="harfbuzz-Buffers.html#hb-buffer-get-unicode-funcs" since="0.9.2"/>
-    <keyword type="function" name="hb_buffer_set_user_data ()" link="harfbuzz-Buffers.html#hb-buffer-set-user-data" since="0.9.2"/>
-    <keyword type="function" name="hb_buffer_get_user_data ()" link="harfbuzz-Buffers.html#hb-buffer-get-user-data" since="0.9.2"/>
-    <keyword type="function" name="hb_buffer_get_glyph_infos ()" link="harfbuzz-Buffers.html#hb-buffer-get-glyph-infos" since="0.9.2"/>
-    <keyword type="function" name="hb_buffer_get_glyph_positions ()" link="harfbuzz-Buffers.html#hb-buffer-get-glyph-positions" since="0.9.2"/>
-    <keyword type="function" name="hb_buffer_set_replacement_codepoint ()" link="harfbuzz-Buffers.html#hb-buffer-set-replacement-codepoint" since="0.9.31"/>
-    <keyword type="function" name="hb_buffer_get_replacement_codepoint ()" link="harfbuzz-Buffers.html#hb-buffer-get-replacement-codepoint" since="0.9.31"/>
-    <keyword type="function" name="hb_buffer_normalize_glyphs ()" link="harfbuzz-Buffers.html#hb-buffer-normalize-glyphs" since="0.9.2"/>
-    <keyword type="function" name="hb_buffer_reverse ()" link="harfbuzz-Buffers.html#hb-buffer-reverse" since="0.9.2"/>
-    <keyword type="function" name="hb_buffer_reverse_range ()" link="harfbuzz-Buffers.html#hb-buffer-reverse-range" since="0.9.41"/>
-    <keyword type="function" name="hb_buffer_reverse_clusters ()" link="harfbuzz-Buffers.html#hb-buffer-reverse-clusters" since="0.9.2"/>
-    <keyword type="function" name="hb_buffer_serialize_glyphs ()" link="harfbuzz-Buffers.html#hb-buffer-serialize-glyphs" since="0.9.7"/>
-    <keyword type="function" name="hb_buffer_deserialize_glyphs ()" link="harfbuzz-Buffers.html#hb-buffer-deserialize-glyphs" since="0.9.7"/>
-    <keyword type="function" name="hb_buffer_serialize_format_from_string ()" link="harfbuzz-Buffers.html#hb-buffer-serialize-format-from-string" since="0.9.7"/>
-    <keyword type="function" name="hb_buffer_serialize_format_to_string ()" link="harfbuzz-Buffers.html#hb-buffer-serialize-format-to-string" since="0.9.7"/>
-    <keyword type="function" name="hb_buffer_serialize_list_formats ()" link="harfbuzz-Buffers.html#hb-buffer-serialize-list-formats" since="0.9.7"/>
-    <keyword type="function" name="hb_segment_properties_equal ()" link="harfbuzz-Buffers.html#hb-segment-properties-equal" since="0.9.7"/>
-    <keyword type="function" name="hb_segment_properties_hash ()" link="harfbuzz-Buffers.html#hb-segment-properties-hash" since="0.9.7"/>
-    <keyword type="function" name="hb_buffer_set_message_func ()" link="harfbuzz-Buffers.html#hb-buffer-set-message-func" since="1.1.3"/>
-    <keyword type="function" name="hb_buffer_message_func_t ()" link="harfbuzz-Buffers.html#hb-buffer-message-func-t"/>
-    <keyword type="macro" name="HB_SEGMENT_PROPERTIES_DEFAULT" link="harfbuzz-Buffers.html#HB-SEGMENT-PROPERTIES-DEFAULT:CAPS"/>
-    <keyword type="macro" name="HB_BUFFER_REPLACEMENT_CODEPOINT_DEFAULT" link="harfbuzz-Buffers.html#HB-BUFFER-REPLACEMENT-CODEPOINT-DEFAULT:CAPS" since="0.9.31"/>
-    <keyword type="typedef" name="hb_buffer_t" link="harfbuzz-Buffers.html#hb-buffer-t"/>
-    <keyword type="struct" name="hb_glyph_info_t" link="harfbuzz-Buffers.html#hb-glyph-info-t-struct"/>
-    <keyword type="struct" name="hb_glyph_position_t" link="harfbuzz-Buffers.html#hb-glyph-position-t-struct"/>
-    <keyword type="enum" name="enum hb_buffer_content_type_t" link="harfbuzz-Buffers.html#hb-buffer-content-type-t"/>
-    <keyword type="enum" name="enum hb_buffer_flags_t" link="harfbuzz-Buffers.html#hb-buffer-flags-t" since="0.9.20"/>
-    <keyword type="enum" name="enum hb_buffer_cluster_level_t" link="harfbuzz-Buffers.html#hb-buffer-cluster-level-t"/>
-    <keyword type="struct" name="hb_segment_properties_t" link="harfbuzz-Buffers.html#hb-segment-properties-t-struct"/>
-    <keyword type="enum" name="enum hb_buffer_serialize_format_t" link="harfbuzz-Buffers.html#hb-buffer-serialize-format-t" since="0.9.2"/>
-    <keyword type="enum" name="enum hb_buffer_serialize_flags_t" link="harfbuzz-Buffers.html#hb-buffer-serialize-flags-t" since="0.9.20"/>
-    <keyword type="function" name="hb_blob_create ()" link="harfbuzz-hb-blob.html#hb-blob-create" since="0.9.2"/>
-    <keyword type="function" name="hb_blob_create_sub_blob ()" link="harfbuzz-hb-blob.html#hb-blob-create-sub-blob" since="0.9.2"/>
-    <keyword type="function" name="hb_blob_destroy ()" link="harfbuzz-hb-blob.html#hb-blob-destroy" since="0.9.2"/>
-    <keyword type="function" name="hb_blob_get_data ()" link="harfbuzz-hb-blob.html#hb-blob-get-data" since="0.9.2"/>
-    <keyword type="function" name="hb_blob_get_data_writable ()" link="harfbuzz-hb-blob.html#hb-blob-get-data-writable" since="0.9.2"/>
-    <keyword type="function" name="hb_blob_get_empty ()" link="harfbuzz-hb-blob.html#hb-blob-get-empty" since="0.9.2"/>
-    <keyword type="function" name="hb_blob_get_length ()" link="harfbuzz-hb-blob.html#hb-blob-get-length" since="0.9.2"/>
-    <keyword type="function" name="hb_blob_get_user_data ()" link="harfbuzz-hb-blob.html#hb-blob-get-user-data" since="0.9.2"/>
-    <keyword type="function" name="hb_blob_is_immutable ()" link="harfbuzz-hb-blob.html#hb-blob-is-immutable" since="0.9.2"/>
-    <keyword type="function" name="hb_blob_make_immutable ()" link="harfbuzz-hb-blob.html#hb-blob-make-immutable" since="0.9.2"/>
-    <keyword type="function" name="hb_blob_reference ()" link="harfbuzz-hb-blob.html#hb-blob-reference" since="0.9.2"/>
-    <keyword type="function" name="hb_blob_set_user_data ()" link="harfbuzz-hb-blob.html#hb-blob-set-user-data" since="0.9.2"/>
-    <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" since="0.9.2"/>
-    <keyword type="function" name="hb_face_create_for_tables ()" link="harfbuzz-hb-face.html#hb-face-create-for-tables" since="0.9.2"/>
-    <keyword type="function" name="hb_face_destroy ()" link="harfbuzz-hb-face.html#hb-face-destroy" since="0.9.2"/>
-    <keyword type="function" name="hb_face_get_empty ()" link="harfbuzz-hb-face.html#hb-face-get-empty" since="0.9.2"/>
-    <keyword type="function" name="hb_face_get_glyph_count ()" link="harfbuzz-hb-face.html#hb-face-get-glyph-count" since="0.9.7"/>
-    <keyword type="function" name="hb_face_get_index ()" link="harfbuzz-hb-face.html#hb-face-get-index" since="0.9.2"/>
-    <keyword type="function" name="hb_face_get_upem ()" link="harfbuzz-hb-face.html#hb-face-get-upem" since="0.9.2"/>
-    <keyword type="function" name="hb_face_get_user_data ()" link="harfbuzz-hb-face.html#hb-face-get-user-data" since="0.9.2"/>
-    <keyword type="function" name="hb_face_is_immutable ()" link="harfbuzz-hb-face.html#hb-face-is-immutable" since="0.9.2"/>
-    <keyword type="function" name="hb_face_make_immutable ()" link="harfbuzz-hb-face.html#hb-face-make-immutable" since="0.9.2"/>
-    <keyword type="function" name="hb_face_reference ()" link="harfbuzz-hb-face.html#hb-face-reference" since="0.9.2"/>
-    <keyword type="function" name="hb_face_reference_blob ()" link="harfbuzz-hb-face.html#hb-face-reference-blob" since="0.9.2"/>
-    <keyword type="function" name="hb_face_reference_table ()" link="harfbuzz-hb-face.html#hb-face-reference-table" since="0.9.2"/>
-    <keyword type="function" name="hb_face_set_glyph_count ()" link="harfbuzz-hb-face.html#hb-face-set-glyph-count" since="0.9.7"/>
-    <keyword type="function" name="hb_face_set_index ()" link="harfbuzz-hb-face.html#hb-face-set-index" since="0.9.2"/>
-    <keyword type="function" name="hb_face_set_upem ()" link="harfbuzz-hb-face.html#hb-face-set-upem" since="0.9.2"/>
-    <keyword type="function" name="hb_face_set_user_data ()" link="harfbuzz-hb-face.html#hb-face-set-user-data" since="0.9.2"/>
-    <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="0.9.2"/>
-    <keyword type="function" name="hb_font_create ()" link="harfbuzz-hb-font.html#hb-font-create" since="0.9.2"/>
-    <keyword type="function" name="hb_font_create_sub_font ()" link="harfbuzz-hb-font.html#hb-font-create-sub-font" since="0.9.2"/>
-    <keyword type="function" name="hb_font_destroy ()" link="harfbuzz-hb-font.html#hb-font-destroy" since="0.9.2"/>
-    <keyword type="function" name="hb_font_funcs_create ()" link="harfbuzz-hb-font.html#hb-font-funcs-create" since="0.9.2"/>
-    <keyword type="function" name="hb_font_funcs_destroy ()" link="harfbuzz-hb-font.html#hb-font-funcs-destroy" since="0.9.2"/>
-    <keyword type="function" name="hb_font_funcs_get_empty ()" link="harfbuzz-hb-font.html#hb-font-funcs-get-empty" since="0.9.2"/>
-    <keyword type="function" name="hb_font_funcs_get_user_data ()" link="harfbuzz-hb-font.html#hb-font-funcs-get-user-data" since="0.9.2"/>
-    <keyword type="function" name="hb_font_funcs_is_immutable ()" link="harfbuzz-hb-font.html#hb-font-funcs-is-immutable" since="0.9.2"/>
-    <keyword type="function" name="hb_font_funcs_make_immutable ()" link="harfbuzz-hb-font.html#hb-font-funcs-make-immutable" since="0.9.2"/>
-    <keyword type="function" name="hb_font_funcs_reference ()" link="harfbuzz-hb-font.html#hb-font-funcs-reference" since="0.9.2"/>
-    <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="0.9.2"/>
-    <keyword type="function" name="hb_font_funcs_set_glyph_extents_func ()" link="harfbuzz-hb-font.html#hb-font-funcs-set-glyph-extents-func" since="0.9.2"/>
-    <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="0.9.2"/>
-    <keyword type="function" name="hb_font_funcs_set_glyph_func ()" link="harfbuzz-hb-font.html#hb-font-funcs-set-glyph-func" deprecated="1.2.3" since="0.9.2"/>
-    <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="0.9.2"/>
-    <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="0.9.2"/>
-    <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="0.9.2"/>
-    <keyword type="function" name="hb_font_funcs_set_glyph_name_func ()" link="harfbuzz-hb-font.html#hb-font-funcs-set-glyph-name-func" since="0.9.2"/>
-    <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="0.9.2"/>
-    <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="0.9.2"/>
-    <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="0.9.2"/>
-    <keyword type="function" name="hb_font_funcs_set_user_data ()" link="harfbuzz-hb-font.html#hb-font-funcs-set-user-data" since="0.9.2"/>
-    <keyword type="function" name="hb_font_get_empty ()" link="harfbuzz-hb-font.html#hb-font-get-empty" since="0.9.2"/>
-    <keyword type="function" name="hb_font_get_face ()" link="harfbuzz-hb-font.html#hb-font-get-face" since="0.9.2"/>
-    <keyword type="function" name="hb_font_get_glyph ()" link="harfbuzz-hb-font.html#hb-font-get-glyph" since="0.9.2"/>
-    <keyword type="function" name="hb_font_get_glyph_advance_for_direction ()" link="harfbuzz-hb-font.html#hb-font-get-glyph-advance-for-direction" since="0.9.2"/>
-    <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="0.9.2"/>
-    <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="0.9.2"/>
-    <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="0.9.2"/>
-    <keyword type="function" name="hb_font_get_glyph_extents_for_origin ()" link="harfbuzz-hb-font.html#hb-font-get-glyph-extents-for-origin" since="0.9.2"/>
-    <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="0.9.2"/>
-    <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" deprecated=""/>
-    <keyword type="function" name="hb_font_get_glyph_h_advance ()" link="harfbuzz-hb-font.html#hb-font-get-glyph-h-advance" since="0.9.2"/>
-    <keyword type="function" name="hb_font_get_glyph_h_kerning ()" link="harfbuzz-hb-font.html#hb-font-get-glyph-h-kerning" since="0.9.2"/>
-    <keyword type="function" name="hb_font_get_glyph_h_origin ()" link="harfbuzz-hb-font.html#hb-font-get-glyph-h-origin" since="0.9.2"/>
-    <keyword type="function" name="hb_font_get_glyph_kerning_for_direction ()" link="harfbuzz-hb-font.html#hb-font-get-glyph-kerning-for-direction" since="0.9.2"/>
-    <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="0.9.2"/>
-    <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="0.9.2"/>
-    <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="0.9.2"/>
-    <keyword type="function" name="hb_font_get_glyph_v_kerning ()" link="harfbuzz-hb-font.html#hb-font-get-glyph-v-kerning" since="0.9.2"/>
-    <keyword type="function" name="hb_font_get_glyph_v_origin ()" link="harfbuzz-hb-font.html#hb-font-get-glyph-v-origin" since="0.9.2"/>
-    <keyword type="function" name="hb_font_get_parent ()" link="harfbuzz-hb-font.html#hb-font-get-parent" since="0.9.2"/>
-    <keyword type="function" name="hb_font_get_ppem ()" link="harfbuzz-hb-font.html#hb-font-get-ppem" since="0.9.2"/>
-    <keyword type="function" name="hb_font_get_scale ()" link="harfbuzz-hb-font.html#hb-font-get-scale" since="0.9.2"/>
-    <keyword type="function" name="hb_font_get_user_data ()" link="harfbuzz-hb-font.html#hb-font-get-user-data" since="0.9.2"/>
-    <keyword type="function" name="hb_font_glyph_from_string ()" link="harfbuzz-hb-font.html#hb-font-glyph-from-string" since="0.9.2"/>
-    <keyword type="function" name="hb_font_glyph_to_string ()" link="harfbuzz-hb-font.html#hb-font-glyph-to-string" since="0.9.2"/>
-    <keyword type="function" name="hb_font_is_immutable ()" link="harfbuzz-hb-font.html#hb-font-is-immutable" since="0.9.2"/>
-    <keyword type="function" name="hb_font_make_immutable ()" link="harfbuzz-hb-font.html#hb-font-make-immutable" since="0.9.2"/>
-    <keyword type="function" name="hb_font_reference ()" link="harfbuzz-hb-font.html#hb-font-reference" since="0.9.2"/>
-    <keyword type="function" name="hb_font_set_funcs ()" link="harfbuzz-hb-font.html#hb-font-set-funcs" since="0.9.2"/>
-    <keyword type="function" name="hb_font_set_funcs_data ()" link="harfbuzz-hb-font.html#hb-font-set-funcs-data" since="0.9.2"/>
-    <keyword type="function" name="hb_font_set_ppem ()" link="harfbuzz-hb-font.html#hb-font-set-ppem" since="0.9.2"/>
-    <keyword type="function" name="hb_font_set_scale ()" link="harfbuzz-hb-font.html#hb-font-set-scale" since="0.9.2"/>
-    <keyword type="function" name="hb_font_set_user_data ()" link="harfbuzz-hb-font.html#hb-font-set-user-data" since="0.9.2"/>
-    <keyword type="function" name="hb_font_subtract_glyph_origin_for_direction ()" link="harfbuzz-hb-font.html#hb-font-subtract-glyph-origin-for-direction" since="0.9.2"/>
-    <keyword type="function" name="hb_reference_table_func_t ()" link="harfbuzz-hb-font.html#hb-reference-table-func-t"/>
-    <keyword type="function" name="hb_font_funcs_set_font_h_extents_func ()" link="harfbuzz-hb-font.html#hb-font-funcs-set-font-h-extents-func" since="1.1.2"/>
-    <keyword type="function" name="hb_font_funcs_set_font_v_extents_func ()" link="harfbuzz-hb-font.html#hb-font-funcs-set-font-v-extents-func" since="1.1.2"/>
-    <keyword type="function" name="hb_font_get_extents_for_direction ()" link="harfbuzz-hb-font.html#hb-font-get-extents-for-direction" since="1.1.3"/>
-    <keyword type="function" name="hb_font_get_font_extents_func_t ()" link="harfbuzz-hb-font.html#hb-font-get-font-extents-func-t"/>
-    <keyword type="function" name="hb_font_get_h_extents ()" link="harfbuzz-hb-font.html#hb-font-get-h-extents" since="1.1.3"/>
-    <keyword type="function" name="hb_font_get_v_extents ()" link="harfbuzz-hb-font.html#hb-font-get-v-extents" since="1.1.3"/>
-    <keyword type="function" name="hb_font_set_parent ()" link="harfbuzz-hb-font.html#hb-font-set-parent" since="1.0.5"/>
-    <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="typedef" name="hb_font_get_font_h_extents_func_t" link="harfbuzz-hb-font.html#hb-font-get-font-h-extents-func-t"/>
-    <keyword type="typedef" name="hb_font_get_font_v_extents_func_t" link="harfbuzz-hb-font.html#hb-font-get-font-v-extents-func-t"/>
-    <keyword type="function" name="hb_feature_from_string ()" link="harfbuzz-Shaping.html#hb-feature-from-string" since="0.9.5"/>
-    <keyword type="function" name="hb_feature_to_string ()" link="harfbuzz-Shaping.html#hb-feature-to-string" since="0.9.5"/>
-    <keyword type="function" name="hb_shape ()" link="harfbuzz-Shaping.html#hb-shape" since="0.9.2"/>
-    <keyword type="function" name="hb_shape_full ()" link="harfbuzz-Shaping.html#hb-shape-full" since="0.9.2"/>
-    <keyword type="function" name="hb_shape_list_shapers ()" link="harfbuzz-Shaping.html#hb-shape-list-shapers" since="0.9.2"/>
-    <keyword type="struct" name="hb_feature_t" link="harfbuzz-Shaping.html#hb-feature-t-struct"/>
-    <keyword type="macro" name="HB_VERSION_ATLEAST()" link="harfbuzz-hb-version.html#HB-VERSION-ATLEAST:CAPS"/>
-    <keyword type="function" name="hb_version ()" link="harfbuzz-hb-version.html#hb-version" since="0.9.2"/>
-    <keyword type="function" name="hb_version_atleast ()" link="harfbuzz-hb-version.html#hb-version-atleast" since="0.9.30"/>
-    <keyword type="function" name="hb_version_string ()" link="harfbuzz-hb-version.html#hb-version-string" since="0.9.2"/>
-    <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="function" name="hb_set_add ()" link="harfbuzz-hb-set.html#hb-set-add" since="0.9.2"/>
-    <keyword type="function" name="hb_set_add_range ()" link="harfbuzz-hb-set.html#hb-set-add-range" since="0.9.7"/>
-    <keyword type="function" name="hb_set_allocation_successful ()" link="harfbuzz-hb-set.html#hb-set-allocation-successful" since="0.9.2"/>
-    <keyword type="function" name="hb_set_clear ()" link="harfbuzz-hb-set.html#hb-set-clear" since="0.9.2"/>
-    <keyword type="function" name="hb_set_create ()" link="harfbuzz-hb-set.html#hb-set-create" since="0.9.2"/>
-    <keyword type="function" name="hb_set_del ()" link="harfbuzz-hb-set.html#hb-set-del" since="0.9.2"/>
-    <keyword type="function" name="hb_set_del_range ()" link="harfbuzz-hb-set.html#hb-set-del-range" since="0.9.7"/>
-    <keyword type="function" name="hb_set_destroy ()" link="harfbuzz-hb-set.html#hb-set-destroy" since="0.9.2"/>
-    <keyword type="function" name="hb_set_get_empty ()" link="harfbuzz-hb-set.html#hb-set-get-empty" since="0.9.2"/>
-    <keyword type="function" name="hb_set_get_max ()" link="harfbuzz-hb-set.html#hb-set-get-max" since="0.9.7"/>
-    <keyword type="function" name="hb_set_get_min ()" link="harfbuzz-hb-set.html#hb-set-get-min" since="0.9.7"/>
-    <keyword type="function" name="hb_set_get_population ()" link="harfbuzz-hb-set.html#hb-set-get-population" since="0.9.7"/>
-    <keyword type="function" name="hb_set_get_user_data ()" link="harfbuzz-hb-set.html#hb-set-get-user-data" since="0.9.2"/>
-    <keyword type="function" name="hb_set_has ()" link="harfbuzz-hb-set.html#hb-set-has" since="0.9.2"/>
-    <keyword type="function" name="hb_set_intersect ()" link="harfbuzz-hb-set.html#hb-set-intersect" since="0.9.2"/>
-    <keyword type="function" name="hb_set_invert ()" link="harfbuzz-hb-set.html#hb-set-invert" since="0.9.10"/>
-    <keyword type="function" name="hb_set_is_empty ()" link="harfbuzz-hb-set.html#hb-set-is-empty" since="0.9.7"/>
-    <keyword type="function" name="hb_set_is_equal ()" link="harfbuzz-hb-set.html#hb-set-is-equal" since="0.9.7"/>
-    <keyword type="function" name="hb_set_next ()" link="harfbuzz-hb-set.html#hb-set-next" since="0.9.2"/>
-    <keyword type="function" name="hb_set_next_range ()" link="harfbuzz-hb-set.html#hb-set-next-range" since="0.9.7"/>
-    <keyword type="function" name="hb_set_reference ()" link="harfbuzz-hb-set.html#hb-set-reference" since="0.9.2"/>
-    <keyword type="function" name="hb_set_set ()" link="harfbuzz-hb-set.html#hb-set-set" since="0.9.2"/>
-    <keyword type="function" name="hb_set_set_user_data ()" link="harfbuzz-hb-set.html#hb-set-set-user-data" since="0.9.2"/>
-    <keyword type="function" name="hb_set_subtract ()" link="harfbuzz-hb-set.html#hb-set-subtract" since="0.9.2"/>
-    <keyword type="function" name="hb_set_symmetric_difference ()" link="harfbuzz-hb-set.html#hb-set-symmetric-difference" since="0.9.2"/>
-    <keyword type="function" name="hb_set_union ()" link="harfbuzz-hb-set.html#hb-set-union" since="0.9.2"/>
-    <keyword type="macro" name="HB_SET_VALUE_INVALID" link="harfbuzz-hb-set.html#HB-SET-VALUE-INVALID:CAPS"/>
-    <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" since="0.9.8"/>
-    <keyword type="function" name="hb_ot_layout_feature_get_lookups ()" link="harfbuzz-hb-ot-layout.html#hb-ot-layout-feature-get-lookups" since="0.9.7"/>
-    <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" since="0.9.7"/>
-    <keyword type="function" name="hb_ot_layout_get_glyphs_in_class ()" link="harfbuzz-hb-ot-layout.html#hb-ot-layout-get-glyphs-in-class" since="0.9.7"/>
-    <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" since="0.9.10"/>
-    <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" since="0.9.30"/>
-    <keyword type="function" name="hb_ot_layout_lookup_collect_glyphs ()" link="harfbuzz-hb-ot-layout.html#hb-ot-layout-lookup-collect-glyphs" since="0.9.7"/>
-    <keyword type="function" name="hb_ot_layout_lookup_substitute_closure ()" link="harfbuzz-hb-ot-layout.html#hb-ot-layout-lookup-substitute-closure" since="0.9.7"/>
-    <keyword type="function" name="hb_ot_layout_lookup_would_substitute ()" link="harfbuzz-hb-ot-layout.html#hb-ot-layout-lookup-would-substitute" since="0.9.7"/>
-    <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" since="0.9.22"/>
-    <keyword type="function" name="hb_ot_shape_plan_collect_lookups ()" link="harfbuzz-hb-ot-layout.html#hb-ot-shape-plan-collect-lookups" since="0.9.7"/>
-    <keyword type="function" name="hb_ot_layout_language_get_required_feature_index ()" link="harfbuzz-hb-ot-layout.html#hb-ot-layout-language-get-required-feature-index"/>
-    <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="macro" name="HB_OT_TAG_JSTF" link="harfbuzz-hb-ot-layout.html#HB-OT-TAG-JSTF: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" since="0.9.2"/>
-    <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_ot_font_set_funcs ()" link="harfbuzz-hb-ot-font.html#hb-ot-font-set-funcs" since="0.9.28"/>
-    <keyword type="function" name="hb_ot_shape_glyphs_closure ()" link="harfbuzz-hb-ot-shape.html#hb-ot-shape-glyphs-closure" since="0.9.2"/>
-    <keyword type="function" name="hb_shape_plan_create ()" link="harfbuzz-hb-shape-plan.html#hb-shape-plan-create" since="0.9.7"/>
-    <keyword type="function" name="hb_shape_plan_create_cached ()" link="harfbuzz-hb-shape-plan.html#hb-shape-plan-create-cached" since="0.9.7"/>
-    <keyword type="function" name="hb_shape_plan_destroy ()" link="harfbuzz-hb-shape-plan.html#hb-shape-plan-destroy" since="0.9.7"/>
-    <keyword type="function" name="hb_shape_plan_execute ()" link="harfbuzz-hb-shape-plan.html#hb-shape-plan-execute" since="0.9.7"/>
-    <keyword type="function" name="hb_shape_plan_get_empty ()" link="harfbuzz-hb-shape-plan.html#hb-shape-plan-get-empty" since="0.9.7"/>
-    <keyword type="function" name="hb_shape_plan_get_shaper ()" link="harfbuzz-hb-shape-plan.html#hb-shape-plan-get-shaper" since="0.9.7"/>
-    <keyword type="function" name="hb_shape_plan_get_user_data ()" link="harfbuzz-hb-shape-plan.html#hb-shape-plan-get-user-data" since="0.9.7"/>
-    <keyword type="function" name="hb_shape_plan_reference ()" link="harfbuzz-hb-shape-plan.html#hb-shape-plan-reference" since="0.9.7"/>
-    <keyword type="function" name="hb_shape_plan_set_user_data ()" link="harfbuzz-hb-shape-plan.html#hb-shape-plan-set-user-data" since="0.9.7"/>
-    <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_glib_blob_create ()" link="harfbuzz-hb-glib.html#hb-glib-blob-create" since="0.9.38"/>
-    <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="0.9.2"/>
-    <keyword type="function" name="hb_ft_face_create_cached ()" link="harfbuzz-hb-ft.html#hb-ft-face-create-cached" since="0.9.2"/>
-    <keyword type="function" name="hb_ft_face_create_referenced ()" link="harfbuzz-hb-ft.html#hb-ft-face-create-referenced" since="0.9.38"/>
-    <keyword type="function" name="hb_ft_font_create ()" link="harfbuzz-hb-ft.html#hb-ft-font-create" since="0.9.2"/>
-    <keyword type="function" name="hb_ft_font_create_referenced ()" link="harfbuzz-hb-ft.html#hb-ft-font-create-referenced" since="0.9.38"/>
-    <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_load_flags ()" link="harfbuzz-hb-ft.html#hb-ft-font-set-load-flags" since="1.0.5"/>
-    <keyword type="function" name="hb_ft_font_get_load_flags ()" link="harfbuzz-hb-ft.html#hb-ft-font-get-load-flags" since="1.0.5"/>
-    <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"/>
-    <keyword type="function" name="hb_gobject_blob_get_type ()" link="harfbuzz-hb-gobject.html#hb-gobject-blob-get-type"/>
-    <keyword type="function" name="hb_gobject_buffer_content_type_get_type ()" link="harfbuzz-hb-gobject.html#hb-gobject-buffer-content-type-get-type"/>
-    <keyword type="function" name="hb_gobject_buffer_flags_get_type ()" link="harfbuzz-hb-gobject.html#hb-gobject-buffer-flags-get-type"/>
-    <keyword type="function" name="hb_gobject_buffer_get_type ()" link="harfbuzz-hb-gobject.html#hb-gobject-buffer-get-type"/>
-    <keyword type="function" name="hb_gobject_buffer_serialize_flags_get_type ()" link="harfbuzz-hb-gobject.html#hb-gobject-buffer-serialize-flags-get-type"/>
-    <keyword type="function" name="hb_gobject_buffer_serialize_format_get_type ()" link="harfbuzz-hb-gobject.html#hb-gobject-buffer-serialize-format-get-type"/>
-    <keyword type="function" name="hb_gobject_direction_get_type ()" link="harfbuzz-hb-gobject.html#hb-gobject-direction-get-type"/>
-    <keyword type="function" name="hb_gobject_face_get_type ()" link="harfbuzz-hb-gobject.html#hb-gobject-face-get-type"/>
-    <keyword type="function" name="hb_gobject_font_funcs_get_type ()" link="harfbuzz-hb-gobject.html#hb-gobject-font-funcs-get-type"/>
-    <keyword type="function" name="hb_gobject_font_get_type ()" link="harfbuzz-hb-gobject.html#hb-gobject-font-get-type"/>
-    <keyword type="function" name="hb_gobject_memory_mode_get_type ()" link="harfbuzz-hb-gobject.html#hb-gobject-memory-mode-get-type"/>
-    <keyword type="function" name="hb_gobject_ot_layout_glyph_class_get_type ()" link="harfbuzz-hb-gobject.html#hb-gobject-ot-layout-glyph-class-get-type"/>
-    <keyword type="function" name="hb_gobject_script_get_type ()" link="harfbuzz-hb-gobject.html#hb-gobject-script-get-type"/>
-    <keyword type="function" name="hb_gobject_shape_plan_get_type ()" link="harfbuzz-hb-gobject.html#hb-gobject-shape-plan-get-type"/>
-    <keyword type="function" name="hb_gobject_unicode_combining_class_get_type ()" link="harfbuzz-hb-gobject.html#hb-gobject-unicode-combining-class-get-type"/>
-    <keyword type="function" name="hb_gobject_unicode_funcs_get_type ()" link="harfbuzz-hb-gobject.html#hb-gobject-unicode-funcs-get-type"/>
-    <keyword type="function" name="hb_gobject_unicode_general_category_get_type ()" link="harfbuzz-hb-gobject.html#hb-gobject-unicode-general-category-get-type"/>
-    <keyword type="function" name="hb_gobject_buffer_cluster_level_get_type ()" link="harfbuzz-hb-gobject.html#hb-gobject-buffer-cluster-level-get-type"/>
-    <keyword type="function" name="hb_gobject_feature_get_type ()" link="harfbuzz-hb-gobject.html#hb-gobject-feature-get-type"/>
-    <keyword type="function" name="hb_gobject_glyph_info_get_type ()" link="harfbuzz-hb-gobject.html#hb-gobject-glyph-info-get-type"/>
-    <keyword type="function" name="hb_gobject_glyph_position_get_type ()" link="harfbuzz-hb-gobject.html#hb-gobject-glyph-position-get-type"/>
-    <keyword type="function" name="hb_gobject_segment_properties_get_type ()" link="harfbuzz-hb-gobject.html#hb-gobject-segment-properties-get-type"/>
-    <keyword type="function" name="hb_gobject_set_get_type ()" link="harfbuzz-hb-gobject.html#hb-gobject-set-get-type"/>
-    <keyword type="function" name="hb_gobject_user_data_key_get_type ()" link="harfbuzz-hb-gobject.html#hb-gobject-user-data-key-get-type"/>
-    <keyword type="macro" name="HB_GOBJECT_TYPE_BLOB" link="harfbuzz-hb-gobject.html#HB-GOBJECT-TYPE-BLOB:CAPS"/>
-    <keyword type="macro" name="HB_GOBJECT_TYPE_BUFFER" link="harfbuzz-hb-gobject.html#HB-GOBJECT-TYPE-BUFFER:CAPS"/>
-    <keyword type="macro" name="HB_GOBJECT_TYPE_BUFFER_CONTENT_TYPE" link="harfbuzz-hb-gobject.html#HB-GOBJECT-TYPE-BUFFER-CONTENT-TYPE:CAPS"/>
-    <keyword type="macro" name="HB_GOBJECT_TYPE_BUFFER_FLAGS" link="harfbuzz-hb-gobject.html#HB-GOBJECT-TYPE-BUFFER-FLAGS:CAPS"/>
-    <keyword type="macro" name="HB_GOBJECT_TYPE_BUFFER_SERIALIZE_FLAGS" link="harfbuzz-hb-gobject.html#HB-GOBJECT-TYPE-BUFFER-SERIALIZE-FLAGS:CAPS"/>
-    <keyword type="macro" name="HB_GOBJECT_TYPE_BUFFER_SERIALIZE_FORMAT" link="harfbuzz-hb-gobject.html#HB-GOBJECT-TYPE-BUFFER-SERIALIZE-FORMAT:CAPS"/>
-    <keyword type="macro" name="HB_GOBJECT_TYPE_DIRECTION" link="harfbuzz-hb-gobject.html#HB-GOBJECT-TYPE-DIRECTION:CAPS"/>
-    <keyword type="macro" name="HB_GOBJECT_TYPE_FACE" link="harfbuzz-hb-gobject.html#HB-GOBJECT-TYPE-FACE:CAPS"/>
-    <keyword type="macro" name="HB_GOBJECT_TYPE_FONT" link="harfbuzz-hb-gobject.html#HB-GOBJECT-TYPE-FONT:CAPS"/>
-    <keyword type="macro" name="HB_GOBJECT_TYPE_FONT_FUNCS" link="harfbuzz-hb-gobject.html#HB-GOBJECT-TYPE-FONT-FUNCS:CAPS"/>
-    <keyword type="macro" name="HB_GOBJECT_TYPE_MEMORY_MODE" link="harfbuzz-hb-gobject.html#HB-GOBJECT-TYPE-MEMORY-MODE:CAPS"/>
-    <keyword type="macro" name="HB_GOBJECT_TYPE_OT_LAYOUT_GLYPH_CLASS" link="harfbuzz-hb-gobject.html#HB-GOBJECT-TYPE-OT-LAYOUT-GLYPH-CLASS:CAPS"/>
-    <keyword type="macro" name="HB_GOBJECT_TYPE_SCRIPT" link="harfbuzz-hb-gobject.html#HB-GOBJECT-TYPE-SCRIPT:CAPS"/>
-    <keyword type="macro" name="HB_GOBJECT_TYPE_SHAPE_PLAN" link="harfbuzz-hb-gobject.html#HB-GOBJECT-TYPE-SHAPE-PLAN:CAPS"/>
-    <keyword type="macro" name="HB_GOBJECT_TYPE_UNICODE_COMBINING_CLASS" link="harfbuzz-hb-gobject.html#HB-GOBJECT-TYPE-UNICODE-COMBINING-CLASS:CAPS"/>
-    <keyword type="macro" name="HB_GOBJECT_TYPE_UNICODE_FUNCS" link="harfbuzz-hb-gobject.html#HB-GOBJECT-TYPE-UNICODE-FUNCS:CAPS"/>
-    <keyword type="macro" name="HB_GOBJECT_TYPE_UNICODE_GENERAL_CATEGORY" link="harfbuzz-hb-gobject.html#HB-GOBJECT-TYPE-UNICODE-GENERAL-CATEGORY:CAPS"/>
-    <keyword type="macro" name="HB_GOBJECT_TYPE_BUFFER_CLUSTER_LEVEL" link="harfbuzz-hb-gobject.html#HB-GOBJECT-TYPE-BUFFER-CLUSTER-LEVEL:CAPS"/>
-    <keyword type="macro" name="HB_GOBJECT_TYPE_FEATURE" link="harfbuzz-hb-gobject.html#HB-GOBJECT-TYPE-FEATURE:CAPS"/>
-    <keyword type="macro" name="HB_GOBJECT_TYPE_GLYPH_INFO" link="harfbuzz-hb-gobject.html#HB-GOBJECT-TYPE-GLYPH-INFO:CAPS"/>
-    <keyword type="macro" name="HB_GOBJECT_TYPE_GLYPH_POSITION" link="harfbuzz-hb-gobject.html#HB-GOBJECT-TYPE-GLYPH-POSITION:CAPS"/>
-    <keyword type="macro" name="HB_GOBJECT_TYPE_SEGMENT_PROPERTIES" link="harfbuzz-hb-gobject.html#HB-GOBJECT-TYPE-SEGMENT-PROPERTIES:CAPS"/>
-    <keyword type="macro" name="HB_GOBJECT_TYPE_SET" link="harfbuzz-hb-gobject.html#HB-GOBJECT-TYPE-SET:CAPS"/>
-    <keyword type="macro" name="HB_GOBJECT_TYPE_USER_DATA_KEY" link="harfbuzz-hb-gobject.html#HB-GOBJECT-TYPE-USER-DATA-KEY:CAPS"/>
-    <keyword type="constant" name="HB_DIRECTION_INVALID" link="harfbuzz-hb-common.html#HB-DIRECTION-INVALID:CAPS"/>
-    <keyword type="constant" name="HB_DIRECTION_LTR" link="harfbuzz-hb-common.html#HB-DIRECTION-LTR:CAPS"/>
-    <keyword type="constant" name="HB_DIRECTION_RTL" link="harfbuzz-hb-common.html#HB-DIRECTION-RTL:CAPS"/>
-    <keyword type="constant" name="HB_DIRECTION_TTB" link="harfbuzz-hb-common.html#HB-DIRECTION-TTB:CAPS"/>
-    <keyword type="constant" name="HB_DIRECTION_BTT" link="harfbuzz-hb-common.html#HB-DIRECTION-BTT:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_COMMON" link="harfbuzz-hb-common.html#HB-SCRIPT-COMMON:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_INHERITED" link="harfbuzz-hb-common.html#HB-SCRIPT-INHERITED:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_UNKNOWN" link="harfbuzz-hb-common.html#HB-SCRIPT-UNKNOWN:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_ARABIC" link="harfbuzz-hb-common.html#HB-SCRIPT-ARABIC:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_ARMENIAN" link="harfbuzz-hb-common.html#HB-SCRIPT-ARMENIAN:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_BENGALI" link="harfbuzz-hb-common.html#HB-SCRIPT-BENGALI:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_CYRILLIC" link="harfbuzz-hb-common.html#HB-SCRIPT-CYRILLIC:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_DEVANAGARI" link="harfbuzz-hb-common.html#HB-SCRIPT-DEVANAGARI:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_GEORGIAN" link="harfbuzz-hb-common.html#HB-SCRIPT-GEORGIAN:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_GREEK" link="harfbuzz-hb-common.html#HB-SCRIPT-GREEK:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_GUJARATI" link="harfbuzz-hb-common.html#HB-SCRIPT-GUJARATI:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_GURMUKHI" link="harfbuzz-hb-common.html#HB-SCRIPT-GURMUKHI:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_HANGUL" link="harfbuzz-hb-common.html#HB-SCRIPT-HANGUL:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_HAN" link="harfbuzz-hb-common.html#HB-SCRIPT-HAN:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_HEBREW" link="harfbuzz-hb-common.html#HB-SCRIPT-HEBREW:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_HIRAGANA" link="harfbuzz-hb-common.html#HB-SCRIPT-HIRAGANA:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_KANNADA" link="harfbuzz-hb-common.html#HB-SCRIPT-KANNADA:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_KATAKANA" link="harfbuzz-hb-common.html#HB-SCRIPT-KATAKANA:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_LAO" link="harfbuzz-hb-common.html#HB-SCRIPT-LAO:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_LATIN" link="harfbuzz-hb-common.html#HB-SCRIPT-LATIN:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_MALAYALAM" link="harfbuzz-hb-common.html#HB-SCRIPT-MALAYALAM:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_ORIYA" link="harfbuzz-hb-common.html#HB-SCRIPT-ORIYA:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_TAMIL" link="harfbuzz-hb-common.html#HB-SCRIPT-TAMIL:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_TELUGU" link="harfbuzz-hb-common.html#HB-SCRIPT-TELUGU:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_THAI" link="harfbuzz-hb-common.html#HB-SCRIPT-THAI:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_TIBETAN" link="harfbuzz-hb-common.html#HB-SCRIPT-TIBETAN:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_BOPOMOFO" link="harfbuzz-hb-common.html#HB-SCRIPT-BOPOMOFO:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_BRAILLE" link="harfbuzz-hb-common.html#HB-SCRIPT-BRAILLE:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_CANADIAN_SYLLABICS" link="harfbuzz-hb-common.html#HB-SCRIPT-CANADIAN-SYLLABICS:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_CHEROKEE" link="harfbuzz-hb-common.html#HB-SCRIPT-CHEROKEE:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_ETHIOPIC" link="harfbuzz-hb-common.html#HB-SCRIPT-ETHIOPIC:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_KHMER" link="harfbuzz-hb-common.html#HB-SCRIPT-KHMER:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_MONGOLIAN" link="harfbuzz-hb-common.html#HB-SCRIPT-MONGOLIAN:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_MYANMAR" link="harfbuzz-hb-common.html#HB-SCRIPT-MYANMAR:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_OGHAM" link="harfbuzz-hb-common.html#HB-SCRIPT-OGHAM:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_RUNIC" link="harfbuzz-hb-common.html#HB-SCRIPT-RUNIC:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_SINHALA" link="harfbuzz-hb-common.html#HB-SCRIPT-SINHALA:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_SYRIAC" link="harfbuzz-hb-common.html#HB-SCRIPT-SYRIAC:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_THAANA" link="harfbuzz-hb-common.html#HB-SCRIPT-THAANA:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_YI" link="harfbuzz-hb-common.html#HB-SCRIPT-YI:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_DESERET" link="harfbuzz-hb-common.html#HB-SCRIPT-DESERET:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_GOTHIC" link="harfbuzz-hb-common.html#HB-SCRIPT-GOTHIC:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_OLD_ITALIC" link="harfbuzz-hb-common.html#HB-SCRIPT-OLD-ITALIC:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_BUHID" link="harfbuzz-hb-common.html#HB-SCRIPT-BUHID:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_HANUNOO" link="harfbuzz-hb-common.html#HB-SCRIPT-HANUNOO:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_TAGALOG" link="harfbuzz-hb-common.html#HB-SCRIPT-TAGALOG:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_TAGBANWA" link="harfbuzz-hb-common.html#HB-SCRIPT-TAGBANWA:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_CYPRIOT" link="harfbuzz-hb-common.html#HB-SCRIPT-CYPRIOT:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_LIMBU" link="harfbuzz-hb-common.html#HB-SCRIPT-LIMBU:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_LINEAR_B" link="harfbuzz-hb-common.html#HB-SCRIPT-LINEAR-B:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_OSMANYA" link="harfbuzz-hb-common.html#HB-SCRIPT-OSMANYA:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_SHAVIAN" link="harfbuzz-hb-common.html#HB-SCRIPT-SHAVIAN:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_TAI_LE" link="harfbuzz-hb-common.html#HB-SCRIPT-TAI-LE:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_UGARITIC" link="harfbuzz-hb-common.html#HB-SCRIPT-UGARITIC:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_BUGINESE" link="harfbuzz-hb-common.html#HB-SCRIPT-BUGINESE:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_COPTIC" link="harfbuzz-hb-common.html#HB-SCRIPT-COPTIC:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_GLAGOLITIC" link="harfbuzz-hb-common.html#HB-SCRIPT-GLAGOLITIC:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_KHAROSHTHI" link="harfbuzz-hb-common.html#HB-SCRIPT-KHAROSHTHI:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_NEW_TAI_LUE" link="harfbuzz-hb-common.html#HB-SCRIPT-NEW-TAI-LUE:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_OLD_PERSIAN" link="harfbuzz-hb-common.html#HB-SCRIPT-OLD-PERSIAN:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_SYLOTI_NAGRI" link="harfbuzz-hb-common.html#HB-SCRIPT-SYLOTI-NAGRI:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_TIFINAGH" link="harfbuzz-hb-common.html#HB-SCRIPT-TIFINAGH:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_BALINESE" link="harfbuzz-hb-common.html#HB-SCRIPT-BALINESE:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_CUNEIFORM" link="harfbuzz-hb-common.html#HB-SCRIPT-CUNEIFORM:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_NKO" link="harfbuzz-hb-common.html#HB-SCRIPT-NKO:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_PHAGS_PA" link="harfbuzz-hb-common.html#HB-SCRIPT-PHAGS-PA:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_PHOENICIAN" link="harfbuzz-hb-common.html#HB-SCRIPT-PHOENICIAN:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_CARIAN" link="harfbuzz-hb-common.html#HB-SCRIPT-CARIAN:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_CHAM" link="harfbuzz-hb-common.html#HB-SCRIPT-CHAM:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_KAYAH_LI" link="harfbuzz-hb-common.html#HB-SCRIPT-KAYAH-LI:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_LEPCHA" link="harfbuzz-hb-common.html#HB-SCRIPT-LEPCHA:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_LYCIAN" link="harfbuzz-hb-common.html#HB-SCRIPT-LYCIAN:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_LYDIAN" link="harfbuzz-hb-common.html#HB-SCRIPT-LYDIAN:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_OL_CHIKI" link="harfbuzz-hb-common.html#HB-SCRIPT-OL-CHIKI:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_REJANG" link="harfbuzz-hb-common.html#HB-SCRIPT-REJANG:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_SAURASHTRA" link="harfbuzz-hb-common.html#HB-SCRIPT-SAURASHTRA:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_SUNDANESE" link="harfbuzz-hb-common.html#HB-SCRIPT-SUNDANESE:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_VAI" link="harfbuzz-hb-common.html#HB-SCRIPT-VAI:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_AVESTAN" link="harfbuzz-hb-common.html#HB-SCRIPT-AVESTAN:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_BAMUM" link="harfbuzz-hb-common.html#HB-SCRIPT-BAMUM:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_EGYPTIAN_HIEROGLYPHS" link="harfbuzz-hb-common.html#HB-SCRIPT-EGYPTIAN-HIEROGLYPHS:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_IMPERIAL_ARAMAIC" link="harfbuzz-hb-common.html#HB-SCRIPT-IMPERIAL-ARAMAIC:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_INSCRIPTIONAL_PAHLAVI" link="harfbuzz-hb-common.html#HB-SCRIPT-INSCRIPTIONAL-PAHLAVI:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_INSCRIPTIONAL_PARTHIAN" link="harfbuzz-hb-common.html#HB-SCRIPT-INSCRIPTIONAL-PARTHIAN:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_JAVANESE" link="harfbuzz-hb-common.html#HB-SCRIPT-JAVANESE:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_KAITHI" link="harfbuzz-hb-common.html#HB-SCRIPT-KAITHI:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_LISU" link="harfbuzz-hb-common.html#HB-SCRIPT-LISU:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_MEETEI_MAYEK" link="harfbuzz-hb-common.html#HB-SCRIPT-MEETEI-MAYEK:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_OLD_SOUTH_ARABIAN" link="harfbuzz-hb-common.html#HB-SCRIPT-OLD-SOUTH-ARABIAN:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_OLD_TURKIC" link="harfbuzz-hb-common.html#HB-SCRIPT-OLD-TURKIC:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_SAMARITAN" link="harfbuzz-hb-common.html#HB-SCRIPT-SAMARITAN:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_TAI_THAM" link="harfbuzz-hb-common.html#HB-SCRIPT-TAI-THAM:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_TAI_VIET" link="harfbuzz-hb-common.html#HB-SCRIPT-TAI-VIET:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_BATAK" link="harfbuzz-hb-common.html#HB-SCRIPT-BATAK:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_BRAHMI" link="harfbuzz-hb-common.html#HB-SCRIPT-BRAHMI:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_MANDAIC" link="harfbuzz-hb-common.html#HB-SCRIPT-MANDAIC:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_CHAKMA" link="harfbuzz-hb-common.html#HB-SCRIPT-CHAKMA:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_MEROITIC_CURSIVE" link="harfbuzz-hb-common.html#HB-SCRIPT-MEROITIC-CURSIVE:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_MEROITIC_HIEROGLYPHS" link="harfbuzz-hb-common.html#HB-SCRIPT-MEROITIC-HIEROGLYPHS:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_MIAO" link="harfbuzz-hb-common.html#HB-SCRIPT-MIAO:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_SHARADA" link="harfbuzz-hb-common.html#HB-SCRIPT-SHARADA:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_SORA_SOMPENG" link="harfbuzz-hb-common.html#HB-SCRIPT-SORA-SOMPENG:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_TAKRI" link="harfbuzz-hb-common.html#HB-SCRIPT-TAKRI:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_BASSA_VAH" link="harfbuzz-hb-common.html#HB-SCRIPT-BASSA-VAH:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_CAUCASIAN_ALBANIAN" link="harfbuzz-hb-common.html#HB-SCRIPT-CAUCASIAN-ALBANIAN:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_DUPLOYAN" link="harfbuzz-hb-common.html#HB-SCRIPT-DUPLOYAN:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_ELBASAN" link="harfbuzz-hb-common.html#HB-SCRIPT-ELBASAN:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_GRANTHA" link="harfbuzz-hb-common.html#HB-SCRIPT-GRANTHA:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_KHOJKI" link="harfbuzz-hb-common.html#HB-SCRIPT-KHOJKI:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_KHUDAWADI" link="harfbuzz-hb-common.html#HB-SCRIPT-KHUDAWADI:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_LINEAR_A" link="harfbuzz-hb-common.html#HB-SCRIPT-LINEAR-A:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_MAHAJANI" link="harfbuzz-hb-common.html#HB-SCRIPT-MAHAJANI:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_MANICHAEAN" link="harfbuzz-hb-common.html#HB-SCRIPT-MANICHAEAN:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_MENDE_KIKAKUI" link="harfbuzz-hb-common.html#HB-SCRIPT-MENDE-KIKAKUI:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_MODI" link="harfbuzz-hb-common.html#HB-SCRIPT-MODI:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_MRO" link="harfbuzz-hb-common.html#HB-SCRIPT-MRO:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_NABATAEAN" link="harfbuzz-hb-common.html#HB-SCRIPT-NABATAEAN:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_OLD_NORTH_ARABIAN" link="harfbuzz-hb-common.html#HB-SCRIPT-OLD-NORTH-ARABIAN:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_OLD_PERMIC" link="harfbuzz-hb-common.html#HB-SCRIPT-OLD-PERMIC:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_PAHAWH_HMONG" link="harfbuzz-hb-common.html#HB-SCRIPT-PAHAWH-HMONG:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_PALMYRENE" link="harfbuzz-hb-common.html#HB-SCRIPT-PALMYRENE:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_PAU_CIN_HAU" link="harfbuzz-hb-common.html#HB-SCRIPT-PAU-CIN-HAU:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_PSALTER_PAHLAVI" link="harfbuzz-hb-common.html#HB-SCRIPT-PSALTER-PAHLAVI:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_SIDDHAM" link="harfbuzz-hb-common.html#HB-SCRIPT-SIDDHAM:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_TIRHUTA" link="harfbuzz-hb-common.html#HB-SCRIPT-TIRHUTA:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_WARANG_CITI" link="harfbuzz-hb-common.html#HB-SCRIPT-WARANG-CITI:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_AHOM" link="harfbuzz-hb-common.html#HB-SCRIPT-AHOM:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_ANATOLIAN_HIEROGLYPHS" link="harfbuzz-hb-common.html#HB-SCRIPT-ANATOLIAN-HIEROGLYPHS:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_HATRAN" link="harfbuzz-hb-common.html#HB-SCRIPT-HATRAN:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_MULTANI" link="harfbuzz-hb-common.html#HB-SCRIPT-MULTANI:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_OLD_HUNGARIAN" link="harfbuzz-hb-common.html#HB-SCRIPT-OLD-HUNGARIAN:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_SIGNWRITING" link="harfbuzz-hb-common.html#HB-SCRIPT-SIGNWRITING:CAPS"/>
-    <keyword type="constant" name="HB_SCRIPT_INVALID" link="harfbuzz-hb-common.html#HB-SCRIPT-INVALID:CAPS"/>
-    <keyword type="constant" name="_HB_SCRIPT_MAX_VALUE" link="harfbuzz-hb-common.html#HB-SCRIPT-MAX-VALUE:CAPS"/>
-    <keyword type="constant" name="_HB_SCRIPT_MAX_VALUE_SIGNED" link="harfbuzz-hb-common.html#HB-SCRIPT-MAX-VALUE-SIGNED:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_COMBINING_CLASS_NOT_REORDERED" link="harfbuzz-hb-unicode.html#HB-UNICODE-COMBINING-CLASS-NOT-REORDERED:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_COMBINING_CLASS_OVERLAY" link="harfbuzz-hb-unicode.html#HB-UNICODE-COMBINING-CLASS-OVERLAY:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_COMBINING_CLASS_NUKTA" link="harfbuzz-hb-unicode.html#HB-UNICODE-COMBINING-CLASS-NUKTA:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_COMBINING_CLASS_KANA_VOICING" link="harfbuzz-hb-unicode.html#HB-UNICODE-COMBINING-CLASS-KANA-VOICING:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_COMBINING_CLASS_VIRAMA" link="harfbuzz-hb-unicode.html#HB-UNICODE-COMBINING-CLASS-VIRAMA:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_COMBINING_CLASS_CCC10" link="harfbuzz-hb-unicode.html#HB-UNICODE-COMBINING-CLASS-CCC10:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_COMBINING_CLASS_CCC11" link="harfbuzz-hb-unicode.html#HB-UNICODE-COMBINING-CLASS-CCC11:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_COMBINING_CLASS_CCC12" link="harfbuzz-hb-unicode.html#HB-UNICODE-COMBINING-CLASS-CCC12:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_COMBINING_CLASS_CCC13" link="harfbuzz-hb-unicode.html#HB-UNICODE-COMBINING-CLASS-CCC13:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_COMBINING_CLASS_CCC14" link="harfbuzz-hb-unicode.html#HB-UNICODE-COMBINING-CLASS-CCC14:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_COMBINING_CLASS_CCC15" link="harfbuzz-hb-unicode.html#HB-UNICODE-COMBINING-CLASS-CCC15:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_COMBINING_CLASS_CCC16" link="harfbuzz-hb-unicode.html#HB-UNICODE-COMBINING-CLASS-CCC16:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_COMBINING_CLASS_CCC17" link="harfbuzz-hb-unicode.html#HB-UNICODE-COMBINING-CLASS-CCC17:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_COMBINING_CLASS_CCC18" link="harfbuzz-hb-unicode.html#HB-UNICODE-COMBINING-CLASS-CCC18:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_COMBINING_CLASS_CCC19" link="harfbuzz-hb-unicode.html#HB-UNICODE-COMBINING-CLASS-CCC19:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_COMBINING_CLASS_CCC20" link="harfbuzz-hb-unicode.html#HB-UNICODE-COMBINING-CLASS-CCC20:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_COMBINING_CLASS_CCC21" link="harfbuzz-hb-unicode.html#HB-UNICODE-COMBINING-CLASS-CCC21:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_COMBINING_CLASS_CCC22" link="harfbuzz-hb-unicode.html#HB-UNICODE-COMBINING-CLASS-CCC22:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_COMBINING_CLASS_CCC23" link="harfbuzz-hb-unicode.html#HB-UNICODE-COMBINING-CLASS-CCC23:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_COMBINING_CLASS_CCC24" link="harfbuzz-hb-unicode.html#HB-UNICODE-COMBINING-CLASS-CCC24:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_COMBINING_CLASS_CCC25" link="harfbuzz-hb-unicode.html#HB-UNICODE-COMBINING-CLASS-CCC25:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_COMBINING_CLASS_CCC26" link="harfbuzz-hb-unicode.html#HB-UNICODE-COMBINING-CLASS-CCC26:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_COMBINING_CLASS_CCC27" link="harfbuzz-hb-unicode.html#HB-UNICODE-COMBINING-CLASS-CCC27:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_COMBINING_CLASS_CCC28" link="harfbuzz-hb-unicode.html#HB-UNICODE-COMBINING-CLASS-CCC28:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_COMBINING_CLASS_CCC29" link="harfbuzz-hb-unicode.html#HB-UNICODE-COMBINING-CLASS-CCC29:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_COMBINING_CLASS_CCC30" link="harfbuzz-hb-unicode.html#HB-UNICODE-COMBINING-CLASS-CCC30:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_COMBINING_CLASS_CCC31" link="harfbuzz-hb-unicode.html#HB-UNICODE-COMBINING-CLASS-CCC31:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_COMBINING_CLASS_CCC32" link="harfbuzz-hb-unicode.html#HB-UNICODE-COMBINING-CLASS-CCC32:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_COMBINING_CLASS_CCC33" link="harfbuzz-hb-unicode.html#HB-UNICODE-COMBINING-CLASS-CCC33:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_COMBINING_CLASS_CCC34" link="harfbuzz-hb-unicode.html#HB-UNICODE-COMBINING-CLASS-CCC34:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_COMBINING_CLASS_CCC35" link="harfbuzz-hb-unicode.html#HB-UNICODE-COMBINING-CLASS-CCC35:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_COMBINING_CLASS_CCC36" link="harfbuzz-hb-unicode.html#HB-UNICODE-COMBINING-CLASS-CCC36:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_COMBINING_CLASS_CCC84" link="harfbuzz-hb-unicode.html#HB-UNICODE-COMBINING-CLASS-CCC84:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_COMBINING_CLASS_CCC91" link="harfbuzz-hb-unicode.html#HB-UNICODE-COMBINING-CLASS-CCC91:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_COMBINING_CLASS_CCC103" link="harfbuzz-hb-unicode.html#HB-UNICODE-COMBINING-CLASS-CCC103:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_COMBINING_CLASS_CCC107" link="harfbuzz-hb-unicode.html#HB-UNICODE-COMBINING-CLASS-CCC107:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_COMBINING_CLASS_CCC118" link="harfbuzz-hb-unicode.html#HB-UNICODE-COMBINING-CLASS-CCC118:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_COMBINING_CLASS_CCC122" link="harfbuzz-hb-unicode.html#HB-UNICODE-COMBINING-CLASS-CCC122:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_COMBINING_CLASS_CCC129" link="harfbuzz-hb-unicode.html#HB-UNICODE-COMBINING-CLASS-CCC129:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_COMBINING_CLASS_CCC130" link="harfbuzz-hb-unicode.html#HB-UNICODE-COMBINING-CLASS-CCC130:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_COMBINING_CLASS_CCC133" link="harfbuzz-hb-unicode.html#HB-UNICODE-COMBINING-CLASS-CCC133:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_COMBINING_CLASS_ATTACHED_BELOW_LEFT" link="harfbuzz-hb-unicode.html#HB-UNICODE-COMBINING-CLASS-ATTACHED-BELOW-LEFT:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_COMBINING_CLASS_ATTACHED_BELOW" link="harfbuzz-hb-unicode.html#HB-UNICODE-COMBINING-CLASS-ATTACHED-BELOW:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_COMBINING_CLASS_ATTACHED_ABOVE" link="harfbuzz-hb-unicode.html#HB-UNICODE-COMBINING-CLASS-ATTACHED-ABOVE:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_COMBINING_CLASS_ATTACHED_ABOVE_RIGHT" link="harfbuzz-hb-unicode.html#HB-UNICODE-COMBINING-CLASS-ATTACHED-ABOVE-RIGHT:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_COMBINING_CLASS_BELOW_LEFT" link="harfbuzz-hb-unicode.html#HB-UNICODE-COMBINING-CLASS-BELOW-LEFT:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_COMBINING_CLASS_BELOW" link="harfbuzz-hb-unicode.html#HB-UNICODE-COMBINING-CLASS-BELOW:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_COMBINING_CLASS_BELOW_RIGHT" link="harfbuzz-hb-unicode.html#HB-UNICODE-COMBINING-CLASS-BELOW-RIGHT:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_COMBINING_CLASS_LEFT" link="harfbuzz-hb-unicode.html#HB-UNICODE-COMBINING-CLASS-LEFT:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_COMBINING_CLASS_RIGHT" link="harfbuzz-hb-unicode.html#HB-UNICODE-COMBINING-CLASS-RIGHT:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_COMBINING_CLASS_ABOVE_LEFT" link="harfbuzz-hb-unicode.html#HB-UNICODE-COMBINING-CLASS-ABOVE-LEFT:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_COMBINING_CLASS_ABOVE" link="harfbuzz-hb-unicode.html#HB-UNICODE-COMBINING-CLASS-ABOVE:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_COMBINING_CLASS_ABOVE_RIGHT" link="harfbuzz-hb-unicode.html#HB-UNICODE-COMBINING-CLASS-ABOVE-RIGHT:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_COMBINING_CLASS_DOUBLE_BELOW" link="harfbuzz-hb-unicode.html#HB-UNICODE-COMBINING-CLASS-DOUBLE-BELOW:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_COMBINING_CLASS_DOUBLE_ABOVE" link="harfbuzz-hb-unicode.html#HB-UNICODE-COMBINING-CLASS-DOUBLE-ABOVE:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_COMBINING_CLASS_IOTA_SUBSCRIPT" link="harfbuzz-hb-unicode.html#HB-UNICODE-COMBINING-CLASS-IOTA-SUBSCRIPT:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_COMBINING_CLASS_INVALID" link="harfbuzz-hb-unicode.html#HB-UNICODE-COMBINING-CLASS-INVALID:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_GENERAL_CATEGORY_CONTROL" link="harfbuzz-hb-unicode.html#HB-UNICODE-GENERAL-CATEGORY-CONTROL:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_GENERAL_CATEGORY_FORMAT" link="harfbuzz-hb-unicode.html#HB-UNICODE-GENERAL-CATEGORY-FORMAT:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_GENERAL_CATEGORY_UNASSIGNED" link="harfbuzz-hb-unicode.html#HB-UNICODE-GENERAL-CATEGORY-UNASSIGNED:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_GENERAL_CATEGORY_PRIVATE_USE" link="harfbuzz-hb-unicode.html#HB-UNICODE-GENERAL-CATEGORY-PRIVATE-USE:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_GENERAL_CATEGORY_SURROGATE" link="harfbuzz-hb-unicode.html#HB-UNICODE-GENERAL-CATEGORY-SURROGATE:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_GENERAL_CATEGORY_LOWERCASE_LETTER" link="harfbuzz-hb-unicode.html#HB-UNICODE-GENERAL-CATEGORY-LOWERCASE-LETTER:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_GENERAL_CATEGORY_MODIFIER_LETTER" link="harfbuzz-hb-unicode.html#HB-UNICODE-GENERAL-CATEGORY-MODIFIER-LETTER:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_GENERAL_CATEGORY_OTHER_LETTER" link="harfbuzz-hb-unicode.html#HB-UNICODE-GENERAL-CATEGORY-OTHER-LETTER:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_GENERAL_CATEGORY_TITLECASE_LETTER" link="harfbuzz-hb-unicode.html#HB-UNICODE-GENERAL-CATEGORY-TITLECASE-LETTER:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_GENERAL_CATEGORY_UPPERCASE_LETTER" link="harfbuzz-hb-unicode.html#HB-UNICODE-GENERAL-CATEGORY-UPPERCASE-LETTER:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_GENERAL_CATEGORY_SPACING_MARK" link="harfbuzz-hb-unicode.html#HB-UNICODE-GENERAL-CATEGORY-SPACING-MARK:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_GENERAL_CATEGORY_ENCLOSING_MARK" link="harfbuzz-hb-unicode.html#HB-UNICODE-GENERAL-CATEGORY-ENCLOSING-MARK:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK" link="harfbuzz-hb-unicode.html#HB-UNICODE-GENERAL-CATEGORY-NON-SPACING-MARK:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_GENERAL_CATEGORY_DECIMAL_NUMBER" link="harfbuzz-hb-unicode.html#HB-UNICODE-GENERAL-CATEGORY-DECIMAL-NUMBER:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_GENERAL_CATEGORY_LETTER_NUMBER" link="harfbuzz-hb-unicode.html#HB-UNICODE-GENERAL-CATEGORY-LETTER-NUMBER:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_GENERAL_CATEGORY_OTHER_NUMBER" link="harfbuzz-hb-unicode.html#HB-UNICODE-GENERAL-CATEGORY-OTHER-NUMBER:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_GENERAL_CATEGORY_CONNECT_PUNCTUATION" link="harfbuzz-hb-unicode.html#HB-UNICODE-GENERAL-CATEGORY-CONNECT-PUNCTUATION:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_GENERAL_CATEGORY_DASH_PUNCTUATION" link="harfbuzz-hb-unicode.html#HB-UNICODE-GENERAL-CATEGORY-DASH-PUNCTUATION:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_GENERAL_CATEGORY_CLOSE_PUNCTUATION" link="harfbuzz-hb-unicode.html#HB-UNICODE-GENERAL-CATEGORY-CLOSE-PUNCTUATION:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_GENERAL_CATEGORY_FINAL_PUNCTUATION" link="harfbuzz-hb-unicode.html#HB-UNICODE-GENERAL-CATEGORY-FINAL-PUNCTUATION:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_GENERAL_CATEGORY_INITIAL_PUNCTUATION" link="harfbuzz-hb-unicode.html#HB-UNICODE-GENERAL-CATEGORY-INITIAL-PUNCTUATION:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_GENERAL_CATEGORY_OTHER_PUNCTUATION" link="harfbuzz-hb-unicode.html#HB-UNICODE-GENERAL-CATEGORY-OTHER-PUNCTUATION:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_GENERAL_CATEGORY_OPEN_PUNCTUATION" link="harfbuzz-hb-unicode.html#HB-UNICODE-GENERAL-CATEGORY-OPEN-PUNCTUATION:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_GENERAL_CATEGORY_CURRENCY_SYMBOL" link="harfbuzz-hb-unicode.html#HB-UNICODE-GENERAL-CATEGORY-CURRENCY-SYMBOL:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_GENERAL_CATEGORY_MODIFIER_SYMBOL" link="harfbuzz-hb-unicode.html#HB-UNICODE-GENERAL-CATEGORY-MODIFIER-SYMBOL:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_GENERAL_CATEGORY_MATH_SYMBOL" link="harfbuzz-hb-unicode.html#HB-UNICODE-GENERAL-CATEGORY-MATH-SYMBOL:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_GENERAL_CATEGORY_OTHER_SYMBOL" link="harfbuzz-hb-unicode.html#HB-UNICODE-GENERAL-CATEGORY-OTHER-SYMBOL:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_GENERAL_CATEGORY_LINE_SEPARATOR" link="harfbuzz-hb-unicode.html#HB-UNICODE-GENERAL-CATEGORY-LINE-SEPARATOR:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_GENERAL_CATEGORY_PARAGRAPH_SEPARATOR" link="harfbuzz-hb-unicode.html#HB-UNICODE-GENERAL-CATEGORY-PARAGRAPH-SEPARATOR:CAPS"/>
-    <keyword type="constant" name="HB_UNICODE_GENERAL_CATEGORY_SPACE_SEPARATOR" link="harfbuzz-hb-unicode.html#HB-UNICODE-GENERAL-CATEGORY-SPACE-SEPARATOR:CAPS"/>
-    <keyword type="constant" name="HB_BUFFER_CONTENT_TYPE_INVALID" link="harfbuzz-Buffers.html#HB-BUFFER-CONTENT-TYPE-INVALID:CAPS"/>
-    <keyword type="constant" name="HB_BUFFER_CONTENT_TYPE_UNICODE" link="harfbuzz-Buffers.html#HB-BUFFER-CONTENT-TYPE-UNICODE:CAPS"/>
-    <keyword type="constant" name="HB_BUFFER_CONTENT_TYPE_GLYPHS" link="harfbuzz-Buffers.html#HB-BUFFER-CONTENT-TYPE-GLYPHS:CAPS"/>
-    <keyword type="constant" name="HB_BUFFER_FLAG_DEFAULT" link="harfbuzz-Buffers.html#HB-BUFFER-FLAG-DEFAULT:CAPS"/>
-    <keyword type="constant" name="HB_BUFFER_FLAG_BOT" link="harfbuzz-Buffers.html#HB-BUFFER-FLAG-BOT:CAPS"/>
-    <keyword type="constant" name="HB_BUFFER_FLAG_EOT" link="harfbuzz-Buffers.html#HB-BUFFER-FLAG-EOT:CAPS"/>
-    <keyword type="constant" name="HB_BUFFER_FLAG_PRESERVE_DEFAULT_IGNORABLES" link="harfbuzz-Buffers.html#HB-BUFFER-FLAG-PRESERVE-DEFAULT-IGNORABLES:CAPS"/>
-    <keyword type="constant" name="HB_BUFFER_CLUSTER_LEVEL_MONOTONE_GRAPHEMES" link="harfbuzz-Buffers.html#HB-BUFFER-CLUSTER-LEVEL-MONOTONE-GRAPHEMES:CAPS"/>
-    <keyword type="constant" name="HB_BUFFER_CLUSTER_LEVEL_MONOTONE_CHARACTERS" link="harfbuzz-Buffers.html#HB-BUFFER-CLUSTER-LEVEL-MONOTONE-CHARACTERS:CAPS"/>
-    <keyword type="constant" name="HB_BUFFER_CLUSTER_LEVEL_CHARACTERS" link="harfbuzz-Buffers.html#HB-BUFFER-CLUSTER-LEVEL-CHARACTERS:CAPS"/>
-    <keyword type="constant" name="HB_BUFFER_CLUSTER_LEVEL_DEFAULT" link="harfbuzz-Buffers.html#HB-BUFFER-CLUSTER-LEVEL-DEFAULT:CAPS"/>
-    <keyword type="constant" name="HB_BUFFER_SERIALIZE_FORMAT_TEXT" link="harfbuzz-Buffers.html#HB-BUFFER-SERIALIZE-FORMAT-TEXT:CAPS"/>
-    <keyword type="constant" name="HB_BUFFER_SERIALIZE_FORMAT_JSON" link="harfbuzz-Buffers.html#HB-BUFFER-SERIALIZE-FORMAT-JSON:CAPS"/>
-    <keyword type="constant" name="HB_BUFFER_SERIALIZE_FORMAT_INVALID" link="harfbuzz-Buffers.html#HB-BUFFER-SERIALIZE-FORMAT-INVALID:CAPS"/>
-    <keyword type="constant" name="HB_BUFFER_SERIALIZE_FLAG_DEFAULT" link="harfbuzz-Buffers.html#HB-BUFFER-SERIALIZE-FLAG-DEFAULT:CAPS"/>
-    <keyword type="constant" name="HB_BUFFER_SERIALIZE_FLAG_NO_CLUSTERS" link="harfbuzz-Buffers.html#HB-BUFFER-SERIALIZE-FLAG-NO-CLUSTERS:CAPS"/>
-    <keyword type="constant" name="HB_BUFFER_SERIALIZE_FLAG_NO_POSITIONS" link="harfbuzz-Buffers.html#HB-BUFFER-SERIALIZE-FLAG-NO-POSITIONS:CAPS"/>
-    <keyword type="constant" name="HB_BUFFER_SERIALIZE_FLAG_NO_GLYPH_NAMES" link="harfbuzz-Buffers.html#HB-BUFFER-SERIALIZE-FLAG-NO-GLYPH-NAMES:CAPS"/>
-    <keyword type="constant" name="HB_BUFFER_SERIALIZE_FLAG_GLYPH_EXTENTS" link="harfbuzz-Buffers.html#HB-BUFFER-SERIALIZE-FLAG-GLYPH-EXTENTS:CAPS"/>
-    <keyword type="constant" name="HB_MEMORY_MODE_DUPLICATE" link="harfbuzz-hb-blob.html#HB-MEMORY-MODE-DUPLICATE:CAPS"/>
-    <keyword type="constant" name="HB_MEMORY_MODE_READONLY" link="harfbuzz-hb-blob.html#HB-MEMORY-MODE-READONLY:CAPS"/>
-    <keyword type="constant" name="HB_MEMORY_MODE_WRITABLE" link="harfbuzz-hb-blob.html#HB-MEMORY-MODE-WRITABLE:CAPS"/>
-    <keyword type="constant" name="HB_MEMORY_MODE_READONLY_MAY_MAKE_WRITABLE" link="harfbuzz-hb-blob.html#HB-MEMORY-MODE-READONLY-MAY-MAKE-WRITABLE:CAPS"/>
-    <keyword type="constant" name="HB_OT_LAYOUT_GLYPH_CLASS_UNCLASSIFIED" link="harfbuzz-hb-ot-layout.html#HB-OT-LAYOUT-GLYPH-CLASS-UNCLASSIFIED:CAPS"/>
-    <keyword type="constant" name="HB_OT_LAYOUT_GLYPH_CLASS_BASE_GLYPH" link="harfbuzz-hb-ot-layout.html#HB-OT-LAYOUT-GLYPH-CLASS-BASE-GLYPH:CAPS"/>
-    <keyword type="constant" name="HB_OT_LAYOUT_GLYPH_CLASS_LIGATURE" link="harfbuzz-hb-ot-layout.html#HB-OT-LAYOUT-GLYPH-CLASS-LIGATURE:CAPS"/>
-    <keyword type="constant" name="HB_OT_LAYOUT_GLYPH_CLASS_MARK" link="harfbuzz-hb-ot-layout.html#HB-OT-LAYOUT-GLYPH-CLASS-MARK:CAPS"/>
-    <keyword type="constant" name="HB_OT_LAYOUT_GLYPH_CLASS_COMPONENT" link="harfbuzz-hb-ot-layout.html#HB-OT-LAYOUT-GLYPH-CLASS-COMPONENT:CAPS"/>
-    <keyword type="member" name="hb-glyph-info-t-struct.codepoint" link="harfbuzz-Buffers.html#hb-glyph-info-t-struct.codepoint"/>
-    <keyword type="member" name="hb-glyph-info-t-struct.mask" link="harfbuzz-Buffers.html#hb-glyph-info-t-struct.mask"/>
-    <keyword type="member" name="hb-glyph-info-t-struct.cluster" link="harfbuzz-Buffers.html#hb-glyph-info-t-struct.cluster"/>
-    <keyword type="member" name="hb-glyph-position-t-struct.x-advance" link="harfbuzz-Buffers.html#hb-glyph-position-t-struct.x-advance"/>
-    <keyword type="member" name="hb-glyph-position-t-struct.y-advance" link="harfbuzz-Buffers.html#hb-glyph-position-t-struct.y-advance"/>
-    <keyword type="member" name="hb-glyph-position-t-struct.x-offset" link="harfbuzz-Buffers.html#hb-glyph-position-t-struct.x-offset"/>
-    <keyword type="member" name="hb-glyph-position-t-struct.y-offset" link="harfbuzz-Buffers.html#hb-glyph-position-t-struct.y-offset"/>
-    <keyword type="member" name="hb-segment-properties-t-struct.direction" link="harfbuzz-Buffers.html#hb-segment-properties-t-struct.direction"/>
-    <keyword type="member" name="hb-segment-properties-t-struct.script" link="harfbuzz-Buffers.html#hb-segment-properties-t-struct.script"/>
-    <keyword type="member" name="hb-segment-properties-t-struct.language" link="harfbuzz-Buffers.html#hb-segment-properties-t-struct.language"/>
-  </functions>
-</book>
diff --git a/docs/html/hello-harfbuzz.html b/docs/html/hello-harfbuzz.html
deleted file mode 100644 (file)
index c665efc..0000000
+++ /dev/null
@@ -1,181 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Hello, Harfbuzz: HarfBuzz Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="HarfBuzz Manual">
-<link rel="up" href="pt01.html" title="Part I. User's manual">
-<link rel="prev" href="building.html" title="Building">
-<link rel="next" href="buffers-language-script-and-direction.html" title="Buffers, language, script and direction">
-<meta name="generator" content="GTK-Doc V1.24.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><a accesskey="u" href="pt01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="building.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="buffers-language-script-and-direction.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="hello-harfbuzz"></a>Hello, Harfbuzz</h2></div></div></div>
-<div class="toc"><dl class="toc"><dt><span class="section"><a href="hello-harfbuzz.html#what-harfbuzz-doesnt-do">What Harfbuzz doesn't do</a></span></dt></dl></div>
-<p>
-    Here's the simplest Harfbuzz that can possibly work. We will improve
-    it later.
-  </p>
-<div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
-        Create a buffer and put your text in it.
-      </p></li></ol></div>
-<pre class="programlisting">
-  #include &lt;hb.h&gt;
-  hb_buffer_t *buf;
-  buf = hb_buffer_create();
-  hb_buffer_add_utf8(buf, text, strlen(text), 0, strlen(text));
-</pre>
-<div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem" value="2"><p>
-        Guess the script, language and direction of the buffer.
-      </p></li></ol></div>
-<pre class="programlisting">
-  hb_buffer_guess_segment_properties(buf);
-</pre>
-<div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem" value="3"><p>
-        Create a face and a font, using FreeType for now.
-      </p></li></ol></div>
-<pre class="programlisting">
-  #include &lt;hb-ft.h&gt;
-  FT_New_Face(ft_library, font_path, index, &amp;face)
-  hb_font_t *font = hb_ft_font_create(face);
-</pre>
-<div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem" value="4"><p>
-        Shape!
-      </p></li></ol></div>
-<pre class="programlisting">
-  hb_shape(font, buf, NULL, 0);
-</pre>
-<div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem" value="5"><p>
-        Get the glyph and position information.
-      </p></li></ol></div>
-<pre class="programlisting">
-  hb_glyph_info_t *glyph_info    = hb_buffer_get_glyph_infos(buf, &amp;glyph_count);
-  hb_glyph_position_t *glyph_pos = hb_buffer_get_glyph_positions(buf, &amp;glyph_count);
-</pre>
-<div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem" value="6"><p>
-        Iterate over each glyph.
-      </p></li></ol></div>
-<pre class="programlisting">
-  for (i = 0; i &lt; glyph_count; ++i) {
-    glyphid = glyph_info[i].codepoint;
-    x_offset = glyph_pos[i].x_offset / 64.0;
-    y_offset = glyph_pos[i].y_offset / 64.0;
-    x_advance = glyph_pos[i].x_advance / 64.0;
-    y_advance = glyph_pos[i].y_advance / 64.0;
-    draw_glyph(glyphid, cursor_x + x_offset, cursor_y + y_offset);
-    cursor_x += x_advance;
-    cursor_y += y_advance;
-  }
-</pre>
-<div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem" value="7"><p>
-        Tidy up.
-      </p></li></ol></div>
-<pre class="programlisting">
-  hb_buffer_destroy(buf);
-  hb_font_destroy(hb_ft_font);
-</pre>
-<div class="section">
-<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="what-harfbuzz-doesnt-do"></a>What Harfbuzz doesn't do</h2></div></div></div>
-<p>
-      The code above will take a UTF8 string, shape it, and give you the
-      information required to lay it out correctly on a single
-      horizontal (or vertical) line using the font provided. That is the
-      extent of Harfbuzz's responsibility.
-    </p>
-<p>
-      If you are implementing a text layout engine you may have other
-      responsibilities, that Harfbuzz will not help you with:
-    </p>
-<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
-<li class="listitem">
-<p>
-          Harfbuzz won't help you with bidirectionality. If you want to
-          lay out text with mixed Hebrew and English, you will need to
-          ensure that the buffer provided to Harfbuzz has those
-          characters in the correct layout order. This will be different
-          from the logical order in which the Unicode text is stored. In
-          other words, the user will hit the keys in the following
-          sequence:
-        </p>
-<pre class="programlisting">
-A B C [space] ג ב א [space] D E F
-        </pre>
-<p>
-          but will expect to see in the output:
-        </p>
-<pre class="programlisting">
-ABC אבג DEF
-        </pre>
-<p>
-          This reordering is called <span class="emphasis"><em>bidi processing</em></span>
-          ("bidi" is short for bidirectional), and there's an
-          algorithm as an annex to the Unicode Standard which tells you how
-          to reorder a string from logical order into presentation order.
-          Before sending your string to Harfbuzz, you may need to apply the
-          bidi algorithm to it. Libraries such as ICU and fribidi can do
-          this for you.
-        </p>
-</li>
-<li class="listitem"><p>
-          Harfbuzz won't help you with text that contains different font
-          properties. For instance, if you have the string "a
-          <span class="emphasis"><em>huge</em></span> breakfast", and you expect
-          "huge" to be italic, you will need to send three
-          strings to Harfbuzz: <code class="literal">a</code>, in your Roman font;
-          <code class="literal">huge</code> using your italic font; and
-          <code class="literal">breakfast</code> using your Roman font again.
-          Similarly if you change font, font size, script, language or
-          direction within your string, you will need to shape each run
-          independently and then output them independently. Harfbuzz
-          expects to shape a run of characters sharing the same
-          properties.
-        </p></li>
-<li class="listitem">
-<p>
-          Harfbuzz won't help you with line breaking, hyphenation or
-          justification. As mentioned above, it lays out the string
-          along a <span class="emphasis"><em>single line</em></span> of, notionally,
-          infinite length. If you want to find out where the potential
-          word, sentence and line break points are in your text, you
-          could use the ICU library's break iterator functions.
-        </p>
-<p>
-          Harfbuzz can tell you how wide a shaped piece of text is, which is
-          useful input to a justification algorithm, but it knows nothing
-          about paragraphs, lines or line lengths. Nor will it adjust the
-          space between words to fit them proportionally into a line. If you
-          want to layout text in paragraphs, you will probably want to send
-          each word of your text to Harfbuzz to determine its shaped width
-          after glyph substitutions, then work out how many words will fit
-          on a line, and then finally output each word of the line separated
-          by a space of the correct size to fully justify the paragraph.
-        </p>
-</li>
-</ul></div>
-<p>
-      As a layout engine implementor, Harfbuzz will help you with the
-      interface between your text and your font, and that's something
-      that you'll need - what you then do with the glyphs that your font
-      returns is up to you. The example we saw above enough to get us
-      started using Harfbuzz. Now we are going to use the remainder of
-      Harfbuzz's API to refine that example and improve our text shaping
-      capabilities.
-    </p>
-</div>
-</div>
-<div class="footer">
-<hr>Generated by GTK-Doc V1.24.1</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/html/index.html b/docs/html/index.html
deleted file mode 100644 (file)
index fbf4dcd..0000000
+++ /dev/null
@@ -1,190 +0,0 @@
-<!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 Manual: HarfBuzz Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<meta name="description" content="HarfBuzz  HarfBuzz is an OpenType text shaping engine. The current HarfBuzz codebase, formerly known as harfbuzz-ng, is versioned 1.x.x and is stable and under active maintenance. This is what is used in latest versions of Firefox, GNOME, ChromeOS, Chrome, LibreOffice, XeTeX, Android, and KDE, among other places. The canonical source tree is available here. Also available on github. See for release tarballs. The old HarfBuzz codebase, these days known as harfbuzz-old, was derived from FreeType, Pango, and Qt and is available here. It is not actively developed or maintained, and is extremely buggy. All users are encouraged to switch over to the new HarfBuzz as soon as possible. There are no release tarballs of old HarfBuzz whatsoever.">
-<link rel="home" href="index.html" title="HarfBuzz Manual">
-<link rel="next" href="pt01.html" title="Part I. User's manual">
-<meta name="generator" content="GTK-Doc V1.24.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 Manual</p></th></tr></table></div>
-<div><div class="abstract">
-<p class="title"><b>HarfBuzz</b></p>
-<div align="center"><img src="HarfBuzz.png" align="middle"></div>
-<p>
-        HarfBuzz is an <a class="ulink" href="http://www.microsoft.com/typography/otspec/" target="_top">OpenType</a>
-        text shaping engine.
-      </p>
-<p>
-        The current HarfBuzz codebase, formerly known as harfbuzz-ng, is
-        versioned 1.x.x and is stable and under active maintenance. This is
-        what is used in latest versions of Firefox, GNOME, ChromeOS, Chrome,
-        LibreOffice, XeTeX, Android, and KDE, among other places. The canonical
-        source tree is available
-        <a class="ulink" href="http://cgit.freedesktop.org/harfbuzz/" target="_top">here</a>.
-        Also available on
-        <a class="ulink" href="https://github.com/behdad/harfbuzz" target="_top">github</a>.
-        See <a class="xref" href="install-harfbuzz.html#download" title="Download">Download</a> for release tarballs.
-      </p>
-<p>
-        The old HarfBuzz codebase, these days known as harfbuzz-old, was
-        derived from <a class="ulink" href="http://freetype.org/" target="_top">FreeType</a>,
-        <a class="ulink" href="http://pango.org/" target="_top">Pango</a>, and
-        <a class="ulink" href="http://qt-project.org/" target="_top">Qt</a> and is available
-        <a class="ulink" href="http://cgit.freedesktop.org/harfbuzz.old/" target="_top">here</a>.
-        It is not actively developed or maintained, and is extremely buggy. All
-        users are encouraged to switch over to the new HarfBuzz as soon as
-        possible.  There are no release tarballs of old HarfBuzz whatsoever.
-      </p>
-</div></div>
-</div>
-<hr>
-</div>
-<div class="toc"><dl class="toc">
-<dt><span class="part"><a href="pt01.html">I. User's manual</a></span></dt>
-<dd><dl>
-<dt><span class="chapter"><a href="what-is-harfbuzz.html">What is Harfbuzz?</a></span></dt>
-<dd><dl>
-<dt><span class="section"><a href="what-is-harfbuzz.html#why-do-i-need-it">Why do I need it?</a></span></dt>
-<dt><span class="section"><a href="why-is-it-called-harfbuzz.html">Why is it called Harfbuzz?</a></span></dt>
-</dl></dd>
-<dt><span class="chapter"><a href="install-harfbuzz.html">Install Harfbuzz</a></span></dt>
-<dd><dl>
-<dt><span class="section"><a href="install-harfbuzz.html#download">Download</a></span></dt>
-<dt><span class="section"><a href="building.html">Building</a></span></dt>
-</dl></dd>
-<dt><span class="chapter"><a href="hello-harfbuzz.html">Hello, Harfbuzz</a></span></dt>
-<dd><dl><dt><span class="section"><a href="hello-harfbuzz.html#what-harfbuzz-doesnt-do">What Harfbuzz doesn't do</a></span></dt></dl></dd>
-<dt><span class="chapter"><a href="buffers-language-script-and-direction.html">Buffers, language, script and direction</a></span></dt>
-<dd><dl>
-<dt><span class="section"><a href="buffers-language-script-and-direction.html#creating-and-destroying-buffers">Creating and destroying buffers</a></span></dt>
-<dt><span class="section"><a href="adding-text-to-the-buffer.html">Adding text to the buffer</a></span></dt>
-<dt><span class="section"><a href="setting-buffer-properties.html">Setting buffer properties</a></span></dt>
-<dt><span class="section"><a href="what-about-the-other-scripts.html">What about the other scripts?</a></span></dt>
-<dt><span class="section"><a href="customizing-unicode-functions.html">Customizing Unicode functions</a></span></dt>
-</dl></dd>
-<dt><span class="chapter"><a href="fonts-and-faces.html">Fonts and faces</a></span></dt>
-<dd><dl>
-<dt><span class="section"><a href="fonts-and-faces.html#using-freetype">Using FreeType</a></span></dt>
-<dt><span class="section"><a href="using-harfbuzzs-native-opentype-implementation.html">Using Harfbuzz's native OpenType implementation</a></span></dt>
-<dt><span class="section"><a href="using-your-own-font-functions.html">Using your own font functions</a></span></dt>
-</dl></dd>
-<dt><span class="chapter"><a href="shaping-and-shape-plans.html">Shaping and shape plans</a></span></dt>
-<dd><dl>
-<dt><span class="section"><a href="shaping-and-shape-plans.html#opentype-features">OpenType features</a></span></dt>
-<dt><span class="section"><a href="plans-and-caching.html">Plans and caching</a></span></dt>
-</dl></dd>
-</dl></dd>
-<dt><span class="part"><a href="pt02.html">II. Reference manual</a></span></dt>
-<dd><dl>
-<dt><span class="chapter"><a href="ch07.html">Harfbuzz API</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-Buffers.html">Buffers</a></span><span class="refpurpose"> — Input and output buffers</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-Shaping.html">Shaping</a></span><span class="refpurpose"> — Conversion of text strings into positioned glyphs</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-ot-font.html">hb-ot-font</a></span><span class="refpurpose"></span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="harfbuzz-hb-ot-shape.html">hb-ot-shape</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="api-index-0-9-2.html">Index of new symbols in 0.9.2</a></span></dt>
-<dt><span class="index"><a href="api-index-0-9-5.html">Index of new symbols in 0.9.5</a></span></dt>
-<dt><span class="index"><a href="api-index-0-9-7.html">Index of new symbols in 0.9.7</a></span></dt>
-<dt><span class="index"><a href="api-index-0-9-8.html">Index of new symbols in 0.9.8</a></span></dt>
-<dt><span class="index"><a href="api-index-0-9-10.html">Index of new symbols in 0.9.10</a></span></dt>
-<dt><span class="index"><a href="api-index-0-9-11.html">Index of new symbols in 0.9.11</a></span></dt>
-<dt><span class="index"><a href="api-index-0-9-20.html">Index of new symbols in 0.9.20</a></span></dt>
-<dt><span class="index"><a href="api-index-0-9-22.html">Index of new symbols in 0.9.22</a></span></dt>
-<dt><span class="index"><a href="api-index-0-9-28.html">Index of new symbols in 0.9.28</a></span></dt>
-<dt><span class="index"><a href="api-index-0-9-30.html">Index of new symbols in 0.9.30</a></span></dt>
-<dt><span class="index"><a href="api-index-0-9-31.html">Index of new symbols in 0.9.31</a></span></dt>
-<dt><span class="index"><a href="api-index-0-9-38.html">Index of new symbols in 0.9.38</a></span></dt>
-<dt><span class="index"><a href="api-index-0-9-39.html">Index of new symbols in 0.9.39</a></span></dt>
-<dt><span class="index"><a href="api-index-0-9-41.html">Index of new symbols in 0.9.41</a></span></dt>
-<dt><span class="index"><a href="api-index-0-9-42.html">Index of new symbols in 0.9.42</a></span></dt>
-<dt><span class="index"><a href="api-index-1-0-5.html">Index of new symbols in 1.0.5</a></span></dt>
-<dt><span class="index"><a href="api-index-1-1-2.html">Index of new symbols in 1.1.2</a></span></dt>
-<dt><span class="index"><a href="api-index-1-1-3.html">Index of new symbols in 1.1.3</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></dd>
-</dl></div>
-</div>
-<div class="footer">
-<hr>Generated by GTK-Doc V1.24.1</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/html/install-harfbuzz.html b/docs/html/install-harfbuzz.html
deleted file mode 100644 (file)
index 10017eb..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Install Harfbuzz: HarfBuzz Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="HarfBuzz Manual">
-<link rel="up" href="pt01.html" title="Part I. User's manual">
-<link rel="prev" href="why-is-it-called-harfbuzz.html" title="Why is it called Harfbuzz?">
-<link rel="next" href="building.html" title="Building">
-<meta name="generator" content="GTK-Doc V1.24.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><a accesskey="u" href="pt01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="why-is-it-called-harfbuzz.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="building.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="install-harfbuzz"></a>Install Harfbuzz</h2></div></div></div>
-<div class="toc"><dl class="toc">
-<dt><span class="section"><a href="install-harfbuzz.html#download">Download</a></span></dt>
-<dt><span class="section"><a href="building.html">Building</a></span></dt>
-</dl></div>
-<div class="section">
-<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="download"></a>Download</h2></div></div></div>
-<p>
-      For tarball releases of HarfBuzz, look
-      <a class="ulink" href="http://www.freedesktop.org/software/harfbuzz/release/" target="_top">here</a>.
-      At the same place you will
-      also find Win32 binary bundles that include libharfbuzz DLL, hb-view.exe,
-      hb-shape.exe, and all dependencies.
-    </p>
-<p>
-      The canonical source tree is available
-      <a class="ulink" href="http://cgit.freedesktop.org/harfbuzz/" target="_top">here</a>.
-      Also available on <a class="ulink" href="https://github.com/behdad/harfbuzz" target="_top">github</a>.
-    </p>
-<p>
-      The API that comes with <code class="filename">hb.h</code> will
-      not change incompatibly. Other, peripheral, headers are more likely to go
-      through minor modifications, but again, will do our best to never change
-      API in an incompatible way. We will never break the ABI.
-    </p>
-<p>
-      If you are not sure whether Pango or HarfBuzz is right for you, read
-      <a class="ulink" href="http://mces.blogspot.in/2009/11/pango-vs-harfbuzz.html" target="_top">this</a>.
-    </p>
-</div>
-</div>
-<div class="footer">
-<hr>Generated by GTK-Doc V1.24.1</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/html/plans-and-caching.html b/docs/html/plans-and-caching.html
deleted file mode 100644 (file)
index 8ab4e97..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Plans and caching: HarfBuzz Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="HarfBuzz Manual">
-<link rel="up" href="shaping-and-shape-plans.html" title="Shaping and shape plans">
-<link rel="prev" href="shaping-and-shape-plans.html" title="Shaping and shape plans">
-<link rel="next" href="pt02.html" title="Part II. Reference manual">
-<meta name="generator" content="GTK-Doc V1.24.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><a accesskey="u" href="shaping-and-shape-plans.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="shaping-and-shape-plans.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="pt02.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
-<div class="section">
-<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="plans-and-caching"></a>Plans and caching</h2></div></div></div>
-<p>
-    </p>
-</div>
-<div class="footer">
-<hr>Generated by GTK-Doc V1.24.1</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/html/pt01.html b/docs/html/pt01.html
deleted file mode 100644 (file)
index e49ad58..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Part I. User's manual: HarfBuzz Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="HarfBuzz Manual">
-<link rel="up" href="index.html" title="HarfBuzz Manual">
-<link rel="prev" href="index.html" title="HarfBuzz Manual">
-<link rel="next" href="what-is-harfbuzz.html" title="What is Harfbuzz?">
-<meta name="generator" content="GTK-Doc V1.24.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="what-is-harfbuzz.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
-<div class="part">
-<div class="titlepage"><div><div><h1 class="title">
-<a name="id-1.2"></a>Part I. User's manual</h1></div></div></div>
-<div class="toc">
-<p><b>Table of Contents</b></p>
-<dl class="toc">
-<dt><span class="chapter"><a href="what-is-harfbuzz.html">What is Harfbuzz?</a></span></dt>
-<dd><dl>
-<dt><span class="section"><a href="what-is-harfbuzz.html#why-do-i-need-it">Why do I need it?</a></span></dt>
-<dt><span class="section"><a href="why-is-it-called-harfbuzz.html">Why is it called Harfbuzz?</a></span></dt>
-</dl></dd>
-<dt><span class="chapter"><a href="install-harfbuzz.html">Install Harfbuzz</a></span></dt>
-<dd><dl>
-<dt><span class="section"><a href="install-harfbuzz.html#download">Download</a></span></dt>
-<dt><span class="section"><a href="building.html">Building</a></span></dt>
-</dl></dd>
-<dt><span class="chapter"><a href="hello-harfbuzz.html">Hello, Harfbuzz</a></span></dt>
-<dd><dl><dt><span class="section"><a href="hello-harfbuzz.html#what-harfbuzz-doesnt-do">What Harfbuzz doesn't do</a></span></dt></dl></dd>
-<dt><span class="chapter"><a href="buffers-language-script-and-direction.html">Buffers, language, script and direction</a></span></dt>
-<dd><dl>
-<dt><span class="section"><a href="buffers-language-script-and-direction.html#creating-and-destroying-buffers">Creating and destroying buffers</a></span></dt>
-<dt><span class="section"><a href="adding-text-to-the-buffer.html">Adding text to the buffer</a></span></dt>
-<dt><span class="section"><a href="setting-buffer-properties.html">Setting buffer properties</a></span></dt>
-<dt><span class="section"><a href="what-about-the-other-scripts.html">What about the other scripts?</a></span></dt>
-<dt><span class="section"><a href="customizing-unicode-functions.html">Customizing Unicode functions</a></span></dt>
-</dl></dd>
-<dt><span class="chapter"><a href="fonts-and-faces.html">Fonts and faces</a></span></dt>
-<dd><dl>
-<dt><span class="section"><a href="fonts-and-faces.html#using-freetype">Using FreeType</a></span></dt>
-<dt><span class="section"><a href="using-harfbuzzs-native-opentype-implementation.html">Using Harfbuzz's native OpenType implementation</a></span></dt>
-<dt><span class="section"><a href="using-your-own-font-functions.html">Using your own font functions</a></span></dt>
-</dl></dd>
-<dt><span class="chapter"><a href="shaping-and-shape-plans.html">Shaping and shape plans</a></span></dt>
-<dd><dl>
-<dt><span class="section"><a href="shaping-and-shape-plans.html#opentype-features">OpenType features</a></span></dt>
-<dt><span class="section"><a href="plans-and-caching.html">Plans and caching</a></span></dt>
-</dl></dd>
-</dl>
-</div>
-<div class="sect1">
-<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="glyph-information"></a>Glyph information</h2></div></div></div>
-<div class="sect2">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="names-and-numbers"></a>Names and numbers</h3></div></div></div>
-<p>
-    </p>
-</div>
-</div>
-</div>
-<div class="footer">
-<hr>Generated by GTK-Doc V1.24.1</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/html/pt02.html b/docs/html/pt02.html
deleted file mode 100644 (file)
index f5580c5..0000000
+++ /dev/null
@@ -1,138 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Part II. Reference manual: HarfBuzz Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="HarfBuzz Manual">
-<link rel="up" href="index.html" title="HarfBuzz Manual">
-<link rel="prev" href="plans-and-caching.html" title="Plans and caching">
-<link rel="next" href="ch07.html" title="Harfbuzz API">
-<meta name="generator" content="GTK-Doc V1.24.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="plans-and-caching.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="ch07.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
-<div class="part">
-<div class="titlepage"><div>
-<div><h1 class="title">
-<a name="id-1.3"></a>Part II. Reference manual</h1></div>
-<div><p class="releaseinfo">
-        This document is for HarfBuzz 1.2.7
-.
-        
-      </p></div>
-</div></div>
-<div class="toc">
-<p><b>Table of Contents</b></p>
-<dl class="toc">
-<dt><span class="chapter"><a href="ch07.html">Harfbuzz API</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-Buffers.html">Buffers</a></span><span class="refpurpose"> — Input and output buffers</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-Shaping.html">Shaping</a></span><span class="refpurpose"> — Conversion of text strings into positioned glyphs</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-ot-font.html">hb-ot-font</a></span><span class="refpurpose"></span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="harfbuzz-hb-ot-shape.html">hb-ot-shape</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="api-index-0-9-2.html">Index of new symbols in 0.9.2</a></span></dt>
-<dt><span class="index"><a href="api-index-0-9-5.html">Index of new symbols in 0.9.5</a></span></dt>
-<dt><span class="index"><a href="api-index-0-9-7.html">Index of new symbols in 0.9.7</a></span></dt>
-<dt><span class="index"><a href="api-index-0-9-8.html">Index of new symbols in 0.9.8</a></span></dt>
-<dt><span class="index"><a href="api-index-0-9-10.html">Index of new symbols in 0.9.10</a></span></dt>
-<dt><span class="index"><a href="api-index-0-9-11.html">Index of new symbols in 0.9.11</a></span></dt>
-<dt><span class="index"><a href="api-index-0-9-20.html">Index of new symbols in 0.9.20</a></span></dt>
-<dt><span class="index"><a href="api-index-0-9-22.html">Index of new symbols in 0.9.22</a></span></dt>
-<dt><span class="index"><a href="api-index-0-9-28.html">Index of new symbols in 0.9.28</a></span></dt>
-<dt><span class="index"><a href="api-index-0-9-30.html">Index of new symbols in 0.9.30</a></span></dt>
-<dt><span class="index"><a href="api-index-0-9-31.html">Index of new symbols in 0.9.31</a></span></dt>
-<dt><span class="index"><a href="api-index-0-9-38.html">Index of new symbols in 0.9.38</a></span></dt>
-<dt><span class="index"><a href="api-index-0-9-39.html">Index of new symbols in 0.9.39</a></span></dt>
-<dt><span class="index"><a href="api-index-0-9-41.html">Index of new symbols in 0.9.41</a></span></dt>
-<dt><span class="index"><a href="api-index-0-9-42.html">Index of new symbols in 0.9.42</a></span></dt>
-<dt><span class="index"><a href="api-index-1-0-5.html">Index of new symbols in 1.0.5</a></span></dt>
-<dt><span class="index"><a href="api-index-1-1-2.html">Index of new symbols in 1.1.2</a></span></dt>
-<dt><span class="index"><a href="api-index-1-1-3.html">Index of new symbols in 1.1.3</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.24.1</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/html/setting-buffer-properties.html b/docs/html/setting-buffer-properties.html
deleted file mode 100644 (file)
index 0c1cc60..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Setting buffer properties: HarfBuzz Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="HarfBuzz Manual">
-<link rel="up" href="buffers-language-script-and-direction.html" title="Buffers, language, script and direction">
-<link rel="prev" href="adding-text-to-the-buffer.html" title="Adding text to the buffer">
-<link rel="next" href="what-about-the-other-scripts.html" title="What about the other scripts?">
-<meta name="generator" content="GTK-Doc V1.24.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><a accesskey="u" href="buffers-language-script-and-direction.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="adding-text-to-the-buffer.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="what-about-the-other-scripts.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
-<div class="section">
-<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="setting-buffer-properties"></a>Setting buffer properties</h2></div></div></div>
-<p>
-    </p>
-</div>
-<div class="footer">
-<hr>Generated by GTK-Doc V1.24.1</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/html/shaping-and-shape-plans.html b/docs/html/shaping-and-shape-plans.html
deleted file mode 100644 (file)
index 04bffbb..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Shaping and shape plans: HarfBuzz Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="HarfBuzz Manual">
-<link rel="up" href="pt01.html" title="Part I. User's manual">
-<link rel="prev" href="using-your-own-font-functions.html" title="Using your own font functions">
-<link rel="next" href="plans-and-caching.html" title="Plans and caching">
-<meta name="generator" content="GTK-Doc V1.24.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><a accesskey="u" href="pt01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="using-your-own-font-functions.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="plans-and-caching.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="shaping-and-shape-plans"></a>Shaping and shape plans</h2></div></div></div>
-<div class="toc"><dl class="toc">
-<dt><span class="section"><a href="shaping-and-shape-plans.html#opentype-features">OpenType features</a></span></dt>
-<dt><span class="section"><a href="plans-and-caching.html">Plans and caching</a></span></dt>
-</dl></div>
-<div class="section">
-<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="opentype-features"></a>OpenType features</h2></div></div></div>
-<p>
-    </p>
-</div>
-</div>
-<div class="footer">
-<hr>Generated by GTK-Doc V1.24.1</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/html/using-harfbuzzs-native-opentype-implementation.html b/docs/html/using-harfbuzzs-native-opentype-implementation.html
deleted file mode 100644 (file)
index 1980ba8..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Using Harfbuzz's native OpenType implementation: HarfBuzz Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="HarfBuzz Manual">
-<link rel="up" href="fonts-and-faces.html" title="Fonts and faces">
-<link rel="prev" href="fonts-and-faces.html" title="Fonts and faces">
-<link rel="next" href="using-your-own-font-functions.html" title="Using your own font functions">
-<meta name="generator" content="GTK-Doc V1.24.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><a accesskey="u" href="fonts-and-faces.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="fonts-and-faces.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="using-your-own-font-functions.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
-<div class="section">
-<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="using-harfbuzzs-native-opentype-implementation"></a>Using Harfbuzz's native OpenType implementation</h2></div></div></div>
-<p>
-    </p>
-</div>
-<div class="footer">
-<hr>Generated by GTK-Doc V1.24.1</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/html/using-your-own-font-functions.html b/docs/html/using-your-own-font-functions.html
deleted file mode 100644 (file)
index b1e94d8..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Using your own font functions: HarfBuzz Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="HarfBuzz Manual">
-<link rel="up" href="fonts-and-faces.html" title="Fonts and faces">
-<link rel="prev" href="using-harfbuzzs-native-opentype-implementation.html" title="Using Harfbuzz's native OpenType implementation">
-<link rel="next" href="shaping-and-shape-plans.html" title="Shaping and shape plans">
-<meta name="generator" content="GTK-Doc V1.24.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><a accesskey="u" href="fonts-and-faces.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="using-harfbuzzs-native-opentype-implementation.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="shaping-and-shape-plans.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
-<div class="section">
-<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="using-your-own-font-functions"></a>Using your own font functions</h2></div></div></div>
-<p>
-    </p>
-</div>
-<div class="footer">
-<hr>Generated by GTK-Doc V1.24.1</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/html/what-about-the-other-scripts.html b/docs/html/what-about-the-other-scripts.html
deleted file mode 100644 (file)
index 0550e73..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>What about the other scripts?: HarfBuzz Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="HarfBuzz Manual">
-<link rel="up" href="buffers-language-script-and-direction.html" title="Buffers, language, script and direction">
-<link rel="prev" href="setting-buffer-properties.html" title="Setting buffer properties">
-<link rel="next" href="customizing-unicode-functions.html" title="Customizing Unicode functions">
-<meta name="generator" content="GTK-Doc V1.24.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><a accesskey="u" href="buffers-language-script-and-direction.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="setting-buffer-properties.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="customizing-unicode-functions.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
-<div class="section">
-<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="what-about-the-other-scripts"></a>What about the other scripts?</h2></div></div></div>
-<p>
-    </p>
-</div>
-<div class="footer">
-<hr>Generated by GTK-Doc V1.24.1</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/html/what-is-harfbuzz.html b/docs/html/what-is-harfbuzz.html
deleted file mode 100644 (file)
index d791d47..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>What is Harfbuzz?: HarfBuzz Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="HarfBuzz Manual">
-<link rel="up" href="pt01.html" title="Part I. User's manual">
-<link rel="prev" href="pt01.html" title="Part I. User's manual">
-<link rel="next" href="why-is-it-called-harfbuzz.html" title="Why is it called Harfbuzz?">
-<meta name="generator" content="GTK-Doc V1.24.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><a accesskey="u" href="pt01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="pt01.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="why-is-it-called-harfbuzz.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="what-is-harfbuzz"></a>What is Harfbuzz?</h2></div></div></div>
-<div class="toc"><dl class="toc">
-<dt><span class="section"><a href="what-is-harfbuzz.html#why-do-i-need-it">Why do I need it?</a></span></dt>
-<dt><span class="section"><a href="why-is-it-called-harfbuzz.html">Why is it called Harfbuzz?</a></span></dt>
-</dl></div>
-<p>
-    Harfbuzz is a <span class="emphasis"><em>text shaping engine</em></span>. It solves
-    the problem of selecting and positioning glyphs from a font given a
-    Unicode string.
-  </p>
-<div class="section">
-<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="why-do-i-need-it"></a>Why do I need it?</h2></div></div></div>
-<p>
-      Text shaping is an integral part of preparing text for display. It
-      is a fairly low level operation; Harfbuzz is used directly by
-      graphic rendering libraries such as Pango, and the layout engines
-      in Firefox, LibreOffice and Chromium. Unless you are
-      <span class="emphasis"><em>writing</em></span> one of these layout engines yourself,
-      you will probably not need to use Harfbuzz - normally higher level
-      libraries will turn text into glyphs for you.
-    </p>
-<p>
-      However, if you <span class="emphasis"><em>are</em></span> writing a layout engine
-      or graphics library yourself, you will need to perform text
-      shaping, and this is where Harfbuzz can help you. Here are some
-      reasons why you need it:
-    </p>
-<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
-<li class="listitem"><p>
-          OpenType fonts contain a set of glyphs, indexed by glyph ID.
-          The glyph ID within the font does not necessarily relate to a
-          Unicode codepoint. For instance, some fonts have the letter
-          "a" as glyph ID 1. To pull the right glyph out of
-          the font in order to display it, you need to consult a table
-          within the font (the "cmap" table) which maps
-          Unicode codepoints to glyph IDs. Text shaping turns codepoints
-          into glyph IDs.
-        </p></li>
-<li class="listitem"><p>
-          Many OpenType fonts contain ligatures: combinations of
-          characters which are rendered together. For instance, it's
-          common for the <code class="literal">fi</code> combination to appear in
-          print as the single ligature "fi". Whether you should
-          render text as <code class="literal">fi</code> or "fi" does not
-          depend on the input text, but on the capabilities of the font
-          and the level of ligature application you wish to perform.
-          Text shaping involves querying the font's ligature tables and
-          determining what substitutions should be made.
-        </p></li>
-<li class="listitem"><p>
-          While ligatures like "fi" are typographic
-          refinements, some languages <span class="emphasis"><em>require</em></span> such
-          substitutions to be made in order to display text correctly.
-          In Tamil, when the letter "TTA" (ட) letter is
-          followed by "U" (உ), the combination should appear
-          as the single glyph "டு". The sequence of Unicode
-          characters "டஉ" needs to be rendered as a single
-          glyph from the font - text shaping chooses the correct glyph
-          from the sequence of characters provided.
-        </p></li>
-<li class="listitem"><p>
-          Similarly, each Arabic character has four different variants:
-          within a font, there will be glyphs for the initial, medial,
-          final, and isolated forms of each letter. Unicode only encodes
-          one codepoint per character, and so a Unicode string will not
-          tell you which glyph to use. Text shaping chooses the correct
-          form of the letter and returns the correct glyph from the font
-          that you need to render.
-        </p></li>
-<li class="listitem"><p>
-          Other languages have marks and accents which need to be
-          rendered in certain positions around a base character. For
-          instance, the Moldovan language has the Cyrillic letter
-          "zhe" (ж) with a breve accent, like so: ӂ. Some
-          fonts will contain this character as an individual glyph,
-          whereas other fonts will not contain a zhe-with-breve glyph
-          but expect the rendering engine to form the character by
-          overlaying the two glyphs ж and ˘. Where you should draw the
-          combining breve depends on the height of the preceding glyph.
-          Again, for Arabic, the correct positioning of vowel marks
-          depends on the height of the character on which you are
-          placing the mark. Text shaping tells you whether you have a
-          precomposed glyph within your font or if you need to compose a
-          glyph yourself out of combining marks, and if so, where to
-          position those marks.
-        </p></li>
-</ul></div>
-<p>
-      If this is something that you need to do, then you need a text
-      shaping engine: you could use Uniscribe if you are using Windows;
-      you could use CoreText on OS X; or you could use Harfbuzz. In the
-      rest of this manual, we are going to assume that you are the
-      implementor of a text layout engine.
-    </p>
-</div>
-</div>
-<div class="footer">
-<hr>Generated by GTK-Doc V1.24.1</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/html/why-is-it-called-harfbuzz.html b/docs/html/why-is-it-called-harfbuzz.html
deleted file mode 100644 (file)
index afe00b0..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Why is it called Harfbuzz?: HarfBuzz Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="HarfBuzz Manual">
-<link rel="up" href="what-is-harfbuzz.html" title="What is Harfbuzz?">
-<link rel="prev" href="what-is-harfbuzz.html" title="What is Harfbuzz?">
-<link rel="next" href="install-harfbuzz.html" title="Install Harfbuzz">
-<meta name="generator" content="GTK-Doc V1.24.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><a accesskey="u" href="what-is-harfbuzz.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="what-is-harfbuzz.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="install-harfbuzz.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
-<div class="section">
-<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="why-is-it-called-harfbuzz"></a>Why is it called Harfbuzz?</h2></div></div></div>
-<p>
-      Harfbuzz began its life as text shaping code within the FreeType
-      project, (and you will see references to the FreeType authors
-      within the source code copyright declarations) but was then
-      abstracted out to its own project. This project is maintained by
-      Behdad Esfahbod, and named Harfbuzz. Originally, it was a shaping
-      engine for OpenType fonts - "Harfbuzz" is the Persian
-      for "open type".
-    </p>
-</div>
-<div class="footer">
-<hr>Generated by GTK-Doc V1.24.1</div>
-</body>
-</html>
\ No newline at end of file
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>
similarity index 90%
rename from docs/harfbuzz-sections.txt
rename to docs/reference/harfbuzz-sections.txt
index e0dc23d..b112047 100644 (file)
@@ -2,7 +2,6 @@
 <FILE>hb</FILE>
 <SUBSECTION Private>
 HB_H_IN
-HB_EXTERN
 </SECTION>
 
 <SECTION>
@@ -26,106 +25,97 @@ hb_memory_mode_t
 <SECTION>
 <FILE>hb-buffer</FILE>
 HB_SEGMENT_PROPERTIES_DEFAULT
-HB_BUFFER_REPLACEMENT_CODEPOINT_DEFAULT
-hb_buffer_create
-hb_buffer_reference
-hb_buffer_get_empty
-hb_buffer_destroy
-hb_buffer_reset
-hb_buffer_clear_contents
-hb_buffer_pre_allocate
-hb_buffer_allocation_successful
 hb_buffer_add
-hb_buffer_add_codepoints
-hb_buffer_add_utf32
 hb_buffer_add_utf16
+hb_buffer_add_utf32
 hb_buffer_add_utf8
-hb_buffer_add_latin1
-hb_buffer_set_content_type
+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_set_direction
 hb_buffer_get_direction
-hb_buffer_set_script
-hb_buffer_get_script
-hb_buffer_set_language
-hb_buffer_get_language
-hb_buffer_set_flags
+hb_buffer_get_empty
 hb_buffer_get_flags
-hb_buffer_set_cluster_level
-hb_buffer_get_cluster_level
-hb_buffer_set_length
+hb_buffer_get_glyph_infos
+hb_buffer_get_glyph_positions
+hb_buffer_get_language
 hb_buffer_get_length
-hb_buffer_set_segment_properties
+hb_buffer_get_replacement_codepoint
+hb_buffer_get_script
 hb_buffer_get_segment_properties
-hb_buffer_guess_segment_properties
-hb_buffer_set_unicode_funcs
 hb_buffer_get_unicode_funcs
-hb_buffer_set_user_data
 hb_buffer_get_user_data
-hb_buffer_get_glyph_infos
-hb_buffer_get_glyph_positions
-hb_buffer_set_replacement_codepoint
-hb_buffer_get_replacement_codepoint
+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_range
 hb_buffer_reverse_clusters
-hb_buffer_serialize_glyphs
-hb_buffer_deserialize_glyphs
+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_segment_properties_equal
-hb_segment_properties_hash
-hb_buffer_set_message_func
+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_buffer_content_type_t
-hb_buffer_flags_t
-hb_buffer_cluster_level_t
+hb_segment_properties_equal
+hb_segment_properties_hash
 hb_segment_properties_t
-hb_buffer_serialize_format_t
-hb_buffer_serialize_flags_t
-hb_buffer_message_func_t
 </SECTION>
 
 <SECTION>
 <FILE>hb-common</FILE>
-hb_tag_from_string
-hb_tag_to_string
-hb_direction_from_string
-hb_direction_to_string
-hb_script_from_iso15924_tag
-hb_script_from_string
-hb_script_to_iso15924_tag
-hb_script_get_horizontal_direction
-hb_language_from_string
-hb_language_to_string
-hb_language_get_default
+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_tag_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_TAG
-HB_TAG_NONE
-HB_TAG_MAX
-HB_TAG_MAX_SIGNED
-HB_UNTAG
-HB_DIRECTION_REVERSE
 HB_DIRECTION_IS_BACKWARD
 HB_DIRECTION_IS_FORWARD
 HB_DIRECTION_IS_HORIZONTAL
 HB_DIRECTION_IS_VALID
 HB_DIRECTION_IS_VERTICAL
-HB_LANGUAGE_INVALID
 <SUBSECTION Private>
 HB_BEGIN_DECLS
 HB_END_DECLS
@@ -252,27 +242,14 @@ hb_font_set_user_data
 hb_font_subtract_glyph_origin_for_direction
 hb_font_t
 hb_reference_table_func_t
-hb_font_funcs_set_font_h_extents_func
-hb_font_funcs_set_font_v_extents_func
-hb_font_get_extents_for_direction
-hb_font_get_font_extents_func_t
-hb_font_get_font_h_extents_func_t
-hb_font_get_font_v_extents_func_t
-hb_font_get_h_extents
-hb_font_get_v_extents
-hb_font_set_parent
 </SECTION>
 
 <SECTION>
 <FILE>hb-ft</FILE>
 hb_ft_face_create
 hb_ft_face_create_cached
-hb_ft_face_create_referenced
 hb_ft_font_create
-hb_ft_font_create_referenced
 hb_ft_font_get_face
-hb_ft_font_set_load_flags
-hb_ft_font_get_load_flags
 hb_ft_font_set_funcs
 </SECTION>
 
@@ -281,7 +258,6 @@ hb_ft_font_set_funcs
 hb_glib_get_unicode_funcs
 hb_glib_script_from_script
 hb_glib_script_to_script
-hb_glib_blob_create
 </SECTION>
 
 <SECTION>
@@ -303,13 +279,6 @@ HB_GOBJECT_TYPE_SHAPE_PLAN
 HB_GOBJECT_TYPE_UNICODE_COMBINING_CLASS
 HB_GOBJECT_TYPE_UNICODE_FUNCS
 HB_GOBJECT_TYPE_UNICODE_GENERAL_CATEGORY
-HB_GOBJECT_TYPE_BUFFER_CLUSTER_LEVEL
-HB_GOBJECT_TYPE_FEATURE
-HB_GOBJECT_TYPE_GLYPH_INFO
-HB_GOBJECT_TYPE_GLYPH_POSITION
-HB_GOBJECT_TYPE_SEGMENT_PROPERTIES
-HB_GOBJECT_TYPE_SET
-HB_GOBJECT_TYPE_USER_DATA_KEY
 hb_gobject_blob_get_type
 hb_gobject_buffer_content_type_get_type
 hb_gobject_buffer_flags_get_type
@@ -327,13 +296,6 @@ 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
-hb_gobject_buffer_cluster_level_get_type
-hb_gobject_feature_get_type
-hb_gobject_glyph_info_get_type
-hb_gobject_glyph_position_get_type
-hb_gobject_segment_properties_get_type
-hb_gobject_set_get_type
-hb_gobject_user_data_key_get_type
 <SUBSECTION Private>
 HB_GOBJECT_H_IN
 </SECTION>
@@ -381,7 +343,6 @@ HB_OT_LAYOUT_NO_SCRIPT_INDEX
 HB_OT_TAG_GDEF
 HB_OT_TAG_GPOS
 HB_OT_TAG_GSUB
-HB_OT_TAG_JSTF
 hb_ot_layout_collect_lookups
 hb_ot_layout_feature_get_lookups
 hb_ot_layout_get_attach_points
@@ -409,7 +370,6 @@ 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
-hb_ot_layout_language_get_required_feature_index
 <SUBSECTION Private>
 Xhb_ot_layout_lookup_enumerate_sequences
 Xhb_ot_layout_lookup_position
@@ -530,12 +490,12 @@ hb_uniscribe_font_get_logfontw
 
 <SECTION>
 <FILE>hb-version</FILE>
-HB_VERSION_ATLEAST
+HB_VERSION_CHECK
 HB_VERSION_MAJOR
 HB_VERSION_MICRO
 HB_VERSION_MINOR
 HB_VERSION_STRING
 hb_version
-hb_version_atleast
+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..1afb91d
--- /dev/null
@@ -0,0 +1,78 @@
+<!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="#glsE">E</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-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="glsE"></a><h3 class="title">E</h3>
+<dt>
+<a name="annotation-glossterm-element-type"></a>element-type</dt>
+<dd><p>Generics and defining elements of containers and arrays.</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
similarity index 68%
rename from docs/html/api-index-full.html
rename to docs/reference/html/api-index-full.html
index b82641b..bb4c5a0 100644 (file)
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>API Index: HarfBuzz Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="HarfBuzz Manual">
-<link rel="up" href="pt02.html" title="Part II. Reference manual">
+<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="api-index-0-9-2.html" title="Index of new symbols in 0.9.2">
-<meta name="generator" content="GTK-Doc V1.24.1 (XML mode)">
+<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">
@@ -43,9 +43,9 @@
                      <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><a accesskey="u" href="pt02.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></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="api-index-0-9-2.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></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">
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="harfbuzz-Buffers.html#hb-buffer-add" title="hb_buffer_add ()">hb_buffer_add</a>, function in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
+<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-Buffers.html#hb-buffer-add-codepoints" title="hb_buffer_add_codepoints ()">hb_buffer_add_codepoints</a>, function in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
+<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-Buffers.html#hb-buffer-add-latin1" title="hb_buffer_add_latin1 ()">hb_buffer_add_latin1</a>, function in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
+<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-Buffers.html#hb-buffer-add-utf16" title="hb_buffer_add_utf16 ()">hb_buffer_add_utf16</a>, function in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
+<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-Buffers.html#hb-buffer-add-utf32" title="hb_buffer_add_utf32 ()">hb_buffer_add_utf32</a>, function in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
+<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-Buffers.html#hb-buffer-add-utf8" title="hb_buffer_add_utf8 ()">hb_buffer_add_utf8</a>, function in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
+<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-Buffers.html#hb-buffer-allocation-successful" title="hb_buffer_allocation_successful ()">hb_buffer_allocation_successful</a>, function in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
+<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-Buffers.html#hb-buffer-clear-contents" title="hb_buffer_clear_contents ()">hb_buffer_clear_contents</a>, function in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
+<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-Buffers.html#hb-buffer-cluster-level-t" title="enum hb_buffer_cluster_level_t">hb_buffer_cluster_level_t</a>, enum in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
+<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-Buffers.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-Buffers.html" title="Buffers">Buffers</a>
+<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-Buffers.html#hb-buffer-create" title="hb_buffer_create ()">hb_buffer_create</a>, function in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-Buffers.html#hb-buffer-deserialize-glyphs" title="hb_buffer_deserialize_glyphs ()">hb_buffer_deserialize_glyphs</a>, function in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-Buffers.html#hb-buffer-destroy" title="hb_buffer_destroy ()">hb_buffer_destroy</a>, function in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
+<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>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="harfbuzz-Buffers.html#hb-buffer-flags-t" title="enum hb_buffer_flags_t">hb_buffer_flags_t</a>, enum in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-Buffers.html#hb-buffer-get-cluster-level" title="hb_buffer_get_cluster_level ()">hb_buffer_get_cluster_level</a>, function in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-Buffers.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-Buffers.html" title="Buffers">Buffers</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-Buffers.html#hb-buffer-get-direction" title="hb_buffer_get_direction ()">hb_buffer_get_direction</a>, function in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
+<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-Buffers.html#hb-buffer-get-empty" title="hb_buffer_get_empty ()">hb_buffer_get_empty</a>, function in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
+<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-Buffers.html#hb-buffer-get-flags" title="hb_buffer_get_flags ()">hb_buffer_get_flags</a>, function in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
+<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-Buffers.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-Buffers.html" title="Buffers">Buffers</a>
+<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-Buffers.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-Buffers.html" title="Buffers">Buffers</a>
+<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-Buffers.html#hb-buffer-get-language" title="hb_buffer_get_language ()">hb_buffer_get_language</a>, function in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
+<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-Buffers.html#hb-buffer-get-length" title="hb_buffer_get_length ()">hb_buffer_get_length</a>, function in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
+<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-Buffers.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-Buffers.html" title="Buffers">Buffers</a>
+<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-Buffers.html#hb-buffer-get-script" title="hb_buffer_get_script ()">hb_buffer_get_script</a>, function in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
+<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-Buffers.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-Buffers.html" title="Buffers">Buffers</a>
+<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-Buffers.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-Buffers.html" title="Buffers">Buffers</a>
+<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-Buffers.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-Buffers.html" title="Buffers">Buffers</a>
+<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-Buffers.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-Buffers.html" title="Buffers">Buffers</a>
+<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-Buffers.html#hb-buffer-message-func-t" title="hb_buffer_message_func_t ()">hb_buffer_message_func_t</a>, user_function in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
+<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-Buffers.html#hb-buffer-normalize-glyphs" title="hb_buffer_normalize_glyphs ()">hb_buffer_normalize_glyphs</a>, function in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
+<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-Buffers.html#hb-buffer-pre-allocate" title="hb_buffer_pre_allocate ()">hb_buffer_pre_allocate</a>, function in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
+<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-Buffers.html#hb-buffer-reference" title="hb_buffer_reference ()">hb_buffer_reference</a>, function in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
+<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-Buffers.html#HB-BUFFER-REPLACEMENT-CODEPOINT-DEFAULT:CAPS" title="HB_BUFFER_REPLACEMENT_CODEPOINT_DEFAULT">HB_BUFFER_REPLACEMENT_CODEPOINT_DEFAULT</a>, macro in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
+<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-Buffers.html#hb-buffer-reset" title="hb_buffer_reset ()">hb_buffer_reset</a>, function in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
+<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-Buffers.html#hb-buffer-reverse" title="hb_buffer_reverse ()">hb_buffer_reverse</a>, function in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
+<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-Buffers.html#hb-buffer-reverse-clusters" title="hb_buffer_reverse_clusters ()">hb_buffer_reverse_clusters</a>, function in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-Buffers.html#hb-buffer-reverse-range" title="hb_buffer_reverse_range ()">hb_buffer_reverse_range</a>, function in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
+<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>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="harfbuzz-Buffers.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-Buffers.html" title="Buffers">Buffers</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-Buffers.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-Buffers.html" title="Buffers">Buffers</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-Buffers.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-Buffers.html" title="Buffers">Buffers</a>
+<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-Buffers.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-Buffers.html" title="Buffers">Buffers</a>
+<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-Buffers.html#hb-buffer-serialize-glyphs" title="hb_buffer_serialize_glyphs ()">hb_buffer_serialize_glyphs</a>, function in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
+<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-Buffers.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-Buffers.html" title="Buffers">Buffers</a>
+<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-Buffers.html#hb-buffer-set-cluster-level" title="hb_buffer_set_cluster_level ()">hb_buffer_set_cluster_level</a>, function in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
+<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-Buffers.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-Buffers.html" title="Buffers">Buffers</a>
+<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-Buffers.html#hb-buffer-set-direction" title="hb_buffer_set_direction ()">hb_buffer_set_direction</a>, function in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
+<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-Buffers.html#hb-buffer-set-flags" title="hb_buffer_set_flags ()">hb_buffer_set_flags</a>, function in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
+<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-Buffers.html#hb-buffer-set-language" title="hb_buffer_set_language ()">hb_buffer_set_language</a>, function in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
+<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-Buffers.html#hb-buffer-set-length" title="hb_buffer_set_length ()">hb_buffer_set_length</a>, function in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
+<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-Buffers.html#hb-buffer-set-message-func" title="hb_buffer_set_message_func ()">hb_buffer_set_message_func</a>, function in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
+<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-Buffers.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-Buffers.html" title="Buffers">Buffers</a>
+<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-Buffers.html#hb-buffer-set-script" title="hb_buffer_set_script ()">hb_buffer_set_script</a>, function in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
+<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-Buffers.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-Buffers.html" title="Buffers">Buffers</a>
+<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-Buffers.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-Buffers.html" title="Buffers">Buffers</a>
+<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-Buffers.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-Buffers.html" title="Buffers">Buffers</a>
+<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-Buffers.html#hb-buffer-t">hb_buffer_t</a>, typedef in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
+<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>
 <dd></dd>
 <dt>
-<a class="link" href="harfbuzz-Shaping.html#hb-feature-from-string" title="hb_feature_from_string ()">hb_feature_from_string</a>, function in <a class="link" href="harfbuzz-Shaping.html" title="Shaping">Shaping</a>
+<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-Shaping.html#hb-feature-t-struct" title="hb_feature_t">hb_feature_t</a>, struct in <a class="link" href="harfbuzz-Shaping.html" title="Shaping">Shaping</a>
+<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-Shaping.html#hb-feature-to-string" title="hb_feature_to_string ()">hb_feature_to_string</a>, function in <a class="link" href="harfbuzz-Shaping.html" title="Shaping">Shaping</a>
+<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>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="harfbuzz-hb-font.html#hb-font-funcs-set-font-h-extents-func" title="hb_font_funcs_set_font_h_extents_func ()">hb_font_funcs_set_font_h_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-font-v-extents-func" title="hb_font_funcs_set_font_v_extents_func ()">hb_font_funcs_set_font_v_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-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>
 <dd></dd>
 <dt>
-<a class="link" href="harfbuzz-hb-font.html#hb-font-get-extents-for-direction" title="hb_font_get_extents_for_direction ()">hb_font_get_extents_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-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-font-extents-func-t" title="hb_font_get_font_extents_func_t ()">hb_font_get_font_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-font-h-extents-func-t" title="hb_font_get_font_h_extents_func_t">hb_font_get_font_h_extents_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-font-v-extents-func-t" title="hb_font_get_font_v_extents_func_t">hb_font_get_font_v_extents_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" 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>
 <dd></dd>
 <dt>
-<a class="link" href="harfbuzz-hb-font.html#hb-font-get-h-extents" title="hb_font_get_h_extents ()">hb_font_get_h_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-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>
 <dd></dd>
 <dt>
-<a class="link" href="harfbuzz-hb-font.html#hb-font-get-v-extents" title="hb_font_get_v_extents ()">hb_font_get_v_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-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>
 <dd></dd>
 <dt>
-<a class="link" href="harfbuzz-hb-font.html#hb-font-set-parent" title="hb_font_set_parent ()">hb_font_set_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-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>
 <dd></dd>
 <dt>
-<a class="link" href="harfbuzz-hb-ft.html#hb-ft-face-create-referenced" title="hb_ft_face_create_referenced ()">hb_ft_face_create_referenced</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-create-referenced" title="hb_ft_font_create_referenced ()">hb_ft_font_create_referenced</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-get-load-flags" title="hb_ft_font_get_load_flags ()">hb_ft_font_get_load_flags</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>
-<dt>
-<a class="link" href="harfbuzz-hb-ft.html#hb-ft-font-set-load-flags" title="hb_ft_font_set_load_flags ()">hb_ft_font_set_load_flags</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-blob-create" title="hb_glib_blob_create ()">hb_glib_blob_create</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-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>
 <dd></dd>
 <dt>
-<a class="link" href="harfbuzz-Buffers.html#hb-glyph-info-t-struct" title="hb_glyph_info_t">hb_glyph_info_t</a>, struct in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-Buffers.html#hb-glyph-position-t-struct" title="hb_glyph_position_t">hb_glyph_position_t</a>, struct in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-hb-gobject.html#hb-gobject-blob-get-type" title="hb_gobject_blob_get_type ()">hb_gobject_blob_get_type</a>, function in <a class="link" href="harfbuzz-hb-gobject.html" title="hb-gobject">hb-gobject</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-hb-gobject.html#hb-gobject-buffer-cluster-level-get-type" title="hb_gobject_buffer_cluster_level_get_type ()">hb_gobject_buffer_cluster_level_get_type</a>, function in <a class="link" href="harfbuzz-hb-gobject.html" title="hb-gobject">hb-gobject</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-hb-gobject.html#hb-gobject-buffer-content-type-get-type" title="hb_gobject_buffer_content_type_get_type ()">hb_gobject_buffer_content_type_get_type</a>, function in <a class="link" href="harfbuzz-hb-gobject.html" title="hb-gobject">hb-gobject</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-hb-gobject.html#hb-gobject-buffer-flags-get-type" title="hb_gobject_buffer_flags_get_type ()">hb_gobject_buffer_flags_get_type</a>, function in <a class="link" href="harfbuzz-hb-gobject.html" title="hb-gobject">hb-gobject</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-hb-gobject.html#hb-gobject-buffer-get-type" title="hb_gobject_buffer_get_type ()">hb_gobject_buffer_get_type</a>, function in <a class="link" href="harfbuzz-hb-gobject.html" title="hb-gobject">hb-gobject</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-hb-gobject.html#hb-gobject-buffer-serialize-flags-get-type" title="hb_gobject_buffer_serialize_flags_get_type ()">hb_gobject_buffer_serialize_flags_get_type</a>, function in <a class="link" href="harfbuzz-hb-gobject.html" title="hb-gobject">hb-gobject</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-hb-gobject.html#hb-gobject-buffer-serialize-format-get-type" title="hb_gobject_buffer_serialize_format_get_type ()">hb_gobject_buffer_serialize_format_get_type</a>, function in <a class="link" href="harfbuzz-hb-gobject.html" title="hb-gobject">hb-gobject</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-hb-gobject.html#hb-gobject-direction-get-type" title="hb_gobject_direction_get_type ()">hb_gobject_direction_get_type</a>, function in <a class="link" href="harfbuzz-hb-gobject.html" title="hb-gobject">hb-gobject</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-hb-gobject.html#hb-gobject-face-get-type" title="hb_gobject_face_get_type ()">hb_gobject_face_get_type</a>, function in <a class="link" href="harfbuzz-hb-gobject.html" title="hb-gobject">hb-gobject</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-hb-gobject.html#hb-gobject-feature-get-type" title="hb_gobject_feature_get_type ()">hb_gobject_feature_get_type</a>, function in <a class="link" href="harfbuzz-hb-gobject.html" title="hb-gobject">hb-gobject</a>
+<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-gobject.html#hb-gobject-font-funcs-get-type" title="hb_gobject_font_funcs_get_type ()">hb_gobject_font_funcs_get_type</a>, function in <a class="link" href="harfbuzz-hb-gobject.html" title="hb-gobject">hb-gobject</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-hb-gobject.html#hb-gobject-font-get-type" title="hb_gobject_font_get_type ()">hb_gobject_font_get_type</a>, function in <a class="link" href="harfbuzz-hb-gobject.html" title="hb-gobject">hb-gobject</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-hb-gobject.html#hb-gobject-glyph-info-get-type" title="hb_gobject_glyph_info_get_type ()">hb_gobject_glyph_info_get_type</a>, function in <a class="link" href="harfbuzz-hb-gobject.html" title="hb-gobject">hb-gobject</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-hb-gobject.html#hb-gobject-glyph-position-get-type" title="hb_gobject_glyph_position_get_type ()">hb_gobject_glyph_position_get_type</a>, function in <a class="link" href="harfbuzz-hb-gobject.html" title="hb-gobject">hb-gobject</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-hb-gobject.html#hb-gobject-memory-mode-get-type" title="hb_gobject_memory_mode_get_type ()">hb_gobject_memory_mode_get_type</a>, function in <a class="link" href="harfbuzz-hb-gobject.html" title="hb-gobject">hb-gobject</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-hb-gobject.html#hb-gobject-ot-layout-glyph-class-get-type" title="hb_gobject_ot_layout_glyph_class_get_type ()">hb_gobject_ot_layout_glyph_class_get_type</a>, function in <a class="link" href="harfbuzz-hb-gobject.html" title="hb-gobject">hb-gobject</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-hb-gobject.html#hb-gobject-script-get-type" title="hb_gobject_script_get_type ()">hb_gobject_script_get_type</a>, function in <a class="link" href="harfbuzz-hb-gobject.html" title="hb-gobject">hb-gobject</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-hb-gobject.html#hb-gobject-segment-properties-get-type" title="hb_gobject_segment_properties_get_type ()">hb_gobject_segment_properties_get_type</a>, function in <a class="link" href="harfbuzz-hb-gobject.html" title="hb-gobject">hb-gobject</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-hb-gobject.html#hb-gobject-set-get-type" title="hb_gobject_set_get_type ()">hb_gobject_set_get_type</a>, function in <a class="link" href="harfbuzz-hb-gobject.html" title="hb-gobject">hb-gobject</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-hb-gobject.html#hb-gobject-shape-plan-get-type" title="hb_gobject_shape_plan_get_type ()">hb_gobject_shape_plan_get_type</a>, function in <a class="link" href="harfbuzz-hb-gobject.html" title="hb-gobject">hb-gobject</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-hb-gobject.html#HB-GOBJECT-TYPE-BLOB:CAPS" title="HB_GOBJECT_TYPE_BLOB">HB_GOBJECT_TYPE_BLOB</a>, macro in <a class="link" href="harfbuzz-hb-gobject.html" title="hb-gobject">hb-gobject</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-hb-gobject.html#HB-GOBJECT-TYPE-BUFFER:CAPS" title="HB_GOBJECT_TYPE_BUFFER">HB_GOBJECT_TYPE_BUFFER</a>, macro in <a class="link" href="harfbuzz-hb-gobject.html" title="hb-gobject">hb-gobject</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-hb-gobject.html#HB-GOBJECT-TYPE-BUFFER-CLUSTER-LEVEL:CAPS" title="HB_GOBJECT_TYPE_BUFFER_CLUSTER_LEVEL">HB_GOBJECT_TYPE_BUFFER_CLUSTER_LEVEL</a>, macro in <a class="link" href="harfbuzz-hb-gobject.html" title="hb-gobject">hb-gobject</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-hb-gobject.html#HB-GOBJECT-TYPE-BUFFER-CONTENT-TYPE:CAPS" title="HB_GOBJECT_TYPE_BUFFER_CONTENT_TYPE">HB_GOBJECT_TYPE_BUFFER_CONTENT_TYPE</a>, macro in <a class="link" href="harfbuzz-hb-gobject.html" title="hb-gobject">hb-gobject</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-hb-gobject.html#HB-GOBJECT-TYPE-BUFFER-FLAGS:CAPS" title="HB_GOBJECT_TYPE_BUFFER_FLAGS">HB_GOBJECT_TYPE_BUFFER_FLAGS</a>, macro in <a class="link" href="harfbuzz-hb-gobject.html" title="hb-gobject">hb-gobject</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-hb-gobject.html#HB-GOBJECT-TYPE-BUFFER-SERIALIZE-FLAGS:CAPS" title="HB_GOBJECT_TYPE_BUFFER_SERIALIZE_FLAGS">HB_GOBJECT_TYPE_BUFFER_SERIALIZE_FLAGS</a>, macro in <a class="link" href="harfbuzz-hb-gobject.html" title="hb-gobject">hb-gobject</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-hb-gobject.html#HB-GOBJECT-TYPE-BUFFER-SERIALIZE-FORMAT:CAPS" title="HB_GOBJECT_TYPE_BUFFER_SERIALIZE_FORMAT">HB_GOBJECT_TYPE_BUFFER_SERIALIZE_FORMAT</a>, macro in <a class="link" href="harfbuzz-hb-gobject.html" title="hb-gobject">hb-gobject</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-hb-gobject.html#HB-GOBJECT-TYPE-DIRECTION:CAPS" title="HB_GOBJECT_TYPE_DIRECTION">HB_GOBJECT_TYPE_DIRECTION</a>, macro in <a class="link" href="harfbuzz-hb-gobject.html" title="hb-gobject">hb-gobject</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-hb-gobject.html#HB-GOBJECT-TYPE-FACE:CAPS" title="HB_GOBJECT_TYPE_FACE">HB_GOBJECT_TYPE_FACE</a>, macro in <a class="link" href="harfbuzz-hb-gobject.html" title="hb-gobject">hb-gobject</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-hb-gobject.html#HB-GOBJECT-TYPE-FEATURE:CAPS" title="HB_GOBJECT_TYPE_FEATURE">HB_GOBJECT_TYPE_FEATURE</a>, macro in <a class="link" href="harfbuzz-hb-gobject.html" title="hb-gobject">hb-gobject</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-hb-gobject.html#HB-GOBJECT-TYPE-FONT:CAPS" title="HB_GOBJECT_TYPE_FONT">HB_GOBJECT_TYPE_FONT</a>, macro in <a class="link" href="harfbuzz-hb-gobject.html" title="hb-gobject">hb-gobject</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-hb-gobject.html#HB-GOBJECT-TYPE-FONT-FUNCS:CAPS" title="HB_GOBJECT_TYPE_FONT_FUNCS">HB_GOBJECT_TYPE_FONT_FUNCS</a>, macro in <a class="link" href="harfbuzz-hb-gobject.html" title="hb-gobject">hb-gobject</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-hb-gobject.html#HB-GOBJECT-TYPE-GLYPH-INFO:CAPS" title="HB_GOBJECT_TYPE_GLYPH_INFO">HB_GOBJECT_TYPE_GLYPH_INFO</a>, macro in <a class="link" href="harfbuzz-hb-gobject.html" title="hb-gobject">hb-gobject</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-hb-gobject.html#HB-GOBJECT-TYPE-GLYPH-POSITION:CAPS" title="HB_GOBJECT_TYPE_GLYPH_POSITION">HB_GOBJECT_TYPE_GLYPH_POSITION</a>, macro in <a class="link" href="harfbuzz-hb-gobject.html" title="hb-gobject">hb-gobject</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-hb-gobject.html#HB-GOBJECT-TYPE-MEMORY-MODE:CAPS" title="HB_GOBJECT_TYPE_MEMORY_MODE">HB_GOBJECT_TYPE_MEMORY_MODE</a>, macro in <a class="link" href="harfbuzz-hb-gobject.html" title="hb-gobject">hb-gobject</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-hb-gobject.html#HB-GOBJECT-TYPE-OT-LAYOUT-GLYPH-CLASS:CAPS" title="HB_GOBJECT_TYPE_OT_LAYOUT_GLYPH_CLASS">HB_GOBJECT_TYPE_OT_LAYOUT_GLYPH_CLASS</a>, macro in <a class="link" href="harfbuzz-hb-gobject.html" title="hb-gobject">hb-gobject</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-hb-gobject.html#HB-GOBJECT-TYPE-SCRIPT:CAPS" title="HB_GOBJECT_TYPE_SCRIPT">HB_GOBJECT_TYPE_SCRIPT</a>, macro in <a class="link" href="harfbuzz-hb-gobject.html" title="hb-gobject">hb-gobject</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-hb-gobject.html#HB-GOBJECT-TYPE-SEGMENT-PROPERTIES:CAPS" title="HB_GOBJECT_TYPE_SEGMENT_PROPERTIES">HB_GOBJECT_TYPE_SEGMENT_PROPERTIES</a>, macro in <a class="link" href="harfbuzz-hb-gobject.html" title="hb-gobject">hb-gobject</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-hb-gobject.html#HB-GOBJECT-TYPE-SET:CAPS" title="HB_GOBJECT_TYPE_SET">HB_GOBJECT_TYPE_SET</a>, macro in <a class="link" href="harfbuzz-hb-gobject.html" title="hb-gobject">hb-gobject</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-hb-gobject.html#HB-GOBJECT-TYPE-SHAPE-PLAN:CAPS" title="HB_GOBJECT_TYPE_SHAPE_PLAN">HB_GOBJECT_TYPE_SHAPE_PLAN</a>, macro in <a class="link" href="harfbuzz-hb-gobject.html" title="hb-gobject">hb-gobject</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-hb-gobject.html#HB-GOBJECT-TYPE-UNICODE-COMBINING-CLASS:CAPS" title="HB_GOBJECT_TYPE_UNICODE_COMBINING_CLASS">HB_GOBJECT_TYPE_UNICODE_COMBINING_CLASS</a>, macro in <a class="link" href="harfbuzz-hb-gobject.html" title="hb-gobject">hb-gobject</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-hb-gobject.html#HB-GOBJECT-TYPE-UNICODE-FUNCS:CAPS" title="HB_GOBJECT_TYPE_UNICODE_FUNCS">HB_GOBJECT_TYPE_UNICODE_FUNCS</a>, macro in <a class="link" href="harfbuzz-hb-gobject.html" title="hb-gobject">hb-gobject</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-hb-gobject.html#HB-GOBJECT-TYPE-UNICODE-GENERAL-CATEGORY:CAPS" title="HB_GOBJECT_TYPE_UNICODE_GENERAL_CATEGORY">HB_GOBJECT_TYPE_UNICODE_GENERAL_CATEGORY</a>, macro in <a class="link" href="harfbuzz-hb-gobject.html" title="hb-gobject">hb-gobject</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-hb-gobject.html#HB-GOBJECT-TYPE-USER-DATA-KEY:CAPS" title="HB_GOBJECT_TYPE_USER_DATA_KEY">HB_GOBJECT_TYPE_USER_DATA_KEY</a>, macro in <a class="link" href="harfbuzz-hb-gobject.html" title="hb-gobject">hb-gobject</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-hb-gobject.html#hb-gobject-unicode-combining-class-get-type" title="hb_gobject_unicode_combining_class_get_type ()">hb_gobject_unicode_combining_class_get_type</a>, function in <a class="link" href="harfbuzz-hb-gobject.html" title="hb-gobject">hb-gobject</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-hb-gobject.html#hb-gobject-unicode-funcs-get-type" title="hb_gobject_unicode_funcs_get_type ()">hb_gobject_unicode_funcs_get_type</a>, function in <a class="link" href="harfbuzz-hb-gobject.html" title="hb-gobject">hb-gobject</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-hb-gobject.html#hb-gobject-unicode-general-category-get-type" title="hb_gobject_unicode_general_category_get_type ()">hb_gobject_unicode_general_category_get_type</a>, function in <a class="link" href="harfbuzz-hb-gobject.html" title="hb-gobject">hb-gobject</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="harfbuzz-hb-gobject.html#hb-gobject-user-data-key-get-type" title="hb_gobject_user_data_key_get_type ()">hb_gobject_user_data_key_get_type</a>, function in <a class="link" href="harfbuzz-hb-gobject.html" title="hb-gobject">hb-gobject</a>
+<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>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="harfbuzz-hb-common.html#hb-language-t" title="hb_language_t">hb_language_t</a>, typedef in <a class="link" href="harfbuzz-hb-common.html" title="hb-common">hb-common</a>
+<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>
 <dd></dd>
 <a name="idxO"></a><h3 class="title">O</h3>
 <dt>
-<a class="link" href="harfbuzz-hb-ot-font.html#hb-ot-font-set-funcs" title="hb_ot_font_set_funcs ()">hb_ot_font_set_funcs</a>, function in <a class="link" href="harfbuzz-hb-ot-font.html" title="hb-ot-font">hb-ot-font</a>
+hb_ot_font_set_funcs, function in hb-ot-font
 </dt>
 <dd></dd>
 <dt>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="harfbuzz-hb-ot-layout.html#hb-ot-layout-language-get-required-feature-index" title="hb_ot_layout_language_get_required_feature_index ()">hb_ot_layout_language_get_required_feature_index</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>
 <dd></dd>
 <dt>
-<a class="link" href="harfbuzz-hb-ot-shape.html#hb-ot-shape-glyphs-closure" title="hb_ot_shape_glyphs_closure ()">hb_ot_shape_glyphs_closure</a>, function in <a class="link" href="harfbuzz-hb-ot-shape.html" title="hb-ot-shape">hb-ot-shape</a>
+hb_ot_shape_glyphs_closure, function in hb-ot-shape
 </dt>
 <dd></dd>
 <dt>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="harfbuzz-hb-ot-layout.html#HB-OT-TAG-JSTF:CAPS" title="HB_OT_TAG_JSTF">HB_OT_TAG_JSTF</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>
 <dd></dd>
 <dt>
-<a class="link" href="harfbuzz-Buffers.html#HB-SEGMENT-PROPERTIES-DEFAULT:CAPS" title="HB_SEGMENT_PROPERTIES_DEFAULT">HB_SEGMENT_PROPERTIES_DEFAULT</a>, macro in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
+<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-Buffers.html#hb-segment-properties-equal" title="hb_segment_properties_equal ()">hb_segment_properties_equal</a>, function in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
+<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-Buffers.html#hb-segment-properties-hash" title="hb_segment_properties_hash ()">hb_segment_properties_hash</a>, function in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
+<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-Buffers.html#hb-segment-properties-t-struct" title="hb_segment_properties_t">hb_segment_properties_t</a>, struct in <a class="link" href="harfbuzz-Buffers.html" title="Buffers">Buffers</a>
+<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>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="harfbuzz-Shaping.html#hb-shape" title="hb_shape ()">hb_shape</a>, function in <a class="link" href="harfbuzz-Shaping.html" title="Shaping">Shaping</a>
+<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-Shaping.html#hb-shape-full" title="hb_shape_full ()">hb_shape_full</a>, function in <a class="link" href="harfbuzz-Shaping.html" title="Shaping">Shaping</a>
+<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-Shaping.html#hb-shape-list-shapers" title="hb_shape_list_shapers ()">hb_shape_list_shapers</a>, function in <a class="link" href="harfbuzz-Shaping.html" title="Shaping">Shaping</a>
+<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>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="harfbuzz-hb-common.html#HB-TAG-MAX-SIGNED:CAPS" title="HB_TAG_MAX_SIGNED">HB_TAG_MAX_SIGNED</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>
 <dd></dd>
 <dt>
-<a class="link" href="harfbuzz-hb-version.html#HB-VERSION-ATLEAST:CAPS" title="HB_VERSION_ATLEAST()">HB_VERSION_ATLEAST</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-atleast" title="hb_version_atleast ()">hb_version_atleast</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>
 <dd></dd>
 </div>
 <div class="footer">
-<hr>Generated by GTK-Doc V1.24.1</div>
+<hr>
+          Generated by GTK-Doc V1.20.1</div>
 </body>
 </html>
\ No newline at end of file
similarity index 72%
rename from docs/html/ch07.html
rename to docs/reference/html/ch01.html
index 69fe962..a86abae 100644 (file)
@@ -2,27 +2,27 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Harfbuzz API: HarfBuzz Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="HarfBuzz Manual">
-<link rel="up" href="pt02.html" title="Part II. Reference manual">
-<link rel="prev" href="pt02.html" title="Part II. Reference manual">
+<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.24.1 (XML mode)">
+<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><a accesskey="u" href="pt02.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="pt02.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></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="id-1.3.3"></a>Harfbuzz API</h2></div></div></div>
-<div class="toc"><dl class="toc">
+<a name="idp8290832"></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>
@@ -33,7 +33,7 @@
 <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-Buffers.html">Buffers</a></span><span class="refpurpose"> — Input and output buffers</span>
+<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>
@@ -45,7 +45,7 @@
 <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-Shaping.html">Shaping</a></span><span class="refpurpose"> — Conversion of text strings into positioned glyphs</span>
+<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>
 <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-ot-font.html">hb-ot-font</a></span><span class="refpurpose"></span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="harfbuzz-hb-ot-shape.html">hb-ot-shape</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>
@@ -98,6 +92,7 @@
 </dl></div>
 </div>
 <div class="footer">
-<hr>Generated by GTK-Doc V1.24.1</div>
+<hr>
+          Generated by GTK-Doc V1.20.1</div>
 </body>
 </html>
\ No newline at end of file
similarity index 61%
rename from docs/html/deprecated-api-index.html
rename to docs/reference/html/deprecated-api-index.html
index 5b5bfbc..3ccc21a 100644 (file)
@@ -2,25 +2,23 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Index of deprecated API: HarfBuzz Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="HarfBuzz Manual">
-<link rel="up" href="pt02.html" title="Part II. Reference manual">
-<link rel="prev" href="api-index-1-1-3.html" title="Index of new symbols in 1.1.3">
+<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.24.1 (XML mode)">
+<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="#idxF">F</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><a accesskey="u" href="pt02.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="api-index-1-1-3.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></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">
 <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="idxF"></a><h3 class="title">F</h3>
-<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-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>
 <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>
@@ -51,6 +40,7 @@
 <dd></dd>
 </div>
 <div class="footer">
-<hr>Generated by GTK-Doc V1.24.1</div>
+<hr>
+          Generated by GTK-Doc V1.20.1</div>
 </body>
 </html>
\ No newline at end of file
similarity index 85%
rename from docs/html/harfbuzz-hb-blob.html
rename to docs/reference/html/harfbuzz-hb-blob.html
index fa54243..b7f9a12 100644 (file)
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>hb-blob: HarfBuzz Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="HarfBuzz Manual">
-<link rel="up" href="ch07.html" title="Harfbuzz API">
-<link rel="prev" href="harfbuzz-Buffers.html" title="Buffers">
+<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.24.1 (XML mode)">
+<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">
@@ -19,8 +19,8 @@
                   <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="ch07.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="harfbuzz-Buffers.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></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">
 </div>
 <div class="refsect1">
 <a name="harfbuzz-hb-blob.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen">    <a href="/home/behdad/.local/share/gtk-doc/html/gobject/gobject-Boxed-Types.html">GBoxed</a>
+<pre class="screen">    GBoxed
     <span class="lineart">╰──</span> hb_blob_t
-    <a href="/home/behdad/.local/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html">GEnum</a>
+    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>
@@ -182,9 +184,8 @@ hb_blob_create (<em class="parameter"><code>const <span class="type">char</span>
  parameter is used
 to negotiate ownership and lifecycle of <em class="parameter"><code>data</code></em>
 .</p>
-<p><span class="annotation">[<acronym title="Exposed in C code, not necessarily available in other languages."><span class="acronym">skip</span></acronym>]</span></p>
 <div class="refsect3">
-<a name="hb-blob-create.parameters"></a><h4>Parameters</h4>
+<a name="idp17456912"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -225,12 +226,13 @@ is not needed anymore.</p></td>
 </table></div>
 </div>
 <div class="refsect3">
-<a name="hb-blob-create.returns"></a><h4>Returns</h4>
+<a name="idp18906304"></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.  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: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -248,7 +250,7 @@ is.</p>
 <p>Makes <em class="parameter"><code>parent</code></em>
  immutable.</p>
 <div class="refsect3">
-<a name="hb-blob-create-sub-blob.parameters"></a><h4>Parameters</h4>
+<a name="idp13979952"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -276,15 +278,16 @@ is.</p>
 </table></div>
 </div>
 <div class="refsect3">
-<a name="hb-blob-create-sub-blob.returns"></a><h4>Returns</h4>
+<a name="idp20653328"></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: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -297,9 +300,8 @@ hb_blob_destroy (<em class="parameter"><code><a class="link" href="harfbuzz-hb-b
 , 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>
-<p><span class="annotation">[<acronym title="Exposed in C code, not necessarily available in other languages."><span class="acronym">skip</span></acronym>]</span></p>
 <div class="refsect3">
-<a name="hb-blob-destroy.parameters"></a><h4>Parameters</h4>
+<a name="idp21977536"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -313,7 +315,7 @@ was created for if it has not been called already.</p>
 </tr></tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -322,7 +324,7 @@ was created for if it has not been called already.</p>
 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="hb-blob-get-data.parameters"></a><h4>Parameters</h4>
+<a name="idp21995504"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -344,11 +346,11 @@ hb_blob_get_data (<em class="parameter"><code><a class="link" href="harfbuzz-hb-
 </table></div>
 </div>
 <div class="refsect3">
-<a name="hb-blob-get-data.returns"></a><h4>Returns</h4>
+<a name="idp22007616"></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: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -361,7 +363,7 @@ return pointer to data.</p>
 <p>Fails if blob has been made immutable, or if memory allocation
 fails.</p>
 <div class="refsect3">
-<a name="hb-blob-get-data-writable.parameters"></a><h4>Parameters</h4>
+<a name="idp22021568"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -383,12 +385,12 @@ fails.</p>
 </table></div>
 </div>
 <div class="refsect3">
-<a name="hb-blob-get-data-writable.returns"></a><h4>Returns</h4>
+<a name="idp22033696"></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: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -398,11 +400,11 @@ hb_blob_get_empty (<em class="parameter"><code><span class="type">void</span></c
 <p>Returns the singleton empty blob.</p>
 <p>See TODO:link object types for more information.</p>
 <div class="refsect3">
-<a name="hb-blob-get-empty.returns"></a><h4>Returns</h4>
+<a name="idp22046512"></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: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -410,7 +412,7 @@ hb_blob_get_empty (<em class="parameter"><code><span class="type">void</span></c
 <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="hb-blob-get-length.parameters"></a><h4>Parameters</h4>
+<a name="idp22057312"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -425,10 +427,11 @@ hb_blob_get_length (<em class="parameter"><code><a class="link" href="harfbuzz-h
 </table></div>
 </div>
 <div class="refsect3">
-<a name="hb-blob-get-length.returns"></a><h4>Returns</h4>
+<a name="idp22065712"></a><h4>Returns</h4>
 <p> the length of blob data in bytes.</p>
+<p></p>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -436,9 +439,8 @@ hb_blob_get_length (<em class="parameter"><code><a class="link" href="harfbuzz-h
 <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>
-<p><span class="annotation">[<acronym title="Exposed in C code, not necessarily available in other languages."><span class="acronym">skip</span></acronym>]</span></p>
 <div class="refsect3">
-<a name="hb-blob-get-user-data.parameters"></a><h4>Parameters</h4>
+<a name="idp22076912"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -460,11 +462,11 @@ hb_blob_get_user_data (<em class="parameter"><code><a class="link" href="harfbuz
 </table></div>
 </div>
 <div class="refsect3">
-<a name="hb-blob-get-user-data.returns"></a><h4>Returns</h4>
+<a name="idp22087920"></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: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -472,7 +474,7 @@ hb_blob_get_user_data (<em class="parameter"><code><a class="link" href="harfbuz
 <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="hb-blob-is-immutable.parameters"></a><h4>Parameters</h4>
+<a name="idp22098576"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -487,10 +489,11 @@ hb_blob_is_immutable (<em class="parameter"><code><a class="link" href="harfbuzz
 </table></div>
 </div>
 <div class="refsect3">
-<a name="hb-blob-is-immutable.returns"></a><h4>Returns</h4>
+<a name="idp21531488"></a><h4>Returns</h4>
 <p> TODO</p>
+<p></p>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -498,7 +501,7 @@ hb_blob_is_immutable (<em class="parameter"><code><a class="link" href="harfbuzz
 <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="hb-blob-make-immutable.parameters"></a><h4>Parameters</h4>
+<a name="idp21541040"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -512,7 +515,7 @@ hb_blob_make_immutable (<em class="parameter"><code><a class="link" href="harfbu
 </tr></tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -522,9 +525,8 @@ hb_blob_reference (<em class="parameter"><code><a class="link" href="harfbuzz-hb
 <p>Increases the reference count on <em class="parameter"><code>blob</code></em>
 .</p>
 <p>See TODO:link object types for more information.</p>
-<p><span class="annotation">[<acronym title="Exposed in C code, not necessarily available in other languages."><span class="acronym">skip</span></acronym>]</span></p>
 <div class="refsect3">
-<a name="hb-blob-reference.parameters"></a><h4>Parameters</h4>
+<a name="idp21558896"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -539,11 +541,12 @@ hb_blob_reference (<em class="parameter"><code><a class="link" href="harfbuzz-hb
 </table></div>
 </div>
 <div class="refsect3">
-<a name="hb-blob-reference.returns"></a><h4>Returns</h4>
+<a name="idp21567296"></a><h4>Returns</h4>
 <p> <em class="parameter"><code>blob</code></em>
 .</p>
+<p></p>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -554,9 +557,8 @@ hb_blob_set_user_data (<em class="parameter"><code><a class="link" href="harfbuz
                        <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>
-<p><span class="annotation">[<acronym title="Exposed in C code, not necessarily available in other languages."><span class="acronym">skip</span></acronym>]</span></p>
 <div class="refsect3">
-<a name="hb-blob-set-user-data.parameters"></a><h4>Parameters</h4>
+<a name="idp21584240"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -593,7 +595,11 @@ is not needed anymore.</p></td>
 </tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<div class="refsect3">
+<a name="idp21603920"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
 </div>
 </div>
 <div class="refsect1">
@@ -602,12 +608,16 @@ is not needed anymore.</p></td>
 <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="hb-memory-mode-t.members"></a><h4>Members</h4>
+<a name="idp21615792"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
@@ -617,23 +627,23 @@ is not needed anymore.</p></td>
 <tbody>
 <tr>
 <td class="enum_member_name"><p><a name="HB-MEMORY-MODE-DUPLICATE:CAPS"></a>HB_MEMORY_MODE_DUPLICATE</p></td>
-<td> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
 </tr>
 </tbody>
 </table></div>
@@ -642,6 +652,7 @@ is not needed anymore.</p></td>
 </div>
 </div>
 <div class="footer">
-<hr>Generated by GTK-Doc V1.24.1</div>
+<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..0c32fc8
--- /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="idp20358224"></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="idp20381120"></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="idp20407728"></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="idp20434256"></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][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> uint8_t]</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="idp20469136"></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="idp20477536"></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="idp20486656"></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="idp20501968"></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="idp20519024"></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="idp22130896"></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="idp22138688"></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="idp22152720"></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="idp22160224"></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="idp22168016"></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="idp22175520"></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="idp22182768"></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="idp22191968"></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="idp22199472"></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="idp22209216"></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="idp22220048"></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="idp22231760"></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="idp22242592"></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="idp22252224"></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="idp22259728"></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="idp22268096"></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="idp22275600"></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="idp22290352"></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="idp22297856"></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="idp22307024"></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="idp22321056"></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="idp22328560"></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="idp22337728"></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="idp22345232"></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="idp22365040"></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="idp22379072"></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="idp22394624"></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="idp22402128"></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="idp22409920"></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="idp22417424"></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="idp22426624"></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="idp22441088"></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="idp22455728"></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="idp22471280"></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="idp22479216"></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="idp22498736"></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="idp22512896"></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="idp22520288"></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="idp22530864"></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="idp22546272"></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="idp22561680"></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="idp22577088"></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="idp22592640"></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="idp22600400"></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="idp22621216"></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="idp22639536"></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="idp22657648"></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="idp22680784"></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="idp22689184"></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="idp22700656"></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="idp22709792"></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="idp22721776"></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="idp22740960"></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="idp22763504"></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="idp22786240"></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
similarity index 74%
rename from docs/html/harfbuzz-hb-common.html
rename to docs/reference/html/harfbuzz-hb-common.html
index 064be6e..e2b1a8b 100644 (file)
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>hb-common: HarfBuzz Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="HarfBuzz Manual">
-<link rel="up" href="ch07.html" title="Harfbuzz API">
+<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.24.1 (XML mode)">
+<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">
@@ -19,7 +19,7 @@
                   <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="ch07.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></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>
 </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 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-from-string" title="hb_tag_from_string ()">hb_tag_from_string</a> <span class="c_punctuation">()</span>
+<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>
@@ -53,7 +67,7 @@
 <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>
+<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>
 </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>
+<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-script-from-iso15924-tag" title="hb_script_from_iso15924_tag ()">hb_script_from_iso15924_tag</a> <span class="c_punctuation">()</span>
+<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-script-t" title="enum hb_script_t"><span class="returnvalue">hb_script_t</span></a>
+<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-script-from-string" title="hb_script_from_string ()">hb_script_from_string</a> <span class="c_punctuation">()</span>
+<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">
-<a class="link" href="harfbuzz-hb-common.html#hb-tag-t" title="hb_tag_t"><span class="returnvalue">hb_tag_t</span></a>
+<td class="function_type">const <span class="returnvalue">char</span> *
 </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>
+<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-direction-t" title="enum hb_direction_t"><span class="returnvalue">hb_direction_t</span></a>
+<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-get-horizontal-direction" title="hb_script_get_horizontal_direction ()">hb_script_get_horizontal_direction</a> <span class="c_punctuation">()</span>
+<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-language-t" title="hb_language_t"><span class="returnvalue">hb_language_t</span></a>
+<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-language-from-string" title="hb_language_from_string ()">hb_language_from_string</a> <span class="c_punctuation">()</span>
+<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">const <span class="returnvalue">char</span> *
+<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-language-to-string" title="hb_language_to_string ()">hb_language_to_string</a> <span class="c_punctuation">()</span>
+<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-language-t" title="hb_language_t"><span class="returnvalue">hb_language_t</span></a>
+<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-language-get-default" title="hb_language_get_default ()">hb_language_get_default</a> <span class="c_punctuation">()</span>
+<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">
-<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>
+<a class="link" href="harfbuzz-hb-common.html#hb-tag-t" title="hb_tag_t"><span class="returnvalue">hb_tag_t</span></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>
+<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="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 class="function_type">
+<span class="returnvalue">void</span>
 </td>
-</tr>
-<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>
+<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>
 </tbody>
 </table></div>
 </div>
-<a name="hb-user-data-key-t"></a><div class="refsect1">
+<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>
 </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>
 <tr>
 <td class="typedef_keyword">typedef</td>
-<td class="function_name"><a class="link" href="harfbuzz-hb-common.html#hb-language-t" title="hb_language_t">hb_language_t</a></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-position-t" title="hb_position_t">hb_position_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">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>
 <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>
-<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="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="harfbuzz-hb-common.html#HB-TAG-MAX-SIGNED:CAPS" title="HB_TAG_MAX_SIGNED">HB_TAG_MAX_SIGNED</a></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>
 </tbody>
 </table></div>
 </div>
 <div class="refsect1">
 <a name="harfbuzz-hb-common.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen">    <a href="/home/behdad/.local/share/gtk-doc/html/gobject/gobject-Boxed-Types.html">GBoxed</a>
+<pre class="screen">    GBoxed
+    <span class="lineart">├──</span> hb_language_t
     <span class="lineart">╰──</span> hb_user_data_key_t
-    <a href="/home/behdad/.local/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html">GEnum</a>
+    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-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="hb-tag-from-string.parameters"></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][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> uint8_t]</span></td>
-</tr></tbody>
-</table></div>
+<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>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<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-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="hb-tag-to-string.parameters"></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>
+<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>
-<p class="since">Since: <a class="link" href="api-index-0-9-5.html#api-index-0.9.5">0.9.5</a></p>
+<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">
@@ -318,7 +311,7 @@ hb_tag_to_string (<em class="parameter"><code><a class="link" href="harfbuzz-hb-
 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="hb-direction-from-string.parameters"></a><h4>Parameters</h4>
+<a name="idp17685104"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -328,11 +321,15 @@ hb_direction_from_string (<em class="parameter"><code>const <span class="type">c
 <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][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> uint8_t]</span></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>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<div class="refsect3">
+<a name="idp17694608"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -340,20 +337,20 @@ hb_direction_from_string (<em class="parameter"><code>const <span class="type">c
 <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="hb-direction-to-string.returns"></a><h4>Returns</h4>
+<a name="idp17703840"></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: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<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>
-<p>Converts an ISO 15924 script tag to a corresponding <a class="link" href="harfbuzz-hb-common.html#hb-script-t" title="enum hb_script_t"><span class="type">hb_script_t</span></a>.</p>
+<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="hb-script-from-iso15924-tag.parameters"></a><h4>Parameters</h4>
+<a name="idp17716368"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -361,66 +358,60 @@ hb_script_from_iso15924_tag (<em class="parameter"><code><a class="link" href="h
 <col width="200px" class="parameters_annotations">
 </colgroup>
 <tbody><tr>
-<td class="parameter_name"><p>tag</p></td>
-<td class="parameter_description"><p>an <a class="link" href="harfbuzz-hb-common.html#hb-tag-t" title="hb_tag_t"><span class="type">hb_tag_t</span></a> representing an ISO 15924 tag.</p></td>
-<td class="parameter_annotations"> </td>
+<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="hb-script-from-iso15924-tag.returns"></a><h4>Returns</h4>
-<p>An <a class="link" href="harfbuzz-hb-common.html#hb-script-t" title="enum hb_script_t"><span class="type">hb_script_t</span></a> corresponding to the ISO 15924 tag.</p>
+<a name="idp17725872"></a><h4>Returns</h4>
+<p></p>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<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> *str</code></em>,
-                       <em class="parameter"><code><span class="type">int</span> len</code></em>);</pre>
-<p>Converts a string <em class="parameter"><code>str</code></em>
- representing an ISO 15924 script tag to a
-corresponding <a class="link" href="harfbuzz-hb-common.html#hb-script-t" title="enum hb_script_t"><span class="type">hb_script_t</span></a>. Shorthand for <a class="link" href="harfbuzz-hb-common.html#hb-tag-from-string" title="hb_tag_from_string ()"><code class="function">hb_tag_from_string()</code></a> then
-<a class="link" href="harfbuzz-hb-common.html#hb-script-from-iso15924-tag" title="hb_script_from_iso15924_tag ()"><code class="function">hb_script_from_iso15924_tag()</code></a>.</p>
+<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="hb-script-from-string.parameters"></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> a string representing an
-ISO 15924 tag. </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][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> uint8_t]</span></td>
-</tr>
-<tr>
-<td class="parameter_name"><p>len</p></td>
-<td class="parameter_description"><p>length of the <em class="parameter"><code>str</code></em>
-, or -1 if it is <code class="literal">NULL</code>-terminated.</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
+<a name="idp17734384"></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="hb-script-from-string.returns"></a><h4>Returns</h4>
-<p>An <a class="link" href="harfbuzz-hb-common.html#hb-script-t" title="enum hb_script_t"><span class="type">hb_script_t</span></a> corresponding to the ISO 15924 tag.</p>
+<a name="idp17743616"></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: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<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>
-<p>See <a class="link" href="harfbuzz-hb-common.html#hb-script-from-iso15924-tag" title="hb_script_from_iso15924_tag ()"><code class="function">hb_script_from_iso15924_tag()</code></a>.</p>
+<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="idp17754336"></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="hb-script-to-iso15924-tag.parameters"></a><h4>Parameters</h4>
+<a name="idp17765200"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -428,73 +419,75 @@ hb_script_to_iso15924_tag (<em class="parameter"><code><a class="link" href="har
 <col width="200px" class="parameters_annotations">
 </colgroup>
 <tbody><tr>
-<td class="parameter_name"><p>script</p></td>
-<td class="parameter_description"><p>an <span class="type">hb_script_</span> to convert.</p></td>
-<td class="parameter_annotations"> </td>
+<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="hb-script-to-iso15924-tag.returns"></a><h4>Returns</h4>
-<p>An <a class="link" href="harfbuzz-hb-common.html#hb-tag-t" title="hb_tag_t"><span class="type">hb_tag_t</span></a> representing an ISO 15924 script tag.</p>
+<a name="idp17774704"></a><h4>Returns</h4>
+<p></p>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<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>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<div class="refsect3">
+<a name="idp17783824"></a><h4>Returns</h4>
+<p></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" title="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>
-<p>Converts <em class="parameter"><code>str</code></em>
- representing an ISO 639 language code to the corresponding
-<a class="link" href="harfbuzz-hb-common.html#hb-language-t" title="hb_language_t"><span class="type">hb_language_t</span></a>.</p>
+<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="idp17792944"></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="hb-language-from-string.parameters"></a><h4>Parameters</h4>
+<a name="idp17803760"></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>
+<tbody><tr>
 <td class="parameter_name"><p>str</p></td>
-<td class="parameter_description"><p> a string representing
-ISO 639 language code. </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][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> uint8_t]</span></td>
-</tr>
-<tr>
-<td class="parameter_name"><p>len</p></td>
-<td class="parameter_description"><p>length of the <em class="parameter"><code>str</code></em>
-, or -1 if it is <code class="literal">NULL</code>-terminated.</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
+<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="hb-language-from-string.returns"></a><h4>Returns</h4>
-<p>The <a class="link" href="harfbuzz-hb-common.html#hb-language-t" title="hb_language_t"><span class="type">hb_language_t</span></a> corresponding to the ISO 639 language code. </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>
+<a name="idp17813264"></a><h4>Returns</h4>
+<p></p>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<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" title="hb_language_t"><span class="type">hb_language_t</span></a> language</code></em>);</pre>
-<p>See <a class="link" href="harfbuzz-hb-common.html#hb-language-from-string" title="hb_language_from_string ()"><code class="function">hb_language_from_string()</code></a>.</p>
+<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="hb-language-to-string.parameters"></a><h4>Parameters</h4>
+<a name="idp17823904"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -502,106 +495,93 @@ hb_language_to_string (<em class="parameter"><code><a class="link" href="harfbuz
 <col width="200px" class="parameters_annotations">
 </colgroup>
 <tbody><tr>
-<td class="parameter_name"><p>language</p></td>
-<td class="parameter_description"><p>an <a class="link" href="harfbuzz-hb-common.html#hb-language-t" title="hb_language_t"><span class="type">hb_language_t</span></a> to convert.</p></td>
-<td class="parameter_annotations"> </td>
+<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>
-<div class="refsect3">
-<a name="hb-language-to-string.returns"></a><h4>Returns</h4>
-<p>A <code class="literal">NULL</code>-terminated string representing the <em class="parameter"><code>language</code></em>
-. Must not be freed by
-the caller. </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: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></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" title="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="hb-language-get-default.returns"></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: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></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>
-</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>
-</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>
-</div>
-<hr>
-<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 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="hb-direction-t.members"></a><h4>Members</h4>
+<a name="idp17879968"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
@@ -611,37 +591,27 @@ hb_language_get_default (<em class="parameter"><code><span class="type">void</sp
 <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">
-<p>Initial, unset direction.</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">
-<p>Text is set horizontally from left to 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-DIRECTION-RTL:CAPS"></a>HB_DIRECTION_RTL</p></td>
-<td class="enum_member_description">
-<p>Text is set horizontally from right to 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-DIRECTION-TTB:CAPS"></a>HB_DIRECTION_TTB</p></td>
-<td class="enum_member_description">
-<p>Text is set vertically from top to bottom.</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">
-<p>Text is set vertically from bottom to top.</p>
-</td>
+<td class="enum_member_description"> </td>
 <td class="enum_member_annotations"> </td>
 </tr>
 </tbody>
@@ -653,30 +623,32 @@ hb_language_get_default (<em class="parameter"><code><span class="type">void</sp
 <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>
-</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-script-t"></a><h3>enum hb_script_t</h3>
+<p>
+</p>
 <div class="refsect3">
-<a name="hb-script-t.members"></a><h4>Members</h4>
+<a name="idp17918336"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
@@ -686,518 +658,518 @@ hb_language_get_default (<em class="parameter"><code><span class="type">void</sp
 <tbody>
 <tr>
 <td class="enum_member_name"><p><a name="HB-SCRIPT-COMMON:CAPS"></a>HB_SCRIPT_COMMON</p></td>
-<td> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </td>
+<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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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>
@@ -1315,39 +1287,9 @@ hb_language_get_default (<em class="parameter"><code><span class="type">void</sp
 <td> </td>
 </tr>
 <tr>
-<td class="enum_member_name"><p><a name="HB-SCRIPT-AHOM:CAPS"></a>HB_SCRIPT_AHOM</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="HB-SCRIPT-ANATOLIAN-HIEROGLYPHS:CAPS"></a>HB_SCRIPT_ANATOLIAN_HIEROGLYPHS</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="HB-SCRIPT-HATRAN:CAPS"></a>HB_SCRIPT_HATRAN</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="HB-SCRIPT-MULTANI:CAPS"></a>HB_SCRIPT_MULTANI</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="HB-SCRIPT-OLD-HUNGARIAN:CAPS"></a>HB_SCRIPT_OLD_HUNGARIAN</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="HB-SCRIPT-SIGNWRITING:CAPS"></a>HB_SCRIPT_SIGNWRITING</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> </td>
-<td> </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>
@@ -1365,42 +1307,31 @@ hb_language_get_default (<em class="parameter"><code><span class="type">void</sp
 </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>
-</div>
-<hr>
-<div class="refsect2">
-<a name="hb-var-int-t"></a><h3>hb_var_int_t</h3>
-</div>
-<hr>
-<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>
-</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)
+<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-TAG-MAX-SIGNED:CAPS"></a><h3>HB_TAG_MAX_SIGNED</h3>
-<pre class="programlisting">#define HB_TAG_MAX_SIGNED HB_TAG(0x7f,0xff,0xff,0xff)
+<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-LANGUAGE-INVALID:CAPS"></a><h3>HB_LANGUAGE_INVALID</h3>
-<pre class="programlisting">#define HB_LANGUAGE_INVALID ((hb_language_t) NULL)
-</pre>
+<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.24.1</div>
+<hr>
+          Generated by GTK-Doc V1.20.1</div>
 </body>
 </html>
\ No newline at end of file
similarity index 90%
rename from docs/html/harfbuzz-hb-coretext.html
rename to docs/reference/html/harfbuzz-hb-coretext.html
index 68615e0..8d3ab15 100644 (file)
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>hb-coretext: HarfBuzz Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="HarfBuzz Manual">
-<link rel="up" href="ch07.html" title="Harfbuzz API">
+<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.24.1 (XML mode)">
+<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">
@@ -18,7 +18,7 @@
                   <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="ch07.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></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>
@@ -87,6 +87,8 @@
 </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>
@@ -100,12 +102,24 @@ hb_coretext_face_create (<em class="parameter"><code><span class="type">CGFontRe
 <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="idp14032320"></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="idp19308640"></a><h4>Returns</h4>
+<p></p>
+</div>
 </div>
 </div>
 <div class="refsect1">
@@ -124,6 +138,7 @@ hb_coretext_font_get_ct_font (<em class="parameter"><code><a class="link" href="
 </div>
 </div>
 <div class="footer">
-<hr>Generated by GTK-Doc V1.24.1</div>
+<hr>
+          Generated by GTK-Doc V1.20.1</div>
 </body>
 </html>
\ No newline at end of file
similarity index 90%
rename from docs/html/harfbuzz-hb-deprecated.html
rename to docs/reference/html/harfbuzz-hb-deprecated.html
index 13beba0..09961c1 100644 (file)
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>hb-deprecated: HarfBuzz Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="HarfBuzz Manual">
-<link rel="up" href="ch07.html" title="Harfbuzz API">
+<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.24.1 (XML mode)">
+<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">
@@ -18,7 +18,7 @@
                   <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="ch07.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></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>
 <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>
-<p></p>
 </div>
 <div class="refsect1">
 <a name="harfbuzz-hb-deprecated.other_details"></a><h2>Types and Values</h2>
@@ -68,6 +69,8 @@
 <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">
@@ -75,6 +78,8 @@
 <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">
 <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.24.1</div>
+<hr>
+          Generated by GTK-Doc V1.20.1</div>
 </body>
 </html>
\ No newline at end of file
similarity index 84%
rename from docs/html/harfbuzz-hb-face.html
rename to docs/reference/html/harfbuzz-hb-face.html
index ddc16d0..dc31c55 100644 (file)
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>hb-face: HarfBuzz Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="HarfBuzz Manual">
-<link rel="up" href="ch07.html" title="Harfbuzz API">
+<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.24.1 (XML mode)">
+<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">
@@ -19,7 +19,7 @@
                   <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="ch07.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></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>
 <div class="refsect1">
 <a name="harfbuzz-hb-face.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen">    <a href="/home/behdad/.local/share/gtk-doc/html/gobject/gobject-Boxed-Types.html">GBoxed</a>
+<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>
 <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><span class="annotation">[Xconstructor]</span></p>
+<p>
+</p>
 <div class="refsect3">
-<a name="hb-face-create.returns"></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>
+<a name="idp20616992"></a><h4>Returns</h4>
+<p></p>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
 </div>
 <hr>
 <div class="refsect2">
@@ -221,7 +222,7 @@ hb_face_create_for_tables (<em class="parameter"><code><a class="link" href="har
                            <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="hb-face-create-for-tables.parameters"></a><h4>Parameters</h4>
+<a name="idp20628080"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -236,19 +237,19 @@ hb_face_create_for_tables (<em class="parameter"><code><a class="link" href="har
 </table></div>
 </div>
 <div class="refsect3">
-<a name="hb-face-create-for-tables.returns"></a><h4>Returns</h4>
+<a name="idp22848528"></a><h4>Returns</h4>
 <p> (transfer full)</p>
+<p></p>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<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>
-<p><span class="annotation">[<acronym title="Exposed in C code, not necessarily available in other languages."><span class="acronym">skip</span></acronym>]</span></p>
 <div class="refsect3">
-<a name="hb-face-destroy.parameters"></a><h4>Parameters</h4>
+<a name="idp22856752"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -262,7 +263,7 @@ hb_face_destroy (<em class="parameter"><code><a class="link" href="harfbuzz-hb-f
 </tr></tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -270,10 +271,11 @@ hb_face_destroy (<em class="parameter"><code><a class="link" href="harfbuzz-hb-f
 <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="hb-face-get-empty.returns"></a><h4>Returns</h4>
+<a name="idp22870240"></a><h4>Returns</h4>
 <p> (transfer full)</p>
+<p></p>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -281,7 +283,7 @@ hb_face_get_empty (<em class="parameter"><code><span class="type">void</span></c
 <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="hb-face-get-glyph-count.parameters"></a><h4>Parameters</h4>
+<a name="idp22878608"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -295,7 +297,11 @@ hb_face_get_glyph_count (<em class="parameter"><code><a class="link" href="harfb
 </tr></tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-7.html#api-index-0.9.7">0.9.7</a></p>
+<div class="refsect3">
+<a name="idp22886112"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -303,7 +309,7 @@ hb_face_get_glyph_count (<em class="parameter"><code><a class="link" href="harfb
 <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="hb-face-get-index.parameters"></a><h4>Parameters</h4>
+<a name="idp22894048"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -317,7 +323,11 @@ hb_face_get_index (<em class="parameter"><code><a class="link" href="harfbuzz-hb
 </tr></tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<div class="refsect3">
+<a name="idp22901552"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -325,7 +335,7 @@ hb_face_get_index (<em class="parameter"><code><a class="link" href="harfbuzz-hb
 <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="hb-face-get-upem.parameters"></a><h4>Parameters</h4>
+<a name="idp22909488"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -339,7 +349,11 @@ hb_face_get_upem (<em class="parameter"><code><a class="link" href="harfbuzz-hb-
 </tr></tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<div class="refsect3">
+<a name="idp18604560"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -347,9 +361,8 @@ hb_face_get_upem (<em class="parameter"><code><a class="link" href="harfbuzz-hb-
 <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>
-<p><span class="annotation">[<acronym title="Exposed in C code, not necessarily available in other languages."><span class="acronym">skip</span></acronym>]</span></p>
 <div class="refsect3">
-<a name="hb-face-get-user-data.parameters"></a><h4>Parameters</h4>
+<a name="idp15960320"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -364,11 +377,11 @@ hb_face_get_user_data (<em class="parameter"><code><a class="link" href="harfbuz
 </table></div>
 </div>
 <div class="refsect3">
-<a name="hb-face-get-user-data.returns"></a><h4>Returns</h4>
+<a name="idp22913232"></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: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -376,7 +389,7 @@ hb_face_get_user_data (<em class="parameter"><code><a class="link" href="harfbuz
 <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="hb-face-is-immutable.parameters"></a><h4>Parameters</h4>
+<a name="idp22920864"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -390,7 +403,11 @@ hb_face_is_immutable (<em class="parameter"><code><a class="link" href="harfbuzz
 </tr></tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<div class="refsect3">
+<a name="idp22926912"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -398,7 +415,7 @@ hb_face_is_immutable (<em class="parameter"><code><a class="link" href="harfbuzz
 <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="hb-face-make-immutable.parameters"></a><h4>Parameters</h4>
+<a name="idp22933248"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -412,16 +429,15 @@ hb_face_make_immutable (<em class="parameter"><code><a class="link" href="harfbu
 </tr></tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<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>
-<p><span class="annotation">[<acronym title="Exposed in C code, not necessarily available in other languages."><span class="acronym">skip</span></acronym>]</span></p>
 <div class="refsect3">
-<a name="hb-face-reference.parameters"></a><h4>Parameters</h4>
+<a name="idp22944480"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -435,7 +451,11 @@ hb_face_reference (<em class="parameter"><code><a class="link" href="harfbuzz-hb
 </tr></tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<div class="refsect3">
+<a name="idp22950528"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -443,7 +463,7 @@ hb_face_reference (<em class="parameter"><code><a class="link" href="harfbuzz-hb
 <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="hb-face-reference-blob.parameters"></a><h4>Parameters</h4>
+<a name="idp22958208"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -458,11 +478,11 @@ hb_face_reference_blob (<em class="parameter"><code><a class="link" href="harfbu
 </table></div>
 </div>
 <div class="refsect3">
-<a name="hb-face-reference-blob.returns"></a><h4>Returns</h4>
+<a name="idp22965712"></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: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -471,7 +491,7 @@ hb_face_reference_blob (<em class="parameter"><code><a class="link" href="harfbu
 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="hb-face-reference-table.parameters"></a><h4>Parameters</h4>
+<a name="idp22976288"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -486,11 +506,11 @@ hb_face_reference_table (<em class="parameter"><code><a class="link" href="harfb
 </table></div>
 </div>
 <div class="refsect3">
-<a name="hb-face-reference-table.returns"></a><h4>Returns</h4>
+<a name="idp22983792"></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: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -499,7 +519,7 @@ hb_face_reference_table (<em class="parameter"><code><a class="link" href="harfb
 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="hb-face-set-glyph-count.parameters"></a><h4>Parameters</h4>
+<a name="idp22994512"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -513,7 +533,7 @@ hb_face_set_glyph_count (<em class="parameter"><code><a class="link" href="harfb
 </tr></tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-7.html#api-index-0.9.7">0.9.7</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -522,7 +542,7 @@ hb_face_set_glyph_count (<em class="parameter"><code><a class="link" href="harfb
 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="hb-face-set-index.parameters"></a><h4>Parameters</h4>
+<a name="idp23010064"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -536,7 +556,7 @@ hb_face_set_index (<em class="parameter"><code><a class="link" href="harfbuzz-hb
 </tr></tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -545,7 +565,7 @@ hb_face_set_index (<em class="parameter"><code><a class="link" href="harfbuzz-hb
 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="hb-face-set-upem.parameters"></a><h4>Parameters</h4>
+<a name="idp23025616"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -559,7 +579,7 @@ hb_face_set_upem (<em class="parameter"><code><a class="link" href="harfbuzz-hb-
 </tr></tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -570,9 +590,8 @@ hb_face_set_user_data (<em class="parameter"><code><a class="link" href="harfbuz
                        <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>
-<p><span class="annotation">[<acronym title="Exposed in C code, not necessarily available in other languages."><span class="acronym">skip</span></acronym>]</span></p>
 <div class="refsect3">
-<a name="hb-face-set-user-data.parameters"></a><h4>Parameters</h4>
+<a name="idp23045152"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -586,7 +605,11 @@ hb_face_set_user_data (<em class="parameter"><code><a class="link" href="harfbuz
 </tr></tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<div class="refsect3">
+<a name="idp23052656"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
 </div>
 </div>
 <div class="refsect1">
@@ -595,10 +618,13 @@ hb_face_set_user_data (<em class="parameter"><code><a class="link" href="harfbuz
 <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.24.1</div>
+<hr>
+          Generated by GTK-Doc V1.20.1</div>
 </body>
 </html>
\ No newline at end of file
similarity index 80%
rename from docs/html/harfbuzz-hb-font.html
rename to docs/reference/html/harfbuzz-hb-font.html
index 1a81a44..9596d54 100644 (file)
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>hb-font: HarfBuzz Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="HarfBuzz Manual">
-<link rel="up" href="ch07.html" title="Harfbuzz API">
+<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-Shaping.html" title="Shaping">
-<meta name="generator" content="GTK-Doc V1.24.1 (XML mode)">
+<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">
@@ -19,9 +19,9 @@
                   <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="ch07.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></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-Shaping.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></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>
 <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>
-<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-font-h-extents-func" title="hb_font_funcs_set_font_h_extents_func ()">hb_font_funcs_set_font_h_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-font-v-extents-func" title="hb_font_funcs_set_font_v_extents_func ()">hb_font_funcs_set_font_v_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-get-extents-for-direction" title="hb_font_get_extents_for_direction ()">hb_font_get_extents_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-font-extents-func-t" title="hb_font_get_font_extents_func_t ()">*hb_font_get_font_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-h-extents" title="hb_font_get_h_extents ()">hb_font_get_h_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-v-extents" title="hb_font_get_v_extents ()">hb_font_get_v_extents</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-parent" title="hb_font_set_parent ()">hb_font_set_parent</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
 </tbody>
 </table></div>
 </div>
 <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>
-<tr>
-<td class="typedef_keyword">typedef</td>
-<td class="function_name"><a class="link" href="harfbuzz-hb-font.html#hb-font-get-font-h-extents-func-t" title="hb_font_get_font_h_extents_func_t">hb_font_get_font_h_extents_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-font-v-extents-func-t" title="hb_font_get_font_v_extents_func_t">hb_font_get_font_v_extents_func_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">    <a href="/home/behdad/.local/share/gtk-doc/html/gobject/gobject-Boxed-Types.html">GBoxed</a>
+<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>
@@ -692,7 +630,7 @@ hb_font_add_glyph_origin_for_direction
                                 <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="hb-font-add-glyph-origin-for-direction.parameters"></a><h4>Parameters</h4>
+<a name="idp24645120"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -718,35 +656,19 @@ hb_font_add_glyph_origin_for_direction
 </tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<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><span class="annotation">[Xconstructor]</span></p>
-<div class="refsect3">
-<a name="hb-font-create.parameters"></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>
+</p>
 <div class="refsect3">
-<a name="hb-font-create.returns"></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>
+<a name="idp24665728"></a><h4>Returns</h4>
+<p></p>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
 </div>
 <hr>
 <div class="refsect2">
@@ -754,7 +676,7 @@ hb_font_create (<em class="parameter"><code><a class="link" href="harfbuzz-hb-fa
 <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="hb-font-create-sub-font.parameters"></a><h4>Parameters</h4>
+<a name="idp24672976"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -769,20 +691,19 @@ hb_font_create_sub_font (<em class="parameter"><code><a class="link" href="harfb
 </table></div>
 </div>
 <div class="refsect3">
-<a name="hb-font-create-sub-font.returns"></a><h4>Returns</h4>
+<a name="idp24680480"></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: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<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>
-<p><span class="annotation">[<acronym title="Exposed in C code, not necessarily available in other languages."><span class="acronym">skip</span></acronym>]</span></p>
 <div class="refsect3">
-<a name="hb-font-destroy.parameters"></a><h4>Parameters</h4>
+<a name="idp24689680"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -796,29 +717,27 @@ hb_font_destroy (<em class="parameter"><code><a class="link" href="harfbuzz-hb-f
 </tr></tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<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><span class="annotation">[Xconstructor]</span></p>
+<p>
+</p>
 <div class="refsect3">
-<a name="hb-font-funcs-create.returns"></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>
+<a name="idp24703088"></a><h4>Returns</h4>
+<p></p>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
 </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>
-<p><span class="annotation">[<acronym title="Exposed in C code, not necessarily available in other languages."><span class="acronym">skip</span></acronym>]</span></p>
 <div class="refsect3">
-<a name="hb-font-funcs-destroy.parameters"></a><h4>Parameters</h4>
+<a name="idp24710336"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -832,7 +751,7 @@ hb_font_funcs_destroy (<em class="parameter"><code><a class="link" href="harfbuz
 </tr></tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -840,11 +759,11 @@ hb_font_funcs_destroy (<em class="parameter"><code><a class="link" href="harfbuz
 <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="hb-font-funcs-get-empty.returns"></a><h4>Returns</h4>
+<a name="idp24723824"></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: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -852,9 +771,8 @@ hb_font_funcs_get_empty (<em class="parameter"><code><span class="type">void</sp
 <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>
-<p><span class="annotation">[<acronym title="Exposed in C code, not necessarily available in other languages."><span class="acronym">skip</span></acronym>]</span></p>
 <div class="refsect3">
-<a name="hb-font-funcs-get-user-data.parameters"></a><h4>Parameters</h4>
+<a name="idp24734400"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -869,11 +787,11 @@ hb_font_funcs_get_user_data (<em class="parameter"><code><a class="link" href="h
 </table></div>
 </div>
 <div class="refsect3">
-<a name="hb-font-funcs-get-user-data.returns"></a><h4>Returns</h4>
+<a name="idp24741904"></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: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -881,7 +799,7 @@ hb_font_funcs_get_user_data (<em class="parameter"><code><a class="link" href="h
 <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="hb-font-funcs-is-immutable.parameters"></a><h4>Parameters</h4>
+<a name="idp24751104"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -895,7 +813,11 @@ hb_font_funcs_is_immutable (<em class="parameter"><code><a class="link" href="ha
 </tr></tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<div class="refsect3">
+<a name="idp24759184"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -903,7 +825,7 @@ hb_font_funcs_is_immutable (<em class="parameter"><code><a class="link" href="ha
 <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="hb-font-funcs-make-immutable.parameters"></a><h4>Parameters</h4>
+<a name="idp24768624"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -917,16 +839,15 @@ hb_font_funcs_make_immutable (<em class="parameter"><code><a class="link" href="
 </tr></tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<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>
-<p><span class="annotation">[<acronym title="Exposed in C code, not necessarily available in other languages."><span class="acronym">skip</span></acronym>]</span></p>
 <div class="refsect3">
-<a name="hb-font-funcs-reference.parameters"></a><h4>Parameters</h4>
+<a name="idp24785040"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -940,7 +861,11 @@ hb_font_funcs_reference (<em class="parameter"><code><a class="link" href="harfb
 </tr></tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<div class="refsect3">
+<a name="idp24793440"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -952,7 +877,7 @@ hb_font_funcs_set_glyph_contour_point_func
                                 <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="hb-font-funcs-set-glyph-contour-point-func.parameters"></a><h4>Parameters</h4>
+<a name="idp24808064"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -973,7 +898,7 @@ hb_font_funcs_set_glyph_contour_point_func
 </tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -984,7 +909,7 @@ hb_font_funcs_set_glyph_extents_func (<em class="parameter"><code><a class="link
                                       <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="hb-font-funcs-set-glyph-extents-func.parameters"></a><h4>Parameters</h4>
+<a name="idp24834320"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1005,7 +930,7 @@ hb_font_funcs_set_glyph_extents_func (<em class="parameter"><code><a class="link
 </tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1017,28 +942,21 @@ hb_font_funcs_set_glyph_from_name_func
                                 <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="hb-font-funcs-set-glyph-from-name-func.parameters"></a><h4>Parameters</h4>
+<a name="idp24860624"></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>
+<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>
+</tr></tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1048,32 +966,22 @@ hb_font_funcs_set_glyph_func (<em class="parameter"><code><a class="link" href="
                               <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="warning"><p><code class="literal">hb_font_funcs_set_glyph_func</code> has been deprecated since version 1.2.3 and should not be used in newly-written code.</p></div>
-<p>Deprecated.  Use <code class="function">hb_font_funcs_set_nominal_glyph_func()</code> and
-<code class="function">hb_font_funcs_set_variation_glyph_func()</code> instead.</p>
 <div class="refsect3">
-<a name="hb-font-funcs-set-glyph-func.parameters"></a><h4>Parameters</h4>
+<a name="idp24882160"></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>
+<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>
+</tr></tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1085,7 +993,7 @@ hb_font_funcs_set_glyph_h_advance_func
                                 <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="hb-font-funcs-set-glyph-h-advance-func.parameters"></a><h4>Parameters</h4>
+<a name="idp24903696"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1106,7 +1014,7 @@ hb_font_funcs_set_glyph_h_advance_func
 </tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1118,7 +1026,7 @@ hb_font_funcs_set_glyph_h_kerning_func
                                 <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="hb-font-funcs-set-glyph-h-kerning-func.parameters"></a><h4>Parameters</h4>
+<a name="idp24930000"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1139,7 +1047,7 @@ hb_font_funcs_set_glyph_h_kerning_func
 </tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1150,7 +1058,7 @@ hb_font_funcs_set_glyph_h_origin_func (<em class="parameter"><code><a class="lin
                                        <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="hb-font-funcs-set-glyph-h-origin-func.parameters"></a><h4>Parameters</h4>
+<a name="idp24956320"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1171,7 +1079,7 @@ hb_font_funcs_set_glyph_h_origin_func (<em class="parameter"><code><a class="lin
 </tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1182,28 +1090,21 @@ hb_font_funcs_set_glyph_name_func (<em class="parameter"><code><a class="link" h
                                    <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="hb-font-funcs-set-glyph-name-func.parameters"></a><h4>Parameters</h4>
+<a name="idp24982496"></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>
+<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>
+</tr></tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1215,7 +1116,7 @@ hb_font_funcs_set_glyph_v_advance_func
                                 <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="hb-font-funcs-set-glyph-v-advance-func.parameters"></a><h4>Parameters</h4>
+<a name="idp25004096"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1236,7 +1137,7 @@ hb_font_funcs_set_glyph_v_advance_func
 </tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1248,7 +1149,7 @@ hb_font_funcs_set_glyph_v_kerning_func
                                 <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="hb-font-funcs-set-glyph-v-kerning-func.parameters"></a><h4>Parameters</h4>
+<a name="idp25030400"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1269,7 +1170,7 @@ hb_font_funcs_set_glyph_v_kerning_func
 </tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1280,7 +1181,7 @@ hb_font_funcs_set_glyph_v_origin_func (<em class="parameter"><code><a class="lin
                                        <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="hb-font-funcs-set-glyph-v-origin-func.parameters"></a><h4>Parameters</h4>
+<a name="idp25056720"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1301,7 +1202,7 @@ hb_font_funcs_set_glyph_v_origin_func (<em class="parameter"><code><a class="lin
 </tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1312,9 +1213,8 @@ hb_font_funcs_set_user_data (<em class="parameter"><code><a class="link" href="h
                              <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>
-<p><span class="annotation">[<acronym title="Exposed in C code, not necessarily available in other languages."><span class="acronym">skip</span></acronym>]</span></p>
 <div class="refsect3">
-<a name="hb-font-funcs-set-user-data.parameters"></a><h4>Parameters</h4>
+<a name="idp25084624"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1328,7 +1228,11 @@ hb_font_funcs_set_user_data (<em class="parameter"><code><a class="link" href="h
 </tr></tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<div class="refsect3">
+<a name="idp25093024"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1336,10 +1240,11 @@ hb_font_funcs_set_user_data (<em class="parameter"><code><a class="link" href="h
 <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="hb-font-get-empty.returns"></a><h4>Returns</h4>
+<a name="idp25101776"></a><h4>Returns</h4>
 <p> (transfer full)</p>
+<p></p>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1347,7 +1252,7 @@ hb_font_get_empty (<em class="parameter"><code><span class="type">void</span></c
 <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="hb-font-get-face.parameters"></a><h4>Parameters</h4>
+<a name="idp25111616"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1362,11 +1267,11 @@ hb_font_get_face (<em class="parameter"><code><a class="link" href="harfbuzz-hb-
 </table></div>
 </div>
 <div class="refsect3">
-<a name="hb-font-get-face.returns"></a><h4>Returns</h4>
+<a name="idp25120016"></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: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1377,7 +1282,7 @@ hb_font_get_glyph (<em class="parameter"><code><a class="link" href="harfbuzz-hb
                    <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="hb-font-get-glyph.parameters"></a><h4>Parameters</h4>
+<a name="idp25136000"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1398,7 +1303,11 @@ hb_font_get_glyph (<em class="parameter"><code><a class="link" href="harfbuzz-hb
 </tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<div class="refsect3">
+<a name="idp25148112"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1411,7 +1320,7 @@ hb_font_get_glyph_advance_for_direction
                                 <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="hb-font-get-glyph-advance-for-direction.parameters"></a><h4>Parameters</h4>
+<a name="idp25164464"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1437,7 +1346,7 @@ hb_font_get_glyph_advance_for_direction
 </tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1447,6 +1356,12 @@ hb_font_get_glyph_advance_for_direction
                                      <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="idp25194864"></a><h4>Returns</h4>
+<p></p>
+</div>
 </div>
 <hr>
 <div class="refsect2">
@@ -1458,7 +1373,7 @@ hb_font_get_glyph_contour_point (<em class="parameter"><code><a class="link" hre
                                  <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="hb-font-get-glyph-contour-point.parameters"></a><h4>Parameters</h4>
+<a name="idp25210592"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1484,7 +1399,11 @@ hb_font_get_glyph_contour_point (<em class="parameter"><code><a class="link" hre
 </tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<div class="refsect3">
+<a name="idp25226416"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1498,7 +1417,7 @@ hb_font_get_glyph_contour_point_for_origin
                                 <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="hb-font-get-glyph-contour-point-for-origin.parameters"></a><h4>Parameters</h4>
+<a name="idp25244640"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1524,7 +1443,11 @@ hb_font_get_glyph_contour_point_for_origin
 </tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<div class="refsect3">
+<a name="idp25260464"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1538,6 +1461,12 @@ hb_font_get_glyph_contour_point_for_origin
                                 <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="idp25281728"></a><h4>Returns</h4>
+<p></p>
+</div>
 </div>
 <hr>
 <div class="refsect2">
@@ -1547,7 +1476,7 @@ hb_font_get_glyph_extents (<em class="parameter"><code><a class="link" href="har
                            <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="hb-font-get-glyph-extents.parameters"></a><h4>Parameters</h4>
+<a name="idp25293952"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1568,7 +1497,11 @@ hb_font_get_glyph_extents (<em class="parameter"><code><a class="link" href="har
 </tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<div class="refsect3">
+<a name="idp25306064"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1579,7 +1512,7 @@ hb_font_get_glyph_extents_for_origin (<em class="parameter"><code><a class="link
                                       <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="hb-font-get-glyph-extents-for-origin.parameters"></a><h4>Parameters</h4>
+<a name="idp25320672"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1600,7 +1533,11 @@ hb_font_get_glyph_extents_for_origin (<em class="parameter"><code><a class="link
 </tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<div class="refsect3">
+<a name="idp25332784"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1611,6 +1548,12 @@ hb_font_get_glyph_extents_for_origin (<em class="parameter"><code><a class="link
                                      <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="idp25350560"></a><h4>Returns</h4>
+<p></p>
+</div>
 </div>
 <hr>
 <div class="refsect2">
@@ -1621,7 +1564,7 @@ hb_font_get_glyph_from_name (<em class="parameter"><code><a class="link" href="h
                              <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="hb-font-get-glyph-from-name.parameters"></a><h4>Parameters</h4>
+<a name="idp25364656"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1647,7 +1590,11 @@ hb_font_get_glyph_from_name (<em class="parameter"><code><a class="link" href="h
 </tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<div class="refsect3">
+<a name="idp25380480"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1657,6 +1604,12 @@ hb_font_get_glyph_from_name (<em class="parameter"><code><a class="link" href="h
                                        <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="idp25396720"></a><h4>Returns</h4>
+<p></p>
+</div>
 </div>
 <hr>
 <div class="refsect2">
@@ -1668,7 +1621,12 @@ hb_font_get_glyph_from_name (<em class="parameter"><code><a class="link" href="h
                              <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>
-<div class="warning"><p><code class="literal">hb_font_get_glyph_func_t</code> is deprecated and should not be used in newly-written code.</p></div>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp25415520"></a><h4>Returns</h4>
+<p></p>
+</div>
 </div>
 <hr>
 <div class="refsect2">
@@ -1677,7 +1635,7 @@ hb_font_get_glyph_from_name (<em class="parameter"><code><a class="link" href="h
 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="hb-font-get-glyph-h-advance.parameters"></a><h4>Parameters</h4>
+<a name="idp25426048"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1691,7 +1649,11 @@ hb_font_get_glyph_h_advance (<em class="parameter"><code><a class="link" href="h
 </tr></tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<div class="refsect3">
+<a name="idp25434448"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1701,7 +1663,7 @@ hb_font_get_glyph_h_kerning (<em class="parameter"><code><a class="link" href="h
                              <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="hb-font-get-glyph-h-kerning.parameters"></a><h4>Parameters</h4>
+<a name="idp25447280"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1715,7 +1677,11 @@ hb_font_get_glyph_h_kerning (<em class="parameter"><code><a class="link" href="h
 </tr></tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<div class="refsect3">
+<a name="idp25455680"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1726,7 +1692,7 @@ hb_font_get_glyph_h_origin (<em class="parameter"><code><a class="link" href="ha
                             <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="hb-font-get-glyph-h-origin.parameters"></a><h4>Parameters</h4>
+<a name="idp25470208"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1752,7 +1718,11 @@ hb_font_get_glyph_h_origin (<em class="parameter"><code><a class="link" href="ha
 </tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<div class="refsect3">
+<a name="idp25486032"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1766,7 +1736,7 @@ hb_font_get_glyph_kerning_for_direction
                                 <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="hb-font-get-glyph-kerning-for-direction.parameters"></a><h4>Parameters</h4>
+<a name="idp25504080"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1792,7 +1762,7 @@ hb_font_get_glyph_kerning_for_direction
 </tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1803,6 +1773,12 @@ hb_font_get_glyph_kerning_for_direction
                                      <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="idp25536256"></a><h4>Returns</h4>
+<p></p>
+</div>
 </div>
 <hr>
 <div class="refsect2">
@@ -1813,7 +1789,7 @@ hb_font_get_glyph_name (<em class="parameter"><code><a class="link" href="harfbu
                         <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="hb-font-get-glyph-name.parameters"></a><h4>Parameters</h4>
+<a name="idp25550288"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1834,7 +1810,11 @@ hb_font_get_glyph_name (<em class="parameter"><code><a class="link" href="harfbu
 </tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<div class="refsect3">
+<a name="idp25562400"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1846,6 +1826,12 @@ hb_font_get_glyph_name (<em class="parameter"><code><a class="link" href="harfbu
                                   <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="idp25581984"></a><h4>Returns</h4>
+<p></p>
+</div>
 </div>
 <hr>
 <div class="refsect2">
@@ -1858,7 +1844,7 @@ hb_font_get_glyph_origin_for_direction
                                 <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="hb-font-get-glyph-origin-for-direction.parameters"></a><h4>Parameters</h4>
+<a name="idp25597664"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1884,7 +1870,7 @@ hb_font_get_glyph_origin_for_direction
 </tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1896,6 +1882,12 @@ hb_font_get_glyph_origin_for_direction
                                     <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="idp25631472"></a><h4>Returns</h4>
+<p></p>
+</div>
 </div>
 <hr>
 <div class="refsect2">
@@ -1904,7 +1896,7 @@ hb_font_get_glyph_origin_for_direction
 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="hb-font-get-glyph-v-advance.parameters"></a><h4>Parameters</h4>
+<a name="idp25641936"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1918,7 +1910,11 @@ hb_font_get_glyph_v_advance (<em class="parameter"><code><a class="link" href="h
 </tr></tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<div class="refsect3">
+<a name="idp25650336"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1928,7 +1924,7 @@ hb_font_get_glyph_v_kerning (<em class="parameter"><code><a class="link" href="h
                              <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="hb-font-get-glyph-v-kerning.parameters"></a><h4>Parameters</h4>
+<a name="idp25663104"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1942,7 +1938,11 @@ hb_font_get_glyph_v_kerning (<em class="parameter"><code><a class="link" href="h
 </tr></tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<div class="refsect3">
+<a name="idp25671504"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1953,7 +1953,7 @@ hb_font_get_glyph_v_origin (<em class="parameter"><code><a class="link" href="ha
                             <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="hb-font-get-glyph-v-origin.parameters"></a><h4>Parameters</h4>
+<a name="idp25686032"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1979,7 +1979,11 @@ hb_font_get_glyph_v_origin (<em class="parameter"><code><a class="link" href="ha
 </tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<div class="refsect3">
+<a name="idp25701856"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1987,7 +1991,7 @@ hb_font_get_glyph_v_origin (<em class="parameter"><code><a class="link" href="ha
 <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="hb-font-get-parent.parameters"></a><h4>Parameters</h4>
+<a name="idp25711216"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2002,11 +2006,11 @@ hb_font_get_parent (<em class="parameter"><code><a class="link" href="harfbuzz-h
 </table></div>
 </div>
 <div class="refsect3">
-<a name="hb-font-get-parent.returns"></a><h4>Returns</h4>
+<a name="idp25719616"></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: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -2016,7 +2020,7 @@ hb_font_get_ppem (<em class="parameter"><code><a class="link" href="harfbuzz-hb-
                   <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="hb-font-get-ppem.parameters"></a><h4>Parameters</h4>
+<a name="idp25734272"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2042,7 +2046,7 @@ hb_font_get_ppem (<em class="parameter"><code><a class="link" href="harfbuzz-hb-
 </tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -2052,7 +2056,7 @@ hb_font_get_scale (<em class="parameter"><code><a class="link" href="harfbuzz-hb
                    <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="hb-font-get-scale.parameters"></a><h4>Parameters</h4>
+<a name="idp25761376"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2078,7 +2082,7 @@ hb_font_get_scale (<em class="parameter"><code><a class="link" href="harfbuzz-hb
 </tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -2086,9 +2090,8 @@ hb_font_get_scale (<em class="parameter"><code><a class="link" href="harfbuzz-hb
 <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>
-<p><span class="annotation">[<acronym title="Exposed in C code, not necessarily available in other languages."><span class="acronym">skip</span></acronym>]</span></p>
 <div class="refsect3">
-<a name="hb-font-get-user-data.parameters"></a><h4>Parameters</h4>
+<a name="idp25786848"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2103,11 +2106,11 @@ hb_font_get_user_data (<em class="parameter"><code><a class="link" href="harfbuz
 </table></div>
 </div>
 <div class="refsect3">
-<a name="hb-font-get-user-data.returns"></a><h4>Returns</h4>
+<a name="idp25795248"></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: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -2118,7 +2121,7 @@ hb_font_glyph_from_string (<em class="parameter"><code><a class="link" href="har
                            <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="hb-font-glyph-from-string.parameters"></a><h4>Parameters</h4>
+<a name="idp25811552"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2134,7 +2137,7 @@ hb_font_glyph_from_string (<em class="parameter"><code><a class="link" href="har
 <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][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> uint8_t]</span></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>
@@ -2144,7 +2147,11 @@ hb_font_glyph_from_string (<em class="parameter"><code><a class="link" href="har
 </tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<div class="refsect3">
+<a name="idp25827376"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -2155,7 +2162,7 @@ hb_font_glyph_to_string (<em class="parameter"><code><a class="link" href="harfb
                          <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="hb-font-glyph-to-string.parameters"></a><h4>Parameters</h4>
+<a name="idp25842016"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2176,7 +2183,7 @@ hb_font_glyph_to_string (<em class="parameter"><code><a class="link" href="harfb
 </tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -2184,7 +2191,7 @@ hb_font_glyph_to_string (<em class="parameter"><code><a class="link" href="harfb
 <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="hb-font-is-immutable.parameters"></a><h4>Parameters</h4>
+<a name="idp25862080"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2198,7 +2205,11 @@ hb_font_is_immutable (<em class="parameter"><code><a class="link" href="harfbuzz
 </tr></tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<div class="refsect3">
+<a name="idp25870480"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -2206,7 +2217,7 @@ hb_font_is_immutable (<em class="parameter"><code><a class="link" href="harfbuzz
 <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="hb-font-make-immutable.parameters"></a><h4>Parameters</h4>
+<a name="idp25879856"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2220,16 +2231,15 @@ hb_font_make_immutable (<em class="parameter"><code><a class="link" href="harfbu
 </tr></tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<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>
-<p><span class="annotation">[<acronym title="Exposed in C code, not necessarily available in other languages."><span class="acronym">skip</span></acronym>]</span></p>
 <div class="refsect3">
-<a name="hb-font-reference.parameters"></a><h4>Parameters</h4>
+<a name="idp25896192"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2244,11 +2254,11 @@ hb_font_reference (<em class="parameter"><code><a class="link" href="harfbuzz-hb
 </table></div>
 </div>
 <div class="refsect3">
-<a name="hb-font-reference.returns"></a><h4>Returns</h4>
+<a name="idp25904592"></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: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -2259,7 +2269,7 @@ hb_font_set_funcs (<em class="parameter"><code><a class="link" href="harfbuzz-hb
                    <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="hb-font-set-funcs.parameters"></a><h4>Parameters</h4>
+<a name="idp25920576"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2280,7 +2290,7 @@ hb_font_set_funcs (<em class="parameter"><code><a class="link" href="harfbuzz-hb
 </tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -2290,7 +2300,7 @@ hb_font_set_funcs_data (<em class="parameter"><code><a class="link" href="harfbu
                         <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="hb-font-set-funcs-data.parameters"></a><h4>Parameters</h4>
+<a name="idp25945024"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2311,7 +2321,7 @@ hb_font_set_funcs_data (<em class="parameter"><code><a class="link" href="harfbu
 </tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -2321,7 +2331,7 @@ hb_font_set_ppem (<em class="parameter"><code><a class="link" href="harfbuzz-hb-
                   <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="hb-font-set-ppem.parameters"></a><h4>Parameters</h4>
+<a name="idp25969200"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2335,7 +2345,7 @@ hb_font_set_ppem (<em class="parameter"><code><a class="link" href="harfbuzz-hb-
 </tr></tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -2345,7 +2355,7 @@ hb_font_set_scale (<em class="parameter"><code><a class="link" href="harfbuzz-hb
                    <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="hb-font-set-scale.parameters"></a><h4>Parameters</h4>
+<a name="idp25988880"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2359,7 +2369,7 @@ hb_font_set_scale (<em class="parameter"><code><a class="link" href="harfbuzz-hb
 </tr></tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -2370,9 +2380,8 @@ hb_font_set_user_data (<em class="parameter"><code><a class="link" href="harfbuz
                        <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>
-<p><span class="annotation">[<acronym title="Exposed in C code, not necessarily available in other languages."><span class="acronym">skip</span></acronym>]</span></p>
 <div class="refsect3">
-<a name="hb-font-set-user-data.parameters"></a><h4>Parameters</h4>
+<a name="idp26012016"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2386,7 +2395,11 @@ hb_font_set_user_data (<em class="parameter"><code><a class="link" href="harfbuz
 </tr></tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<div class="refsect3">
+<a name="idp26020416"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -2399,7 +2412,7 @@ hb_font_subtract_glyph_origin_for_direction
                                 <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="hb-font-subtract-glyph-origin-for-direction.parameters"></a><h4>Parameters</h4>
+<a name="idp26036768"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2425,7 +2438,7 @@ hb_font_subtract_glyph_origin_for_direction
 </tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -2434,195 +2447,12 @@ hb_font_subtract_glyph_origin_for_direction
 <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>
-</div>
-<hr>
-<div class="refsect2">
-<a name="hb-font-funcs-set-font-h-extents-func"></a><h3>hb_font_funcs_set_font_h_extents_func ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-hb_font_funcs_set_font_h_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-font-h-extents-func-t" title="hb_font_get_font_h_extents_func_t"><span class="type">hb_font_get_font_h_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="hb-font-funcs-set-font-h-extents-func.parameters"></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: <a class="link" href="api-index-1-1-2.html#api-index-1.1.2">1.1.2</a></p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="hb-font-funcs-set-font-v-extents-func"></a><h3>hb_font_funcs_set_font_v_extents_func ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-hb_font_funcs_set_font_v_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-font-v-extents-func-t" title="hb_font_get_font_v_extents_func_t"><span class="type">hb_font_get_font_v_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="hb-font-funcs-set-font-v-extents-func.parameters"></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: <a class="link" href="api-index-1-1-2.html#api-index-1.1.2">1.1.2</a></p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="hb-font-get-extents-for-direction"></a><h3>hb_font_get_extents_for_direction ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-hb_font_get_extents_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-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_font_extents_t</span> *extents</code></em>);</pre>
+<p>
+</p>
 <div class="refsect3">
-<a name="hb-font-get-extents-for-direction.parameters"></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>
+<a name="idp26065488"></a><h4>Returns</h4>
+<p></p>
 </div>
-<p class="since">Since: <a class="link" href="api-index-1-1-3.html#api-index-1.1.3">1.1.3</a></p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="hb-font-get-font-extents-func-t"></a><h3>hb_font_get_font_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_font_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><span class="type">hb_font_extents_t</span> *metrics</code></em>,
-                                    <em class="parameter"><code><span class="type">void</span> *user_data</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="hb-font-get-h-extents"></a><h3>hb_font_get_h_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_h_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><span class="type">hb_font_extents_t</span> *extents</code></em>);</pre>
-<div class="refsect3">
-<a name="hb-font-get-h-extents.parameters"></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>
-<p class="since">Since: <a class="link" href="api-index-1-1-3.html#api-index-1.1.3">1.1.3</a></p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="hb-font-get-v-extents"></a><h3>hb_font_get_v_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_v_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><span class="type">hb_font_extents_t</span> *extents</code></em>);</pre>
-<div class="refsect3">
-<a name="hb-font-get-v-extents.parameters"></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>
-<p class="since">Since: <a class="link" href="api-index-1-1-3.html#api-index-1.1.3">1.1.3</a></p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="hb-font-set-parent"></a><h3>hb_font_set_parent ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-hb_font_set_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>,
-                    <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>
-<p>Sets parent font of <em class="parameter"><code>font</code></em>
-.</p>
-<div class="refsect3">
-<a name="hb-font-set-parent.parameters"></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>parent</p></td>
-<td class="parameter_description"><p>new parent.</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<p class="since">Since: <a class="link" href="api-index-1-0-5.html#api-index-1.0.5">1.0.5</a></p>
 </div>
 </div>
 <div class="refsect1">
@@ -2631,64 +2461,69 @@ hb_font_set_parent (<em class="parameter"><code><a class="link" href="harfbuzz-h
 <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>
-</div>
-<hr>
-<div class="refsect2">
-<a name="hb-font-get-font-h-extents-func-t"></a><h3>hb_font_get_font_h_extents_func_t</h3>
-<pre class="programlisting">typedef hb_font_get_font_extents_func_t hb_font_get_font_h_extents_func_t;
-</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="hb-font-get-font-v-extents-func-t"></a><h3>hb_font_get_font_v_extents_func_t</h3>
-<pre class="programlisting">typedef hb_font_get_font_extents_func_t hb_font_get_font_v_extents_func_t;
-</pre>
+<p>
+</p>
 </div>
 </div>
 </div>
 <div class="footer">
-<hr>Generated by GTK-Doc V1.24.1</div>
+<hr>
+          Generated by GTK-Doc V1.20.1</div>
 </body>
 </html>
\ No newline at end of file
similarity index 62%
rename from docs/html/harfbuzz-hb-ft.html
rename to docs/reference/html/harfbuzz-hb-ft.html
index 66c83db..910af86 100644 (file)
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>hb-ft: HarfBuzz Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="HarfBuzz Manual">
-<link rel="up" href="ch07.html" title="Harfbuzz API">
+<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.24.1 (XML mode)">
+<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">
@@ -18,7 +18,7 @@
                   <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="ch07.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></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>
 </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-referenced" title="hb_ft_face_create_referenced ()">hb_ft_face_create_referenced</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">
 </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-referenced" title="hb_ft_font_create_referenced ()">hb_ft_font_create_referenced</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
 <span class="returnvalue">FT_Face</span>
 </td>
 <td class="function_name">
 <span class="returnvalue">void</span>
 </td>
 <td class="function_name">
-<a class="link" href="harfbuzz-hb-ft.html#hb-ft-font-set-load-flags" title="hb_ft_font_set_load_flags ()">hb_ft_font_set_load_flags</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">int</span>
-</td>
-<td class="function_name">
-<a class="link" href="harfbuzz-hb-ft.html#hb-ft-font-get-load-flags" title="hb_ft_font_get_load_flags ()">hb_ft_font_get_load_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-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>
 </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>
 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="hb-ft-face-create.parameters"></a><h4>Parameters</h4>
+<a name="idp18589520"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -140,11 +110,11 @@ hb_ft_face_create (<em class="parameter"><code><span class="type">FT_Face</span>
 </table></div>
 </div>
 <div class="refsect3">
-<a name="hb-ft-face-create.returns"></a><h4>Returns</h4>
+<a name="idp14983456"></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: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -152,23 +122,11 @@ hb_ft_face_create (<em class="parameter"><code><span class="type">FT_Face</span>
 <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="hb-ft-face-create-cached.returns"></a><h4>Returns</h4>
+<a name="idp16534320"></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: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="hb-ft-face-create-referenced"></a><h3>hb_ft_face_create_referenced ()</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_referenced (<em class="parameter"><code><span class="type">FT_Face</span> ft_face</code></em>);</pre>
-<div class="refsect3">
-<a name="hb-ft-face-create-referenced.returns"></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: <a class="link" href="api-index-0-9-38.html#api-index-0.9.38">0.9.38</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -177,7 +135,7 @@ hb_ft_face_create_referenced (<em class="parameter"><code><span class="type">FT_
 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="hb-ft-font-create.parameters"></a><h4>Parameters</h4>
+<a name="idp18930768"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -192,50 +150,31 @@ hb_ft_font_create (<em class="parameter"><code><span class="type">FT_Face</span>
 </table></div>
 </div>
 <div class="refsect3">
-<a name="hb-ft-font-create.returns"></a><h4>Returns</h4>
+<a name="idp14801584"></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: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="hb-ft-font-create-referenced"></a><h3>hb_ft_font_create_referenced ()</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_referenced (<em class="parameter"><code><span class="type">FT_Face</span> ft_face</code></em>);</pre>
-<div class="refsect3">
-<a name="hb-ft-font-create-referenced.returns"></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: <a class="link" href="api-index-0-9-38.html#api-index-0.9.38">0.9.38</a></p>
+<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="idp26507392"></a><h4>Returns</h4>
+<p></p>
 </div>
-<hr>
-<div class="refsect2">
-<a name="hb-ft-font-set-load-flags"></a><h3>hb_ft_font_set_load_flags ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-hb_ft_font_set_load_flags (<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> load_flags</code></em>);</pre>
-<p class="since">Since: <a class="link" href="api-index-1-0-5.html#api-index-1.0.5">1.0.5</a></p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="hb-ft-font-get-load-flags"></a><h3>hb_ft_font_get_load_flags ()</h3>
-<pre class="programlisting"><span class="returnvalue">int</span>
-hb_ft_font_get_load_flags (<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 class="since">Since: <a class="link" href="api-index-1-0-5.html#api-index-1.0.5">1.0.5</a></p>
 </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">
@@ -243,6 +182,7 @@ hb_ft_font_set_funcs (<em class="parameter"><code><a class="link" href="harfbuzz
 </div>
 </div>
 <div class="footer">
-<hr>Generated by GTK-Doc V1.24.1</div>
+<hr>
+          Generated by GTK-Doc V1.20.1</div>
 </body>
 </html>
\ No newline at end of file
similarity index 79%
rename from docs/html/harfbuzz-hb-glib.html
rename to docs/reference/html/harfbuzz-hb-glib.html
index 342625c..03ab919 100644 (file)
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>hb-glib: HarfBuzz Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="HarfBuzz Manual">
-<link rel="up" href="ch07.html" title="Harfbuzz API">
+<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.24.1 (XML mode)">
+<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">
@@ -18,7 +18,7 @@
                   <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="ch07.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></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>
 <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>
-<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-glib.html#hb-glib-blob-create" title="hb_glib_blob_create ()">hb_glib_blob_create</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>
 <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="idp18673488"></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="idp19415904"></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="idp16666160"></a><h4>Returns</h4>
+<p></p>
 </div>
-<hr>
-<div class="refsect2">
-<a name="hb-glib-blob-create"></a><h3>hb_glib_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_glib_blob_create (<em class="parameter"><code><span class="type">GBytes</span> *gbytes</code></em>);</pre>
-<p class="since">Since: <a class="link" href="api-index-0-9-38.html#api-index-0.9.38">0.9.38</a></p>
 </div>
 </div>
 <div class="refsect1">
@@ -109,6 +114,7 @@ hb_glib_blob_create (<em class="parameter"><code><span class="type">GBytes</span
 </div>
 </div>
 <div class="footer">
-<hr>Generated by GTK-Doc V1.24.1</div>
+<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
similarity index 87%
rename from docs/html/harfbuzz-hb-graphite2.html
rename to docs/reference/html/harfbuzz-hb-graphite2.html
index a19c83c..2c57cac 100644 (file)
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>hb-graphite2: HarfBuzz Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="HarfBuzz Manual">
-<link rel="up" href="ch07.html" title="Harfbuzz API">
+<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.24.1 (XML mode)">
+<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">
@@ -18,7 +18,7 @@
                   <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="ch07.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></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>
@@ -73,6 +73,8 @@
 </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>
 <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="idp14441472"></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="idp23104224"></a><h4>Returns</h4>
+<p></p>
+</div>
 </div>
 </div>
 <div class="refsect1">
@@ -94,10 +108,13 @@ hb_graphite2_font_get_gr_font (<em class="parameter"><code><a class="link" href=
 <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.24.1</div>
+<hr>
+          Generated by GTK-Doc V1.20.1</div>
 </body>
 </html>
\ No newline at end of file
similarity index 86%
rename from docs/html/harfbuzz-hb-icu.html
rename to docs/reference/html/harfbuzz-hb-icu.html
index 906e91c..307aeb2 100644 (file)
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>hb-icu: HarfBuzz Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="HarfBuzz Manual">
-<link rel="up" href="ch07.html" title="Harfbuzz API">
+<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.24.1 (XML mode)">
+<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">
@@ -18,7 +18,7 @@
                   <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="ch07.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></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>
@@ -68,6 +68,8 @@
 </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>
 <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="idp14126544"></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="idp20698224"></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="idp16604368"></a><h4>Returns</h4>
+<p></p>
+</div>
 </div>
 </div>
 <div class="refsect1">
@@ -94,6 +114,7 @@ hb_icu_script_to_script (<em class="parameter"><code><span class="type">UScriptC
 </div>
 </div>
 <div class="footer">
-<hr>Generated by GTK-Doc V1.24.1</div>
+<hr>
+          Generated by GTK-Doc V1.20.1</div>
 </body>
 </html>
\ No newline at end of file
similarity index 91%
rename from docs/html/harfbuzz-hb-ot-layout.html
rename to docs/reference/html/harfbuzz-hb-ot-layout.html
index 0da9306..d7231db 100644 (file)
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>hb-ot-layout: HarfBuzz Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="HarfBuzz Manual">
-<link rel="up" href="ch07.html" title="Harfbuzz API">
+<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.24.1 (XML mode)">
+<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">
@@ -19,7 +19,7 @@
                   <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="ch07.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></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>
 <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>
-<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-index" title="hb_ot_layout_language_get_required_feature_index ()">hb_ot_layout_language_get_required_feature_index</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
 </tbody>
 </table></div>
 </div>
 <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="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="harfbuzz-hb-ot-layout.html#HB-OT-TAG-JSTF:CAPS" title="HB_OT_TAG_JSTF">HB_OT_TAG_JSTF</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>
 </div>
 <div class="refsect1">
 <a name="harfbuzz-hb-ot-layout.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen">    <a href="/home/behdad/.local/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html">GEnum</a>
+<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>
@@ -313,7 +303,8 @@ hb_ot_layout_collect_lookups (<em class="parameter"><code><a class="link" href="
                               <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 class="since">Since: <a class="link" href="api-index-0-9-8.html#api-index-0.9.8">0.9.8</a></p>
+<p>
+</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -325,7 +316,12 @@ hb_ot_layout_feature_get_lookups (<em class="parameter"><code><a class="link" hr
                                   <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 class="since">Since: <a class="link" href="api-index-0-9-7.html#api-index-0.9.7">0.9.7</a></p>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp26122576"></a><h4>Returns</h4>
+<p></p>
+</div>
 </div>
 <hr>
 <div class="refsect2">
@@ -336,6 +332,12 @@ hb_ot_layout_get_attach_points (<em class="parameter"><code><a class="link" href
                                 <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="idp26138240"></a><h4>Returns</h4>
+<p></p>
+</div>
 </div>
 <hr>
 <div class="refsect2">
@@ -343,7 +345,12 @@ hb_ot_layout_get_attach_points (<em class="parameter"><code><a class="link" href
 <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 class="since">Since: <a class="link" href="api-index-0-9-7.html#api-index-0.9.7">0.9.7</a></p>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp26148336"></a><h4>Returns</h4>
+<p></p>
+</div>
 </div>
 <hr>
 <div class="refsect2">
@@ -352,7 +359,8 @@ hb_ot_layout_get_glyph_class (<em class="parameter"><code><a class="link" href="
 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 class="since">Since: <a class="link" href="api-index-0-9-7.html#api-index-0.9.7">0.9.7</a></p>
+<p>
+</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -364,6 +372,12 @@ hb_ot_layout_get_ligature_carets (<em class="parameter"><code><a class="link" hr
                                   <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="idp26175760"></a><h4>Returns</h4>
+<p></p>
+</div>
 </div>
 <hr>
 <div class="refsect2">
@@ -375,7 +389,12 @@ hb_ot_layout_get_size_params (<em class="parameter"><code><a class="link" href="
                               <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 class="since">Since: <a class="link" href="api-index-0-9-10.html#api-index-0.9.10">0.9.10</a></p>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp26193232"></a><h4>Returns</h4>
+<p></p>
+</div>
 </div>
 <hr>
 <div class="refsect2">
@@ -386,24 +405,48 @@ hb_ot_layout_get_size_params (<em class="parameter"><code><a class="link" href="
                                        <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="idp26209952"></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="idp26218384"></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="idp26226816"></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="idp26235248"></a><h4>Returns</h4>
+<p></p>
+</div>
 </div>
 <hr>
 <div class="refsect2">
@@ -415,6 +458,12 @@ hb_ot_layout_language_find_feature (<em class="parameter"><code><a class="link"
                                     <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="idp26252368"></a><h4>Returns</h4>
+<p></p>
+</div>
 </div>
 <hr>
 <div class="refsect2">
@@ -428,6 +477,12 @@ hb_ot_layout_language_get_feature_indexes
                                 <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="idp26271360"></a><h4>Returns</h4>
+<p></p>
+</div>
 </div>
 <hr>
 <div class="refsect2">
@@ -441,6 +496,12 @@ hb_ot_layout_language_get_feature_tags
                                 <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="idp26290368"></a><h4>Returns</h4>
+<p></p>
+</div>
 </div>
 <hr>
 <div class="refsect2">
@@ -453,7 +514,6 @@ hb_ot_layout_language_get_required_feature
                                 <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>
-<p class="since">Since: <a class="link" href="api-index-0-9-30.html#api-index-0.9.30">0.9.30</a></p>
 </div>
 <hr>
 <div class="refsect2">
@@ -466,7 +526,8 @@ hb_ot_layout_lookup_collect_glyphs (<em class="parameter"><code><a class="link"
                                     <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 class="since">Since: <a class="link" href="api-index-0-9-7.html#api-index-0.9.7">0.9.7</a></p>
+<p>
+</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -476,7 +537,8 @@ 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 class="since">Since: <a class="link" href="api-index-0-9-7.html#api-index-0.9.7">0.9.7</a></p>
+<p>
+</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -487,7 +549,12 @@ hb_ot_layout_lookup_would_substitute (<em class="parameter"><code><a class="link
                                       <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 class="since">Since: <a class="link" href="api-index-0-9-7.html#api-index-0.9.7">0.9.7</a></p>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp26347808"></a><h4>Returns</h4>
+<p></p>
+</div>
 </div>
 <hr>
 <div class="refsect2">
@@ -498,6 +565,12 @@ hb_ot_layout_script_find_language (<em class="parameter"><code><a class="link" h
                                    <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="idp23893888"></a><h4>Returns</h4>
+<p></p>
+</div>
 </div>
 <hr>
 <div class="refsect2">
@@ -509,6 +582,12 @@ hb_ot_layout_script_get_language_tags (<em class="parameter"><code><a class="lin
                                        <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="idp23910848"></a><h4>Returns</h4>
+<p></p>
+</div>
 </div>
 <hr>
 <div class="refsect2">
@@ -519,6 +598,12 @@ hb_ot_layout_table_choose_script (<em class="parameter"><code><a class="link" hr
                                   <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="idp23926160"></a><h4>Returns</h4>
+<p></p>
+</div>
 </div>
 <hr>
 <div class="refsect2">
@@ -528,6 +613,12 @@ hb_ot_layout_table_find_script (<em class="parameter"><code><a class="link" href
                                 <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="idp23939664"></a><h4>Returns</h4>
+<p></p>
+</div>
 </div>
 <hr>
 <div class="refsect2">
@@ -538,6 +629,12 @@ hb_ot_layout_table_get_feature_tags (<em class="parameter"><code><a class="link"
                                      <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="idp23954912"></a><h4>Returns</h4>
+<p></p>
+</div>
 </div>
 <hr>
 <div class="refsect2">
@@ -548,6 +645,12 @@ hb_ot_layout_table_get_script_tags (<em class="parameter"><code><a class="link"
                                     <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="idp23970400"></a><h4>Returns</h4>
+<p></p>
+</div>
 </div>
 <hr>
 <div class="refsect2">
@@ -555,7 +658,6 @@ hb_ot_layout_table_get_script_tags (<em class="parameter"><code><a class="link"
 <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>
-<p class="since">Since: <a class="link" href="api-index-0-9-22.html#api-index-0.9.22">0.9.22</a></p>
 </div>
 <hr>
 <div class="refsect2">
@@ -564,18 +666,8 @@ hb_ot_layout_table_get_lookup_count (<em class="parameter"><code><a class="link"
 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 class="since">Since: <a class="link" href="api-index-0-9-7.html#api-index-0.9.7">0.9.7</a></p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="hb-ot-layout-language-get-required-feature-index"></a><h3>hb_ot_layout_language_get_required_feature_index ()</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_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><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>);</pre>
+<p>
+</p>
 </div>
 </div>
 <div class="refsect1">
@@ -584,48 +676,56 @@ hb_ot_layout_language_get_required_feature_index
 <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>
-</div>
-<hr>
-<div class="refsect2">
-<a name="HB-OT-TAG-JSTF:CAPS"></a><h3>HB_OT_TAG_JSTF</h3>
-<pre class="programlisting">#define HB_OT_TAG_JSTF HB_TAG('J','S','T','F')
-</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="hb-ot-layout-glyph-class-t.members"></a><h4>Members</h4>
+<a name="idp24022880"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
@@ -635,28 +735,28 @@ hb_ot_layout_language_get_required_feature_index
 <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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
 </tr>
 </tbody>
 </table></div>
@@ -665,6 +765,7 @@ hb_ot_layout_language_get_required_feature_index
 </div>
 </div>
 <div class="footer">
-<hr>Generated by GTK-Doc V1.24.1</div>
+<hr>
+          Generated by GTK-Doc V1.20.1</div>
 </body>
 </html>
\ No newline at end of file
similarity index 83%
rename from docs/html/harfbuzz-hb-ot-tag.html
rename to docs/reference/html/harfbuzz-hb-ot-tag.html
index ea49a15..058623f 100644 (file)
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>hb-ot-tag: HarfBuzz Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="HarfBuzz Manual">
-<link rel="up" href="ch07.html" title="Harfbuzz API">
+<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-ot-font.html" title="hb-ot-font">
-<meta name="generator" content="GTK-Doc V1.24.1 (XML mode)">
+<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">
@@ -18,9 +18,9 @@
                   <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="ch07.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></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-ot-font.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></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>
@@ -49,7 +49,7 @@
 </tr>
 <tr>
 <td class="function_type">
-<a class="link" href="harfbuzz-hb-common.html#hb-language-t" title="hb_language_t"><span class="returnvalue">hb_language_t</span></a>
+<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>
 </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" title="hb_language_t"><span class="type">hb_language_t</span></a> language</code></em>);</pre>
+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="idp16597424"></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" title="hb_language_t"><span class="returnvalue">hb_language_t</span></a>
+<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="hb-ot-tag-to-language.returns"></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>
+<a name="idp15287904"></a><h4>Returns</h4>
+<p></p>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
 </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="idp14593888"></a><h4>Returns</h4>
+<p></p>
+</div>
 </div>
 <hr>
 <div class="refsect2">
@@ -128,6 +142,8 @@ hb_ot_tag_to_script (<em class="parameter"><code><a class="link" href="harfbuzz-
 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">
@@ -136,16 +152,21 @@ hb_ot_tags_from_script (<em class="parameter"><code><a class="link" href="harfbu
 <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.24.1</div>
+<hr>
+          Generated by GTK-Doc V1.20.1</div>
 </body>
 </html>
\ No newline at end of file
similarity index 82%
rename from docs/html/harfbuzz-hb-ot.html
rename to docs/reference/html/harfbuzz-hb-ot.html
index 00ecee7..9c48aad 100644 (file)
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>hb-ot: HarfBuzz Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="HarfBuzz Manual">
-<link rel="up" href="ch07.html" title="Harfbuzz API">
+<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.24.1 (XML mode)">
+<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">
@@ -18,7 +18,7 @@
                   <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="ch07.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></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>
 </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>
-<p></p>
 </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.24.1</div>
+<hr>
+          Generated by GTK-Doc V1.20.1</div>
 </body>
 </html>
\ No newline at end of file
similarity index 86%
rename from docs/html/harfbuzz-hb-set.html
rename to docs/reference/html/harfbuzz-hb-set.html
index 7b57884..87ce9bf 100644 (file)
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>hb-set: HarfBuzz Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="HarfBuzz Manual">
-<link rel="up" href="ch07.html" title="Harfbuzz API">
+<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.24.1 (XML mode)">
+<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">
@@ -19,7 +19,7 @@
                   <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="ch07.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></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>
 </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>
 <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-set.html#HB-SET-VALUE-INVALID:CAPS" title="HB_SET_VALUE_INVALID">HB_SET_VALUE_INVALID</a></td>
-</tr>
-<tr>
+<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>
+</tr></tbody>
 </table></div>
 </div>
 <div class="refsect1">
 <a name="harfbuzz-hb-set.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen">    <a href="/home/behdad/.local/share/gtk-doc/html/gobject/gobject-Boxed-Types.html">GBoxed</a>
+<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="hb-set-add.parameters"></a><h4>Parameters</h4>
+<a name="idp20721456"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -300,7 +306,7 @@ hb_set_add (<em class="parameter"><code><a class="link" href="harfbuzz-hb-set.ht
 </tr></tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -310,7 +316,7 @@ hb_set_add_range (<em class="parameter"><code><a class="link" href="harfbuzz-hb-
                   <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="hb-set-add-range.parameters"></a><h4>Parameters</h4>
+<a name="idp23182976"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -324,7 +330,7 @@ hb_set_add_range (<em class="parameter"><code><a class="link" href="harfbuzz-hb-
 </tr></tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-7.html#api-index-0.9.7">0.9.7</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -332,7 +338,7 @@ hb_set_add_range (<em class="parameter"><code><a class="link" href="harfbuzz-hb-
 <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="hb-set-allocation-successful.parameters"></a><h4>Parameters</h4>
+<a name="idp23199248"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -346,7 +352,11 @@ hb_set_allocation_successful (<em class="parameter"><code>const <a class="link"
 </tr></tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<div class="refsect3">
+<a name="idp23207648"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -354,7 +364,7 @@ hb_set_allocation_successful (<em class="parameter"><code>const <a class="link"
 <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="hb-set-clear.parameters"></a><h4>Parameters</h4>
+<a name="idp23216672"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -368,20 +378,19 @@ hb_set_clear (<em class="parameter"><code><a class="link" href="harfbuzz-hb-set.
 </tr></tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<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><span class="annotation">[Xconstructor]</span></p>
+<p>
+</p>
 <div class="refsect3">
-<a name="hb-set-create.returns"></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>
+<a name="idp23231984"></a><h4>Returns</h4>
+<p></p>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
 </div>
 <hr>
 <div class="refsect2">
@@ -390,7 +399,7 @@ hb_set_create (<em class="parameter"><code><span class="type">void</span></code>
 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="hb-set-del.parameters"></a><h4>Parameters</h4>
+<a name="idp23242016"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -404,7 +413,7 @@ hb_set_del (<em class="parameter"><code><a class="link" href="harfbuzz-hb-set.ht
 </tr></tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -414,7 +423,7 @@ hb_set_del_range (<em class="parameter"><code><a class="link" href="harfbuzz-hb-
                   <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="hb-set-del-range.parameters"></a><h4>Parameters</h4>
+<a name="idp23261248"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -428,16 +437,15 @@ hb_set_del_range (<em class="parameter"><code><a class="link" href="harfbuzz-hb-
 </tr></tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-7.html#api-index-0.9.7">0.9.7</a></p>
+<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>
-<p><span class="annotation">[<acronym title="Exposed in C code, not necessarily available in other languages."><span class="acronym">skip</span></acronym>]</span></p>
 <div class="refsect3">
-<a name="hb-set-destroy.parameters"></a><h4>Parameters</h4>
+<a name="idp23277248"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -451,7 +459,7 @@ hb_set_destroy (<em class="parameter"><code><a class="link" href="harfbuzz-hb-se
 </tr></tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -459,11 +467,11 @@ hb_set_destroy (<em class="parameter"><code><a class="link" href="harfbuzz-hb-se
 <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="hb-set-get-empty.returns"></a><h4>Returns</h4>
+<a name="idp23292640"></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: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -472,7 +480,7 @@ hb_set_get_empty (<em class="parameter"><code><span class="type">void</span></co
 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="hb-set-get-max.parameters"></a><h4>Parameters</h4>
+<a name="idp23303952"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -487,10 +495,11 @@ hb_set_get_max (<em class="parameter"><code>const <a class="link" href="harfbuzz
 </table></div>
 </div>
 <div class="refsect3">
-<a name="hb-set-get-max.returns"></a><h4>Returns</h4>
+<a name="idp23312352"></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: <a class="link" href="api-index-0-9-7.html#api-index-0.9.7">0.9.7</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -499,7 +508,7 @@ hb_set_get_max (<em class="parameter"><code>const <a class="link" href="harfbuzz
 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="hb-set-get-min.parameters"></a><h4>Parameters</h4>
+<a name="idp23323888"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -514,10 +523,11 @@ hb_set_get_min (<em class="parameter"><code>const <a class="link" href="harfbuzz
 </table></div>
 </div>
 <div class="refsect3">
-<a name="hb-set-get-min.returns"></a><h4>Returns</h4>
+<a name="idp23332288"></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: <a class="link" href="api-index-0-9-7.html#api-index-0.9.7">0.9.7</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -526,7 +536,7 @@ hb_set_get_min (<em class="parameter"><code>const <a class="link" href="harfbuzz
 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="hb-set-get-population.parameters"></a><h4>Parameters</h4>
+<a name="idp23343984"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -541,10 +551,11 @@ hb_set_get_population (<em class="parameter"><code>const <a class="link" href="h
 </table></div>
 </div>
 <div class="refsect3">
-<a name="hb-set-get-population.returns"></a><h4>Returns</h4>
+<a name="idp23352384"></a><h4>Returns</h4>
 <p> set population.</p>
+<p></p>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-7.html#api-index-0.9.7">0.9.7</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -552,9 +563,8 @@ hb_set_get_population (<em class="parameter"><code>const <a class="link" href="h
 <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>
-<p><span class="annotation">[<acronym title="Exposed in C code, not necessarily available in other languages."><span class="acronym">skip</span></acronym>]</span></p>
 <div class="refsect3">
-<a name="hb-set-get-user-data.parameters"></a><h4>Parameters</h4>
+<a name="idp23363568"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -569,11 +579,11 @@ hb_set_get_user_data (<em class="parameter"><code><a class="link" href="harfbuzz
 </table></div>
 </div>
 <div class="refsect3">
-<a name="hb-set-get-user-data.returns"></a><h4>Returns</h4>
+<a name="idp23371968"></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: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -582,7 +592,7 @@ hb_set_get_user_data (<em class="parameter"><code><a class="link" href="harfbuzz
 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="hb-set-has.parameters"></a><h4>Parameters</h4>
+<a name="idp23384384"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -596,7 +606,11 @@ hb_set_has (<em class="parameter"><code>const <a class="link" href="harfbuzz-hb-
 </tr></tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<div class="refsect3">
+<a name="idp23392784"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -605,7 +619,7 @@ hb_set_has (<em class="parameter"><code>const <a class="link" href="harfbuzz-hb-
 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="hb-set-intersect.parameters"></a><h4>Parameters</h4>
+<a name="idp23403600"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -619,7 +633,7 @@ hb_set_intersect (<em class="parameter"><code><a class="link" href="harfbuzz-hb-
 </tr></tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -627,7 +641,7 @@ hb_set_intersect (<em class="parameter"><code><a class="link" href="harfbuzz-hb-
 <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="hb-set-invert.parameters"></a><h4>Parameters</h4>
+<a name="idp23419600"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -641,7 +655,7 @@ hb_set_invert (<em class="parameter"><code><a class="link" href="harfbuzz-hb-set
 </tr></tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-10.html#api-index-0.9.10">0.9.10</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -649,7 +663,7 @@ hb_set_invert (<em class="parameter"><code><a class="link" href="harfbuzz-hb-set
 <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="hb-set-is-empty.parameters"></a><h4>Parameters</h4>
+<a name="idp26531232"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -663,7 +677,11 @@ hb_set_is_empty (<em class="parameter"><code>const <a class="link" href="harfbuz
 </tr></tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-7.html#api-index-0.9.7">0.9.7</a></p>
+<div class="refsect3">
+<a name="idp26538736"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -672,7 +690,7 @@ hb_set_is_empty (<em class="parameter"><code>const <a class="link" href="harfbuz
 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="hb-set-is-equal.parameters"></a><h4>Parameters</h4>
+<a name="idp26548192"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -686,7 +704,11 @@ hb_set_is_equal (<em class="parameter"><code>const <a class="link" href="harfbuz
 </tr></tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-7.html#api-index-0.9.7">0.9.7</a></p>
+<div class="refsect3">
+<a name="idp26555696"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -695,7 +717,7 @@ hb_set_is_equal (<em class="parameter"><code>const <a class="link" href="harfbuz
 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="hb-set-next.parameters"></a><h4>Parameters</h4>
+<a name="idp26564896"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -717,10 +739,11 @@ hb_set_next (<em class="parameter"><code>const <a class="link" href="harfbuzz-hb
 </table></div>
 </div>
 <div class="refsect3">
-<a name="hb-set-next.returns"></a><h4>Returns</h4>
+<a name="idp26575728"></a><h4>Returns</h4>
 <p> whether there was a next value.</p>
+<p></p>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -734,7 +757,7 @@ hb_set_next_range (<em class="parameter"><code>const <a class="link" href="harfb
 are greater than current value of <em class="parameter"><code>last</code></em>
 .</p>
 <div class="refsect3">
-<a name="hb-set-next-range.parameters"></a><h4>Parameters</h4>
+<a name="idp26588656"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -761,19 +784,19 @@ are greater than current value of <em class="parameter"><code>last</code></em>
 </table></div>
 </div>
 <div class="refsect3">
-<a name="hb-set-next-range.returns"></a><h4>Returns</h4>
+<a name="idp26602816"></a><h4>Returns</h4>
 <p> whether there was a next range.</p>
+<p></p>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-7.html#api-index-0.9.7">0.9.7</a></p>
+<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>
-<p><span class="annotation">[<acronym title="Exposed in C code, not necessarily available in other languages."><span class="acronym">skip</span></acronym>]</span></p>
 <div class="refsect3">
-<a name="hb-set-reference.parameters"></a><h4>Parameters</h4>
+<a name="idp26611040"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -788,11 +811,11 @@ hb_set_reference (<em class="parameter"><code><a class="link" href="harfbuzz-hb-
 </table></div>
 </div>
 <div class="refsect3">
-<a name="hb-set-reference.returns"></a><h4>Returns</h4>
+<a name="idp26618544"></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: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -801,7 +824,7 @@ hb_set_reference (<em class="parameter"><code><a class="link" href="harfbuzz-hb-
 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="hb-set-set.parameters"></a><h4>Parameters</h4>
+<a name="idp26629264"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -815,7 +838,7 @@ hb_set_set (<em class="parameter"><code><a class="link" href="harfbuzz-hb-set.ht
 </tr></tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -826,9 +849,8 @@ hb_set_set_user_data (<em class="parameter"><code><a class="link" href="harfbuzz
                       <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>
-<p><span class="annotation">[<acronym title="Exposed in C code, not necessarily available in other languages."><span class="acronym">skip</span></acronym>]</span></p>
 <div class="refsect3">
-<a name="hb-set-set-user-data.parameters"></a><h4>Parameters</h4>
+<a name="idp26648800"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -850,7 +872,11 @@ hb_set_set_user_data (<em class="parameter"><code><a class="link" href="harfbuzz
 </tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<div class="refsect3">
+<a name="idp26659200"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -859,7 +885,7 @@ hb_set_set_user_data (<em class="parameter"><code><a class="link" href="harfbuzz
 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="hb-set-subtract.parameters"></a><h4>Parameters</h4>
+<a name="idp26668512"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -873,7 +899,7 @@ hb_set_subtract (<em class="parameter"><code><a class="link" href="harfbuzz-hb-s
 </tr></tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -882,7 +908,7 @@ hb_set_subtract (<em class="parameter"><code><a class="link" href="harfbuzz-hb-s
 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="hb-set-symmetric-difference.parameters"></a><h4>Parameters</h4>
+<a name="idp26684064"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -896,7 +922,7 @@ hb_set_symmetric_difference (<em class="parameter"><code><a class="link" href="h
 </tr></tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -905,7 +931,7 @@ hb_set_symmetric_difference (<em class="parameter"><code><a class="link" href="h
 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="hb-set-union.parameters"></a><h4>Parameters</h4>
+<a name="idp26699616"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -919,25 +945,22 @@ hb_set_union (<em class="parameter"><code><a class="link" href="harfbuzz-hb-set.
 </tr></tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<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-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-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.24.1</div>
+<hr>
+          Generated by GTK-Doc V1.20.1</div>
 </body>
 </html>
\ No newline at end of file
similarity index 77%
rename from docs/html/harfbuzz-hb-shape-plan.html
rename to docs/reference/html/harfbuzz-hb-shape-plan.html
index aee3168..d612552 100644 (file)
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>hb-shape-plan: HarfBuzz Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="HarfBuzz Manual">
-<link rel="up" href="ch07.html" title="Harfbuzz API">
-<link rel="prev" href="harfbuzz-hb-ot-shape.html" title="hb-ot-shape">
+<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.24.1 (XML mode)">
+<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">
@@ -19,8 +19,8 @@
                   <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="ch07.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="harfbuzz-hb-ot-shape.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></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">
 </div>
 <div class="refsect1">
 <a name="harfbuzz-hb-shape-plan.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen">    <a href="/home/behdad/.local/share/gtk-doc/html/gobject/gobject-Boxed-Types.html">GBoxed</a>
+<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>
 <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-Buffers.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-Shaping.html#hb-feature-t"><span class="type">hb_feature_t</span></a> *user_features</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><span class="annotation">[Xconstructor]</span></p>
+<p>
+</p>
 <div class="refsect3">
-<a name="hb-shape-plan-create.parameters"></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="hb-shape-plan-create.returns"></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>
+<a name="idp14878704"></a><h4>Returns</h4>
+<p></p>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-7.html#api-index-0.9.7">0.9.7</a></p>
 </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-Buffers.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-Shaping.html#hb-feature-t"><span class="type">hb_feature_t</span></a> *user_features</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="hb-shape-plan-create-cached.parameters"></a><h4>Parameters</h4>
+<a name="idp16920256"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -208,20 +187,19 @@ hb_shape_plan_create_cached (<em class="parameter"><code><a class="link" href="h
 </table></div>
 </div>
 <div class="refsect3">
-<a name="hb-shape-plan-create-cached.returns"></a><h4>Returns</h4>
+<a name="idp14478448"></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: <a class="link" href="api-index-0-9-7.html#api-index-0.9.7">0.9.7</a></p>
+<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>
-<p><span class="annotation">[<acronym title="Exposed in C code, not necessarily available in other languages."><span class="acronym">skip</span></acronym>]</span></p>
 <div class="refsect3">
-<a name="hb-shape-plan-destroy.parameters"></a><h4>Parameters</h4>
+<a name="idp16259760"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -235,7 +213,7 @@ hb_shape_plan_destroy (<em class="parameter"><code><a class="link" href="harfbuz
 </tr></tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-7.html#api-index-0.9.7">0.9.7</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -243,11 +221,11 @@ hb_shape_plan_destroy (<em class="parameter"><code><a class="link" href="harfbuz
 <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-Buffers.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-Shaping.html#hb-feature-t"><span class="type">hb_feature_t</span></a> *features</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="hb-shape-plan-execute.parameters"></a><h4>Parameters</h4>
+<a name="idp24238496"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -278,7 +256,11 @@ hb_shape_plan_execute (<em class="parameter"><code><a class="link" href="harfbuz
 </tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-7.html#api-index-0.9.7">0.9.7</a></p>
+<div class="refsect3">
+<a name="idp23522512"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -286,11 +268,11 @@ hb_shape_plan_execute (<em class="parameter"><code><a class="link" href="harfbuz
 <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="hb-shape-plan-get-empty.returns"></a><h4>Returns</h4>
+<a name="idp23531024"></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: <a class="link" href="api-index-0-9-7.html#api-index-0.9.7">0.9.7</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -298,7 +280,7 @@ hb_shape_plan_get_empty (<em class="parameter"><code><span class="type">void</sp
 <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="hb-shape-plan-get-shaper.parameters"></a><h4>Parameters</h4>
+<a name="idp23541920"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -313,11 +295,11 @@ hb_shape_plan_get_shaper (<em class="parameter"><code><a class="link" href="harf
 </table></div>
 </div>
 <div class="refsect3">
-<a name="hb-shape-plan-get-shaper.returns"></a><h4>Returns</h4>
+<a name="idp23550320"></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: <a class="link" href="api-index-0-9-7.html#api-index-0.9.7">0.9.7</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -325,9 +307,8 @@ hb_shape_plan_get_shaper (<em class="parameter"><code><a class="link" href="harf
 <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>
-<p><span class="annotation">[<acronym title="Exposed in C code, not necessarily available in other languages."><span class="acronym">skip</span></acronym>]</span></p>
 <div class="refsect3">
-<a name="hb-shape-plan-get-user-data.parameters"></a><h4>Parameters</h4>
+<a name="idp23562672"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -342,20 +323,19 @@ hb_shape_plan_get_user_data (<em class="parameter"><code><a class="link" href="h
 </table></div>
 </div>
 <div class="refsect3">
-<a name="hb-shape-plan-get-user-data.returns"></a><h4>Returns</h4>
+<a name="idp23571072"></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: <a class="link" href="api-index-0-9-7.html#api-index-0.9.7">0.9.7</a></p>
+<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>
-<p><span class="annotation">[<acronym title="Exposed in C code, not necessarily available in other languages."><span class="acronym">skip</span></acronym>]</span></p>
 <div class="refsect3">
-<a name="hb-shape-plan-reference.parameters"></a><h4>Parameters</h4>
+<a name="idp23581792"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -370,11 +350,11 @@ hb_shape_plan_reference (<em class="parameter"><code><a class="link" href="harfb
 </table></div>
 </div>
 <div class="refsect3">
-<a name="hb-shape-plan-reference.returns"></a><h4>Returns</h4>
+<a name="idp23590192"></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: <a class="link" href="api-index-0-9-7.html#api-index-0.9.7">0.9.7</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -385,9 +365,8 @@ hb_shape_plan_set_user_data (<em class="parameter"><code><a class="link" href="h
                              <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>
-<p><span class="annotation">[<acronym title="Exposed in C code, not necessarily available in other languages."><span class="acronym">skip</span></acronym>]</span></p>
 <div class="refsect3">
-<a name="hb-shape-plan-set-user-data.parameters"></a><h4>Parameters</h4>
+<a name="idp23607440"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -401,7 +380,11 @@ hb_shape_plan_set_user_data (<em class="parameter"><code><a class="link" href="h
 </tr></tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-7.html#api-index-0.9.7">0.9.7</a></p>
+<div class="refsect3">
+<a name="idp23615840"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
 </div>
 </div>
 <div class="refsect1">
@@ -410,10 +393,13 @@ hb_shape_plan_set_user_data (<em class="parameter"><code><a class="link" href="h
 <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.24.1</div>
+<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..c055347
--- /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="idp18031264"></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>][optional]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="idp17491264"></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="idp16212496"></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="idp20849744"></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="idp20668592"></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="idp24215408"></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="idp24224032"></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
similarity index 82%
rename from docs/html/harfbuzz-hb-unicode.html
rename to docs/reference/html/harfbuzz-hb-unicode.html
index ecc82c5..91358b2 100644 (file)
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>hb-unicode: HarfBuzz Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="HarfBuzz Manual">
-<link rel="up" href="ch07.html" title="Harfbuzz API">
+<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-Buffers.html" title="Buffers">
-<meta name="generator" content="GTK-Doc V1.24.1 (XML mode)">
+<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">
@@ -19,9 +19,9 @@
                   <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="ch07.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></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-Buffers.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></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>
 </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>
 </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="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>
 </div>
 <div class="refsect1">
 <a name="harfbuzz-hb-unicode.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen">    <a href="/home/behdad/.local/share/gtk-doc/html/gobject/gobject-Boxed-Types.html">GBoxed</a>
+<pre class="screen">    GBoxed
     <span class="lineart">╰──</span> hb_unicode_funcs_t
-    <a href="/home/behdad/.local/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html">GEnum</a>
+    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 class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp19583296"></a><h4>Returns</h4>
+<p></p>
+</div>
 </div>
 <hr>
 <div class="refsect2">
@@ -352,6 +367,12 @@ hb_unicode_combining_class (<em class="parameter"><code><a class="link" href="ha
 <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="idp19596496"></a><h4>Returns</h4>
+<p></p>
+</div>
 </div>
 <hr>
 <div class="refsect2">
@@ -362,7 +383,7 @@ hb_unicode_compose (<em class="parameter"><code><a class="link" href="harfbuzz-h
                     <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="hb-unicode-compose.parameters"></a><h4>Parameters</h4>
+<a name="idp19609760"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -383,7 +404,11 @@ hb_unicode_compose (<em class="parameter"><code><a class="link" href="harfbuzz-h
 </tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<div class="refsect3">
+<a name="idp19621872"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -394,6 +419,12 @@ hb_unicode_compose (<em class="parameter"><code><a class="link" href="harfbuzz-h
                               <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="idp19639008"></a><h4>Returns</h4>
+<p></p>
+</div>
 </div>
 <hr>
 <div class="refsect2">
@@ -404,7 +435,7 @@ hb_unicode_decompose (<em class="parameter"><code><a class="link" href="harfbuzz
                       <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="hb-unicode-decompose.parameters"></a><h4>Parameters</h4>
+<a name="idp19652352"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -430,7 +461,11 @@ hb_unicode_decompose (<em class="parameter"><code><a class="link" href="harfbuzz
 </tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<div class="refsect3">
+<a name="idp19668176"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -440,7 +475,7 @@ hb_unicode_decompose_compatibility (<em class="parameter"><code><a class="link"
                                     <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="hb-unicode-decompose-compatibility.parameters"></a><h4>Parameters</h4>
+<a name="idp19680736"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -461,7 +496,11 @@ hb_unicode_decompose_compatibility (<em class="parameter"><code><a class="link"
 </tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<div class="refsect3">
+<a name="idp19692848"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -472,6 +511,12 @@ hb_unicode_decompose_compatibility (<em class="parameter"><code><a class="link"
                                 <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="idp19709984"></a><h4>Returns</h4>
+<p></p>
+</div>
 </div>
 <hr>
 <div class="refsect2">
@@ -479,44 +524,32 @@ hb_unicode_decompose_compatibility (<em class="parameter"><code><a class="link"
 <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 class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp19720224"></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><span class="annotation">[Xconstructor]</span></p>
-<div class="refsect3">
-<a name="hb-unicode-funcs-create.parameters"></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>. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL may be passed as the value in, out, in-out; or as a return value."><span class="acronym">nullable</span></acronym>]</span></td>
-</tr></tbody>
-</table></div>
-</div>
+<p>
+</p>
 <div class="refsect3">
-<a name="hb-unicode-funcs-create.returns"></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>
+<a name="idp19728656"></a><h4>Returns</h4>
+<p></p>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
 </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>
-<p><span class="annotation">[<acronym title="Exposed in C code, not necessarily available in other languages."><span class="acronym">skip</span></acronym>]</span></p>
 <div class="refsect3">
-<a name="hb-unicode-funcs-destroy.parameters"></a><h4>Parameters</h4>
+<a name="idp19737168"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -530,13 +563,19 @@ hb_unicode_funcs_destroy (<em class="parameter"><code><a class="link" href="harf
 </tr></tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<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="idp19752576"></a><h4>Returns</h4>
+<p></p>
+</div>
 </div>
 <hr>
 <div class="refsect2">
@@ -544,11 +583,11 @@ hb_unicode_funcs_get_default (<em class="parameter"><code><span class="type">voi
 <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="hb-unicode-funcs-get-empty.returns"></a><h4>Returns</h4>
+<a name="idp19760480"></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: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -556,7 +595,7 @@ hb_unicode_funcs_get_empty (<em class="parameter"><code><span class="type">void<
 <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="hb-unicode-funcs-get-parent.parameters"></a><h4>Parameters</h4>
+<a name="idp19771200"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -570,7 +609,11 @@ hb_unicode_funcs_get_parent (<em class="parameter"><code><a class="link" href="h
 </tr></tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<div class="refsect3">
+<a name="idp19779600"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -578,9 +621,8 @@ hb_unicode_funcs_get_parent (<em class="parameter"><code><a class="link" href="h
 <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>
-<p><span class="annotation">[<acronym title="Exposed in C code, not necessarily available in other languages."><span class="acronym">skip</span></acronym>]</span></p>
 <div class="refsect3">
-<a name="hb-unicode-funcs-get-user-data.parameters"></a><h4>Parameters</h4>
+<a name="idp19790352"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -595,11 +637,11 @@ hb_unicode_funcs_get_user_data (<em class="parameter"><code><a class="link" href
 </table></div>
 </div>
 <div class="refsect3">
-<a name="hb-unicode-funcs-get-user-data.returns"></a><h4>Returns</h4>
+<a name="idp19798752"></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: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -607,7 +649,7 @@ hb_unicode_funcs_get_user_data (<em class="parameter"><code><a class="link" href
 <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="hb-unicode-funcs-is-immutable.parameters"></a><h4>Parameters</h4>
+<a name="idp20958624"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -621,7 +663,11 @@ hb_unicode_funcs_is_immutable (<em class="parameter"><code><a class="link" href=
 </tr></tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<div class="refsect3">
+<a name="idp20966128"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -629,7 +675,7 @@ hb_unicode_funcs_is_immutable (<em class="parameter"><code><a class="link" href=
 <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="hb-unicode-funcs-make-immutable.parameters"></a><h4>Parameters</h4>
+<a name="idp20973920"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -643,16 +689,15 @@ hb_unicode_funcs_make_immutable (<em class="parameter"><code><a class="link" hre
 </tr></tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<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>
-<p><span class="annotation">[<acronym title="Exposed in C code, not necessarily available in other languages."><span class="acronym">skip</span></acronym>]</span></p>
 <div class="refsect3">
-<a name="hb-unicode-funcs-reference.parameters"></a><h4>Parameters</h4>
+<a name="idp20987952"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -667,11 +712,11 @@ hb_unicode_funcs_reference (<em class="parameter"><code><a class="link" href="ha
 </table></div>
 </div>
 <div class="refsect3">
-<a name="hb-unicode-funcs-reference.returns"></a><h4>Returns</h4>
+<a name="idp20995456"></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: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -683,28 +728,21 @@ hb_unicode_funcs_set_combining_class_func
                                 <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="hb-unicode-funcs-set-combining-class-func.parameters"></a><h4>Parameters</h4>
+<a name="idp21008784"></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>
+<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>
-<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>
+</tr></tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -715,28 +753,21 @@ hb_unicode_funcs_set_compose_func (<em class="parameter"><code><a class="link" h
                                    <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="hb-unicode-funcs-set-compose-func.parameters"></a><h4>Parameters</h4>
+<a name="idp21026832"></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>
+<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>
-<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>
+</tr></tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -748,28 +779,21 @@ hb_unicode_funcs_set_decompose_compatibility_func
                                 <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="hb-unicode-funcs-set-decompose-compatibility-func.parameters"></a><h4>Parameters</h4>
+<a name="idp21044992"></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>
+<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>
-<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>
+</tr></tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -780,28 +804,21 @@ hb_unicode_funcs_set_decompose_func (<em class="parameter"><code><a class="link"
                                      <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="hb-unicode-funcs-set-decompose-func.parameters"></a><h4>Parameters</h4>
+<a name="idp21063152"></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>
+<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>
-<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>
+</tr></tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -813,28 +830,21 @@ hb_unicode_funcs_set_eastasian_width_func
                                 <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="hb-unicode-funcs-set-eastasian-width-func.parameters"></a><h4>Parameters</h4>
+<a name="idp21081312"></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>
+<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>
-<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>
+</tr></tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -846,28 +856,21 @@ hb_unicode_funcs_set_general_category_func
                                 <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="hb-unicode-funcs-set-general-category-func.parameters"></a><h4>Parameters</h4>
+<a name="idp21099472"></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>
+<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>
-<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>
+</tr></tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -878,28 +881,21 @@ hb_unicode_funcs_set_mirroring_func (<em class="parameter"><code><a class="link"
                                      <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="hb-unicode-funcs-set-mirroring-func.parameters"></a><h4>Parameters</h4>
+<a name="idp21117632"></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>
+<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>
-<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>
+</tr></tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -910,28 +906,21 @@ hb_unicode_funcs_set_script_func (<em class="parameter"><code><a class="link" hr
                                   <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="hb-unicode-funcs-set-script-func.parameters"></a><h4>Parameters</h4>
+<a name="idp21135792"></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>
+<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>
-<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>
+</tr></tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -942,9 +931,8 @@ hb_unicode_funcs_set_user_data (<em class="parameter"><code><a class="link" href
                                 <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>
-<p><span class="annotation">[<acronym title="Exposed in C code, not necessarily available in other languages."><span class="acronym">skip</span></acronym>]</span></p>
 <div class="refsect3">
-<a name="hb-unicode-funcs-set-user-data.parameters"></a><h4>Parameters</h4>
+<a name="idp21155328"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -958,7 +946,11 @@ hb_unicode_funcs_set_user_data (<em class="parameter"><code><a class="link" href
 </tr></tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<div class="refsect3">
+<a name="idp21162832"></a><h4>Returns</h4>
+<p></p>
+</div>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -966,7 +958,12 @@ hb_unicode_funcs_set_user_data (<em class="parameter"><code><a class="link" href
 <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 class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp21171920"></a><h4>Returns</h4>
+<p></p>
+</div>
 </div>
 <hr>
 <div class="refsect2">
@@ -975,6 +972,12 @@ hb_unicode_general_category (<em class="parameter"><code><a class="link" href="h
 <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="idp21183216"></a><h4>Returns</h4>
+<p></p>
+</div>
 </div>
 <hr>
 <div class="refsect2">
@@ -982,7 +985,12 @@ hb_unicode_general_category (<em class="parameter"><code><a class="link" href="h
 <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 class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp21191760"></a><h4>Returns</h4>
+<p></p>
+</div>
 </div>
 <hr>
 <div class="refsect2">
@@ -991,6 +999,12 @@ hb_unicode_mirroring (<em class="parameter"><code><a class="link" href="harfbuzz
 <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="idp21203056"></a><h4>Returns</h4>
+<p></p>
+</div>
 </div>
 <hr>
 <div class="refsect2">
@@ -998,7 +1012,12 @@ hb_unicode_mirroring (<em class="parameter"><code><a class="link" href="harfbuzz
 <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 class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<p>
+</p>
+<div class="refsect3">
+<a name="idp21211600"></a><h4>Returns</h4>
+<p></p>
+</div>
 </div>
 <hr>
 <div class="refsect2">
@@ -1007,20 +1026,22 @@ hb_unicode_script (<em class="parameter"><code><a class="link" href="harfbuzz-hb
 <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="idp21222896"></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-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>
-</div>
-<hr>
-<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="hb-unicode-combining-class-t.members"></a><h4>Members</h4>
+<a name="idp21228688"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
@@ -1030,288 +1051,288 @@ hb_unicode_script (<em class="parameter"><code><a class="link" href="harfbuzz-hb
 <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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
 </tr>
 </tbody>
 </table></div>
@@ -1322,12 +1343,16 @@ hb_unicode_script (<em class="parameter"><code><a class="link" href="harfbuzz-hb
 <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="hb-unicode-general-category-t.members"></a><h4>Members</h4>
+<a name="idp21422768"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
@@ -1337,153 +1362,153 @@ hb_unicode_script (<em class="parameter"><code><a class="link" href="harfbuzz-hb
 <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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </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> </td>
-<td> </td>
+<td class="enum_member_description"> </td>
+<td class="enum_member_annotations"> </td>
 </tr>
 </tbody>
 </table></div>
@@ -1492,6 +1517,7 @@ hb_unicode_script (<em class="parameter"><code><a class="link" href="harfbuzz-hb
 </div>
 </div>
 <div class="footer">
-<hr>Generated by GTK-Doc V1.24.1</div>
+<hr>
+          Generated by GTK-Doc V1.20.1</div>
 </body>
 </html>
\ No newline at end of file
similarity index 85%
rename from docs/html/harfbuzz-hb-uniscribe.html
rename to docs/reference/html/harfbuzz-hb-uniscribe.html
index 2096fbe..3b9645a 100644 (file)
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>hb-uniscribe: HarfBuzz Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="HarfBuzz Manual">
-<link rel="up" href="ch07.html" title="Harfbuzz API">
+<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.24.1 (XML mode)">
+<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">
@@ -18,7 +18,7 @@
                   <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="ch07.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></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>
@@ -60,6 +60,8 @@
 </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>
 <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="idp26513136"></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="idp15442704"></a><h4>Returns</h4>
+<p></p>
+</div>
 </div>
 </div>
 <div class="refsect1">
@@ -80,6 +94,7 @@ hb_uniscribe_font_get_logfontw (<em class="parameter"><code><a class="link" href
 </div>
 </div>
 <div class="footer">
-<hr>Generated by GTK-Doc V1.24.1</div>
+<hr>
+          Generated by GTK-Doc V1.20.1</div>
 </body>
 </html>
\ No newline at end of file
similarity index 69%
rename from docs/html/harfbuzz-hb-version.html
rename to docs/reference/html/harfbuzz-hb-version.html
index 28a9346..3438e91 100644 (file)
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>hb-version: HarfBuzz Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="HarfBuzz Manual">
-<link rel="up" href="ch07.html" title="Harfbuzz API">
-<link rel="prev" href="harfbuzz-Shaping.html" title="Shaping">
+<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.24.1 (XML mode)">
+<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">
@@ -18,8 +18,8 @@
                   <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="ch07.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="harfbuzz-Shaping.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></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">
 </colgroup>
 <tbody>
 <tr>
-<td class="define_keyword">#define</td>
-<td class="function_name">
-<a class="link" href="harfbuzz-hb-version.html#HB-VERSION-ATLEAST:CAPS" title="HB_VERSION_ATLEAST()">HB_VERSION_ATLEAST</a><span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
 <td class="function_type">
 <span class="returnvalue">void</span>
 </td>
 </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-version.html#hb-version-atleast" title="hb_version_atleast ()">hb_version_atleast</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
 <td class="function_type">const <span class="returnvalue">char</span> *
 </td>
 <td class="function_name">
 </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-ATLEAST:CAPS"></a><h3>HB_VERSION_ATLEAST()</h3>
-<pre class="programlisting">#define             HB_VERSION_ATLEAST(major,minor,micro)</pre>
-</div>
-<hr>
-<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>
-<p>Returns library version as three integer components.</p>
 <div class="refsect3">
-<a name="hb-version.parameters"></a><h4>Parameters</h4>
+<a name="idp16699792"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -142,16 +124,7 @@ hb_version (<em class="parameter"><code>unsigned <span class="type">int</span> *
 </tbody>
 </table></div>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="hb-version-atleast"></a><h3>hb_version_atleast ()</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_version_atleast (<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>
-<p class="since">Since: <a class="link" href="api-index-0-9-30.html#api-index-0.9.30">0.9.30</a></p>
+<p class="since">Since 1.0</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -160,40 +133,50 @@ hb_version_atleast (<em class="parameter"><code>unsigned <span class="type">int<
 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="hb-version-string.returns"></a><h4>Returns</h4>
+<a name="idp14950384"></a><h4>Returns</h4>
 <p> library version string.</p>
+<p></p>
 </div>
-<p class="since">Since: <a class="link" href="api-index-0-9-2.html#api-index-0.9.2">0.9.2</a></p>
+<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 1
+<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 6
+<pre class="programlisting">#define HB_VERSION_MICRO 40
 </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 2
+<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 "1.2.6"
+<pre class="programlisting">#define HB_VERSION_STRING "0.9.40"
 </pre>
+<p>
+</p>
 </div>
 </div>
 </div>
 <div class="footer">
-<hr>Generated by GTK-Doc V1.24.1</div>
+<hr>
+          Generated by GTK-Doc V1.20.1</div>
 </body>
 </html>
\ No newline at end of file
similarity index 76%
rename from docs/html/harfbuzz-hb.html
rename to docs/reference/html/harfbuzz-hb.html
index ca615fe..0ce86d6 100644 (file)
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>hb: HarfBuzz Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="HarfBuzz Manual">
-<link rel="up" href="ch07.html" title="Harfbuzz API">
-<link rel="prev" href="ch07.html" title="Harfbuzz API">
+<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.24.1 (XML mode)">
+<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">
@@ -18,8 +18,8 @@
                   <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="ch07.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="ch07.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></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">
 </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>
-<p></p>
 </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.24.1</div>
+<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..10bb40c
--- /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" since="1.0"/>
+    <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/index.html b/docs/reference/html/index.html
new file mode 100644 (file)
index 0000000..772db71
--- /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.40
+.
+      
+    </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..7b469b5
--- /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-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-element-type" href="harfbuzz/annotation-glossary.html#annotation-glossterm-element-type">
+<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">
similarity index 69%
rename from docs/html/object-tree.html
rename to docs/reference/html/object-tree.html
index 0dff3cc..c4f447b 100644 (file)
@@ -2,20 +2,20 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Object Hierarchy: HarfBuzz Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="HarfBuzz Manual">
-<link rel="up" href="pt02.html" title="Part II. Reference manual">
+<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.24.1 (XML mode)">
+<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><a accesskey="u" href="pt02.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></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="titlepage"><div><div><h2 class="title">
 <a name="object-tree"></a>Object Hierarchy</h2></div></div></div>
 <pre class="screen">
-    <a href="/home/behdad/.local/share/gtk-doc/html/gobject/gobject-Boxed-Types.html">GBoxed</a>
+    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-Buffers.html#hb-buffer-t">hb_buffer_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-Shaping.html#hb-feature-t">hb_feature_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-Buffers.html#hb-glyph-info-t">hb_glyph_info_t</a>
-    <span class="lineart">├──</span> <a class="link" href="harfbuzz-Buffers.html#hb-glyph-position-t">hb_glyph_position_t</a>
-    <span class="lineart">├──</span> <a class="link" href="harfbuzz-Buffers.html#hb-segment-properties-t">hb_segment_properties_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>
-    <a href="/home/behdad/.local/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html">GEnum</a>
-    <span class="lineart">├──</span> <a class="link" href="harfbuzz-Buffers.html#hb-buffer-cluster-level-t" title="enum hb_buffer_cluster_level_t">hb_buffer_cluster_level_t</a>
-    <span class="lineart">├──</span> <a class="link" href="harfbuzz-Buffers.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-Buffers.html#hb-buffer-serialize-format-t" title="enum hb_buffer_serialize_format_t">hb_buffer_serialize_format_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>
-    <a href="/home/behdad/.local/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html">GFlags</a>
-    <span class="lineart">├──</span> <a class="link" href="harfbuzz-Buffers.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-Buffers.html#hb-buffer-serialize-flags-t" title="enum hb_buffer_serialize_flags_t">hb_buffer_serialize_flags_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.24.1</div>
+<hr>
+          Generated by GTK-Doc V1.20.1</div>
 </body>
 </html>
\ No newline at end of file
similarity index 97%
rename from docs/html/style.css
rename to docs/reference/html/style.css
index 3675420..c141ddd 100644 (file)
@@ -60,7 +60,7 @@ a:hover
 div.informaltable table
 {
   border-collapse: separate;
-  border-spacing: 1em 0.3em;
+  border-spacing: 1em 0.5em;
   border: none;
 }
 
@@ -148,8 +148,6 @@ div.table table th
 h4
 {
   color: #555753;
-  margin-top: 1em;
-  margin-bottom: 1em;
 }
 
 hr
@@ -168,16 +166,17 @@ dl.toc dt
   padding-bottom: 0.25em;
 }
 
-dl.toc > dt
+dl.toc > dd > dl > dt
 {
   padding-top: 0.25em;
   padding-bottom: 0.25em;
-  font-weight: bold;
 }
 
-dl.toc > dl
+dl.toc > dt
 {
+  padding-top: 1em;
   padding-bottom: 0.5em;
+  font-weight: bold;
 }
 
 .parameter
@@ -347,9 +346,7 @@ acronym,abbr
 }
 
 @media screen {
-  /* these have a <sup> as a first child, but since there are no parent selectors
-   * we can't use that. */
-  a.footnote
+  sup a.footnote
   {
     position: relative;
     top: 0em ! important;
similarity index 100%
rename from docs/html/up.png
rename to docs/reference/html/up.png
diff --git a/docs/reference/version.xml b/docs/reference/version.xml
new file mode 100644 (file)
index 0000000..f81283f
--- /dev/null
@@ -0,0 +1 @@
+0.9.40
diff --git a/docs/usermanual-buffers-language-script-and-direction.xml b/docs/usermanual-buffers-language-script-and-direction.xml
deleted file mode 100644 (file)
index 3a26c55..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-<chapter id="buffers-language-script-and-direction">
-  <title>Buffers, language, script and direction</title>
-  <para>
-    The input to Harfbuzz is a series of Unicode characters, stored in a
-    buffer. In this chapter, we'll look at how to set up a buffer with
-    the text that we want and then customize the properties of the
-    buffer.
-  </para>
-  <section id="creating-and-destroying-buffers">
-    <title>Creating and destroying buffers</title>
-    <para>
-      As we saw in our initial example, a buffer is created and
-      initialized with <literal>hb_buffer_create()</literal>. This
-      produces a new, empty buffer object, instantiated with some
-      default values and ready to accept your Unicode strings.
-    </para>
-    <para>
-      Harfbuzz manages the memory of objects that it creates (such as
-      buffers), so you don't have to. When you have finished working on
-      a buffer, you can call <literal>hb_buffer_destroy()</literal>:
-    </para>
-    <programlisting language="C">
-  hb_buffer_t *buffer = hb_buffer_create();
-  ...
-  hb_buffer_destroy(buffer);
-</programlisting>
-    <para>
-      This will destroy the object and free its associated memory -
-      unless some other part of the program holds a reference to this
-      buffer. If you acquire a Harfbuzz buffer from another subsystem
-      and want to ensure that it is not garbage collected by someone
-      else destroying it, you should increase its reference count:
-    </para>
-    <programlisting language="C">
-void somefunc(hb_buffer_t *buffer) {
-  buffer = hb_buffer_reference(buffer);
-  ...
-</programlisting>
-    <para>
-      And then decrease it once you're done with it:
-    </para>
-    <programlisting language="C">
-  hb_buffer_destroy(buffer);
-}
-</programlisting>
-    <para>
-      To throw away all the data in your buffer and start from scratch,
-      call <literal>hb_buffer_reset(buffer)</literal>. If you want to
-      throw away the string in the buffer but keep the options, you can
-      instead call <literal>hb_buffer_clear_contents(buffer)</literal>.
-    </para>
-  </section>
-  <section id="adding-text-to-the-buffer">
-    <title>Adding text to the buffer</title>
-    <para>
-      Now we have a brand new Harfbuzz buffer. Let's start filling it
-      with text! From Harfbuzz's perspective, a buffer is just a stream
-      of Unicode codepoints, but your input string is probably in one of
-      the standard Unicode character encodings (UTF-8, UTF-16, UTF-32)
-    </para>
-  </section>
-  <section id="setting-buffer-properties">
-    <title>Setting buffer properties</title>
-    <para>
-    </para>
-  </section>
-  <section id="what-about-the-other-scripts">
-    <title>What about the other scripts?</title>
-    <para>
-    </para>
-  </section>
-  <section id="customizing-unicode-functions">
-    <title>Customizing Unicode functions</title>
-    <para>
-    </para>
-  </section>
-</chapter>
\ No newline at end of file
diff --git a/docs/usermanual-clusters.xml b/docs/usermanual-clusters.xml
deleted file mode 100644 (file)
index 8b64bde..0000000
+++ /dev/null
@@ -1,304 +0,0 @@
-<chapter id="clusters">
-<sect1 id="clusters">
-  <title>Clusters</title>
-  <para>
-    In shaping text, a <emphasis>cluster</emphasis> is a sequence of
-    code points that needs to be treated as a single, indivisible unit.
-  </para>
-  <para>
-    When you add text to a HB buffer, each character is associated with
-    a <emphasis>cluster value</emphasis>. This is an arbitrary number as
-    far as HB is concerned.
-  </para>
-  <para>
-    Most clients will use UTF-8, UTF-16, or UTF-32 indices, but the
-    actual number does not matter. Moreover, it is not required for the
-    cluster values to be monotonically increasing, but pretty much all
-    of HB's tests are performed on monotonically increasing cluster
-    numbers. Nevertheless, there is no such assumption in the code
-    itself. With that in mind, let's examine what happens with cluster
-    values during shaping under each cluster-level.
-  </para>
-  <para>
-    HarfBuzz provides three <emphasis>levels</emphasis> of clustering
-    support. Level 0 is the default behavior and reproduces the behavior
-    of the old HarfBuzz library. Level 1 tweaks this behavior slightly
-    to produce better results, so level 1 clustering is recommended for
-    code that is not required to implement backward compatibility with
-    the old HarfBuzz.
-  </para>
-  <para>
-    Level 2 differs significantly in how it treats cluster values.
-    Levels 0 and 1 both process ligatures and glyph decomposition by
-    merging clusters; level 2 does not.
-  </para>
-  <para>
-    The conceptual model for what the cluster values mean, in levels 0
-    and 1, is this:
-  </para>
-  <itemizedlist spacing="compact">
-    <listitem>
-      <para>
-        the sequence of cluster values will always remain monotone
-      </para>
-    </listitem>
-    <listitem>
-      <para>
-        each value represents a single cluster
-      </para>
-    </listitem>
-    <listitem>
-      <para>
-        each cluster contains one or more glyphs and one or more
-        characters
-      </para>
-    </listitem>
-  </itemizedlist>
-  <para>
-    Assuming that initial cluster numbers were monotonically increasing
-    and distinct, then all adjacent glyphs having the same cluster
-    number belong to the same cluster, and all characters belong to the
-    cluster that has the highest number not larger than their initial
-    cluster number. This will become clearer with an example.
-  </para>
-</sect1>
-<sect1 id="a-clustering-example-for-levels-0-and-1">
-  <title>A clustering example for levels 0 and 1</title>
-  <para>
-    Let's say we start with the following character sequence and cluster
-    values:
-  </para>
-  <programlisting>
-   A,B,C,D,E
-   0,1,2,3,4
-</programlisting>
-  <para>
-    We then map the characters to glyphs. For simplicity, let's assume
-    that each character maps to the corresponding, identical-looking
-    glyph:
-  </para>
-  <programlisting>
-   A,B,C,D,E
-   0,1,2,3,4
-</programlisting>
-  <para>
-    Now if, for example, <literal>B</literal> and <literal>C</literal>
-    ligate, then the clusters to which they belong &quot;merge&quot;.
-    This merged cluster takes for its cluster number the minimum of all
-    the cluster numbers of the clusters that went in. In this case, we
-    get:
-  </para>
-  <programlisting>
-   A,BC,D,E
-   0,1 ,3,4
-</programlisting>
-  <para>
-    Now let's assume that the <literal>BC</literal> glyph decomposes
-    into three components, and <literal>D</literal> also decomposes into
-    two. The components each inherit the cluster value of their parent:
-  </para>
-  <programlisting>
-   A,BC0,BC1,BC2,D0,D1,E
-   0,1  ,1  ,1  ,3 ,3 ,4
-</programlisting>
-  <para>
-    Now if <literal>BC2</literal> and <literal>D0</literal> ligate, then
-    their clusters (numbers 1 and 3) merge into
-    <literal>min(1,3) = 1</literal>:
-  </para>
-  <programlisting>
-   A,BC0,BC1,BC2D0,D1,E
-   0,1  ,1  ,1    ,1 ,4
-</programlisting>
-  <para>
-    At this point, cluster 1 means: the character sequence
-    <literal>BCD</literal> is represented by glyphs
-    <literal>BC0,BC1,BC2D0,D1</literal> and cannot be broken down any
-    further.
-  </para>
-</sect1>
-<sect1 id="reordering-in-levels-0-and-1">
-  <title>Reordering in levels 0 and 1</title>
-  <para>
-    Another common operation in the more complex shapers is when things
-    reorder. In those cases, to maintain monotone clusters, HB merges
-    the clusters of everything in the reordering sequence. For example,
-    let's again start with the character sequence:
-  </para>
-  <programlisting>
-   A,B,C,D,E
-   0,1,2,3,4
-</programlisting>
-  <para>
-    If <literal>D</literal> is reordered before <literal>B</literal>,
-    then the <literal>B</literal>, <literal>C</literal>, and
-    <literal>D</literal> clusters merge, and we get:
-  </para>
-  <programlisting>
-   A,D,B,C,E
-   0,1,1,1,4
-</programlisting>
-  <para>
-    This is clearly not ideal, but it is the only sensible way to
-    maintain monotone indices and retain the true relationship between
-    glyphs and characters.
-  </para>
-</sect1>
-<sect1 id="the-distinction-between-levels-0-and-1">
-  <title>The distinction between levels 0 and 1</title>
-  <para>
-    So, the above is pretty much what cluster levels 0 and 1 do. The
-    only difference between the two is this: in level 0, at the very
-    beginning of the shaping process, we also merge clusters between
-    base characters and all Unicode marks (combining or not) following
-    them. E.g.:
-  </para>
-  <programlisting>
-  A,acute,B
-  0,1    ,2
-</programlisting>
-  <para>
-    will become:
-  </para>
-  <programlisting>
-  A,acute,B
-  0,0    ,2
-</programlisting>
-  <para>
-    This is the default behavior. We do it because Windows did it and
-    old HarfBuzz did it, so this remained the default. But this behavior
-    makes it impossible to color diacritic marks differently from their
-    base characters. That's why in level 1 we do not perform this
-    initial merging step.
-  </para>
-  <para>
-    For clients, level 0 is more convenient if they rely on HarfBuzz
-    clusters for cursor positioning. But that's wrong anyway: cursor
-    positions should be determined based on Unicode grapheme boundaries,
-    NOT shaping clusters. As such, level 1 clusters are preferred.
-  </para>
-  <para>
-    One last note about levels 0 and 1. We currently don't allow a
-    <literal>MultipleSubst</literal> lookup to replace a glyph with zero
-    glyphs (i.e., to delete a glyph). But in some other situations,
-    glyphs can be deleted. In those cases, if the glyph being deleted is
-    the last glyph of its cluster, we make sure to merge the cluster
-    with a neighboring cluster.
-  </para>
-  <para>
-    This is, primarily, to make sure that the starting cluster of the
-    text always has the cluster index pointing to the start of the text
-    for the run; more than one client currently relies on this
-    guarantee.
-  </para>
-  <para>
-    Incidentally, Apple's CoreText does something else to maintain the
-    same promise: it inserts a glyph with id 65535 at the beginning of
-    the glyph string if the glyph corresponding to the first character
-    in the run was deleted. HarfBuzz might do something similar in the
-    future.
-  </para>
-</sect1>
-<sect1 id="level-2">
-  <title>Level 2</title>
-  <para>
-    Level 2 is a different beast from levels 0 and 1. It is simple to
-    describe, but hard to make sense of. It simply doesn't do any
-    cluster merging whatsoever. When things ligate or otherwise multiple
-    glyphs turn into one, the cluster value of the first glyph is
-    retained.
-  </para>
-  <para>
-    Here are a few examples of why processing cluster values produced at
-    this level might be tricky:
-  </para>
-  <sect2 id="ligatures-with-combining-marks">
-    <title>Ligatures with combining marks</title>
-    <para>
-      Imagine capital letters are bases and lower case letters are
-      combining marks. With an input sequence like this:
-    </para>
-    <programlisting>
-  A,a,B,b,C,c
-  0,1,2,3,4,5
-</programlisting>
-    <para>
-      if <literal>A,B,C</literal> ligate, then here are the cluster
-      values one would get under the various levels:
-    </para>
-    <para>
-      level 0:
-    </para>
-    <programlisting>
-  ABC,a,b,c
-  0  ,0,0,0
-</programlisting>
-    <para>
-      level 1:
-    </para>
-    <programlisting>
-  ABC,a,b,c
-  0  ,0,0,5
-</programlisting>
-    <para>
-      level 2:
-    </para>
-    <programlisting>
-  ABC,a,b,c
-  0  ,1,3,5
-</programlisting>
-    <para>
-      Making sense of the last example is the hardest for a client,
-      because there is nothing in the cluster values to suggest that
-      <literal>B</literal> and <literal>C</literal> ligated with
-      <literal>A</literal>.
-    </para>
-  </sect2>
-  <sect2 id="reordering">
-    <title>Reordering</title>
-    <para>
-      Another tricky case is when things reorder. Under level 2:
-    </para>
-    <programlisting>
-  A,B,C,D,E
-  0,1,2,3,4
-</programlisting>
-    <para>
-      Now imagine <literal>D</literal> moves before
-      <literal>B</literal>:
-    </para>
-    <programlisting>
-  A,D,B,C,E
-  0,3,1,2,4
-</programlisting>
-    <para>
-      Now, if <literal>D</literal> ligates with <literal>B</literal>, we
-      get:
-    </para>
-    <programlisting>
-  A,DB,C,E
-  0,3 ,2,4
-</programlisting>
-    <para>
-      In a different scenario, <literal>A</literal> and
-      <literal>B</literal> could have ligated
-      <emphasis>before</emphasis> <literal>D</literal> reordered; that
-      would have resulted in:
-    </para>
-    <programlisting>
-  AB,D,C,E
-  0 ,3,2,4   
-</programlisting>
-    <para>
-      There's no way to differentitate between these two scenarios based
-      on the cluster numbers alone.
-    </para>
-    <para>
-      Another problem appens with ligatures under level 2 if the
-      direction of the text is forced to opposite of its natural
-      direction (e.g. left-to-right Arabic). But that's too much of a
-      corner case to worry about.
-    </para>
-  </sect2>
-</sect1>
-</chapter>
diff --git a/docs/usermanual-fonts-and-faces.xml b/docs/usermanual-fonts-and-faces.xml
deleted file mode 100644 (file)
index 01fcdc9..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-<chapter id="fonts-and-faces">
-  <title>Fonts and faces</title>
-  <section id="using-freetype">
-    <title>Using FreeType</title>
-    <para>
-    </para>
-  </section>
-  <section id="using-harfbuzzs-native-opentype-implementation">
-    <title>Using Harfbuzz's native OpenType implementation</title>
-    <para>
-    </para>
-  </section>
-  <section id="using-your-own-font-functions">
-    <title>Using your own font functions</title>
-    <para>
-    </para>
-  </section>
-</chapter>
\ No newline at end of file
diff --git a/docs/usermanual-glyph-information.xml b/docs/usermanual-glyph-information.xml
deleted file mode 100644 (file)
index ca674c0..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-<sect1 id="glyph-information">
-  <title>Glyph information</title>
-  <sect2 id="names-and-numbers">
-    <title>Names and numbers</title>
-    <para>
-    </para>
-  </sect2>
-</sect1>
\ No newline at end of file
diff --git a/docs/usermanual-hello-harfbuzz.xml b/docs/usermanual-hello-harfbuzz.xml
deleted file mode 100644 (file)
index 34db017..0000000
+++ /dev/null
@@ -1,183 +0,0 @@
-<chapter id="hello-harfbuzz">
-  <title>Hello, Harfbuzz</title>
-  <para>
-    Here's the simplest Harfbuzz that can possibly work. We will improve
-    it later.
-  </para>
-  <orderedlist numeration="arabic">
-    <listitem>
-      <para>
-        Create a buffer and put your text in it.
-      </para>
-    </listitem>
-  </orderedlist>
-  <programlisting language="C">
-  #include &lt;hb.h&gt;
-  hb_buffer_t *buf;
-  buf = hb_buffer_create();
-  hb_buffer_add_utf8(buf, text, strlen(text), 0, strlen(text));
-</programlisting>
-  <orderedlist numeration="arabic">
-    <listitem override="2">
-      <para>
-        Guess the script, language and direction of the buffer.
-      </para>
-    </listitem>
-  </orderedlist>
-  <programlisting language="C">
-  hb_buffer_guess_segment_properties(buf);
-</programlisting>
-  <orderedlist numeration="arabic">
-    <listitem override="3">
-      <para>
-        Create a face and a font, using FreeType for now.
-      </para>
-    </listitem>
-  </orderedlist>
-  <programlisting language="C">
-  #include &lt;hb-ft.h&gt;
-  FT_New_Face(ft_library, font_path, index, &amp;face)
-  hb_font_t *font = hb_ft_font_create(face);
-</programlisting>
-  <orderedlist numeration="arabic">
-    <listitem override="4">
-      <para>
-        Shape!
-      </para>
-    </listitem>
-  </orderedlist>
-  <programlisting>
-  hb_shape(font, buf, NULL, 0);
-</programlisting>
-  <orderedlist numeration="arabic">
-    <listitem override="5">
-      <para>
-        Get the glyph and position information.
-      </para>
-    </listitem>
-  </orderedlist>
-  <programlisting language="C">
-  hb_glyph_info_t *glyph_info    = hb_buffer_get_glyph_infos(buf, &amp;glyph_count);
-  hb_glyph_position_t *glyph_pos = hb_buffer_get_glyph_positions(buf, &amp;glyph_count);
-</programlisting>
-  <orderedlist numeration="arabic">
-    <listitem override="6">
-      <para>
-        Iterate over each glyph.
-      </para>
-    </listitem>
-  </orderedlist>
-  <programlisting language="C">
-  for (i = 0; i &lt; glyph_count; ++i) {
-    glyphid = glyph_info[i].codepoint;
-    x_offset = glyph_pos[i].x_offset / 64.0;
-    y_offset = glyph_pos[i].y_offset / 64.0;
-    x_advance = glyph_pos[i].x_advance / 64.0;
-    y_advance = glyph_pos[i].y_advance / 64.0;
-    draw_glyph(glyphid, cursor_x + x_offset, cursor_y + y_offset);
-    cursor_x += x_advance;
-    cursor_y += y_advance;
-  }
-</programlisting>
-  <orderedlist numeration="arabic">
-    <listitem override="7">
-      <para>
-        Tidy up.
-      </para>
-    </listitem>
-  </orderedlist>
-  <programlisting language="C">
-  hb_buffer_destroy(buf);
-  hb_font_destroy(hb_ft_font);
-</programlisting>
-  <section id="what-harfbuzz-doesnt-do">
-    <title>What Harfbuzz doesn't do</title>
-    <para>
-      The code above will take a UTF8 string, shape it, and give you the
-      information required to lay it out correctly on a single
-      horizontal (or vertical) line using the font provided. That is the
-      extent of Harfbuzz's responsibility.
-    </para>
-    <para>
-      If you are implementing a text layout engine you may have other
-      responsibilities, that Harfbuzz will not help you with:
-    </para>
-    <itemizedlist>
-      <listitem>
-        <para>
-          Harfbuzz won't help you with bidirectionality. If you want to
-          lay out text with mixed Hebrew and English, you will need to
-          ensure that the buffer provided to Harfbuzz has those
-          characters in the correct layout order. This will be different
-          from the logical order in which the Unicode text is stored. In
-          other words, the user will hit the keys in the following
-          sequence:
-        </para>
-        <programlisting>
-A B C [space] ג ב א [space] D E F
-        </programlisting>
-        <para>
-          but will expect to see in the output:
-        </para>
-        <programlisting>
-ABC אבג DEF
-        </programlisting>
-        <para>
-          This reordering is called <emphasis>bidi processing</emphasis>
-          (&quot;bidi&quot; is short for bidirectional), and there's an
-          algorithm as an annex to the Unicode Standard which tells you how
-          to reorder a string from logical order into presentation order.
-          Before sending your string to Harfbuzz, you may need to apply the
-          bidi algorithm to it. Libraries such as ICU and fribidi can do
-          this for you.
-        </para>
-      </listitem>
-      <listitem>
-        <para>
-          Harfbuzz won't help you with text that contains different font
-          properties. For instance, if you have the string &quot;a
-          <emphasis>huge</emphasis> breakfast&quot;, and you expect
-          &quot;huge&quot; to be italic, you will need to send three
-          strings to Harfbuzz: <literal>a</literal>, in your Roman font;
-          <literal>huge</literal> using your italic font; and
-          <literal>breakfast</literal> using your Roman font again.
-          Similarly if you change font, font size, script, language or
-          direction within your string, you will need to shape each run
-          independently and then output them independently. Harfbuzz
-          expects to shape a run of characters sharing the same
-          properties.
-        </para>
-      </listitem>
-      <listitem>
-        <para>
-          Harfbuzz won't help you with line breaking, hyphenation or
-          justification. As mentioned above, it lays out the string
-          along a <emphasis>single line</emphasis> of, notionally,
-          infinite length. If you want to find out where the potential
-          word, sentence and line break points are in your text, you
-          could use the ICU library's break iterator functions.
-        </para>
-        <para>
-          Harfbuzz can tell you how wide a shaped piece of text is, which is
-          useful input to a justification algorithm, but it knows nothing
-          about paragraphs, lines or line lengths. Nor will it adjust the
-          space between words to fit them proportionally into a line. If you
-          want to layout text in paragraphs, you will probably want to send
-          each word of your text to Harfbuzz to determine its shaped width
-          after glyph substitutions, then work out how many words will fit
-          on a line, and then finally output each word of the line separated
-          by a space of the correct size to fully justify the paragraph.
-        </para>
-      </listitem>
-    </itemizedlist>
-    <para>
-      As a layout engine implementor, Harfbuzz will help you with the
-      interface between your text and your font, and that's something
-      that you'll need - what you then do with the glyphs that your font
-      returns is up to you. The example we saw above enough to get us
-      started using Harfbuzz. Now we are going to use the remainder of
-      Harfbuzz's API to refine that example and improve our text shaping
-      capabilities.
-    </para>
-  </section>
-</chapter>
\ No newline at end of file
diff --git a/docs/usermanual-install-harfbuzz.xml b/docs/usermanual-install-harfbuzz.xml
deleted file mode 100644 (file)
index be8ac8d..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-<chapter id="install-harfbuzz">
-  <title>Install Harfbuzz</title>
-  <section id="download">
-    <title id="download.title">Download</title>
-    <para>
-      For tarball releases of HarfBuzz, look
-      <ulink url="http://www.freedesktop.org/software/harfbuzz/release/">here</ulink>.
-      At the same place you will
-      also find Win32 binary bundles that include libharfbuzz DLL, hb-view.exe,
-      hb-shape.exe, and all dependencies.
-    </para>
-    <para>
-      The canonical source tree is available
-      <ulink url="http://cgit.freedesktop.org/harfbuzz/">here</ulink>.
-      Also available on <ulink url="https://github.com/behdad/harfbuzz">github</ulink>.
-    </para>
-    <para>
-      The API that comes with <filename class='headerfile'>hb.h</filename> will
-      not change incompatibly. Other, peripheral, headers are more likely to go
-      through minor modifications, but again, will do our best to never change
-      API in an incompatible way. We will never break the ABI.
-    </para>
-    <para>
-      If you are not sure whether Pango or HarfBuzz is right for you, read
-      <ulink url="http://mces.blogspot.in/2009/11/pango-vs-harfbuzz.html">this</ulink>.
-    </para>
-  </section>
-  <section id="building">
-    <title>Building</title>
-    <para>
-      On Linux, install the development packages for FreeType, Cairo, and GLib.
-      For example, on Ubuntu / Debian, you would do:
-      <programlisting>
-<command>sudo apt-get install</command> <package>gcc g++ libfreetype6-dev libglib2.0-dev libcairo2-dev</package>
-      </programlisting>
-      whereas on Fedora, RHEL, CentOS, and other Red Hat based systems you would do:
-      <programlisting>
-<command>sudo yum install</command> <package>gcc gcc-c++ freetype-devel glib2-devel cairo-devel</package>
-      </programlisting>
-      or using MacPorts:
-      <programlisting>
-<command>sudo port install</command> <package>freetype glib2 cairo</package>
-      </programlisting>
-    </para>
-    <para>
-      If you are using a tarball, you can now proceed to running
-      <command>configure</command> and <command>make</command> as with any
-      other standard package. That should leave you with a shared library in
-      <filename>src/</filename>, and a few utility programs including hb-view
-      and hb-shape under <filename>util/</filename>.
-    </para>
-    <para>
-      If you are bootstraping from git, you need a few more tools before you
-      can run <filename>autogen.sh</filename> for the first time. Namely,
-      pkg-config and <ulink url="http://www.complang.org/ragel/">ragel</ulink>.
-      Again, on Ubuntu / Debian:
-      <programlisting>
-<command>sudo apt-get install</command> <package>autoconf automake libtool pkg-config ragel gtk-doc-tools</package>
-      </programlisting>
-      and on Fedora, RHEL, CentOS:
-      <programlisting>
-<command>sudo yum install</command> <package>autoconf automake libtool pkgconfig ragel gtk-doc</package>
-      </programlisting>
-      or using MacPorts:
-      <programlisting>
-<command>sudo port install</command> <package>autoconf automake libtool pkgconfig ragel gtk-doc</package>
-      </programlisting>
-    </para>
-  </section>
-</chapter>
diff --git a/docs/usermanual-opentype-features.xml b/docs/usermanual-opentype-features.xml
deleted file mode 100644 (file)
index 470bab8..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-<chapter id="shaping-and-shape-plans">
-  <title>Shaping and shape plans</title>
-  <section id="opentype-features">
-    <title>OpenType features</title>
-    <para>
-    </para>
-  </section>
-  <section id="plans-and-caching">
-    <title>Plans and caching</title>
-    <para>
-    </para>
-  </section>
-</chapter>
\ No newline at end of file
diff --git a/docs/usermanual-what-is-harfbuzz.xml b/docs/usermanual-what-is-harfbuzz.xml
deleted file mode 100644 (file)
index 3574d75..0000000
+++ /dev/null
@@ -1,115 +0,0 @@
-<chapter id="what-is-harfbuzz">
-  <title>What is Harfbuzz?</title>
-  <para>
-    Harfbuzz is a <emphasis>text shaping engine</emphasis>. It solves
-    the problem of selecting and positioning glyphs from a font given a
-    Unicode string.
-  </para>
-  <section id="why-do-i-need-it">
-    <title>Why do I need it?</title>
-    <para>
-      Text shaping is an integral part of preparing text for display. It
-      is a fairly low level operation; Harfbuzz is used directly by
-      graphic rendering libraries such as Pango, and the layout engines
-      in Firefox, LibreOffice and Chromium. Unless you are
-      <emphasis>writing</emphasis> one of these layout engines yourself,
-      you will probably not need to use Harfbuzz - normally higher level
-      libraries will turn text into glyphs for you.
-    </para>
-    <para>
-      However, if you <emphasis>are</emphasis> writing a layout engine
-      or graphics library yourself, you will need to perform text
-      shaping, and this is where Harfbuzz can help you. Here are some
-      reasons why you need it:
-    </para>
-    <itemizedlist>
-      <listitem>
-        <para>
-          OpenType fonts contain a set of glyphs, indexed by glyph ID.
-          The glyph ID within the font does not necessarily relate to a
-          Unicode codepoint. For instance, some fonts have the letter
-          &quot;a&quot; as glyph ID 1. To pull the right glyph out of
-          the font in order to display it, you need to consult a table
-          within the font (the &quot;cmap&quot; table) which maps
-          Unicode codepoints to glyph IDs. Text shaping turns codepoints
-          into glyph IDs.
-        </para>
-      </listitem>
-      <listitem>
-        <para>
-          Many OpenType fonts contain ligatures: combinations of
-          characters which are rendered together. For instance, it's
-          common for the <literal>fi</literal> combination to appear in
-          print as the single ligature &quot;fi&quot;. Whether you should
-          render text as <literal>fi</literal> or &quot;fi&quot; does not
-          depend on the input text, but on the capabilities of the font
-          and the level of ligature application you wish to perform.
-          Text shaping involves querying the font's ligature tables and
-          determining what substitutions should be made.
-        </para>
-      </listitem>
-      <listitem>
-        <para>
-          While ligatures like &quot;fi&quot; are typographic
-          refinements, some languages <emphasis>require</emphasis> such
-          substitutions to be made in order to display text correctly.
-          In Tamil, when the letter &quot;TTA&quot; (ட) letter is
-          followed by &quot;U&quot; (உ), the combination should appear
-          as the single glyph &quot;டு&quot;. The sequence of Unicode
-          characters &quot;டஉ&quot; needs to be rendered as a single
-          glyph from the font - text shaping chooses the correct glyph
-          from the sequence of characters provided.
-        </para>
-      </listitem>
-      <listitem>
-        <para>
-          Similarly, each Arabic character has four different variants:
-          within a font, there will be glyphs for the initial, medial,
-          final, and isolated forms of each letter. Unicode only encodes
-          one codepoint per character, and so a Unicode string will not
-          tell you which glyph to use. Text shaping chooses the correct
-          form of the letter and returns the correct glyph from the font
-          that you need to render.
-        </para>
-      </listitem>
-      <listitem>
-        <para>
-          Other languages have marks and accents which need to be
-          rendered in certain positions around a base character. For
-          instance, the Moldovan language has the Cyrillic letter
-          &quot;zhe&quot; (ж) with a breve accent, like so: ӂ. Some
-          fonts will contain this character as an individual glyph,
-          whereas other fonts will not contain a zhe-with-breve glyph
-          but expect the rendering engine to form the character by
-          overlaying the two glyphs ж and ˘. Where you should draw the
-          combining breve depends on the height of the preceding glyph.
-          Again, for Arabic, the correct positioning of vowel marks
-          depends on the height of the character on which you are
-          placing the mark. Text shaping tells you whether you have a
-          precomposed glyph within your font or if you need to compose a
-          glyph yourself out of combining marks, and if so, where to
-          position those marks.
-        </para>
-      </listitem>
-    </itemizedlist>
-    <para>
-      If this is something that you need to do, then you need a text
-      shaping engine: you could use Uniscribe if you are using Windows;
-      you could use CoreText on OS X; or you could use Harfbuzz. In the
-      rest of this manual, we are going to assume that you are the
-      implementor of a text layout engine.
-    </para>
-  </section>
-  <section id="why-is-it-called-harfbuzz">
-    <title>Why is it called Harfbuzz?</title>
-    <para>
-      Harfbuzz began its life as text shaping code within the FreeType
-      project, (and you will see references to the FreeType authors
-      within the source code copyright declarations) but was then
-      abstracted out to its own project. This project is maintained by
-      Behdad Esfahbod, and named Harfbuzz. Originally, it was a shaping
-      engine for OpenType fonts - &quot;Harfbuzz&quot; is the Persian
-      for &quot;open type&quot;.
-    </para>
-  </section>
-</chapter>
\ No newline at end of file
diff --git a/docs/version.xml b/docs/version.xml
deleted file mode 100644 (file)
index c04c650..0000000
+++ /dev/null
@@ -1 +0,0 @@
-1.2.7
index a356aca..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
 
-# 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.
 
 # 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-1.7ubuntu1
-#         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
-VERSION="2.4.2 Debian-2.4.2-1.7ubuntu1"
-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=:
-  # 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
-  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
-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
-  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
-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"}
-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"}
+: ${SED="sed"}
 : ${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]:\\*) ;;
   *[\\/]*)
-     progdir=$func_dirname_result
+     progdir=`$bs_echo "$progpath" |$SED "$sed_dirname"`
      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="$save_IFS"
+       IFS=$_G_IFS
        test -x "$progdir/$progname" && break
      done
-     IFS="$save_IFS"
+     IFS=$_G_IFS
      test -n "$progdir" || progdir=`pwd`
-     progpath="$progdir/$progname"
+     progpath=$progdir/$progname
      ;;
 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_help=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
+# ----------
 # 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 ()
 {
-    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
+# -----------
 # Display the configuration for all the tags in this script.
 func_config ()
 {
@@ -915,17 +2048,19 @@ func_config ()
     exit $?
 }
 
+
 # func_features
+# -------------
 # 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
-    if test "$build_old_libs" = yes; then
+    if test yes = "$build_old_libs"; then
       echo "enable static libraries"
     else
       echo "disable static libraries"
@@ -934,298 +2069,325 @@ func_features ()
     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 ()
 {
-  # 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
+# ------------------------
 # 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
-      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
-      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
-    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
 
-    # 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.    ##
 ## ----------- ##
 
+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
-# 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 ()
@@ -1236,12 +2398,12 @@ func_lalib_p ()
 }
 
 # 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
-# fatal anyway.  Works if `file' does not exist.
+# fatal anyway.  Works if 'file' does not exist.
 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
-           case "$lalib_p_line" in
+           case $lalib_p_line in
                \#\ 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
@@ -1289,7 +2451,7 @@ func_ltwrapper_scriptname ()
 {
     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
@@ -1308,11 +2470,13 @@ func_ltwrapper_p ()
 # 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
-      IFS=$save_ifs
+      IFS=$sp$nl
       eval cmd=\"$cmd\"
+      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
-# `FILE.' does not work on cygwin managed mounts.
+# 'FILE.' does not work on cygwin managed mounts.
 func_source ()
 {
-    $opt_debug
+    $debug_cmd
+
     case $1 in
     */* | *\\*)        . "$1" ;;
     *)         . "./$1" ;;
@@ -1354,10 +2519,10 @@ func_resolve_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"
-    func_replace_sysroot_result="=$func_stripname_result"
+    func_replace_sysroot_result='='$func_stripname_result
     ;;
   *)
     # Including no sysroot.
@@ -1374,7 +2539,8 @@ func_replace_sysroot ()
 # 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
@@ -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.
-           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.
@@ -1418,7 +2584,7 @@ func_infer_tag ()
        # 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
@@ -1434,15 +2600,15 @@ func_infer_tag ()
 # 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
 
-    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
@@ -1450,7 +2616,7 @@ func_write_libtool_object ()
     $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.
@@ -1462,7 +2628,7 @@ pic_object=$write_lobj
 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 ()
 {
-  $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
@@ -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`
-    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" |
-        $SED -e "$lt_sed_naive_backslashify"`
+        $SED -e "$sed_naive_backslashify"`
     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 ()
 {
-  $opt_debug
+  $debug_cmd
+
   # 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 "$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
-          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
@@ -1554,7 +2722,8 @@ func_convert_core_path_wine_to_w32 ()
 # 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
@@ -1563,7 +2732,7 @@ func_cygpath ()
     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
@@ -1574,10 +2743,11 @@ func_cygpath ()
 # 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 |
-    $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"`
+    $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"`
 }
 #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 ()
 {
-  $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 "  \`$1'"
+    func_error "  '$1'"
     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
@@ -1606,10 +2777,11 @@ func_convert_file_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"
-    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.
@@ -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="$3"
+      func_to_host_path_result=$3
     fi
   fi
 }
@@ -1630,9 +2802,10 @@ func_convert_path_check ()
 # and appending REPL if ORIG matches BACKPAT.
 func_convert_path_front_back_pathsep ()
 {
-  $opt_debug
+  $debug_cmd
+
   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
@@ -1646,7 +2819,7 @@ func_convert_path_front_back_pathsep ()
 ##################################################
 # $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.
@@ -1657,7 +2830,8 @@ func_convert_path_front_back_pathsep ()
 # in func_to_host_file_result.
 func_to_host_file ()
 {
-  $opt_debug
+  $debug_cmd
+
   $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 ()
 {
-  $opt_debug
+  $debug_cmd
+
   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 ()
 {
-  func_to_host_file_result="$1"
+  func_to_host_file_result=$1
 }
 # end func_convert_file_noop
 
@@ -1698,11 +2873,12 @@ func_convert_file_noop ()
 # 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"
-    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"
 }
@@ -1714,8 +2890,9 @@ func_convert_file_msys_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.
@@ -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 ()
 {
-  $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"
-    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"
 }
@@ -1747,12 +2925,13 @@ func_convert_file_nix_to_w32 ()
 # 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"
-    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"
 }
@@ -1765,13 +2944,14 @@ func_convert_file_msys_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"
-    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"
 }
@@ -1781,7 +2961,7 @@ func_convert_file_nix_to_cygwin ()
 #############################################
 # $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.
@@ -1805,10 +2985,11 @@ func_convert_file_nix_to_cygwin ()
 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"
-    to_host_path_cmd="func_convert_path_${func_stripname_result}"
+    to_host_path_cmd=func_convert_path_$func_stripname_result
   fi
 }
 
@@ -1818,7 +2999,8 @@ func_init_to_host_path_cmd ()
 # 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"
 }
@@ -1829,7 +3011,7 @@ func_to_host_path ()
 # 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
 
@@ -1840,8 +3022,9 @@ func_convert_path_noop ()
 # 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 ';.';
@@ -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_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"
@@ -1863,8 +3046,9 @@ func_convert_path_msys_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"
@@ -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 ()
 {
-  $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"
-    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"
@@ -1904,15 +3089,16 @@ func_convert_path_nix_to_w32 ()
 # 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"
-    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"
@@ -1927,8 +3113,9 @@ func_convert_path_msys_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
@@ -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_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"
@@ -1946,13 +3133,31 @@ 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 ()
 {
-    $opt_debug
+    $debug_cmd
+
     # 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
@@ -1965,12 +3170,12 @@ func_mode_compile ()
       case $arg_mode in
       arg  )
        # do not "continue".  Instead, add this to base_compile
-       lastarg="$arg"
+       lastarg=$arg
        arg_mode=normal
        ;;
 
       target )
-       libobj="$arg"
+       libobj=$arg
        arg_mode=normal
        continue
        ;;
@@ -1980,7 +3185,7 @@ func_mode_compile ()
        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
          ;;
@@ -2009,12 +3214,12 @@ func_mode_compile ()
          func_stripname '-Wc,' '' "$arg"
          args=$func_stripname_result
          lastarg=
-         save_ifs="$IFS"; IFS=','
+         save_ifs=$IFS; IFS=,
          for arg in $args; do
-           IFS="$save_ifs"
+           IFS=$save_ifs
            func_append_quoted lastarg "$arg"
          done
-         IFS="$save_ifs"
+         IFS=$save_ifs
          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.
          #
-         lastarg="$srcfile"
-         srcfile="$arg"
+         lastarg=$srcfile
+         srcfile=$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 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"
-       libobj="$func_basename_result"
+       libobj=$func_basename_result
       }
       ;;
     esac
@@ -2069,7 +3274,7 @@ func_mode_compile ()
     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
 
@@ -2078,8 +3283,8 @@ func_mode_compile ()
     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
        ;;
@@ -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_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" "/" ""
-    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.
-    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"
@@ -2127,16 +3332,16 @@ func_mode_compile ()
       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
-    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
@@ -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
-    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
-    elif test "$need_locks" = warn; then
+    elif test warn = "$need_locks"; then
       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
-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."
@@ -2180,11 +3385,11 @@ compiler."
     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
 
-      if test "$pic_mode" != no; then
+      if test no != "$pic_mode"; then
        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'
 
-      if test "$need_locks" = warn &&
+      if test warn = "$need_locks" &&
         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
-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."
@@ -2228,20 +3433,20 @@ compiler."
       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.
-    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
-      if test "$compiler_c_o" = yes; then
+      if test yes = "$compiler_c_o"; then
        func_append command " -o $obj"
       fi
 
@@ -2250,7 +3455,7 @@ compiler."
       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:
@@ -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
-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."
@@ -2281,7 +3486,7 @@ compiler."
       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
@@ -2291,7 +3496,7 @@ compiler."
 }
 
 $opt_help || {
-  test "$opt_mode" = compile && func_mode_compile ${1+"$@"}
+  test compile = "$opt_mode" && func_mode_compile ${1+"$@"}
 }
 
 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
-(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
@@ -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
-  -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
 
-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
-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)
@@ -2352,7 +3557,7 @@ This mode accepts the following additional options:
 
   -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
@@ -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
-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)
@@ -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
-either the \`install' or \`cp' program.
+either the 'install' or 'cp' program.
 
 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)
-  -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
@@ -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)
 
-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.
 
-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.
 
-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."
         ;;
 
@@ -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
-(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.
@@ -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
-    $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
-  if test "$opt_help" = :; then
+  if test : = "$opt_help"; then
     func_mode_help
   else
     {
@@ -2516,16 +3721,17 @@ fi
 # func_mode_execute arg...
 func_mode_execute ()
 {
-    $opt_debug
+    $debug_cmd
+
     # 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" \
-       || func_fatal_help "\`$file' is not a file"
+       || func_fatal_help "'$file' is not a file"
 
       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" \
-         || 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=
@@ -2546,18 +3752,18 @@ func_mode_execute ()
        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" "" "."
-       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
-           func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'"
+           func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'"
          fi
        fi
        ;;
@@ -2565,18 +3771,18 @@ func_mode_execute ()
       *.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`
-      test -n "$absdir" && dir="$absdir"
+      test -n "$absdir" && dir=$absdir
 
       # 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.
-    libtool_execute_magic="$magic"
+    libtool_execute_magic=$magic
 
     # 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.
-         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.
-         file="$progdir/$program"
+         file=$progdir/$program
        fi
        ;;
       esac
@@ -2614,7 +3820,15 @@ func_mode_execute ()
       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"
@@ -2631,25 +3845,18 @@ func_mode_execute ()
       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
 }
 
-test "$opt_mode" = execute && func_mode_execute ${1+"$@"}
+test execute = "$opt_mode" && func_mode_execute ${1+"$@"}
 
 
 # func_mode_finish arg...
 func_mode_finish ()
 {
-    $opt_debug
+    $debug_cmd
+
     libs=
     libdirs=
     admincmds=
@@ -2663,11 +3870,11 @@ func_mode_finish ()
        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
-       func_fatal_error "invalid argument \`$opt'"
+       func_fatal_error "invalid argument '$opt'"
       fi
     done
 
@@ -2682,12 +3889,12 @@ func_mode_finish ()
       # 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
-         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
@@ -2712,7 +3919,7 @@ func_mode_finish ()
     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 "----------------------------------------------------------------------"
@@ -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 "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 "   - 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 "   - 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 "   - 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
-       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
 
@@ -2762,18 +3969,20 @@ func_mode_finish ()
     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 ()
 {
-    $opt_debug
+    $debug_cmd
+
     # 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.
-       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 "
@@ -2800,7 +4009,7 @@ func_mode_install ()
     opts=
     prev=
     install_type=
-    isdir=no
+    isdir=false
     stripme=
     no_mode=:
     for arg
@@ -2813,7 +4022,7 @@ func_mode_install ()
       fi
 
       case $arg in
-      -d) isdir=yes ;;
+      -d) isdir=: ;;
       -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 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
@@ -2856,7 +4065,7 @@ func_mode_install ()
       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
@@ -2878,19 +4087,19 @@ func_mode_install ()
     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" "" "."
-      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 && \
-       func_fatal_help "\`$dest' is not a directory"
+       func_fatal_help "'$dest' is not a directory"
     fi
     case $destdir in
     [\\/]* | [A-Za-z]:[\\/]*) ;;
@@ -2899,7 +4108,7 @@ func_mode_install ()
        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
@@ -2908,7 +4117,7 @@ func_mode_install ()
 
     # 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=
@@ -2928,7 +4137,7 @@ func_mode_install ()
 
        # 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=
@@ -2950,7 +4159,7 @@ func_mode_install ()
        fi
 
        func_dirname "$file" "/" ""
-       dir="$func_dirname_result"
+       dir=$func_dirname_result
        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" && \
-           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.
@@ -2973,29 +4182,29 @@ func_mode_install ()
            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_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
-         realname="$1"
+         realname=$1
          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 $?'
-         tstripme="$stripme"
+         tstripme=$stripme
          case $host_os in
          cygwin* | mingw* | pw32* | cegcc*)
            case $realname in
            *.dll.a)
-             tstripme=""
+             tstripme=
              ;;
            esac
            ;;
@@ -3006,7 +4215,7 @@ func_mode_install ()
 
          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
@@ -3017,14 +4226,14 @@ func_mode_install ()
          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"
-       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.
@@ -3036,11 +4245,11 @@ func_mode_install ()
 
        # 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"
-         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.
@@ -3050,11 +4259,11 @@ func_mode_install ()
          staticdest=$func_lo2o_result
          ;;
        *.$objext)
-         staticdest="$destfile"
+         staticdest=$destfile
          destfile=
          ;;
        *)
-         func_fatal_help "cannot copy a libtool object to \`$destfile'"
+         func_fatal_help "cannot copy a libtool object to '$destfile'"
          ;;
        esac
 
@@ -3063,7 +4272,7 @@ func_mode_install ()
          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
@@ -3075,23 +4284,23 @@ func_mode_install ()
       *)
        # 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"
-         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
-       stripped_ext=""
+       stripped_ext=
        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
@@ -3119,19 +4328,19 @@ func_mode_install ()
 
          # 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
-           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
-             func_warning "\`$lib' has not been installed in \`$libdir'"
-             finalize=no
+             func_warning "'$lib' has not been installed in '$libdir'"
+             finalize=false
            fi
          done
 
@@ -3139,29 +4348,29 @@ func_mode_install ()
          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 || {
-             if test "$finalize" = yes; then
+             if $finalize; then
                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'`
 
-               $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_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
-               file="$outputname"
+               file=$outputname
              else
-               func_warning "cannot relink \`$file'"
+               func_warning "cannot relink '$file'"
              fi
            }
          else
@@ -3198,10 +4407,10 @@ func_mode_install ()
 
     for file in $staticlibs; do
       func_basename "$file"
-      name="$func_basename_result"
+      name=$func_basename_result
 
       # 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
 
@@ -3216,18 +4425,18 @@ func_mode_install ()
     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"
-      exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs'
+      exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs'
     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
@@ -3235,16 +4444,17 @@ test "$opt_mode" = install && func_mode_install ${1+"$@"}
 # 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=
 
-    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
-       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
@@ -3255,7 +4465,7 @@ func_generate_dlsyms ()
       "") ;;
       *.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"
 
@@ -3263,34 +4473,36 @@ func_generate_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
 
-#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.  */
-#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
-#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
 
+#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0)
+
 /* 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"
 
@@ -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
-           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
 
@@ -3318,10 +4530,10 @@ extern \"C\" {
 
          # 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
-             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"'
@@ -3331,7 +4543,7 @@ extern \"C\" {
            }
          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
@@ -3345,22 +4557,22 @@ extern \"C\" {
        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"
-         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"
-               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 "$dlprefile_dlname" ; then
+                 if test -n "$dlprefile_dlname"; then
                    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"
@@ -3368,7 +4580,7 @@ extern \"C\" {
                  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"
@@ -3424,6 +4636,11 @@ extern \"C\" {
            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.  */
@@ -3432,11 +4649,30 @@ typedef struct {
   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[] =
-{\
-  { \"$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)
@@ -3478,9 +4714,7 @@ static const void *lt_preloaded_setup() {
          *-*-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
          ;;
@@ -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 '$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.
-       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
@@ -3518,7 +4752,7 @@ static const void *lt_preloaded_setup() {
        esac
        ;;
       *)
-       func_fatal_error "unknown suffix for \`$my_dlsyms'"
+       func_fatal_error "unknown suffix for '$my_dlsyms'"
        ;;
       esac
     else
@@ -3532,6 +4766,32 @@ static const void *lt_preloaded_setup() {
     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'
 #
@@ -3541,8 +4801,9 @@ static const void *lt_preloaded_setup() {
 # 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
@@ -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
-      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 /{
-                   s,.*,import,
+                   s|.*|import|
                    p
                    q
                }
            }'`
+       ;;
+      esac
       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 ()
 {
-  $opt_debug
+  $debug_cmd
+
   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 ()
 {
-  $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"':/{
@@ -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
-    # 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
@@ -3658,30 +4934,6 @@ func_cygming_dll_for_implib_fallback_core ()
     $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
@@ -3695,16 +4947,17 @@ func_cygming_ms_implib_p ()
 #    $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"`
-  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
-    sharedlib_from_linklib_result=""
+    sharedlib_from_linklib_result=
   fi
 }
 
@@ -3712,10 +4965,11 @@ func_cygming_dll_for_implib_fallback ()
 # 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"
@@ -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'
-    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
@@ -3738,22 +4992,23 @@ func_extract_an_archive ()
 # func_extract_archives gentop oldlib ...
 func_extract_archives ()
 {
-    $opt_debug
-    my_gentop="$1"; shift
+    $debug_cmd
+
+    my_gentop=$1; shift
     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
-       [\\/]* | [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_xlib="$func_basename_result"
+      my_xlib=$func_basename_result
       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"
-      my_xdir="$my_gentop/$my_xlib_u"
+      my_xdir=$my_gentop/$my_xlib_u
 
       func_mkdir_p "$my_xdir"
 
@@ -3778,19 +5033,20 @@ func_extract_archives ()
          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"
-           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"
-             $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`
@@ -3815,7 +5071,7 @@ func_extract_archives ()
       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
-# 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 ()
@@ -3841,7 +5097,7 @@ func_emit_wrapper ()
 #! $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.
@@ -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
-# /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-"
-# (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
@@ -3933,7 +5189,7 @@ func_parse_lt_options ()
 
   # 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
 }
 
@@ -3944,7 +5200,7 @@ func_lt_dump_args ()
   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
 }
@@ -3958,7 +5214,7 @@ func_exec_program_core ()
   *-*-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+\"\$@\"}
@@ -3968,7 +5224,7 @@ func_exec_program_core ()
   *)
     $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+\"\$@\"}
@@ -4043,13 +5299,13 @@ func_exec_program ()
   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\" ||
-     { 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\"
@@ -4101,7 +5357,7 @@ func_exec_program ()
        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\"
@@ -4121,7 +5377,7 @@ func_exec_program ()
     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
@@ -4140,7 +5396,7 @@ func_emit_cwrapperexe_src ()
        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.
@@ -4175,47 +5431,45 @@ EOF
 #include <fcntl.h>
 #include <sys/stat.h>
 
+#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0)
+
 /* declarations of non-ANSI functions */
-#if defined(__MINGW32__)
+#if defined __MINGW32__
 # 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
-/* #elif defined (other platforms) ... */
+/* #elif defined other_platform || defined ... */
 #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
-# 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
-#elif defined(__CYGWIN__)
+#elif defined __CYGWIN__
 # define HAVE_SETENV
 # define FOPEN_WB "wb"
-/* #elif defined (other platforms) ... */
+/* #elif defined other platforms ... */
 #endif
 
-#if defined(PATH_MAX)
+#if defined PATH_MAX
 # define LT_PATHMAX PATH_MAX
-#elif defined(MAXPATHLEN)
+#elif defined MAXPATHLEN
 # define LT_PATHMAX MAXPATHLEN
 #else
 # define LT_PATHMAX 1024
@@ -4234,8 +5488,8 @@ int setenv (const char *, const char *, int);
 # 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
@@ -4268,10 +5522,10 @@ int setenv (const char *, const char *, int);
 
 #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)
 
-#if defined(LT_DEBUGWRAPPER)
+#if defined LT_DEBUGWRAPPER
 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
 
-           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";
@@ -4328,7 +5582,7 @@ const char * EXE_PATH_VALUE   = "";
 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
@@ -4357,12 +5611,12 @@ main (int argc, char *argv[])
   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]));
-  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
@@ -4371,10 +5625,10 @@ main (int argc, char *argv[])
   newargc=0;
   for (i = 1; i < argc; i++)
     {
-      if (strcmp (argv[i], dumpscript_opt) == 0)
+      if (STREQ (argv[i], dumpscript_opt))
        {
 EOF
-           case "$host" in
+           case $host in
              *mingw* | *cygwin* )
                # make stdout use "unix" line endings
                echo "          setmode(1,_O_BINARY);"
@@ -4385,12 +5639,12 @@ EOF
          lt_dump_script (stdout);
          return 0;
        }
-      if (strcmp (argv[i], debug_opt) == 0)
+      if (STREQ (argv[i], debug_opt))
        {
           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
@@ -4413,7 +5667,7 @@ EOF
 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]);
@@ -4524,7 +5778,7 @@ EOF
                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 */
@@ -4569,7 +5823,7 @@ base_name (const char *name)
 {
   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;
@@ -4628,7 +5882,7 @@ find_executable (const char *wrapper)
   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",
@@ -4638,7 +5892,7 @@ find_executable (const char *wrapper)
     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);
@@ -4656,7 +5910,7 @@ find_executable (const char *wrapper)
            return concat_name;
          XFREE (concat_name);
        }
-#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+#if defined HAVE_DOS_BASED_FILE_SYSTEM
     }
 #endif
 
@@ -4679,7 +5933,7 @@ find_executable (const char *wrapper)
              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)
                {
@@ -4798,7 +6052,7 @@ strendzap (char *str, const char *pat)
   if (patlen <= len)
     {
       str += len - patlen;
-      if (strcmp (str, pat) == 0)
+      if (STREQ (str, pat))
        *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
-    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)
@@ -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)
     {
-      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)
         {
@@ -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 #' */
-      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);
@@ -5082,7 +6336,8 @@ EOF
 # 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 ;;
@@ -5092,17 +6347,18 @@ func_win32_import_lib_p ()
 # 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
-      # 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
-      # 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.
@@ -5149,7 +6405,7 @@ func_mode_link ()
     non_pic_objects=
     precious_files_regex=
     prefer_static_libs=no
-    preload=no
+    preload=false
     prev=
     prevarg=
     release=
@@ -5161,7 +6417,7 @@ func_mode_link ()
     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.
@@ -5169,15 +6425,15 @@ func_mode_link ()
     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)
-         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
@@ -5210,7 +6466,7 @@ func_mode_link ()
 
     # 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
@@ -5227,21 +6483,21 @@ func_mode_link ()
 
        case $prev in
        bindir)
-         bindir="$arg"
+         bindir=$arg
          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@"
-           preload=yes
-         fi
+           preload=:
+         }
          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
@@ -5249,9 +6505,9 @@ func_mode_link ()
            continue
            ;;
          self)
-           if test "$prev" = dlprefiles; then
+           if test dlprefiles = "$prev"; then
              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
@@ -5261,7 +6517,7 @@ func_mode_link ()
            continue
            ;;
          *)
-           if test "$prev" = dlfiles; then
+           if test dlfiles = "$prev"; then
              func_append dlfiles " $arg"
            else
              func_append dlprefiles " $arg"
@@ -5272,14 +6528,14 @@ func_mode_link ()
          esac
          ;;
        expsyms)
-         export_symbols="$arg"
+         export_symbols=$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)
-         export_symbols_regex="$arg"
+         export_symbols_regex=$arg
          prev=
          continue
          ;;
@@ -5297,7 +6553,13 @@ func_mode_link ()
          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
          ;;
@@ -5321,21 +6583,21 @@ func_mode_link ()
 
                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" "/" ""
-               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.
-                 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
@@ -5346,7 +6608,7 @@ func_mode_link ()
                  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=
@@ -5354,23 +6616,23 @@ func_mode_link ()
 
                  # A PIC object.
                  func_append libobjs " $pic_object"
-                 arg="$pic_object"
+                 arg=$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.
-                 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"
-                 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.
-                 non_pic_object="$pic_object"
+                 non_pic_object=$pic_object
                  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" "/" ""
-                 xdir="$func_dirname_result"
+                 xdir=$func_dirname_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_fatal_error "\`$arg' is not a valid libtool object"
+                 func_fatal_error "'$arg' is not a valid libtool object"
                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)
-         precious_files_regex="$arg"
+         precious_files_regex=$arg
          prev=
          continue
          ;;
        release)
-         release="-$arg"
+         release=-$arg
          prev=
          continue
          ;;
@@ -5415,7 +6677,7 @@ func_mode_link ()
            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" ;;
@@ -5430,7 +6692,7 @@ func_mode_link ()
          continue
          ;;
        shrext)
-         shrext_cmds="$arg"
+         shrext_cmds=$arg
          prev=
          continue
          ;;
@@ -5470,7 +6732,7 @@ func_mode_link ()
        esac
       fi # test -n "$prev"
 
-      prevarg="$arg"
+      prevarg=$arg
 
       case $arg in
       -all-static)
@@ -5484,7 +6746,7 @@ func_mode_link ()
 
       -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)
@@ -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 "X$arg" = "X-export-symbols"; then
+       if test X-export-symbols = "X$arg"; then
          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_fatal_error "require no space between \`-L' and \`$1'"
+           func_fatal_error "require no space between '-L' and '$1'"
          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"
@@ -5563,8 +6825,8 @@ func_mode_link ()
        *)
          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
@@ -5599,7 +6861,7 @@ func_mode_link ()
        ;;
 
       -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)
@@ -5607,11 +6869,11 @@ func_mode_link ()
            ;;
          *-*-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.
-           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
@@ -5620,16 +6882,16 @@ func_mode_link ()
            ;;
          *-*-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
-           test "X$arg" = "X-lc" && continue
+           test X-lc = "X$arg" && continue
            ;;
          esac
-       elif test "X$arg" = "X-lc_r"; then
+       elif test X-lc_r = "X$arg"; then
         case $host in
-        *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+        *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*)
           # Do not include libc_r directly, use -pthread flag.
           continue
           ;;
@@ -5639,6 +6901,11 @@ func_mode_link ()
        continue
        ;;
 
+      -mllvm)
+       prev=mllvm
+       continue
+       ;;
+
       -module)
        module=yes
        continue
@@ -5668,7 +6935,7 @@ func_mode_link ()
        ;;
 
       -multi_module)
-       single_module="${wl}-multi_module"
+       single_module=$wl-multi_module
        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.
-         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 ;;
@@ -5788,14 +7055,14 @@ func_mode_link ()
        func_stripname '-Wc,' '' "$arg"
        args=$func_stripname_result
        arg=
-       save_ifs="$IFS"; IFS=','
+       save_ifs=$IFS; IFS=,
        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
-       IFS="$save_ifs"
+       IFS=$save_ifs
        func_stripname ' ' '' "$arg"
        arg=$func_stripname_result
        ;;
@@ -5804,15 +7071,15 @@ func_mode_link ()
        func_stripname '-Wl,' '' "$arg"
        args=$func_stripname_result
        arg=
-       save_ifs="$IFS"; IFS=','
+       save_ifs=$IFS; IFS=,
        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
-       IFS="$save_ifs"
+       IFS=$save_ifs
        func_stripname ' ' '' "$arg"
        arg=$func_stripname_result
        ;;
@@ -5835,7 +7102,7 @@ func_mode_link ()
       # -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:
@@ -5850,12 +7117,13 @@ func_mode_link ()
       # @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=*| \
-      -O*|-flto*|-fwhopr*|-fuse-linker-plugin)
+      -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-stdlib=*)
         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"
@@ -5865,7 +7133,7 @@ func_mode_link ()
       # Some other compiler flag.
       -* | +*)
         func_quote_for_eval "$arg"
-       arg="$func_quote_for_eval_result"
+       arg=$func_quote_for_eval_result
        ;;
 
       *.$objext)
@@ -5886,21 +7154,21 @@ func_mode_link ()
 
          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" "/" ""
-         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.
-           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
@@ -5911,7 +7179,7 @@ func_mode_link ()
            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=
@@ -5919,23 +7187,23 @@ func_mode_link ()
 
            # A PIC object.
            func_append libobjs " $pic_object"
-           arg="$pic_object"
-         fi
+           arg=$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.
-           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"
-           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.
-           non_pic_object="$pic_object"
+           non_pic_object=$pic_object
            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" "/" ""
-           xdir="$func_dirname_result"
+           xdir=$func_dirname_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_fatal_error "\`$arg' is not a valid libtool object"
+           func_fatal_error "'$arg' is not a valid libtool object"
          fi
        fi
        ;;
@@ -5967,11 +7235,11 @@ func_mode_link ()
        # 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=
-       elif test "$prev" = dlprefiles; then
+       elif test dlprefiles = "$prev"; then
          # 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"
-       arg="$func_quote_for_eval_result"
+       arg=$func_quote_for_eval_result
        ;;
       esac # arg
 
@@ -5998,9 +7266,9 @@ func_mode_link ()
     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"
@@ -6009,12 +7277,12 @@ func_mode_link ()
     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
-      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
@@ -6022,7 +7290,7 @@ func_mode_link ()
     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.
@@ -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
-      if $opt_preserve_dup_deps ; then
+      if $opt_preserve_dup_deps; then
        case "$libs " in
        *" $deplib "*) func_append specialdeplibs " $deplib" ;;
        esac
@@ -6053,7 +7321,7 @@ func_mode_link ()
       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
@@ -6085,7 +7353,7 @@ func_mode_link ()
          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
@@ -6093,7 +7361,7 @@ func_mode_link ()
     prog)
        compile_deplibs=
        finalize_deplibs=
-       alldeplibs=no
+       alldeplibs=false
        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...
-      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
-       deplibs="$tmp_deplibs"
+       deplibs=$tmp_deplibs
       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
-      if test "$linkmode" = prog; then
+      if test prog = "$linkmode"; then
        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
-      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
@@ -6151,26 +7416,26 @@ func_mode_link ()
            esac
          done
        done
-       libs="$dlprefiles"
+       libs=$dlprefiles
       fi
-      if test "$pass" = dlopen; then
+      if test dlopen = "$pass"; then
        # Collect dlpreopened libraries
-       save_deplibs="$deplibs"
+       save_deplibs=$deplibs
        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=*)
-         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"
-           if test "$linkmode" = lib ; then
+           if test lib = "$linkmode"; then
                case "$new_inherited_linker_flags " in
                    *" $deplib "*) ;;
                    * ) func_append new_inherited_linker_flags " $deplib" ;;
@@ -6180,13 +7445,13 @@ func_mode_link ()
          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
-         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"
@@ -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
-             lib="$searchdir/lib${name}${search_ext}"
+             lib=$searchdir/lib$name$search_ext
              if test -f "$lib"; then
-               if test "$search_ext" = ".la"; then
-                 found=yes
+               if test .la = "$search_ext"; then
+                 found=:
                else
-                 found=no
+                 found=false
                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 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
@@ -6226,19 +7482,19 @@ func_mode_link ()
                  old_library=
                  func_source "$lib"
                  for l in $old_library $library_names; do
-                   ll="$l"
+                   ll=$l
                  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" "" "."
-                   ladir="$func_dirname_result"
+                   ladir=$func_dirname_result
                    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"
-                     test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
+                     test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs"
                    fi
                    continue
                  fi
@@ -6247,15 +7503,25 @@ func_mode_link ()
              *) ;;
              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)
-         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"
-           if test "$linkmode" = lib ; then
+           if test lib = "$linkmode"; then
                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"
-           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)
-           if test "$pass" = conv; then
+           if test conv = "$pass"; then
              deplibs="$deplib $deplibs"
              continue
            fi
-           if test "$pass" = scan; then
+           if test scan = "$pass"; then
              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_warning "\`-L' is ignored for archives/objects"
+           func_warning "'-L' is ignored for archives/objects"
            ;;
          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
@@ -6314,7 +7580,7 @@ func_mode_link ()
          lib=$func_resolve_sysroot_result
          ;;
        *.$libext)
-         if test "$pass" = conv; then
+         if test conv = "$pass"; then
            deplibs="$deplib $deplibs"
            continue
          fi
@@ -6325,21 +7591,26 @@ func_mode_link ()
            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
-                   valid_a_lib=yes
+                   valid_a_lib=:
                  fi
                ;;
                pass_all)
-                 valid_a_lib=yes
+                 valid_a_lib=:
                ;;
              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"
@@ -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."
-             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)
-           if test "$pass" != link; then
+           if test link != "$pass"; then
              deplibs="$deplib $deplibs"
            else
              compile_deplibs="$deplib $compile_deplibs"
@@ -6369,10 +7635,10 @@ func_mode_link ()
          esac # linkmode
          ;; # *.$libext
        *.lo | *.$objext)
-         if test "$pass" = conv; then
+         if test conv = "$pass"; then
            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"
@@ -6385,22 +7651,20 @@ func_mode_link ()
          continue
          ;;
        %DEPLIBS%)
-         alldeplibs=yes
+         alldeplibs=:
          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" \
-         || func_fatal_error "\`$lib' is not a valid libtool archive"
+         || func_fatal_error "'$lib' is not a valid libtool archive"
 
        func_dirname "$lib" "" "."
-       ladir="$func_dirname_result"
+       ladir=$func_dirname_result
 
        dlname=
        dlopen=
@@ -6430,36 +7694,36 @@ func_mode_link ()
          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
 
-       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
-             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"
-           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
+         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
 
@@ -6467,26 +7731,26 @@ func_mode_link ()
        # 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="$l"
+           linklib=$l
          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.
-       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" ||
-            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
@@ -6500,40 +7764,40 @@ func_mode_link ()
 
        # 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
-           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"
-           abs_ladir="$ladir"
+           abs_ladir=$ladir
          fi
          ;;
        esac
        func_basename "$lib"
-       laname="$func_basename_result"
+       laname=$func_basename_result
 
        # 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
-           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
-           dir="$lt_sysroot$libdir"
-           absdir="$lt_sysroot$libdir"
+           dir=$lt_sysroot$libdir
+           absdir=$lt_sysroot$libdir
          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
-           dir="$ladir"
-           absdir="$abs_ladir"
+           dir=$ladir
+           absdir=$abs_ladir
            # 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
@@ -6542,11 +7806,11 @@ func_mode_link ()
        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
-         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
@@ -6590,9 +7854,9 @@ func_mode_link ()
 
        if test -z "$libdir"; then
          # Link the convenience library
-         if test "$linkmode" = lib; then
+         if test lib = "$linkmode"; then
            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
@@ -6602,14 +7866,14 @@ func_mode_link ()
        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"
 
-         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=
@@ -6621,14 +7885,14 @@ func_mode_link ()
                 ;;
            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
-           if $opt_preserve_dup_deps ; then
+           if $opt_preserve_dup_deps; then
              case "$tmp_libs " in
              *" $deplib "*) func_append specialdeplibs " $deplib" ;;
              esac
@@ -6638,15 +7902,15 @@ func_mode_link ()
          continue
        fi # $linkmode = prog...
 
-       if test "$linkmode,$pass" = "prog,link"; then
+       if test prog,link = "$linkmode,$pass"; then
          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
-           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.
-             case "$temp_rpath:" in
+             case $temp_rpath: in
              *"$absdir:"*) ;;
              *) func_append temp_rpath "$absdir:" ;;
              esac
@@ -6675,9 +7939,9 @@ func_mode_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
@@ -6686,11 +7950,11 @@ func_mode_link ()
 
        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" &&
-          { 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
@@ -6698,7 +7962,7 @@ func_mode_link ()
              need_relink=no
            ;;
          *)
-           if test "$installed" = no; then
+           if test no = "$installed"; then
              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!
-         dlopenmodule=""
+         dlopenmodule=
          for dlpremoduletest in $dlprefiles; do
            if test "X$dlpremoduletest" = "X$lib"; then
-             dlopenmodule="$dlpremoduletest"
+             dlopenmodule=$dlpremoduletest
              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
-           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
-         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.
@@ -6753,43 +8017,43 @@ func_mode_link ()
            # 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
-             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
-               versuffix="-$major"
+               versuffix=-$major
                ;;
              esac
              eval soname=\"$soname_spec\"
            else
-             soname="$realname"
+             soname=$realname
            fi
 
            # Make a new name for the extract_expsyms_cmds to use
-           soroot="$soname"
+           soroot=$soname
            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_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_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
@@ -6797,58 +8061,58 @@ func_mode_link ()
            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)
-             if test "$hardcode_direct" = no; then
-               add="$dir/$linklib"
+             if test no = "$hardcode_direct"; then
+               add=$dir/$linklib
                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]* | \
-                   *-*-unixware7*) add_dir="-L$dir" ;;
+                   *-*-unixware7*) add_dir=-L$dir ;;
                  *-*-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 |
-                        $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 -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
-                         add="$dir/$old_library"
+                         add=$dir/$old_library
                        fi
                      elif test -n "$old_library"; then
-                       add="$dir/$old_library"
+                       add=$dir/$old_library
                      fi
                    fi
                esac
-             elif test "$hardcode_minus_L" = no; then
+             elif test no = "$hardcode_minus_L"; then
                case $host in
-               *-*-sunos*) add_shlibpath="$dir" ;;
+               *-*-sunos*) add_shlibpath=$dir ;;
                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)
-             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
@@ -6857,10 +8121,10 @@ func_mode_link ()
                      ;;
                  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
@@ -6868,7 +8132,7 @@ func_mode_link ()
            *) lib_linked=no ;;
            esac
 
-           if test "$lib_linked" != yes; then
+           if test yes != "$lib_linked"; then
              func_fatal_configuration "unsupported hardcode properties"
            fi
 
@@ -6878,15 +8142,15 @@ func_mode_link ()
              *) 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"
-             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:" ;;
@@ -6895,33 +8159,33 @@ func_mode_link ()
            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.
-           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
-             add="-l$name"
-           elif test "$hardcode_automatic" = yes; then
+             add=-l$name
+           elif test yes = "$hardcode_automatic"; then
              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
-               add="$libdir/$linklib"
+               add=$libdir/$linklib
              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
@@ -6930,10 +8194,10 @@ func_mode_link ()
                    ;;
                esac
              fi
-             add="-l$name"
+             add=-l$name
            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
@@ -6941,43 +8205,43 @@ func_mode_link ()
              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.
-         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
-       elif test "$build_libtool_libs" = yes; then
+       elif test yes = "$build_libtool_libs"; then
          # 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
-           $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."
-           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 "*** 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 "*** \`nm' from GNU binutils and a full rebuild may help."
+               echo "*** 'nm' from GNU binutils and a full rebuild may help."
              fi
-             if test "$build_old_libs" = no; then
+             if test no = "$build_old_libs"; then
                build_libtool_libs=module
                build_old_libs=yes
              else
@@ -6990,11 +8254,11 @@ func_mode_link ()
          fi
        fi # link shared/static library?
 
-       if test "$linkmode" = lib; then
+       if test lib = "$linkmode"; then
          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
@@ -7008,12 +8272,12 @@ func_mode_link ()
              *) 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
-         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
@@ -7023,7 +8287,7 @@ func_mode_link ()
                    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" ;;
@@ -7032,12 +8296,12 @@ func_mode_link ()
            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
-             -L*) path="$deplib" ;;
+             -L*) path=$deplib ;;
              *.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
-               [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
+               [\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;;
                *)
                  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
@@ -7058,35 +8322,35 @@ func_mode_link ()
                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
-                   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
-                          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
-                     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="-L$absdir/$objdir"
+                 path=-L$absdir/$objdir
                  ;;
                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" && \
-                   func_fatal_error "\`$deplib' is not a valid libtool archive"
+                   func_fatal_error "'$deplib' is not a valid libtool archive"
                  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
@@ -7098,23 +8362,23 @@ func_mode_link ()
          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
-      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
-      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
@@ -7124,12 +8388,12 @@ func_mode_link ()
            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"
+       else
+         vars=deplibs
        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=
-      for i in $dependency_libs ; do
+      for i in $dependency_libs; do
        case " $predeps $postdeps $compiler_lib_search_path " in
        *" $i "*)
-         i=""
+         i=
          ;;
        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
-    if test "$linkmode" = prog; then
-      dlfiles="$newdlfiles"
+    if test prog = "$linkmode"; then
+      dlfiles=$newdlfiles
     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)
-      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*)
-       func_warning "\`-l' and \`-L' are ignored for archives" ;;
+       func_warning "'-l' and '-L' are ignored for archives" ;;
       esac
 
       test -n "$rpath" && \
-       func_warning "\`-rpath' is ignored for archives"
+       func_warning "'-rpath' is ignored for archives"
 
       test -n "$xrpath" && \
-       func_warning "\`-R' is ignored for archives"
+       func_warning "'-R' is ignored for archives"
 
       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" && \
-       func_warning "\`-release' is ignored for archives"
+       func_warning "'-release' is ignored for archives"
 
       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
-      oldlibs="$output"
+      oldlibs=$output
       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"
@@ -7251,10 +8515,10 @@ func_mode_link ()
        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
@@ -7268,8 +8532,8 @@ func_mode_link ()
       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"
@@ -7278,21 +8542,21 @@ func_mode_link ()
        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
-      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
-       if test "$build_libtool_libs" = yes; then
+       if test yes = "$build_libtool_libs"; then
          # 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"
@@ -7301,20 +8565,20 @@ func_mode_link ()
        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" && \
-         func_warning "\`-release' is ignored for convenience libraries"
+         func_warning "'-release' is ignored for convenience libraries"
       else
 
        # Parse the version information argument.
-       save_ifs="$IFS"; IFS=':'
+       save_ifs=$IFS; IFS=:
        set dummy $vinfo 0 0 0
        shift
-       IFS="$save_ifs"
+       IFS=$save_ifs
 
        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
@@ -7322,45 +8586,42 @@ func_mode_link ()
 
        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
-         # 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
-           age="$number_minor"
-           revision="$number_revision"
+           age=$number_minor
+           revision=$number_revision
            ;;
          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
-           age="$number_minor"
-           revision="$number_minor"
+           age=$number_minor
+           revision=$number_minor
            lt_irix_increment=no
            ;;
-         *)
-           func_fatal_configuration "$modename: unknown library version type \`$version_type'"
-           ;;
          esac
          ;;
        no)
-         current="$1"
-         revision="$2"
-         age="$3"
+         current=$1
+         revision=$2
+         age=$3
          ;;
        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]) ;;
        *)
-         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]) ;;
        *)
-         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]) ;;
        *)
-         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
-         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.
@@ -7406,26 +8667,35 @@ func_mode_link ()
          # 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
-         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"
+          # 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)
-         major=".$current"
-         versuffix=".$current.$revision";
+         major=.$current
+         versuffix=.$current.$revision
          ;;
 
        freebsd-elf)
-         major=".$current"
-         versuffix=".$current"
+         major=.$current
+         versuffix=.$current
          ;;
 
        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
@@ -7436,69 +8706,69 @@ func_mode_link ()
            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
-         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
-           verstring="$verstring_prefix$major.$iface:$verstring"
+           verstring=$verstring_prefix$major.$iface:$verstring
          done
 
-         # Before this point, $major must not contain `.'.
+         # Before this point, $major must not contain '.'.
          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
-         versuffix="$major.$age.$revision"
+         versuffix=$major.$age.$revision
          ;;
 
        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
-         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
-           verstring="$verstring:${iface}.0"
+           verstring=$verstring:$iface.0
          done
 
          # Make executables depend on our current version.
-         func_append verstring ":${current}.0"
+         func_append verstring ":$current.0"
          ;;
 
        qnx)
-         major=".$current"
-         versuffix=".$current"
+         major=.$current
+         versuffix=.$current
          ;;
 
        sunos)
-         major=".$current"
-         versuffix=".$current.$revision"
+         major=.$current
+         versuffix=.$current.$revision
          ;;
 
        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
-         versuffix="-$major"
+         versuffix=-$major
          ;;
 
        *)
-         func_fatal_configuration "unknown library version type \`$version_type'"
+         func_fatal_configuration "unknown library version type '$version_type'"
          ;;
        esac
 
@@ -7512,42 +8782,45 @@ func_mode_link ()
            verstring=
            ;;
          *)
-           verstring="0.0"
+           verstring=0.0
            ;;
          esac
-         if test "$need_version" = no; then
+         if test no = "$need_version"; then
            versuffix=
          else
-           versuffix=".0.0"
+           versuffix=.0.0
          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=
-         verstring=""
+         verstring=
        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.
-         allow_undefined_flag="$no_undefined_flag"
+         allow_undefined_flag=$no_undefined_flag
        fi
 
       fi
 
-      func_generate_dlsyms "$libname" "$libname" "yes"
+      func_generate_dlsyms "$libname" "$libname" :
       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=
@@ -7556,8 +8829,8 @@ func_mode_link ()
          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
@@ -7573,11 +8846,11 @@ func_mode_link ()
       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.
-       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.
@@ -7598,13 +8871,13 @@ func_mode_link ()
          *) 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
-      old_dlfiles="$dlfiles"
+      old_dlfiles=$dlfiles
       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
-      old_dlprefiles="$dlprefiles"
+      old_dlprefiles=$dlprefiles
       dlprefiles=
       for lib in $old_dlprefiles; do
        case "$dlprefiles " in
@@ -7623,7 +8896,7 @@ func_mode_link ()
        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*)
@@ -7647,7 +8920,7 @@ func_mode_link ()
            ;;
          *)
            # 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
            ;;
@@ -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?
-       release=""
-       versuffix=""
-       major=""
+       release=
+       versuffix=
+       major=
        newdeplibs=
        droppeddeps=no
        case $deplibs_check_method in
@@ -7694,20 +8967,20 @@ EOF
              -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"
-                   i=""
+                   i=
                    ;;
                  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
-                 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
@@ -7737,20 +9010,20 @@ EOF
                $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"
-                     i=""
+                     i=
                      ;;
                    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
-                   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
@@ -7787,24 +9060,24 @@ EOF
            -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"
-                 a_deplib=""
+                 a_deplib=
                  ;;
                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
-               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
-                 if test "$want_nocaseglob" = yes; then
+                 if test yes = "$want_nocaseglob"; then
                    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?
-                     potlib="$potent_lib"
+                     potlib=$potent_lib
                      while test -h "$potlib" 2>/dev/null; do
-                       potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
+                       potliblink=`ls -ld $potlib | $SED 's/.* -> //'`
                        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"
-                       a_deplib=""
+                       a_deplib=
                        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."
@@ -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"
-               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"
@@ -7871,30 +9144,30 @@ EOF
            -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"
-                 a_deplib=""
+                 a_deplib=
                  ;;
                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
-                   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"
-                     a_deplib=""
+                     a_deplib=
                      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."
@@ -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"
-               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"
@@ -7918,18 +9191,18 @@ EOF
          done # Gone through all deplibs.
          ;;
        none | unknown | *)
-         newdeplibs=""
+         newdeplibs=
          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 '/'
-             tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"`
+             tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"`
            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."
@@ -7953,8 +9226,8 @@ EOF
          ;;
        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"
@@ -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"
-             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 "*** \`nm' from GNU binutils and a full rebuild may help."
+             echo "*** 'nm' from GNU binutils and a full rebuild may help."
            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
@@ -7979,14 +9252,14 @@ EOF
            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."
-             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
@@ -8032,7 +9305,7 @@ EOF
        *) 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=
@@ -8040,25 +9313,25 @@ EOF
       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
-       if test "$hardcode_into_libs" = yes; then
+       if test yes = "$hardcode_into_libs"; then
          # 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
-                 hardcode_libdirs="$libdir"
+                 hardcode_libdirs=$libdir
                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
-           libdir="$hardcode_libdirs"
+           libdir=$hardcode_libdirs
            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
 
-       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
@@ -8108,19 +9381,19 @@ EOF
        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
-         soname="$realname"
+         soname=$realname
        fi
        if test -z "$dlname"; then
          dlname=$soname
        fi
 
-       lib="$output_objdir/$realname"
+       lib=$output_objdir/$realname
        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"
-         export_symbols="$output_objdir/$libname.uexp"
+         export_symbols=$output_objdir/$libname.uexp
          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
-           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.
-             orig_export_symbols="$export_symbols"
+             orig_export_symbols=$export_symbols
              export_symbols=
              always_export_symbols=yes
-           fi
+           }
          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
-           save_ifs="$IFS"; IFS='~'
+           save_ifs=$IFS; IFS='~'
            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
@@ -8181,7 +9454,7 @@ EOF
                  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
@@ -8192,7 +9465,7 @@ EOF
                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"
@@ -8215,8 +9488,8 @@ EOF
                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
@@ -8224,16 +9497,16 @@ EOF
        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
 
-       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.
-         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
-         # '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.
@@ -8252,11 +9525,11 @@ EOF
            ;;
          esac
        done
-       deplibs="$tmp_deplibs"
+       deplibs=$tmp_deplibs
 
        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.
@@ -8267,7 +9540,7 @@ EOF
            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
@@ -8276,18 +9549,18 @@ EOF
          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
-       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.
-       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
@@ -8305,7 +9578,7 @@ EOF
          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
@@ -8338,8 +9611,8 @@ EOF
          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
@@ -8351,14 +9624,14 @@ EOF
            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=
-           if test "$compiler_needs_object" = yes; then
+           if test yes = "$compiler_needs_object"; then
              firstobj="$1 "
              shift
            fi
@@ -8373,7 +9646,7 @@ EOF
          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
@@ -8385,13 +9658,13 @@ EOF
                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.
-                 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\"
@@ -8401,10 +9674,10 @@ EOF
                    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
-                 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
@@ -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"
-             eval concat_cmds=\"\${concat_cmds}$reload_cmds\"
+             eval concat_cmds=\"\$concat_cmds$reload_cmds\"
              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"
 
@@ -8426,9 +9699,9 @@ EOF
              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.
@@ -8437,16 +9710,16 @@ EOF
              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.
-           save_ifs="$IFS"; IFS='~'
+           save_ifs=$IFS; IFS='~'
            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"
              }
@@ -8454,7 +9727,7 @@ EOF
                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" )
@@ -8463,7 +9736,7 @@ EOF
                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"'
@@ -8471,18 +9744,18 @@ EOF
            fi
          fi
 
-          if ${skipped_export-false}; then
+          ${skipped_export-false} && {
            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.
-             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
-             # '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.
@@ -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
-         fi
+         }
 
          libobjs=$output
          # Restore the value of output.
@@ -8505,7 +9778,7 @@ EOF
          # 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
@@ -8527,7 +9800,7 @@ EOF
 
        # 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
@@ -8535,11 +9808,12 @@ EOF
          test "X$libobjs" = "X " && libobjs=
        fi
 
-       save_ifs="$IFS"; IFS='~'
+       save_ifs=$IFS; IFS='~'
        for cmd in $cmds; do
-         IFS="$save_ifs"
+         IFS=$sp$nl
          eval cmd=\"$cmd\"
-         $opt_silent || {
+         IFS=$save_ifs
+         $opt_quiet || {
            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
-           if test "$opt_mode" = relink; then
+           if test relink = "$opt_mode"; then
              ( cd "$output_objdir" && \
                $RM "${realname}T" && \
                $MV "${realname}U" "$realname" )
@@ -8556,10 +9830,10 @@ EOF
            exit $lt_exit
          }
        done
-       IFS="$save_ifs"
+       IFS=$save_ifs
 
        # 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
@@ -8579,39 +9853,39 @@ EOF
        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.
-         dlname="$soname"
+         dlname=$soname
        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*)
-       func_warning "\`-l' and \`-L' are ignored for objects" ;;
+       func_warning "'-l' and '-L' are ignored for objects" ;;
       esac
 
       test -n "$rpath" && \
-       func_warning "\`-rpath' is ignored for objects"
+       func_warning "'-rpath' is ignored for objects"
 
       test -n "$xrpath" && \
-       func_warning "\`-R' is ignored for objects"
+       func_warning "'-R' is ignored for objects"
 
       test -n "$vinfo" && \
-       func_warning "\`-version-info' is ignored for objects"
+       func_warning "'-version-info' is ignored for objects"
 
       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" && \
-         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"
@@ -8619,7 +9893,7 @@ EOF
        ;;
       *)
        libobj=
-       obj="$output"
+       obj=$output
        ;;
       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
-         gentop="$output_objdir/${obj}x"
+         gentop=$output_objdir/${obj}x
          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
-      test "$build_libtool_libs" != yes && libobjs="$non_pic_objects"
+      test yes = "$build_libtool_libs" || libobjs=$non_pic_objects
 
       # 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.
@@ -8668,7 +9942,7 @@ EOF
        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
@@ -8678,12 +9952,12 @@ EOF
        # $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"
-       output="$libobj"
+       output=$libobj
        func_execute_cmds "$reload_cmds" 'exit $?'
       fi
 
@@ -8700,16 +9974,14 @@ EOF
                  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" && \
-       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])
@@ -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!).
-       if test "$tagname" = CXX ; then
+       if test CXX = "$tagname"; then
          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
@@ -8763,7 +10035,7 @@ EOF
        *) func_append new_libs " $deplib" ;;
        esac
       done
-      compile_deplibs="$new_libs"
+      compile_deplibs=$new_libs
 
 
       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
-             hardcode_libdirs="$libdir"
+             hardcode_libdirs=$libdir
            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*)
-         testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'`
+         testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'`
          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
-       libdir="$hardcode_libdirs"
+       libdir=$hardcode_libdirs
        eval rpath=\" $hardcode_libdir_flag_spec\"
       fi
-      compile_rpath="$rpath"
+      compile_rpath=$rpath
 
       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
-             hardcode_libdirs="$libdir"
+             hardcode_libdirs=$libdir
            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
-       libdir="$hardcode_libdirs"
+       libdir=$hardcode_libdirs
        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
 
-      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
 
-      wrappers_required=yes
+      wrappers_required=:
       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* )
-        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
-      if test "$wrappers_required" = no; then
+      $wrappers_required || {
        # 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
@@ -8914,12 +10184,12 @@ EOF
        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
+      }
 
       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
 
-      if test "$no_install" = yes; then
+      if test yes = "$no_install"; then
        # 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.
@@ -8968,27 +10238,28 @@ EOF
        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'`
@@ -9045,8 +10316,8 @@ EOF
            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
 
@@ -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.
-             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
@@ -9090,25 +10361,27 @@ EOF
     # 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
-       else
+         ;;
+       module)
+         oldobjs=$libobjs_save
+         addlibs=$old_convenience
+         build_libtool_libs=no
+          ;;
+       *)
          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
-       gentop="$output_objdir/${outputname}x"
+       gentop=$output_objdir/${outputname}x
        func_append generated " $gentop"
 
        func_extract_archives $gentop $addlibs
@@ -9116,13 +10389,13 @@ EOF
       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
-         gentop="$output_objdir/${outputname}x"
+         gentop=$output_objdir/${outputname}x
          func_append generated " $gentop"
 
          func_extract_archives $gentop $dlprefiles
@@ -9143,7 +10416,7 @@ EOF
          :
        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
@@ -9152,7 +10425,7 @@ EOF
          for obj in $save_oldobjs
          do
            func_basename "$obj"
-           objbase="$func_basename_result"
+           objbase=$func_basename_result
            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
-             if test "$obj" = "$last_oldobj" ; then
+             if test "$obj" = "$last_oldobj"; then
                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
-         if test "X$oldobjs" = "X" ; then
+         if test -z "$oldobjs"; then
            eval cmds=\"\$concat_cmds\"
          else
            eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
@@ -9249,7 +10522,7 @@ EOF
     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
@@ -9264,31 +10537,31 @@ EOF
        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"`
-      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
-         if test "$installed" = yes; then
+         if test yes = "$installed"; then
            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"
-               name="$func_basename_result"
+               name=$func_basename_result
                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" && \
-                 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*)
@@ -9304,23 +10577,23 @@ EOF
              *) 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"
-               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" && \
-                 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
-           dlfiles="$newdlfiles"
+           dlfiles=$newdlfiles
            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"
-               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" && \
-                 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
-           dlprefiles="$newdlprefiles"
+           dlprefiles=$newdlprefiles
          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
-           dlfiles="$newdlfiles"
+           dlfiles=$newdlfiles
            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
-           dlprefiles="$newdlprefiles"
+           dlprefiles=$newdlprefiles
          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.
-             if test "x$bindir" != x ;
-             then
+             if test -n "$bindir"; then
                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
@@ -9385,7 +10657,7 @@ EOF
          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.
@@ -9399,7 +10671,7 @@ library_names='$library_names'
 # 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.
@@ -9425,7 +10697,7 @@ dlpreopen='$dlprefiles'
 
 # 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
@@ -9440,27 +10712,29 @@ relink_command=\"$relink_command\""
     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 ()
 {
-    $opt_debug
-    RM="$nonopt"
+    $debug_cmd
+
+    RM=$nonopt
     files=
-    rmforce=
+    rmforce=false
     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
-      -f) func_append RM " $arg"; rmforce=yes ;;
+      -f) func_append RM " $arg"; rmforce=: ;;
       -*) func_append RM " $arg" ;;
       *) func_append files " $arg" ;;
       esac
@@ -9473,18 +10747,18 @@ func_mode_uninstall ()
 
     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
-       odir="$dir/$objdir"
+       odir=$dir/$objdir
       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
-      if test "$opt_mode" = clean; then
+      if test clean = "$opt_mode"; then
        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 "$rmforce" = yes; then
+      elif $rmforce; then
        continue
       fi
 
-      rmfiles="$file"
+      rmfiles=$file
 
       case $name in
       *.la)
@@ -9517,7 +10791,7 @@ func_mode_uninstall ()
          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 "*) ;;
@@ -9528,12 +10802,12 @@ func_mode_uninstall ()
          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.
-             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.
            ;;
@@ -9549,21 +10823,19 @@ func_mode_uninstall ()
          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.
-         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
        ;;
 
       *)
-       if test "$opt_mode" = clean ; then
+       if test clean = "$opt_mode"; then
          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
-           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
-           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
@@ -9604,7 +10876,7 @@ func_mode_uninstall ()
       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"
@@ -9614,16 +10886,17 @@ func_mode_uninstall ()
     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" && {
-  help="$generic_help"
+  help=$generic_help
   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"
@@ -9634,7 +10907,7 @@ exit $exit_status
 
 
 # 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
@@ -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:
-# vi:sw=2
-
index d7c043f..4bc6b22 100644 (file)
@@ -1,8 +1,6 @@
 # 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
@@ -39,7 +37,7 @@ m4_define([_LT_COPYING], [dnl
 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 ])
 
-# serial 57 LT_INIT
+# serial 58 LT_INIT
 
 
 # LT_PREREQ(VERSION)
@@ -91,7 +89,7 @@ dnl Parse OPTIONS
 _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'
@@ -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
-# 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"}
@@ -179,13 +177,13 @@ m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
 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.
-if test -n "\${ZSH_VERSION+set}" ; then
+if test -n "\${ZSH_VERSION+set}"; then
    setopt NO_GLOB_SUBST
 fi
 ])
-if test -n "${ZSH_VERSION+set}" ; then
+if test -n "${ZSH_VERSION+set}"; then
    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.
-  if test "X${COLLECT_NAMES+set}" != Xset; then
+  if test set != "${COLLECT_NAMES+set}"; then
     COLLECT_NAMES=
     export COLLECT_NAMES
   fi
@@ -209,14 +207,14 @@ esac
 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
 
-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
@@ -269,14 +267,14 @@ no_glob_subst='s/\*/\\\*/g'
 
 # _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,
-# `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'])
-ltmain="$ac_aux_dir/ltmain.sh"
+ltmain=$ac_aux_dir/ltmain.sh
 ])# _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
-# 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.
 
 
@@ -421,8 +419,8 @@ m4_define([_lt_decl_all_varnames],
 
 # _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"`'])
@@ -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
-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
-# 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],
@@ -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
-# 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],
@@ -547,7 +545,7 @@ for var in lt_decl_all_varnames([[ \
 ]], 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\\\\\\""
@@ -560,7 +558,7 @@ for var in lt_decl_all_varnames([[ \
 ]], 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\\\\\\""
@@ -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
-# `#!' 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).
@@ -598,7 +596,7 @@ AS_SHELL_SANITIZE
 _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
@@ -621,7 +619,7 @@ exec AS_MESSAGE_LOG_FD>>config.log
 } >&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.
 
@@ -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."
 
-while test $[#] != 0
+while test 0 != $[#]
 do
   case $[1] in
     --version | --v* | -V )
@@ -656,10 +654,10 @@ do
       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]
-Try \`$[0] --help' for more information.]) ;;
+Try '$[0] --help' for more information.]) ;;
   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=:
-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
@@ -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], [
-    # 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.
-    if test -n "${ZSH_VERSION+set}" ; then
+    if test -n "${ZSH_VERSION+set}"; then
       setopt NO_GLOB_SUBST
     fi
 
-    cfgfile="${ofile}T"
+    cfgfile=${ofile}T
     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.
-# 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.
 #
@@ -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.
-if test "X${COLLECT_NAMES+set}" != Xset; then
+if test set != "${COLLECT_NAMES+set}"; then
   COLLECT_NAMES=
   export COLLECT_NAMES
 fi
@@ -756,8 +754,6 @@ _LT_EOF
   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"
@@ -775,7 +771,6 @@ _LT_EOF
 [m4_if([$1], [], [
     PACKAGE='$PACKAGE'
     VERSION='$VERSION'
-    TIMESTAMP='$TIMESTAMP'
     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
-      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
@@ -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.
-       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
@@ -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])
-       LDFLAGS="$save_LDFLAGS"
+       LDFLAGS=$save_LDFLAGS
     ])
 
     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
-      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
@@ -1042,32 +1037,32 @@ _LT_EOF
     ])
     case $host_os in
     rhapsody* | darwin1.[[012]])
-      _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
+      _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;;
     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]]*)
-         _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+         _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
        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.*)
-         _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+         _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
       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
-    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
-      _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
-    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=
@@ -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
-  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
-  _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined"
+  _LT_TAGVAR(allow_undefined_flag, $1)=$_lt_dar_allow_undefined
   case $cc_basename in
-     ifort*) _lt_dar_can_shared=yes ;;
+     ifort*|nagfor*) _lt_dar_can_shared=yes ;;
      *) _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
-    _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],
-[   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
@@ -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
-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])],
@@ -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])="/usr/lib:/lib"
+    _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=/usr/lib:/lib
   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
-# 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
@@ -1196,10 +1191,10 @@ fi
 # 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]) ;;
@@ -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],
-[  --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=
-case ${with_sysroot} in #(
+case $with_sysroot in #(
  yes)
-   if test "$GCC" = yes; then
+   if test yes = "$GCC"; then
      lt_sysroot=`$CC --print-sysroot 2>/dev/null`
    fi
    ;; #(
@@ -1244,14 +1240,14 @@ case ${with_sysroot} in #(
  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
-[dependent libraries, and in which our libraries should be installed.])])
+[dependent libraries, and where our libraries should be installed.])])
 
 # _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)])])
-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*)
-  # 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*)
-       HPUX_IA64_MODE="32"
+       HPUX_IA64_MODE=32
        ;;
       *ELF-64*)
-       HPUX_IA64_MODE="64"
+       HPUX_IA64_MODE=64
        ;;
     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
-    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"
@@ -1312,9 +1310,46 @@ ia64-*-hpux*)
   rm -rf conftest*
   ;;
 
+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*)
-  # 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
@@ -1333,10 +1368,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
                ;;
            esac
            ;;
-         powerpc64le-*)
+         powerpc64le-*linux*)
            LD="${LD-ld} -m elf32lppclinux"
            ;;
-         powerpc64-*)
+         powerpc64-*linux*)
            LD="${LD-ld} -m elf32ppclinux"
            ;;
          s390x-*linux*)
@@ -1355,10 +1390,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
          x86_64-*linux*)
            LD="${LD-ld} -m elf_x86_64"
            ;;
-         powerpcle-*)
+         powerpcle-*linux*)
            LD="${LD-ld} -m elf64lppc"
            ;;
-         powerpc-*)
+         powerpc-*linux*)
            LD="${LD-ld} -m elf64ppc"
            ;;
          s390*-*linux*|s390*-*tpf*)
@@ -1376,19 +1411,20 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
 
 *-*-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])
-  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
-    CFLAGS="$SAVE_CFLAGS"
+    CFLAGS=$SAVE_CFLAGS
   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
@@ -1396,7 +1432,7 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
       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*)
@@ -1405,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
-          LD="${LD-ld}_sol2"
+          LD=${LD-ld}_sol2
         fi
         ;;
       *)
@@ -1421,7 +1457,7 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
   ;;
 esac
 
-need_locks="$enable_libtool_lock"
+need_locks=$enable_libtool_lock
 ])# _LT_ENABLE_LOCK
 
 
@@ -1440,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])
-      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])
-       if test "$ac_status" -ne 0; then
+       if test 0 -ne "$ac_status"; then
           lt_cv_ar_at_file=@
         fi
       fi
@@ -1452,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
@@ -1483,7 +1519,7 @@ old_postuninstall_cmds=
 
 if test -n "$RANLIB"; then
   case $host_os in
-  openbsd*)
+  bitrig* | openbsd*)
     old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib"
     ;;
   *)
@@ -1519,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
-   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
@@ -1546,7 +1582,7 @@ AC_CACHE_CHECK([$1], [$2],
    $RM conftest*
 ])
 
-if test x"[$]$2" = xyes; then
+if test yes = "[$]$2"; then
     m4_if([$5], , :, [$5])
 else
     m4_if([$6], , :, [$6])
@@ -1568,7 +1604,7 @@ AC_DEFUN([_LT_LINKER_OPTION],
 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
@@ -1587,10 +1623,10 @@ AC_CACHE_CHECK([$1], [$2],
      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])
@@ -1611,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
-  teststring="ABCD"
+  teststring=ABCD
 
   case $build_os in
   msdosdjgpp*)
@@ -1651,7 +1687,7 @@ AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
     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`
@@ -1702,22 +1738,22 @@ AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
   *)
     lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
     if test -n "$lt_cv_sys_max_cmd_len" && \
-       test undefined != "$lt_cv_sys_max_cmd_len"; then
+       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.
-      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.
-      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 &&
-             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
@@ -1733,7 +1769,7 @@ AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
     ;;
   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)
@@ -1761,7 +1797,7 @@ m4_defun([_LT_HEADER_DLFCN],
 # ----------------------------------------------------------------
 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
@@ -1810,7 +1846,7 @@ else
 
 /* 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
 
@@ -1836,7 +1872,7 @@ int main ()
   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
@@ -1857,7 +1893,7 @@ rm -fr conftest*
 # ------------------
 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
@@ -1867,44 +1903,52 @@ else
 
   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="LoadLibrary"
+    lt_cv_dlopen=LoadLibrary
     lt_cv_dlopen_libs=
     ;;
 
   cygwin*)
-    lt_cv_dlopen="dlopen"
+    lt_cv_dlopen=dlopen
     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],
-               [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
     ])
     ;;
 
+  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],
-         [lt_cv_dlopen="shl_load"],
+         [lt_cv_dlopen=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],
-             [lt_cv_dlopen="dlopen"],
+             [lt_cv_dlopen=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],
-                 [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
+                 [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld],
              [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])
              ])
            ])
          ])
@@ -1913,21 +1957,21 @@ else
     ;;
   esac
 
-  if test "x$lt_cv_dlopen" != xno; then
-    enable_dlopen=yes
-  else
+  if test no = "$lt_cv_dlopen"; then
     enable_dlopen=no
+  else
+    enable_dlopen=yes
   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\"
 
-    save_LIBS="$LIBS"
+    save_LIBS=$LIBS
     LIBS="$lt_cv_dlopen_libs $LIBS"
 
     AC_CACHE_CHECK([whether a program can dlopen itself],
@@ -1937,7 +1981,7 @@ else
            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
@@ -1947,9 +1991,9 @@ else
       ])
     fi
 
-    CPPFLAGS="$save_CPPFLAGS"
-    LDFLAGS="$save_LDFLAGS"
-    LIBS="$save_LIBS"
+    CPPFLAGS=$save_CPPFLAGS
+    LDFLAGS=$save_LDFLAGS
+    LIBS=$save_LIBS
     ;;
   esac
 
@@ -2041,8 +2085,8 @@ m4_defun([_LT_COMPILER_FILE_LOCKS],
 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
@@ -2052,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])
-  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
@@ -2080,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
-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
 
 
@@ -2093,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)" ||
-   test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then
+   test yes = "$_LT_TAGVAR(hardcode_automatic, $1)"; then
 
   # 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
-     ## 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
@@ -2115,12 +2159,12 @@ else
 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
-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
@@ -2144,7 +2188,7 @@ else
 # 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])
@@ -2175,14 +2219,14 @@ m4_require([_LT_CHECK_SHELL_FEATURES])dnl
 AC_MSG_CHECKING([dynamic linker characteristics])
 m4_if([$1],
        [], [
-if test "$GCC" = yes; then
+if test yes = "$GCC"; then
   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
-    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
@@ -2198,28 +2242,35 @@ if test "$GCC" = yes; then
     ;;
   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_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
-    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 '
-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) {
-          lt_foo="/" $lt_i lt_foo;
+          lt_foo = "/" $lt_i lt_foo;
         } else {
           lt_count--;
         }
@@ -2233,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" |\
-      $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
@@ -2242,7 +2293,7 @@ fi])
 library_names_spec=
 libname_spec='lib$name'
 soname_spec=
-shrext_cmds=".so"
+shrext_cmds=.so
 postinstall_cmds=
 postuninstall_cmds=
 finish_cmds=
@@ -2262,11 +2313,11 @@ need_version=unknown
 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.
-  soname_spec='${libname}${release}${shared_ext}$major'
+  soname_spec='$libname$release$shared_ext$major'
   ;;
 
 aix[[4-9]]*)
@@ -2274,40 +2325,40 @@ aix[[4-9]]*)
   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
-    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
-    # 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 '
-          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
-    # 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.
-    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.
-      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.
-      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
@@ -2318,18 +2369,18 @@ amigaos*)
   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.
-    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*)
-  library_names_spec='${libname}${shared_ext}'
+  library_names_spec='$libname$shared_ext'
   dynamic_linker="$host_os ld.so"
   shlibpath_var=LIBRARY_PATH
   ;;
@@ -2337,8 +2388,8 @@ beos*)
 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"
@@ -2350,7 +2401,7 @@ bsdi[[45]]*)
 
 cygwin* | mingw* | pw32* | cegcc*)
   version_type=windows
-  shrext_cmds=".dll"
+  shrext_cmds=.dll
   need_version=no
   need_lib_prefix=no
 
@@ -2359,8 +2410,8 @@ cygwin* | mingw* | pw32* | cegcc*)
     # 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~
@@ -2376,17 +2427,17 @@ cygwin* | mingw* | pw32* | cegcc*)
     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
-      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'
-      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'
@@ -2395,8 +2446,8 @@ m4_if([$1], [],[
   *,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*)
@@ -2423,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="$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'`
@@ -2436,8 +2487,8 @@ m4_if([$1], [],[
     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'
@@ -2450,7 +2501,7 @@ m4_if([$1], [],[
 
   *)
     # 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
@@ -2463,8 +2514,8 @@ darwin* | rhapsody*)
   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`'
@@ -2477,8 +2528,8 @@ dgux*)
   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
   ;;
 
@@ -2496,12 +2547,12 @@ freebsd* | dragonfly*)
   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-*)
-      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
@@ -2531,10 +2582,10 @@ haiku*)
   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_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
   ;;
@@ -2552,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.
-    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"
@@ -2567,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.
-    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
     ;;
@@ -2577,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
-    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, ...
@@ -2591,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
-  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
@@ -2603,7 +2654,7 @@ irix5* | irix6* | 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
@@ -2611,8 +2662,8 @@ irix5* | irix6* | nonstopux*)
   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=
@@ -2631,8 +2682,8 @@ irix5* | irix6* | nonstopux*)
   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
   ;;
 
@@ -2641,13 +2692,33 @@ linux*oldld* | linux*aout* | linux*coff*)
   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.
 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
-  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
@@ -2687,29 +2758,17 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
   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
-    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
-    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
@@ -2719,7 +2778,7 @@ netbsd*)
 
 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
   ;;
@@ -2728,45 +2787,34 @@ newsos6)
   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'
   ;;
 
-openbsd*)
+openbsd* | bitrig*)
   version_type=sunos
-  sys_lib_dlsearch_path_spec="/usr/lib"
+  sys_lib_dlsearch_path_spec=/usr/lib
   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
-    shlibpath_overrides_runpath=yes
+    need_version=yes
   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'
-  shrext_cmds=".dll"
+  shrext_cmds=.dll
   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
   ;;
@@ -2775,11 +2823,11 @@ osf3* | osf4* | osf5*)
   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"
-  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
   ;;
 
 rdos*)
@@ -2790,8 +2838,8 @@ solaris*)
   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
@@ -2801,11 +2849,11 @@ solaris*)
 
 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
-  if test "$with_gnu_ld" = yes; then
+  if test yes = "$with_gnu_ld"; then
     need_lib_prefix=no
   fi
   need_version=yes
@@ -2813,8 +2861,8 @@ sunos4*)
 
 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)
@@ -2835,10 +2883,10 @@ sysv4 | sysv4.3*)
   ;;
 
 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
-    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
   ;;
@@ -2847,12 +2895,12 @@ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
   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
-  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'
@@ -2870,7 +2918,7 @@ tpf*)
   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
@@ -2878,8 +2926,8 @@ tpf*)
 
 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
   ;;
 
@@ -2888,18 +2936,18 @@ uts4*)
   ;;
 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"
-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
 
-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
-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],
@@ -2941,32 +2989,32 @@ _LT_DECL([], [sys_lib_dlsearch_path_spec], [2],
 
 # _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
 [[\\/*] |  ?:[\\/]*])
-  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
-    IFS="$lt_save_ifs"
+    IFS=$lt_save_ifs
     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 \(.*\)"`
-         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
            :
@@ -2989,11 +3037,11 @@ _LT_EOF
       break
     fi
   done
-  IFS="$lt_save_ifs"
-  MAGIC_CMD="$lt_save_MAGIC_CMD"
+  IFS=$lt_save_ifs
+  MAGIC_CMD=$lt_save_MAGIC_CMD
   ;;
 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
@@ -3011,7 +3059,7 @@ dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], [])
 
 # _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
@@ -3038,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@:>@])],
-    [test "$withval" = no || with_gnu_ld=yes],
+    [test no = "$withval" || with_gnu_ld=yes],
     [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*)
-    # 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` ;;
@@ -3061,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
-      test -z "$LD" && LD="$ac_prog"
+      test -z "$LD" && LD=$ac_prog
       ;;
   "")
     # If it fails, then pretend we aren't using GCC.
@@ -3072,37 +3120,37 @@ if test "$GCC" = yes; then
     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
-  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
   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
-      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'*)
-       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
-  IFS="$lt_save_ifs"
+  IFS=$lt_save_ifs
 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])
-LD="$lt_cv_path_LD"
+LD=$lt_cv_path_LD
 if test -n "$LD"; then
   AC_MSG_RESULT($LD)
 else
@@ -3156,13 +3204,13 @@ esac
 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*)
-    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
@@ -3188,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.
-# `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
-# 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]]*)
@@ -3221,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.
-  # 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
@@ -3300,7 +3347,7 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
   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
@@ -3318,8 +3365,8 @@ newos6*)
   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)$'
@@ -3412,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.
-  lt_cv_path_NM="$NM"
+  lt_cv_path_NM=$NM
 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
-    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
-      IFS="$lt_save_ifs"
+      IFS=$lt_save_ifs
       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.
-       # 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"
-         break
+         break 2
          ;;
        *)
          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
@@ -3449,21 +3496,21 @@ else
        esac
       fi
     done
-    IFS="$lt_save_ifs"
+    IFS=$lt_save_ifs
   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"], :)
-    case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in
+    case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in
     *COFF*)
-      DUMPBIN="$DUMPBIN -symbols"
+      DUMPBIN="$DUMPBIN -symbols -headers"
       ;;
     *)
       DUMPBIN=:
@@ -3471,8 +3518,8 @@ else
     esac
   fi
   AC_SUBST([DUMPBIN])
-  if test "$DUMPBIN" != ":"; then
-    NM="$DUMPBIN"
+  if test : != "$DUMPBIN"; then
+    NM=$DUMPBIN
   fi
 fi
 test -z "$NM" && NM=nm
@@ -3518,8 +3565,8 @@ lt_cv_sharedlib_from_linklib_cmd,
 
 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
@@ -3531,7 +3578,7 @@ cygwin* | mingw* | pw32* | cegcc*)
   ;;
 *)
   # fallback: assume linklib IS sharedlib
-  lt_cv_sharedlib_from_linklib_cmd="$ECHO"
+  lt_cv_sharedlib_from_linklib_cmd=$ECHO
   ;;
 esac
 ])
@@ -3558,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*])
-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
 
 
+# _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
@@ -3576,11 +3638,11 @@ case $host in
   # 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="-lm")
+  AC_CHECK_LIB(m, cos, LIBM=-lm)
   ;;
 esac
 AC_SUBST([LIBM])
@@ -3599,7 +3661,7 @@ m4_defun([_LT_COMPILER_NO_RTTI],
 
 _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' ;;
@@ -3651,7 +3713,7 @@ cygwin* | mingw* | pw32* | cegcc*)
   symcode='[[ABCDGISTW]]'
   ;;
 hpux*)
-  if test "$host_cpu" = ia64; then
+  if test ia64 = "$host_cpu"; then
     symcode='[[ABCDEGRST]]'
   fi
   ;;
@@ -3684,14 +3746,44 @@ case `$NM -V 2>&1` in
   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.
-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
-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=
@@ -3709,21 +3801,24 @@ for ac_symprfx in "" "_"; do
 
   # 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};"\
+"     /^ *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};"\
-"     {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'"
@@ -3763,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 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
-#elif defined(__osf__)
+#elif defined __osf__
 /* This system does not cope well with relocations in const data.  */
 # define LT@&t@_DLSYM_CONST
 #else
@@ -3793,7 +3888,7 @@ lt__PROGRAM__LTX_preloaded_symbols[[]] =
 {
   { "@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}
 };
@@ -3813,9 +3908,9 @@ _LT_EOF
          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)"
-         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
@@ -3836,7 +3931,7 @@ _LT_EOF
   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=
@@ -3863,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])
+_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([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
@@ -3884,17 +3983,18 @@ _LT_TAGVAR(lt_prog_compiler_static, $1)=
 
 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.
-      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
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
       ;;
 
     amigaos*)
@@ -3905,8 +4005,8 @@ m4_if([$1], [CXX], [
         ;;
       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
@@ -3971,7 +4071,7 @@ m4_if([$1], [CXX], [
     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
@@ -4012,14 +4112,14 @@ m4_if([$1], [CXX], [
        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_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
@@ -4056,7 +4156,7 @@ m4_if([$1], [CXX], [
            _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'
@@ -4112,7 +4212,7 @@ m4_if([$1], [CXX], [
            ;;
        esac
        ;;
-      netbsd* | netbsdelf*-gnu)
+      netbsd*)
        ;;
       *qnx* | *nto*)
         # QNX uses GNU C++, but need to define -shared option too, otherwise
@@ -4201,17 +4301,18 @@ m4_if([$1], [CXX], [
   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.
-      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
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
       ;;
 
     amigaos*)
@@ -4222,8 +4323,8 @@ m4_if([$1], [CXX], [
         ;;
       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
@@ -4310,7 +4411,7 @@ m4_if([$1], [CXX], [
     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
@@ -4318,6 +4419,20 @@ m4_if([$1], [CXX], [
       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).
@@ -4338,7 +4453,7 @@ m4_if([$1], [CXX], [
        ;;
       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*)
@@ -4349,7 +4464,7 @@ m4_if([$1], [CXX], [
 
     linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
       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'
@@ -4374,6 +4489,12 @@ m4_if([$1], [CXX], [
        _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)
@@ -4471,7 +4592,7 @@ m4_if([$1], [CXX], [
       ;;
 
     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
@@ -4500,7 +4621,7 @@ m4_if([$1], [CXX], [
   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)=
     ;;
@@ -4576,7 +4697,7 @@ m4_if([$1], [CXX], [
     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
@@ -4589,9 +4710,6 @@ m4_if([$1], [CXX], [
       ;;
     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'
     ;;
@@ -4625,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
-  # 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
@@ -4643,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++.
-    if test "$GCC" != yes; then
+    if test yes != "$GCC"; then
       with_gnu_ld=no
     fi
     ;;
@@ -4651,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
     ;;
-  openbsd*)
+  openbsd* | bitrig*)
     with_gnu_ld=no
     ;;
-  linux* | k*bsd*-gnu | gnu*)
-    _LT_TAGVAR(link_all_deplibs, $1)=no
-    ;;
   esac
 
   _LT_TAGVAR(ld_shlibs, $1)=yes
@@ -4664,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
-  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
@@ -4686,24 +4801,24 @@ dnl Note also adjust exclude_expsyms for C++ above.
     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
-    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
-    _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
-      _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
-    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 ...
@@ -4716,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
-      if test "$host_cpu" != ia64; then
+      if test ia64 != "$host_cpu"; then
        _LT_TAGVAR(ld_shlibs, $1)=no
        cat <<_LT_EOF 1>&2
 
@@ -4735,7 +4850,7 @@ _LT_EOF
       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)
@@ -4751,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(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
@@ -4761,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(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
@@ -4769,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(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*)
-      _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(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.
-      _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
-      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 \
-        && 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
-         _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
-         _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' ;;
@@ -4834,42 +4949,44 @@ _LT_EOF
        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
-         _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(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(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~
-           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'
-         _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'
-         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~
-             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
@@ -4878,13 +4995,13 @@ _LT_EOF
       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
-       _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
       ;;
 
@@ -4902,8 +5019,8 @@ _LT_EOF
 
 _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
@@ -4915,7 +5032,7 @@ _LT_EOF
        _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
@@ -4930,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
-           _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
@@ -4949,15 +5066,15 @@ _LT_EOF
 
     *)
       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
 
-    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)=
@@ -4973,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
-      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
@@ -4981,12 +5098,12 @@ _LT_EOF
       ;;
 
     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'
-       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
@@ -5004,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
-         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
@@ -5027,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(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+
-         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
@@ -5052,62 +5169,61 @@ _LT_EOF
          ;;
        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
-       _LT_TAGVAR(link_all_deplibs, $1)=no
       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
-         if test "$aix_use_runtimelinking" = yes; then
-           shared_flag='${wl}-G'
+         if test yes = "$aix_use_runtimelinking"; then
+           shared_flag='$wl-G'
          else
-           shared_flag='${wl}-bM:SRE'
+           shared_flag='$wl-bM:SRE'
          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
-      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])
-        _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
-       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(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])
-        _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.
-         _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.
-           _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.
-         _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
       ;;
@@ -5116,7 +5232,7 @@ _LT_EOF
       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)
@@ -5146,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.
-       shrext_cmds=".dll"
+       shrext_cmds=.dll
        # 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
@@ -5164,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@"~
-         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
@@ -5184,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.
-       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.
@@ -5234,33 +5351,33 @@ _LT_EOF
       ;;
 
     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
-       _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
-      _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(export_dynamic_flag_spec, $1)='${wl}-E'
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E'
       ;;
 
     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
-      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(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
@@ -5268,25 +5385,25 @@ _LT_EOF
       ;;
 
     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*)
-         _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*)
-         _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*)
-         _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*)
-         _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, [], [
@@ -5294,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],
-           [_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)='$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
-      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
@@ -5312,7 +5429,7 @@ _LT_EOF
        *)
          _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.
@@ -5323,16 +5440,16 @@ _LT_EOF
       ;;
 
     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],
-         [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; }]],
@@ -5345,22 +5462,22 @@ _LT_EOF
       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
-       _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'
-      _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
       ;;
 
-    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
@@ -5374,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
-      _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
       ;;
@@ -5382,27 +5499,19 @@ _LT_EOF
     *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 -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_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
-         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
@@ -5418,28 +5527,28 @@ _LT_EOF
       ;;
 
     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 \*'
-       _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'
-      _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
-      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 \*'
-       _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~
-       $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'
@@ -5450,24 +5559,24 @@ _LT_EOF
 
     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~
-         $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=''
-         _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~
-         $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~
-         $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
@@ -5477,11 +5586,11 @@ _LT_EOF
       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?)
-       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
@@ -5491,10 +5600,10 @@ _LT_EOF
       ;;
 
     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.
-       _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
@@ -5543,43 +5652,43 @@ _LT_EOF
       ;;
 
     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'
 
-      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
-       _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*)
-      # 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.
-      _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(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(export_dynamic_flag_spec, $1)='${wl}-Bexport'
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport'
       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
-       _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
       ;;
 
@@ -5594,17 +5703,17 @@ _LT_EOF
       ;;
     esac
 
-    if test x$host_vendor = xsni; then
+    if test sni = "$host_vendor"; then
       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)])
-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
 
@@ -5621,7 +5730,7 @@ x|xyes)
   # 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.
@@ -5701,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],
-    [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],
-    [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
-    "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
@@ -5747,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
-# the compiler configuration to `libtool'.
+# the compiler configuration to 'libtool'.
 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.
@@ -5790,18 +5899,18 @@ if test -n "$compiler"; then
   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])
-  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*)
-    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'
@@ -5809,8 +5918,8 @@ if test -n "$compiler"; then
     ;;
 
   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
@@ -5818,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.
-  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
-CC="$lt_save_CC"
+CC=$lt_save_CC
 ])# _LT_LANG_C_CONFIG
 
 
@@ -5832,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
-# 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
-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
@@ -5881,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.
-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;"
 
@@ -5923,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 "$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
 
-    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.
-      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)
-        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
-          _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
@@ -5987,12 +6096,12 @@ if test "$_lt_caught_CXX_error" != yes; then
         _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'
-          no_entry_flag=""
+          no_entry_flag=
         else
           aix_use_runtimelinking=no
 
@@ -6026,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(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+
-         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
@@ -6050,56 +6159,56 @@ if test "$_lt_caught_CXX_error" != yes; then
          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
-          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
-           if test "$aix_use_runtimelinking" = yes; then
-             shared_flag='${wl}-G'
+           if test yes = "$aix_use_runtimelinking"; then
+             shared_flag='$wl-G'
            else
-             shared_flag='${wl}-bM:SRE'
+             shared_flag='$wl-bM:SRE'
            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
-        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])
-          _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
-          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(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])
-           _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.
-           _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.
-             _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'
@@ -6107,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_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
         ;;
@@ -6117,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(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
@@ -6145,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.
-         shrext_cmds=".dll"
+         shrext_cmds=.dll
          # 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@"~
-           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'
-         _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(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
@@ -6241,14 +6351,14 @@ if test "$_lt_caught_CXX_error" != yes; then
         ;;
 
       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(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(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
@@ -6260,7 +6370,7 @@ if test "$_lt_caught_CXX_error" != yes; then
             _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.
@@ -6269,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.
-            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
@@ -6283,15 +6393,15 @@ if test "$_lt_caught_CXX_error" != yes; then
         ;;
 
       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(export_dynamic_flag_spec, $1)='${wl}-E'
+             _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E'
               ;;
           esac
         fi
@@ -6317,13 +6427,13 @@ if test "$_lt_caught_CXX_error" != yes; then
           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*)
-               _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
@@ -6334,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.
-           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*)
-                   _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*)
-                   _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
@@ -6362,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
-       _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.
-       _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++
-           _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
@@ -6386,17 +6496,17 @@ if test "$_lt_caught_CXX_error" != yes; then
            _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
-               _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
-        _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
         ;;
@@ -6409,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.
-           _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.
@@ -6419,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.
-           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.
@@ -6436,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."*)
-               _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
-               _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
-           _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~
-               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~
-               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~
-               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~
-               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
-             _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
 
-           _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++
-           _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'
@@ -6502,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.
-           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
-           _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~
-               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
            ;;
          *)
@@ -6521,10 +6631,10 @@ if test "$_lt_caught_CXX_error" != yes; then
            *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(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
@@ -6582,22 +6692,17 @@ if test "$_lt_caught_CXX_error" != yes; then
         _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'
-         _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
@@ -6613,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.
-           _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
@@ -6633,17 +6738,17 @@ if test "$_lt_caught_CXX_error" != yes; then
           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(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~
-                 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
@@ -6658,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.
-           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*)
-                 _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
 
-             _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
@@ -6718,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'
-           _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~
-             $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
@@ -6728,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,
-               # 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'
                ;;
@@ -6745,30 +6850,30 @@ if test "$_lt_caught_CXX_error" != yes; then
            ;;
           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
-           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
-               _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~
-                 $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
-               # g++ 2.7 appears to require `-G' NOT `-shared' on this
+               # g++ 2.7 appears to require '-G' NOT '-shared' on this
                # 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~
-                 $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
@@ -6776,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
 
-             _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]].*) ;;
                *)
-                 _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
@@ -6789,52 +6894,52 @@ if test "$_lt_caught_CXX_error" != yes; then
         ;;
 
     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, $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*)
-       # 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.
-       _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(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(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*)
-           _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)"
+              '"$_LT_TAGVAR(old_archive_cmds, $1)"
            _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
       ;;
@@ -6865,10 +6970,10 @@ if test "$_lt_caught_CXX_error" != yes; then
     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
@@ -6895,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
-fi # test "$_lt_caught_CXX_error" != yes
+fi # test yes != "$_lt_caught_CXX_error"
 
 AC_LANG_POP
 ])# _LT_LANG_CXX_CONFIG
@@ -6917,9 +7022,9 @@ AC_REQUIRE([_LT_DECL_SED])
 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
@@ -7007,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
-    case ${prev}${p} in
+    case $prev$p in
 
     -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
@@ -7029,16 +7134,16 @@ if AC_TRY_EVAL(ac_compile); then
        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
-            _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}"
+            _LT_TAGVAR(compiler_lib_search_path, $1)=$prev$p
           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
@@ -7046,9 +7151,9 @@ if AC_TRY_EVAL(ac_compile); then
         esac
        else
         if test -z "$_LT_TAGVAR(postdeps, $1)"; then
-          _LT_TAGVAR(postdeps, $1)="${prev}${p}"
+          _LT_TAGVAR(postdeps, $1)=$prev$p
         else
-          _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}"
+          _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} $prev$p"
         fi
        fi
        prev=
@@ -7063,15 +7168,15 @@ if AC_TRY_EVAL(ac_compile); then
         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
-          _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
-          _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
@@ -7118,7 +7223,7 @@ linux*)
       ;;
     esac
 
-    if test "$solaris_use_stlport4" != yes; then
+    if test yes != "$solaris_use_stlport4"; then
       _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
     fi
     ;;
@@ -7141,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.
-    if test "$solaris_use_stlport4" != yes; then
+    if test yes != "$solaris_use_stlport4"; then
       _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
     fi
     ;;
@@ -7155,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
- _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])
@@ -7175,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
-# 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)
-if test -z "$F77" || test "X$F77" = "Xno"; then
+if test -z "$F77" || test no = "$F77"; then
   _lt_disable_F77=yes
 fi
 
@@ -7215,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.
-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
@@ -7237,7 +7342,7 @@ if test "$_lt_disable_F77" != yes; then
   _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"}
@@ -7251,21 +7356,21 @@ if test "$_lt_disable_F77" != yes; then
     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*)
-        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 "$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
@@ -7273,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.
-    test "$enable_shared" = yes || enable_static=yes
+    test yes = "$enable_shared" || enable_static=yes
     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
@@ -7294,9 +7399,9 @@ if test "$_lt_disable_F77" != yes; then
   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
@@ -7306,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
-# to write the compiler configuration to `libtool'.
+# to write the compiler configuration to 'libtool'.
 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
 
@@ -7347,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.
-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
@@ -7369,7 +7474,7 @@ if test "$_lt_disable_FC" != yes; then
   _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"}
@@ -7385,21 +7490,21 @@ if test "$_lt_disable_FC" != yes; then
     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*)
-        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 "$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
@@ -7407,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.
-    test "$enable_shared" = yes || enable_static=yes
+    test yes = "$enable_shared" || enable_static=yes
     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
@@ -7431,7 +7536,7 @@ if test "$_lt_disable_FC" != yes; then
   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
@@ -7441,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
-# 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
@@ -7475,7 +7580,7 @@ CC=${GCJ-"gcj"}
 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.
@@ -7512,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
-# 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
@@ -7546,7 +7651,7 @@ CC=${GOC-"gccgo"}
 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.
@@ -7583,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
-# 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
@@ -7599,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_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
@@ -7609,7 +7714,7 @@ _LT_COMPILER_BOILERPLATE
 _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=
@@ -7638,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,)
-      test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2"
+      test set = "${GCJFLAGS+set}" || GCJFLAGS="-g -O2"
       AC_SUBST(GCJFLAGS)])])[]dnl
 ])
 
@@ -7749,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
-  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
@@ -7766,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
-    test $lt_ac_count -gt 10 && break
+    test 10 -lt "$lt_ac_count" && break
     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
@@ -7792,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],
-[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
@@ -7836,102 +7921,9 @@ _LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl
 ])# _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
 # -----------------------------
-# 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],
index 5d9acd8..50c7723 100644 (file)
@@ -1,14 +1,14 @@
 # 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.
 
-# 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])])
@@ -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_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 `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],
-                  [_LT_ENABLE_FAST_INSTALL])
+                  [_LT_ENABLE_FAST_INSTALL])
   ])
 ])# _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
-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:
@@ -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
-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:
@@ -157,9 +157,9 @@ dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [])
 
 # _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],
@@ -172,14 +172,14 @@ AC_ARG_ENABLE([shared],
     *)
       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
-       IFS="$lt_save_ifs"
+       IFS=$lt_save_ifs
        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)
@@ -211,9 +211,9 @@ dnl AC_DEFUN([AM_DISABLE_SHARED], [])
 
 # _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],
@@ -226,14 +226,14 @@ AC_ARG_ENABLE([static],
     *)
      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
-       IFS="$lt_save_ifs"
+       IFS=$lt_save_ifs
        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)
@@ -265,9 +265,9 @@ dnl AC_DEFUN([AM_DISABLE_STATIC], [])
 
 # _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],
@@ -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.
-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
       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
-      IFS="$lt_save_ifs"
+      IFS=$lt_save_ifs
       ;;
     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
-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
-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:
@@ -321,9 +321,9 @@ dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], [])
 
 # _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.
-# 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@:>@],
@@ -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.
-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
       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
-      IFS="$lt_save_ifs"
+      IFS=$lt_save_ifs
       ;;
     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
@@ -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
-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:
index 9000a05..7cbc638 100644 (file)
@@ -1,6 +1,7 @@
 # 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
@@ -33,7 +34,7 @@ m4_define([_lt_join],
 # ------------
 # 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])],
@@ -44,7 +45,7 @@ m4_define([lt_unquote], $1)
 
 # 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
index 07a8602..daeb0af 100644 (file)
@@ -1,6 +1,6 @@
 # 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
@@ -9,15 +9,15 @@
 
 # @configure_input@
 
-# serial 3337 ltversion.m4
+# serial 4038 ltversion.m4
 # 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],
-[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)
 ])
index c573da9..59461e4 100644 (file)
@@ -1,6 +1,7 @@
 # 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
@@ -11,7 +12,7 @@
 
 # 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.
 #
@@ -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.
-# 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
diff --git a/missing b/missing
index db98974..cdea514 100755 (executable)
--- a/missing
+++ b/missing
@@ -1,7 +1,7 @@
 #! /bin/sh
 # Common wrapper for a few potentially missing GNU programs.
 
-scriptversion=2013-10-28.13; # UTC
+scriptversion=2012-06-26.16; # UTC
 
 # Copyright (C) 1996-2013 Free Software Foundation, Inc.
 # Originally written by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
@@ -160,7 +160,7 @@ give_advice ()
       ;;
    autom4te*)
       echo "You might have modified some maintainer files that require"
-      echo "the 'autom4te' program to be rebuilt."
+      echo "the 'automa4te' program to be rebuilt."
       program_details 'autom4te'
       ;;
     bison*|yacc*)
index 8cfe4ac..c99967f 100644 (file)
@@ -1,5 +1,6 @@
 # Process this file with automake to produce Makefile.in
 
+NULL =
 SUBDIRS =
 DIST_SUBDIRS =
 BUILT_SOURCES =
@@ -13,98 +14,171 @@ DISTCHECK_CONFIGURE_FLAGS = --enable-introspection
 #AM_CXXFLAGS =
 
 # Convenience targets:
-lib: $(BUILT_SOURCES) libharfbuzz.la
-fuzzing: $(BUILT_SOURCES) libharfbuzz-fuzzing.la
+lib: libharfbuzz.la
 
 lib_LTLIBRARIES = libharfbuzz.la
 
-include Makefile.sources
-
 HBCFLAGS =
 HBLIBS =
-HBNONPCLIBS =
-HBDEPS =
-HBSOURCES =  $(HB_BASE_sources)
-HBHEADERS = $(HB_BASE_headers)
-HBNODISTHEADERS = $(HB_NODIST_headers)
+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-unicode-private.hh \
+       hb-unicode.cc \
+       hb-utf-private.hh \
+       hb-warning.cc \
+       $(NULL)
+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)
+HBNODISTHEADERS = \
+       hb-version.h \
+       $(NULL)
 
 if HAVE_OT
-HBSOURCES += $(HB_OT_sources)
-HBHEADERS += $(HB_OT_headers)
+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-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-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-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-private.hh \
+       $(NULL)
+HBHEADERS += \
+       hb-ot.h \
+       hb-ot-font.h \
+       hb-ot-layout.h \
+       hb-ot-shape.h \
+       hb-ot-tag.h \
+       $(NULL)
 endif
 
 if HAVE_FALLBACK
-HBSOURCES += $(HB_FALLBACK_sources)
+HBSOURCES += hb-fallback-shape.cc
 endif
 
 if HAVE_PTHREAD
 HBCFLAGS += $(PTHREAD_CFLAGS)
-HBNONPCLIBS += $(PTHREAD_LIBS)
+HBLIBS   += $(PTHREAD_LIBS)
 endif
 
 if HAVE_GLIB
 HBCFLAGS += $(GLIB_CFLAGS)
 HBLIBS   += $(GLIB_LIBS)
-HBDEPS   += $(GLIB_DEPS)
-HBSOURCES += $(HB_GLIB_sources)
-HBHEADERS += $(HB_GLIB_headers)
+HBSOURCES += hb-glib.cc
+HBHEADERS += hb-glib.h
 endif
 
 if HAVE_FREETYPE
 HBCFLAGS += $(FREETYPE_CFLAGS)
 HBLIBS   += $(FREETYPE_LIBS)
-# XXX
-# The following creates a recursive dependency on FreeType if FreeType is
-# built with HarfBuzz support enabled.  Newer pkg-config handles that just
-# fine but pkg-config 0.26 as shipped in Ubuntu 14.04 crashes.  Remove
-# in a year or two, or otherwise work around it...
-#HBDEPS   += $(FREETYPE_DEPS)
-HBSOURCES += $(HB_FT_sources)
-HBHEADERS += $(HB_FT_headers)
+HBSOURCES += hb-ft.cc
+HBHEADERS += hb-ft.h
 endif
 
 if HAVE_GRAPHITE2
 HBCFLAGS += $(GRAPHITE2_CFLAGS)
 HBLIBS   += $(GRAPHITE2_LIBS)
-HBDEPS   += $(GRAPHITE2_DEPS)
-HBSOURCES += $(HB_GRAPHITE2_sources)
-HBHEADERS += $(HB_GRAPHITE2_headers)
+HBSOURCES += hb-graphite2.cc
+HBHEADERS += hb-graphite2.h
 endif
 
 if HAVE_UNISCRIBE
 HBCFLAGS += $(UNISCRIBE_CFLAGS)
-HBNONPCLIBS += $(UNISCRIBE_LIBS)
-HBSOURCES += $(HB_UNISCRIBE_sources)
-HBHEADERS += $(HB_UNISCRIBE_headers)
-endif
-
-if HAVE_DIRECTWRITE
-HBCFLAGS += $(DIRECTWRITE_CXXFLAGS)
-HBNONPCLIBS += $(DIRECTWRITE_LIBS)
-HBSOURCES += $(HB_DIRECTWRITE_sources)
-HBHEADERS += $(HB_DIRECTWRITE_headers)
+HBLIBS   += $(UNISCRIBE_LIBS)
+HBSOURCES += hb-uniscribe.cc
+HBHEADERS += hb-uniscribe.h
 endif
 
 if HAVE_CORETEXT
 HBCFLAGS += $(CORETEXT_CFLAGS)
-HBNONPCLIBS += $(CORETEXT_LIBS)
-HBSOURCES += $(HB_CORETEXT_sources)
-HBHEADERS += $(HB_CORETEXT_headers)
+HBLIBS   += $(CORETEXT_LIBS)
+HBSOURCES += hb-coretext.cc
+HBHEADERS += hb-coretext.h
 endif
 
 if HAVE_UCDN
 SUBDIRS += hb-ucdn
 HBCFLAGS += -I$(srcdir)/hb-ucdn
 HBLIBS   += hb-ucdn/libhb-ucdn.la
-HBSOURCES += $(HB_UCDN_sources)
+HBSOURCES += hb-ucdn.cc
 endif
 DIST_SUBDIRS += hb-ucdn
 
 
 # Put the library together
 
-HBLIBS += $(HBNONPCLIBS)
-
 if OS_WIN32
 export_symbols = -export-symbols harfbuzz.def
 harfbuzz_def_dependency = harfbuzz.def
@@ -129,59 +203,35 @@ pkgconfigdir = $(libdir)/pkgconfig
 pkgconfig_DATA = harfbuzz.pc
 EXTRA_DIST += harfbuzz.pc.in
 
-FUZZING_CPPFLAGS= \
-       -DHB_NDEBUG \
-       -DHB_MAX_NESTING_LEVEL=3 \
-       -DHB_SANITIZE_MAX_EDITS=3 \
-       -DHB_BUFFER_MAX_EXPANSION_FACTOR=3 \
-       -DHB_BUFFER_MAX_LEN_MIN=8 \
-       -DHB_BUFFER_MAX_LEN_DEFAULT=128 \
-       $(NULL)
-EXTRA_LTLIBRARIES = libharfbuzz-fuzzing.la
-libharfbuzz_fuzzing_la_LINK = $(libharfbuzz_la_LINK)
-libharfbuzz_fuzzing_la_SOURCES = $(libharfbuzz_la_SOURCES)
-libharfbuzz_fuzzing_la_CPPFLAGS = $(libharfbuzz_la_CPPFLAGS) $(FUZZING_CPPFLAGS)
-libharfbuzz_fuzzing_la_LDFLAGS = $(libharfbuzz_la_LDFLAGS)
-libharfbuzz_fuzzing_la_LIBADD = $(libharfbuzz_la_LIBADD)
-EXTRA_libharfbuzz_fuzzing_la_DEPENDENCIES = $(EXTRA_libharfbuzz_la_DEPENDENCIES)
-CLEANFILES += libharfbuzz-fuzzing.la
-
 if HAVE_ICU
-if HAVE_ICU_BUILTIN
-HBCFLAGS += $(ICU_CFLAGS)
-HBLIBS += $(ICU_LIBS)
-HBSOURCES += $(HB_ICU_sources)
-HBHEADERS += $(HB_ICU_headers)
-else
 lib_LTLIBRARIES += libharfbuzz-icu.la
-libharfbuzz_icu_la_SOURCES = $(HB_ICU_sources)
+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_headers)
+pkginclude_HEADERS += hb-icu.h
 pkgconfig_DATA += harfbuzz-icu.pc
 endif
-endif
 EXTRA_DIST += harfbuzz-icu.pc.in
 
 if HAVE_GOBJECT
 lib_LTLIBRARIES += libharfbuzz-gobject.la
-libharfbuzz_gobject_la_SOURCES = $(HB_GOBJECT_sources)
-nodist_libharfbuzz_gobject_la_SOURCES = $(HB_GOBJECT_ENUM_sources)
+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_headers)
-nodist_pkginclude_HEADERS += $(HB_GOBJECT_ENUM_headers)
+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_ENUM_sources) \
-       $(HB_GOBJECT_ENUM_headers) \
+       hb-gobject-enums.cc \
+       hb-gobject-enums.h \
        $(NULL)
 DISTCLEANFILES += \
-       $(HB_GOBJECT_ENUM_sources) \
-       $(HB_GOBJECT_ENUM_headers) \
+       hb-gobject-enums.cc \
+       hb-gobject-enums.h \
        $(NULL)
 hb-gobject-enums.%: hb-gobject-enums.%.tmpl $(HBHEADERS)
        $(AM_V_GEN) $(GLIB_MKENUMS) \
@@ -203,8 +253,6 @@ EXTRA_DIST += \
                -e 's@%exec_prefix%@$(exec_prefix)@g' \
                -e 's@%libdir%@$(libdir)@g' \
                -e 's@%includedir%@$(includedir)@g' \
-               -e 's@%libs_private%@$(HBNONPCLIBS)@g' \
-               -e 's@%requires_private%@$(HBDEPS)@g' \
                -e 's@%VERSION%@$(VERSION)@g' \
        "$<" > "$@" \
        || ($(RM) "$@"; false)
@@ -219,7 +267,7 @@ harfbuzz.def: $(HBHEADERS) $(HBNODISTHEADERS)
        $(EGREP) '^hb_.* \(' | \
        sed -e 's/ (.*//' | \
        LANG=C sort; \
-       echo LIBRARY libharfbuzz-0.dll; \
+       echo LIBRARY libharfbuzz-$(HB_VERSION_MAJOR).dll; \
        ) >"$@"
        @ ! grep -q hb_ERROR "$@" \
        || ($(RM) "$@"; false)
@@ -228,34 +276,29 @@ harfbuzz.def: $(HBHEADERS) $(HBNODISTHEADERS)
 GENERATORS = \
        gen-arabic-table.py \
        gen-indic-table.py \
-       gen-use-table.py \
        $(NULL)
 EXTRA_DIST += $(GENERATORS)
 
-unicode-tables: arabic-table indic-table use-table
-
-arabic-table: gen-arabic-table.py ArabicShaping.txt UnicodeData.txt Blocks.txt
-       $(AM_V_GEN) $(builddir)/$^ > hb-ot-shape-complex-arabic-table.hh \
-       || ($(RM) hb-ot-shape-complex-arabic-table.hh; false)
+unicode-tables: arabic-table indic-table
 
-indic-table: gen-indic-table.py IndicSyllabicCategory-7.0.0.txt IndicMatraCategory-7.0.0.txt Blocks.txt
+indic-table: gen-indic-table.py IndicSyllabicCategory.txt IndicMatraCategory.txt Blocks.txt
        $(AM_V_GEN) $(builddir)/$^ > hb-ot-shape-complex-indic-table.cc \
        || ($(RM) hb-ot-shape-complex-indic-table.cc; false)
 
-use-table: gen-use-table.py IndicSyllabicCategory.txt IndicPositionalCategory.txt UnicodeData.txt Blocks.txt
-       $(AM_V_GEN) $(builddir)/$^ > hb-ot-shape-complex-use-table.cc \
-       || ($(RM) hb-ot-shape-complex-use-table.cc; false)
+arabic-table: gen-arabic-table.py ArabicShaping.txt UnicodeData.txt Blocks.txt
+       $(AM_V_GEN) $(builddir)/$^ > hb-ot-shape-complex-arabic-table.hh \
+       || ($(RM) hb-ot-shape-complex-arabic-table.hh; false)
 
 built-sources: $(BUILT_SOURCES)
 
-.PHONY: unicode-tables arabic-table indic-table use-table built-sources
+.PHONY: unicode-tables arabic-table indic-table built-sources
 
 RAGEL_GENERATED = \
        $(srcdir)/hb-buffer-deserialize-json.hh \
        $(srcdir)/hb-buffer-deserialize-text.hh \
        $(srcdir)/hb-ot-shape-complex-indic-machine.hh \
        $(srcdir)/hb-ot-shape-complex-myanmar-machine.hh \
-       $(srcdir)/hb-ot-shape-complex-use-machine.hh \
+       $(srcdir)/hb-ot-shape-complex-sea-machine.hh \
        $(NULL)
 BUILT_SOURCES += $(RAGEL_GENERATED)
 EXTRA_DIST += \
@@ -263,7 +306,7 @@ EXTRA_DIST += \
        hb-buffer-deserialize-text.rl \
        hb-ot-shape-complex-indic-machine.rl \
        hb-ot-shape-complex-myanmar-machine.rl \
-       hb-ot-shape-complex-use-machine.rl \
+       hb-ot-shape-complex-sea-machine.rl \
        $(NULL)
 MAINTAINERCLEANFILES += $(RAGEL_GENERATED)
 $(srcdir)/%.hh: $(srcdir)/%.rl
@@ -309,14 +352,7 @@ dist_check_SCRIPTS = \
        check-symbols.sh \
        $(NULL)
 
-check_PROGRAMS = \
-       test-ot-tag \
-       $(NULL)
-test_ot_tag_SOURCES = hb-ot-tag.cc
-test_ot_tag_CPPFLAGS = $(HBCFLAGS) -DMAIN
-test_ot_tag_LDADD = libharfbuzz.la $(HBLIBS)
-
-TESTS = $(dist_check_SCRIPTS) $(check_PROGRAMS)
+TESTS = $(dist_check_SCRIPTS)
 TESTS_ENVIRONMENT = \
        srcdir="$(srcdir)" \
        MAKE="$(MAKE) $(AM_MAKEFLAGS)" \
@@ -327,7 +363,7 @@ TESTS_ENVIRONMENT = \
 if HAVE_INTROSPECTION
 
 -include $(INTROSPECTION_MAKEFILE)
-INTROSPECTION_GIRS = HarfBuzz-0.0.gir # What does the 0 mean anyway?!
+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)"
@@ -343,7 +379,6 @@ HarfBuzz_0_0_gir_CFLAGS = \
        -DHB_OT_H_IN \
        -DHB_GOBJECT_H \
        -DHB_GOBJECT_H_IN \
-       -DHB_EXTERN= \
        $(NULL)
 HarfBuzz_0_0_gir_LIBS = \
        libharfbuzz.la \
@@ -353,10 +388,10 @@ HarfBuzz_0_0_gir_FILES = \
        $(HBHEADERS) \
        $(HBNODISTHEADERS) \
        $(HBSOURCES) \
-       $(HB_GOBJECT_ENUM_sources) \
-       $(HB_GOBJECT_ENUM_headers) \
-       $(HB_GOBJECT_sources) \
-       $(HB_GOBJECT_STRUCTS_headers) \
+       hb-gobject-enums.cc \
+       hb-gobject-enums.h \
+       hb-gobject-structs.cc \
+       hb-gobject-structs.h \
        $(NULL)
 
 girdir = $(datadir)/gir-1.0
index 7094614..bd923e6 100644 (file)
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.14 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994-2013 Free Software Foundation, Inc.
@@ -83,80 +83,107 @@ PRE_UNINSTALL = :
 POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
-DIST_COMMON = $(srcdir)/Makefile.sources $(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
-@HAVE_OT_TRUE@am__append_1 = $(HB_OT_sources)
-@HAVE_OT_TRUE@am__append_2 = $(HB_OT_headers)
-@HAVE_FALLBACK_TRUE@am__append_3 = $(HB_FALLBACK_sources)
+@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-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-shape.cc \
+@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-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-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-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-fallback-private.hh \
+@HAVE_OT_TRUE@ hb-ot-shape-fallback.cc \
+@HAVE_OT_TRUE@ hb-ot-shape-private.hh \
+@HAVE_OT_TRUE@ $(NULL)
+
+@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-shape.h \
+@HAVE_OT_TRUE@ hb-ot-tag.h \
+@HAVE_OT_TRUE@ $(NULL)
+
+@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 = $(GLIB_DEPS)
-@HAVE_GLIB_TRUE@am__append_9 = $(HB_GLIB_sources)
-@HAVE_GLIB_TRUE@am__append_10 = $(HB_GLIB_headers)
-@HAVE_FREETYPE_TRUE@am__append_11 = $(FREETYPE_CFLAGS)
-@HAVE_FREETYPE_TRUE@am__append_12 = $(FREETYPE_LIBS)
-# XXX
-# The following creates a recursive dependency on FreeType if FreeType is
-# built with HarfBuzz support enabled.  Newer pkg-config handles that just
-# fine but pkg-config 0.26 as shipped in Ubuntu 14.04 crashes.  Remove
-# in a year or two, or otherwise work around it...
-#HBDEPS   += $(FREETYPE_DEPS)
-@HAVE_FREETYPE_TRUE@am__append_13 = $(HB_FT_sources)
-@HAVE_FREETYPE_TRUE@am__append_14 = $(HB_FT_headers)
-@HAVE_GRAPHITE2_TRUE@am__append_15 = $(GRAPHITE2_CFLAGS)
-@HAVE_GRAPHITE2_TRUE@am__append_16 = $(GRAPHITE2_LIBS)
-@HAVE_GRAPHITE2_TRUE@am__append_17 = $(GRAPHITE2_DEPS)
-@HAVE_GRAPHITE2_TRUE@am__append_18 = $(HB_GRAPHITE2_sources)
-@HAVE_GRAPHITE2_TRUE@am__append_19 = $(HB_GRAPHITE2_headers)
-@HAVE_UNISCRIBE_TRUE@am__append_20 = $(UNISCRIBE_CFLAGS)
-@HAVE_UNISCRIBE_TRUE@am__append_21 = $(UNISCRIBE_LIBS)
-@HAVE_UNISCRIBE_TRUE@am__append_22 = $(HB_UNISCRIBE_sources)
-@HAVE_UNISCRIBE_TRUE@am__append_23 = $(HB_UNISCRIBE_headers)
-@HAVE_DIRECTWRITE_TRUE@am__append_24 = $(DIRECTWRITE_CXXFLAGS)
-@HAVE_DIRECTWRITE_TRUE@am__append_25 = $(DIRECTWRITE_LIBS)
-@HAVE_DIRECTWRITE_TRUE@am__append_26 = $(HB_DIRECTWRITE_sources)
-@HAVE_DIRECTWRITE_TRUE@am__append_27 = $(HB_DIRECTWRITE_headers)
-@HAVE_CORETEXT_TRUE@am__append_28 = $(CORETEXT_CFLAGS)
-@HAVE_CORETEXT_TRUE@am__append_29 = $(CORETEXT_LIBS)
-@HAVE_CORETEXT_TRUE@am__append_30 = $(HB_CORETEXT_sources)
-@HAVE_CORETEXT_TRUE@am__append_31 = $(HB_CORETEXT_headers)
-@HAVE_UCDN_TRUE@am__append_32 = hb-ucdn
-@HAVE_UCDN_TRUE@am__append_33 = -I$(srcdir)/hb-ucdn
-@HAVE_UCDN_TRUE@am__append_34 = hb-ucdn/libhb-ucdn.la
-@HAVE_UCDN_TRUE@am__append_35 = $(HB_UCDN_sources)
-@HAVE_ICU_BUILTIN_TRUE@@HAVE_ICU_TRUE@am__append_36 = $(ICU_CFLAGS)
-@HAVE_ICU_BUILTIN_TRUE@@HAVE_ICU_TRUE@am__append_37 = $(ICU_LIBS)
-@HAVE_ICU_BUILTIN_TRUE@@HAVE_ICU_TRUE@am__append_38 = $(HB_ICU_sources)
-@HAVE_ICU_BUILTIN_TRUE@@HAVE_ICU_TRUE@am__append_39 = $(HB_ICU_headers)
-@HAVE_ICU_BUILTIN_FALSE@@HAVE_ICU_TRUE@am__append_40 = libharfbuzz-icu.la
-@HAVE_ICU_BUILTIN_FALSE@@HAVE_ICU_TRUE@am__append_41 = $(HB_ICU_headers)
-@HAVE_ICU_BUILTIN_FALSE@@HAVE_ICU_TRUE@am__append_42 = harfbuzz-icu.pc
-@HAVE_GOBJECT_TRUE@am__append_43 = libharfbuzz-gobject.la
-@HAVE_GOBJECT_TRUE@am__append_44 = $(HB_GOBJECT_headers)
-@HAVE_GOBJECT_TRUE@am__append_45 = $(HB_GOBJECT_ENUM_headers)
-@HAVE_GOBJECT_TRUE@am__append_46 = harfbuzz-gobject.pc
-@HAVE_GOBJECT_TRUE@am__append_47 = \
-@HAVE_GOBJECT_TRUE@    $(HB_GOBJECT_ENUM_sources) \
-@HAVE_GOBJECT_TRUE@    $(HB_GOBJECT_ENUM_headers) \
+@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_48 = \
-@HAVE_GOBJECT_TRUE@    $(HB_GOBJECT_ENUM_sources) \
-@HAVE_GOBJECT_TRUE@    $(HB_GOBJECT_ENUM_headers) \
+@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) \
        test-buffer-serialize$(EXEEXT) test-size-params$(EXEEXT) \
        test-would-substitute$(EXEEXT) $(am__EXEEXT_1)
 bin_PROGRAMS =
-check_PROGRAMS = test-ot-tag$(EXEEXT) $(am__EXEEXT_1)
-TESTS = $(am__EXEEXT_2) $(check_PROGRAMS)
-@HAVE_INTROSPECTION_TRUE@am__append_49 = $(gir_DATA) $(typelib_DATA)
+TESTS = $(am__EXEEXT_2)
+@HAVE_INTROSPECTION_TRUE@am__append_39 = $(gir_DATA) $(typelib_DATA)
 subdir = src
+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 \
        $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/libtool.m4 \
@@ -202,151 +229,12 @@ am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" \
        "$(DESTDIR)$(pkgincludedir)"
 LTLIBRARIES = $(lib_LTLIBRARIES)
 am__DEPENDENCIES_1 =
-@HAVE_GLIB_TRUE@am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1)
-@HAVE_FREETYPE_TRUE@am__DEPENDENCIES_3 = $(am__DEPENDENCIES_1)
-@HAVE_GRAPHITE2_TRUE@am__DEPENDENCIES_4 = $(am__DEPENDENCIES_1)
-@HAVE_PTHREAD_TRUE@am__DEPENDENCIES_5 = $(am__DEPENDENCIES_1)
-@HAVE_UNISCRIBE_TRUE@am__DEPENDENCIES_6 = $(am__DEPENDENCIES_1)
-@HAVE_DIRECTWRITE_TRUE@am__DEPENDENCIES_7 = $(am__DEPENDENCIES_1)
-@HAVE_CORETEXT_TRUE@am__DEPENDENCIES_8 = $(am__DEPENDENCIES_1)
-am__DEPENDENCIES_9 = $(am__DEPENDENCIES_5) $(am__DEPENDENCIES_6) \
-       $(am__DEPENDENCIES_7) $(am__DEPENDENCIES_8)
-@HAVE_ICU_BUILTIN_TRUE@@HAVE_ICU_TRUE@am__DEPENDENCIES_10 =  \
-@HAVE_ICU_BUILTIN_TRUE@@HAVE_ICU_TRUE@ $(am__DEPENDENCIES_1)
-am__DEPENDENCIES_11 = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_3) \
-       $(am__DEPENDENCIES_4) $(am__append_34) $(am__DEPENDENCIES_9) \
-       $(am__DEPENDENCIES_10)
-am__DEPENDENCIES_12 = $(am__DEPENDENCIES_11)
-libharfbuzz_fuzzing_la_DEPENDENCIES = $(am__DEPENDENCIES_12)
-am__libharfbuzz_fuzzing_la_SOURCES_DIST = 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-glyf-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-os2-table.hh hb-ot-post-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-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-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-private.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-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-table.cc \
-       hb-ot-shape-complex-myanmar.cc \
-       hb-ot-shape-complex-myanmar-machine.hh \
-       hb-ot-shape-complex-thai.cc hb-ot-shape-complex-tibetan.cc \
-       hb-ot-shape-complex-use.cc hb-ot-shape-complex-use-machine.hh \
-       hb-ot-shape-complex-use-private.hh \
-       hb-ot-shape-complex-use-table.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-fallback-shape.cc hb-glib.cc \
-       hb-ft.cc hb-graphite2.cc hb-uniscribe.cc hb-directwrite.cc \
-       hb-coretext.cc hb-ucdn.cc hb-icu.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-directwrite.h hb-coretext.h \
-       hb-icu.h hb-version.h
-am__objects_1 =
-am__objects_2 = libharfbuzz_fuzzing_la-hb-blob.lo \
-       libharfbuzz_fuzzing_la-hb-buffer-serialize.lo \
-       libharfbuzz_fuzzing_la-hb-buffer.lo \
-       libharfbuzz_fuzzing_la-hb-common.lo \
-       libharfbuzz_fuzzing_la-hb-face.lo \
-       libharfbuzz_fuzzing_la-hb-font.lo \
-       libharfbuzz_fuzzing_la-hb-ot-tag.lo \
-       libharfbuzz_fuzzing_la-hb-set.lo \
-       libharfbuzz_fuzzing_la-hb-shape.lo \
-       libharfbuzz_fuzzing_la-hb-shape-plan.lo \
-       libharfbuzz_fuzzing_la-hb-shaper.lo \
-       libharfbuzz_fuzzing_la-hb-unicode.lo \
-       libharfbuzz_fuzzing_la-hb-warning.lo $(am__objects_1)
-am__objects_3 = libharfbuzz_fuzzing_la-hb-ot-font.lo \
-       libharfbuzz_fuzzing_la-hb-ot-layout.lo \
-       libharfbuzz_fuzzing_la-hb-ot-map.lo \
-       libharfbuzz_fuzzing_la-hb-ot-shape.lo \
-       libharfbuzz_fuzzing_la-hb-ot-shape-complex-arabic.lo \
-       libharfbuzz_fuzzing_la-hb-ot-shape-complex-default.lo \
-       libharfbuzz_fuzzing_la-hb-ot-shape-complex-hangul.lo \
-       libharfbuzz_fuzzing_la-hb-ot-shape-complex-hebrew.lo \
-       libharfbuzz_fuzzing_la-hb-ot-shape-complex-indic.lo \
-       libharfbuzz_fuzzing_la-hb-ot-shape-complex-indic-table.lo \
-       libharfbuzz_fuzzing_la-hb-ot-shape-complex-myanmar.lo \
-       libharfbuzz_fuzzing_la-hb-ot-shape-complex-thai.lo \
-       libharfbuzz_fuzzing_la-hb-ot-shape-complex-tibetan.lo \
-       libharfbuzz_fuzzing_la-hb-ot-shape-complex-use.lo \
-       libharfbuzz_fuzzing_la-hb-ot-shape-complex-use-table.lo \
-       libharfbuzz_fuzzing_la-hb-ot-shape-normalize.lo \
-       libharfbuzz_fuzzing_la-hb-ot-shape-fallback.lo \
-       $(am__objects_1)
-@HAVE_OT_TRUE@am__objects_4 = $(am__objects_3)
-am__objects_5 = libharfbuzz_fuzzing_la-hb-fallback-shape.lo
-@HAVE_FALLBACK_TRUE@am__objects_6 = $(am__objects_5)
-am__objects_7 = libharfbuzz_fuzzing_la-hb-glib.lo
-@HAVE_GLIB_TRUE@am__objects_8 = $(am__objects_7)
-am__objects_9 = libharfbuzz_fuzzing_la-hb-ft.lo
-@HAVE_FREETYPE_TRUE@am__objects_10 = $(am__objects_9)
-am__objects_11 = libharfbuzz_fuzzing_la-hb-graphite2.lo
-@HAVE_GRAPHITE2_TRUE@am__objects_12 = $(am__objects_11)
-am__objects_13 = libharfbuzz_fuzzing_la-hb-uniscribe.lo
-@HAVE_UNISCRIBE_TRUE@am__objects_14 = $(am__objects_13)
-am__objects_15 = libharfbuzz_fuzzing_la-hb-directwrite.lo
-@HAVE_DIRECTWRITE_TRUE@am__objects_16 = $(am__objects_15)
-am__objects_17 = libharfbuzz_fuzzing_la-hb-coretext.lo
-@HAVE_CORETEXT_TRUE@am__objects_18 = $(am__objects_17)
-am__objects_19 = libharfbuzz_fuzzing_la-hb-ucdn.lo
-@HAVE_UCDN_TRUE@am__objects_20 = $(am__objects_19)
-am__objects_21 = libharfbuzz_fuzzing_la-hb-icu.lo
-@HAVE_ICU_BUILTIN_TRUE@@HAVE_ICU_TRUE@am__objects_22 =  \
-@HAVE_ICU_BUILTIN_TRUE@@HAVE_ICU_TRUE@ $(am__objects_21)
-am__objects_23 = $(am__objects_2) $(am__objects_4) $(am__objects_6) \
-       $(am__objects_8) $(am__objects_10) $(am__objects_12) \
-       $(am__objects_14) $(am__objects_16) $(am__objects_18) \
-       $(am__objects_20) $(am__objects_22)
-am__objects_24 = $(am__objects_1)
-@HAVE_OT_TRUE@am__objects_25 = $(am__objects_24)
-@HAVE_GLIB_TRUE@am__objects_26 = $(am__objects_1)
-@HAVE_FREETYPE_TRUE@am__objects_27 = $(am__objects_1)
-@HAVE_GRAPHITE2_TRUE@am__objects_28 = $(am__objects_1)
-@HAVE_UNISCRIBE_TRUE@am__objects_29 = $(am__objects_1)
-@HAVE_DIRECTWRITE_TRUE@am__objects_30 = $(am__objects_1)
-@HAVE_CORETEXT_TRUE@am__objects_31 = $(am__objects_1)
-@HAVE_ICU_BUILTIN_TRUE@@HAVE_ICU_TRUE@am__objects_32 =  \
-@HAVE_ICU_BUILTIN_TRUE@@HAVE_ICU_TRUE@ $(am__objects_1)
-am__objects_33 = $(am__objects_24) $(am__objects_25) $(am__objects_26) \
-       $(am__objects_27) $(am__objects_28) $(am__objects_29) \
-       $(am__objects_30) $(am__objects_31) $(am__objects_32)
-am__objects_34 = $(am__objects_24)
-am__objects_35 = $(am__objects_23) $(am__objects_33) $(am__objects_34)
-am_libharfbuzz_fuzzing_la_OBJECTS = $(am__objects_35)
-libharfbuzz_fuzzing_la_OBJECTS = $(am_libharfbuzz_fuzzing_la_OBJECTS)
 @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
-am__objects_36 = libharfbuzz_gobject_la-hb-gobject-structs.lo
-@HAVE_GOBJECT_TRUE@am_libharfbuzz_gobject_la_OBJECTS =  \
-@HAVE_GOBJECT_TRUE@    $(am__objects_36)
-am__objects_37 = libharfbuzz_gobject_la-hb-gobject-enums.lo
+@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@    $(am__objects_37)
+@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@)
@@ -358,21 +246,27 @@ libharfbuzz_gobject_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_CXXFLAGS) $(CXXFLAGS) $(libharfbuzz_gobject_la_LDFLAGS) \
        $(LDFLAGS) -o $@
 @HAVE_GOBJECT_TRUE@am_libharfbuzz_gobject_la_rpath = -rpath $(libdir)
-@HAVE_ICU_BUILTIN_FALSE@@HAVE_ICU_TRUE@libharfbuzz_icu_la_DEPENDENCIES =  \
-@HAVE_ICU_BUILTIN_FALSE@@HAVE_ICU_TRUE@        $(am__DEPENDENCIES_1) \
-@HAVE_ICU_BUILTIN_FALSE@@HAVE_ICU_TRUE@        libharfbuzz.la
+@HAVE_ICU_TRUE@libharfbuzz_icu_la_DEPENDENCIES =  \
+@HAVE_ICU_TRUE@        $(am__DEPENDENCIES_1) libharfbuzz.la
 am__libharfbuzz_icu_la_SOURCES_DIST = hb-icu.cc
-am__objects_38 = libharfbuzz_icu_la-hb-icu.lo
-@HAVE_ICU_BUILTIN_FALSE@@HAVE_ICU_TRUE@am_libharfbuzz_icu_la_OBJECTS =  \
-@HAVE_ICU_BUILTIN_FALSE@@HAVE_ICU_TRUE@        $(am__objects_38)
+@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_BUILTIN_FALSE@@HAVE_ICU_TRUE@am_libharfbuzz_icu_la_rpath =  \
-@HAVE_ICU_BUILTIN_FALSE@@HAVE_ICU_TRUE@        -rpath $(libdir)
-libharfbuzz_la_DEPENDENCIES = $(am__DEPENDENCIES_11)
+@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_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_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 \
        hb-buffer-deserialize-json.hh hb-buffer-deserialize-text.hh \
        hb-buffer-private.hh hb-buffer-serialize.cc hb-buffer.cc \
@@ -380,9 +274,8 @@ am__libharfbuzz_la_SOURCES_DIST = hb-atomic-private.hh hb-blob.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-glyf-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-os2-table.hh hb-ot-post-table.hh hb-ot-tag.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 \
@@ -394,7 +287,6 @@ am__libharfbuzz_la_SOURCES_DIST = hb-atomic-private.hh hb-blob.cc \
        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-private.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-hangul.cc \
@@ -404,98 +296,86 @@ am__libharfbuzz_la_SOURCES_DIST = hb-atomic-private.hh hb-blob.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-use.cc hb-ot-shape-complex-use-machine.hh \
-       hb-ot-shape-complex-use-private.hh \
-       hb-ot-shape-complex-use-table.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-fallback-shape.cc hb-glib.cc \
-       hb-ft.cc hb-graphite2.cc hb-uniscribe.cc hb-directwrite.cc \
-       hb-coretext.cc hb-ucdn.cc hb-icu.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-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-directwrite.h hb-coretext.h \
-       hb-icu.h hb-version.h
-am__objects_39 = libharfbuzz_la-hb-blob.lo \
+       hb-graphite2.h hb-uniscribe.h hb-coretext.h hb-version.h
+am__objects_1 =
+@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-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-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-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_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-shaper.lo libharfbuzz_la-hb-unicode.lo \
-       libharfbuzz_la-hb-warning.lo $(am__objects_1)
-am__objects_40 = libharfbuzz_la-hb-ot-font.lo \
-       libharfbuzz_la-hb-ot-layout.lo libharfbuzz_la-hb-ot-map.lo \
-       libharfbuzz_la-hb-ot-shape.lo \
-       libharfbuzz_la-hb-ot-shape-complex-arabic.lo \
-       libharfbuzz_la-hb-ot-shape-complex-default.lo \
-       libharfbuzz_la-hb-ot-shape-complex-hangul.lo \
-       libharfbuzz_la-hb-ot-shape-complex-hebrew.lo \
-       libharfbuzz_la-hb-ot-shape-complex-indic.lo \
-       libharfbuzz_la-hb-ot-shape-complex-indic-table.lo \
-       libharfbuzz_la-hb-ot-shape-complex-myanmar.lo \
-       libharfbuzz_la-hb-ot-shape-complex-thai.lo \
-       libharfbuzz_la-hb-ot-shape-complex-tibetan.lo \
-       libharfbuzz_la-hb-ot-shape-complex-use.lo \
-       libharfbuzz_la-hb-ot-shape-complex-use-table.lo \
-       libharfbuzz_la-hb-ot-shape-normalize.lo \
-       libharfbuzz_la-hb-ot-shape-fallback.lo $(am__objects_1)
-@HAVE_OT_TRUE@am__objects_41 = $(am__objects_40)
-am__objects_42 = libharfbuzz_la-hb-fallback-shape.lo
-@HAVE_FALLBACK_TRUE@am__objects_43 = $(am__objects_42)
-am__objects_44 = libharfbuzz_la-hb-glib.lo
-@HAVE_GLIB_TRUE@am__objects_45 = $(am__objects_44)
-am__objects_46 = libharfbuzz_la-hb-ft.lo
-@HAVE_FREETYPE_TRUE@am__objects_47 = $(am__objects_46)
-am__objects_48 = libharfbuzz_la-hb-graphite2.lo
-@HAVE_GRAPHITE2_TRUE@am__objects_49 = $(am__objects_48)
-am__objects_50 = libharfbuzz_la-hb-uniscribe.lo
-@HAVE_UNISCRIBE_TRUE@am__objects_51 = $(am__objects_50)
-am__objects_52 = libharfbuzz_la-hb-directwrite.lo
-@HAVE_DIRECTWRITE_TRUE@am__objects_53 = $(am__objects_52)
-am__objects_54 = libharfbuzz_la-hb-coretext.lo
-@HAVE_CORETEXT_TRUE@am__objects_55 = $(am__objects_54)
-am__objects_56 = libharfbuzz_la-hb-ucdn.lo
-@HAVE_UCDN_TRUE@am__objects_57 = $(am__objects_56)
-am__objects_58 = libharfbuzz_la-hb-icu.lo
-@HAVE_ICU_BUILTIN_TRUE@@HAVE_ICU_TRUE@am__objects_59 =  \
-@HAVE_ICU_BUILTIN_TRUE@@HAVE_ICU_TRUE@ $(am__objects_58)
-am__objects_60 = $(am__objects_39) $(am__objects_41) $(am__objects_43) \
-       $(am__objects_45) $(am__objects_47) $(am__objects_49) \
-       $(am__objects_51) $(am__objects_53) $(am__objects_55) \
-       $(am__objects_57) $(am__objects_59)
-am_libharfbuzz_la_OBJECTS = $(am__objects_60) $(am__objects_33) \
-       $(am__objects_34)
+       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_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)
-main_DEPENDENCIES = libharfbuzz.la $(am__DEPENDENCIES_11)
+main_DEPENDENCIES = libharfbuzz.la $(am__DEPENDENCIES_8)
 am_test_OBJECTS = test-test.$(OBJEXT)
 test_OBJECTS = $(am_test_OBJECTS)
-test_DEPENDENCIES = libharfbuzz.la $(am__DEPENDENCIES_11) \
+test_DEPENDENCIES = libharfbuzz.la $(am__DEPENDENCIES_8) \
        $(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_11)
-am_test_ot_tag_OBJECTS = test_ot_tag-hb-ot-tag.$(OBJEXT)
-test_ot_tag_OBJECTS = $(am_test_ot_tag_OBJECTS)
-test_ot_tag_DEPENDENCIES = libharfbuzz.la $(am__DEPENDENCIES_11)
+       $(am__DEPENDENCIES_8)
 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_11)
+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__DEPENDENCIES_11) $(am__DEPENDENCIES_1)
+       $(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
@@ -548,20 +428,17 @@ 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_1 = 
-SOURCES = $(libharfbuzz_fuzzing_la_SOURCES) \
-       $(libharfbuzz_gobject_la_SOURCES) \
+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_ot_tag_SOURCES) \
-       $(test_size_params_SOURCES) $(test_would_substitute_SOURCES)
-DIST_SOURCES = $(am__libharfbuzz_fuzzing_la_SOURCES_DIST) \
-       $(am__libharfbuzz_gobject_la_SOURCES_DIST) \
+       $(test_buffer_serialize_SOURCES) $(test_size_params_SOURCES) \
+       $(test_would_substitute_SOURCES)
+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_ot_tag_SOURCES) $(test_size_params_SOURCES) \
-       $(test_would_substitute_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 \
@@ -580,8 +457,8 @@ am__pkginclude_HEADERS_DIST = 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-directwrite.h hb-coretext.h \
-       hb-icu.h hb-gobject.h hb-gobject-structs.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
@@ -841,8 +718,6 @@ CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
-DIRECTWRITE_CXXFLAGS = @DIRECTWRITE_CXXFLAGS@
-DIRECTWRITE_LIBS = @DIRECTWRITE_LIBS@
 DLLTOOL = @DLLTOOL@
 DSYMUTIL = @DSYMUTIL@
 DUMPBIN = @DUMPBIN@
@@ -852,20 +727,15 @@ ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
 FGREP = @FGREP@
-FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@
-FONTCONFIG_LIBS = @FONTCONFIG_LIBS@
 FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
-FREETYPE_DEPS = @FREETYPE_DEPS@
 FREETYPE_LIBS = @FREETYPE_LIBS@
 GIT = @GIT@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_DEPS = @GLIB_DEPS@
 GLIB_LIBS = @GLIB_LIBS@
 GLIB_MKENUMS = @GLIB_MKENUMS@
 GOBJECT_CFLAGS = @GOBJECT_CFLAGS@
 GOBJECT_LIBS = @GOBJECT_LIBS@
 GRAPHITE2_CFLAGS = @GRAPHITE2_CFLAGS@
-GRAPHITE2_DEPS = @GRAPHITE2_DEPS@
 GRAPHITE2_LIBS = @GRAPHITE2_LIBS@
 GREP = @GREP@
 GTKDOC_CHECK = @GTKDOC_CHECK@
@@ -988,183 +858,55 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-SUBDIRS = $(am__append_32)
+NULL = 
+SUBDIRS = $(am__append_26)
 DIST_SUBDIRS = hb-ucdn
-BUILT_SOURCES = $(am__append_47) $(RAGEL_GENERATED)
+BUILT_SOURCES = $(am__append_37) $(RAGEL_GENERATED)
 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-use-machine.rl $(NULL)
-CLEANFILES = libharfbuzz-fuzzing.la $(pkgconfig_DATA) harfbuzz.def \
-       $(am__append_49)
-DISTCLEANFILES = $(am__append_48)
+       hb-ot-shape-complex-sea-machine.rl $(NULL)
+CLEANFILES = $(pkgconfig_DATA) harfbuzz.def $(am__append_39)
+DISTCLEANFILES = $(am__append_38)
 MAINTAINERCLEANFILES = $(RAGEL_GENERATED)
 DISTCHECK_CONFIGURE_FLAGS = --enable-introspection
-lib_LTLIBRARIES = libharfbuzz.la $(am__append_40) $(am__append_43)
-NULL = 
-
-# Base and default-included sources and headers
-HB_BASE_sources = \
-       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-glyf-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-os2-table.hh \
-       hb-ot-post-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-unicode-private.hh \
-       hb-unicode.cc \
-       hb-utf-private.hh \
-       hb-warning.cc \
-       $(NULL)
-
-HB_BASE_headers = \
-       hb.h \
-       hb-blob.h \
-       hb-buffer.h \
-       hb-common.h \
-       hb-deprecated.h \
-       hb-face.h \
-       hb-font.h \
-       hb-set.h \
-       hb-shape.h \
-       hb-shape-plan.h \
-       hb-unicode.h \
-       $(NULL)
-
-HB_NODIST_headers = \
+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-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)
 
-HB_FALLBACK_sources = hb-fallback-shape.cc
-HB_OT_sources = \
-       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-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-private.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-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-table.cc \
-       hb-ot-shape-complex-myanmar.cc \
-       hb-ot-shape-complex-myanmar-machine.hh \
-       hb-ot-shape-complex-thai.cc \
-       hb-ot-shape-complex-tibetan.cc \
-       hb-ot-shape-complex-use.cc \
-       hb-ot-shape-complex-use-machine.hh \
-       hb-ot-shape-complex-use-private.hh \
-       hb-ot-shape-complex-use-table.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 \
-       $(NULL)
-
-HB_OT_headers = \
-       hb-ot.h \
-       hb-ot-font.h \
-       hb-ot-layout.h \
-       hb-ot-shape.h \
-       hb-ot-tag.h \
-       $(NULL)
-
-
-# Optional Sources and Headers with external deps
-HB_FT_sources = hb-ft.cc
-HB_FT_headers = hb-ft.h
-HB_GLIB_sources = hb-glib.cc
-HB_GLIB_headers = hb-glib.h
-HB_GRAPHITE2_sources = hb-graphite2.cc
-HB_GRAPHITE2_headers = hb-graphite2.h
-
-# System-dependent sources and headers
-HB_CORETEXT_sources = hb-coretext.cc
-HB_CORETEXT_headers = hb-coretext.h
-HB_DIRECTWRITE_sources = hb-directwrite.cc
-HB_DIRECTWRITE_headers = hb-directwrite.h
-HB_UNISCRIBE_sources = hb-uniscribe.cc
-HB_UNISCRIBE_headers = hb-uniscribe.h
-
-# Additional supplemental sources
-HB_UCDN_sources = hb-ucdn.cc
-
-# Sources for libharfbuzz-gobject and libharfbuzz-icu
-HB_ICU_sources = hb-icu.cc
-HB_ICU_headers = hb-icu.h
-HB_GOBJECT_sources = hb-gobject-structs.cc
-HB_GOBJECT_STRUCTS_headers = hb-gobject-structs.h
-HB_GOBJECT_headers = hb-gobject.h $(HB_GOBJECT_STRUCTS_headers)
-HB_GOBJECT_ENUM_sources = hb-gobject-enums.cc
-HB_GOBJECT_ENUM_headers = hb-gobject-enums.h
-HBCFLAGS = $(am__append_4) $(am__append_6) $(am__append_11) \
-       $(am__append_15) $(am__append_20) $(am__append_24) \
-       $(am__append_28) $(am__append_33) $(am__append_36)
 
 # Put the library together
-HBLIBS = $(am__append_7) $(am__append_12) $(am__append_16) \
-       $(am__append_34) $(HBNONPCLIBS) $(am__append_37)
-HBNONPCLIBS = $(am__append_5) $(am__append_21) $(am__append_25) \
-       $(am__append_29)
-HBDEPS = $(am__append_8) $(am__append_17)
-HBSOURCES = $(HB_BASE_sources) $(am__append_1) $(am__append_3) \
-       $(am__append_9) $(am__append_13) $(am__append_18) \
-       $(am__append_22) $(am__append_26) $(am__append_30) \
-       $(am__append_35) $(am__append_38)
-HBHEADERS = $(HB_BASE_headers) $(am__append_2) $(am__append_10) \
-       $(am__append_14) $(am__append_19) $(am__append_23) \
-       $(am__append_27) $(am__append_31) $(am__append_39)
-HBNODISTHEADERS = $(HB_NODIST_headers)
 @OS_WIN32_TRUE@export_symbols = -export-symbols harfbuzz.def
 @OS_WIN32_TRUE@harfbuzz_def_dependency = harfbuzz.def
 @HAVE_GCC_FALSE@@OS_WIN32_FALSE@libharfbuzz_la_LINK = $(CXXLINK) $(libharfbuzz_la_LDFLAGS)
@@ -1176,39 +918,22 @@ 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) $(am__append_41) $(am__append_44)
-nodist_pkginclude_HEADERS = $(HBNODISTHEADERS) $(am__append_45)
+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_42) $(am__append_46)
-FUZZING_CPPFLAGS = \
-       -DHB_NDEBUG \
-       -DHB_MAX_NESTING_LEVEL=3 \
-       -DHB_SANITIZE_MAX_EDITS=3 \
-       -DHB_BUFFER_MAX_EXPANSION_FACTOR=3 \
-       -DHB_BUFFER_MAX_LEN_MIN=8 \
-       -DHB_BUFFER_MAX_LEN_DEFAULT=128 \
-       $(NULL)
-
-EXTRA_LTLIBRARIES = libharfbuzz-fuzzing.la
-libharfbuzz_fuzzing_la_LINK = $(libharfbuzz_la_LINK)
-libharfbuzz_fuzzing_la_SOURCES = $(libharfbuzz_la_SOURCES)
-libharfbuzz_fuzzing_la_CPPFLAGS = $(libharfbuzz_la_CPPFLAGS) $(FUZZING_CPPFLAGS)
-libharfbuzz_fuzzing_la_LDFLAGS = $(libharfbuzz_la_LDFLAGS)
-libharfbuzz_fuzzing_la_LIBADD = $(libharfbuzz_la_LIBADD)
-EXTRA_libharfbuzz_fuzzing_la_DEPENDENCIES = $(EXTRA_libharfbuzz_la_DEPENDENCIES)
-@HAVE_ICU_BUILTIN_FALSE@@HAVE_ICU_TRUE@libharfbuzz_icu_la_SOURCES = $(HB_ICU_sources)
-@HAVE_ICU_BUILTIN_FALSE@@HAVE_ICU_TRUE@libharfbuzz_icu_la_CPPFLAGS = $(ICU_CFLAGS)
-@HAVE_ICU_BUILTIN_FALSE@@HAVE_ICU_TRUE@libharfbuzz_icu_la_LDFLAGS = $(AM_LDFLAGS) -version-info $(HB_LIBTOOL_VERSION_INFO) -no-undefined
-@HAVE_ICU_BUILTIN_FALSE@@HAVE_ICU_TRUE@libharfbuzz_icu_la_LIBADD = $(ICU_LIBS) libharfbuzz.la
-@HAVE_GOBJECT_TRUE@libharfbuzz_gobject_la_SOURCES = $(HB_GOBJECT_sources)
-@HAVE_GOBJECT_TRUE@nodist_libharfbuzz_gobject_la_SOURCES = $(HB_GOBJECT_ENUM_sources)
+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 \
-       gen-use-table.py \
        $(NULL)
 
 RAGEL_GENERATED = \
@@ -1216,7 +941,7 @@ RAGEL_GENERATED = \
        $(srcdir)/hb-buffer-deserialize-text.hh \
        $(srcdir)/hb-ot-shape-complex-indic-machine.hh \
        $(srcdir)/hb-ot-shape-complex-myanmar-machine.hh \
-       $(srcdir)/hb-ot-shape-complex-use-machine.hh \
+       $(srcdir)/hb-ot-shape-complex-sea-machine.hh \
        $(NULL)
 
 main_SOURCES = main.cc
@@ -1244,9 +969,6 @@ dist_check_SCRIPTS = \
        check-symbols.sh \
        $(NULL)
 
-test_ot_tag_SOURCES = hb-ot-tag.cc
-test_ot_tag_CPPFLAGS = $(HBCFLAGS) -DMAIN
-test_ot_tag_LDADD = libharfbuzz.la $(HBLIBS)
 TESTS_ENVIRONMENT = \
        srcdir="$(srcdir)" \
        MAKE="$(MAKE) $(AM_MAKEFLAGS)" \
@@ -1254,7 +976,7 @@ TESTS_ENVIRONMENT = \
        HBHEADERS="$(HBHEADERS) $(HBNODISTHEADERS)" \
        $(NULL)
 
-@HAVE_INTROSPECTION_TRUE@INTROSPECTION_GIRS = HarfBuzz-0.0.gir # What does the 0 mean anyway?!
+@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)"
@@ -1268,7 +990,6 @@ TESTS_ENVIRONMENT = \
 @HAVE_INTROSPECTION_TRUE@      -DHB_OT_H_IN \
 @HAVE_INTROSPECTION_TRUE@      -DHB_GOBJECT_H \
 @HAVE_INTROSPECTION_TRUE@      -DHB_GOBJECT_H_IN \
-@HAVE_INTROSPECTION_TRUE@      -DHB_EXTERN= \
 @HAVE_INTROSPECTION_TRUE@      $(NULL)
 
 @HAVE_INTROSPECTION_TRUE@HarfBuzz_0_0_gir_LIBS = \
@@ -1280,10 +1001,10 @@ TESTS_ENVIRONMENT = \
 @HAVE_INTROSPECTION_TRUE@      $(HBHEADERS) \
 @HAVE_INTROSPECTION_TRUE@      $(HBNODISTHEADERS) \
 @HAVE_INTROSPECTION_TRUE@      $(HBSOURCES) \
-@HAVE_INTROSPECTION_TRUE@      $(HB_GOBJECT_ENUM_sources) \
-@HAVE_INTROSPECTION_TRUE@      $(HB_GOBJECT_ENUM_headers) \
-@HAVE_INTROSPECTION_TRUE@      $(HB_GOBJECT_sources) \
-@HAVE_INTROSPECTION_TRUE@      $(HB_GOBJECT_STRUCTS_headers) \
+@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
@@ -1295,7 +1016,7 @@ all: $(BUILT_SOURCES)
 
 .SUFFIXES:
 .SUFFIXES: .cc .lo .log .o .obj .test .test$(EXEEXT) .trs
-$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am $(srcdir)/Makefile.sources $(am__configure_deps)
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
        @for dep in $?; do \
          case '$(am__configure_deps)' in \
            *$$dep*) \
@@ -1316,7 +1037,6 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
            echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
            cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
        esac;
-$(srcdir)/Makefile.sources:
 
 $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
        cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
@@ -1364,9 +1084,6 @@ clean-libLTLIBRARIES:
          rm -f $${locs}; \
        }
 
-libharfbuzz-fuzzing.la: $(libharfbuzz_fuzzing_la_OBJECTS) $(libharfbuzz_fuzzing_la_DEPENDENCIES) $(EXTRA_libharfbuzz_fuzzing_la_DEPENDENCIES) 
-       $(AM_V_GEN)$(libharfbuzz_fuzzing_la_LINK)  $(libharfbuzz_fuzzing_la_OBJECTS) $(libharfbuzz_fuzzing_la_LIBADD) $(LIBS)
-
 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)
 
@@ -1441,15 +1158,6 @@ installcheck-binPROGRAMS: $(bin_PROGRAMS)
          done; \
        done; rm -f c$${pid}_.???; exit $$bad
 
-clean-checkPROGRAMS:
-       @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
-       echo " rm -f" $$list; \
-       rm -f $$list || exit $$?; \
-       test -n "$(EXEEXT)" || exit 0; \
-       list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
-       echo " rm -f" $$list; \
-       rm -f $$list
-
 clean-noinstPROGRAMS:
        @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
        echo " rm -f" $$list; \
@@ -1471,10 +1179,6 @@ test-buffer-serialize$(EXEEXT): $(test_buffer_serialize_OBJECTS) $(test_buffer_s
        @rm -f test-buffer-serialize$(EXEEXT)
        $(AM_V_CXXLD)$(CXXLINK) $(test_buffer_serialize_OBJECTS) $(test_buffer_serialize_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_CXXLD)$(CXXLINK) $(test_ot_tag_OBJECTS) $(test_ot_tag_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)
@@ -1489,45 +1193,6 @@ mostlyclean-compile:
 distclean-compile:
        -rm -f *.tab.c
 
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_fuzzing_la-hb-blob.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_fuzzing_la-hb-buffer-serialize.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_fuzzing_la-hb-buffer.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_fuzzing_la-hb-common.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_fuzzing_la-hb-coretext.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_fuzzing_la-hb-directwrite.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_fuzzing_la-hb-face.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_fuzzing_la-hb-fallback-shape.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_fuzzing_la-hb-font.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_fuzzing_la-hb-ft.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_fuzzing_la-hb-glib.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_fuzzing_la-hb-graphite2.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_fuzzing_la-hb-icu.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_fuzzing_la-hb-ot-font.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_fuzzing_la-hb-ot-layout.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_fuzzing_la-hb-ot-map.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_fuzzing_la-hb-ot-shape-complex-arabic.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_fuzzing_la-hb-ot-shape-complex-default.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_fuzzing_la-hb-ot-shape-complex-hangul.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_fuzzing_la-hb-ot-shape-complex-hebrew.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_fuzzing_la-hb-ot-shape-complex-indic-table.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_fuzzing_la-hb-ot-shape-complex-indic.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_fuzzing_la-hb-ot-shape-complex-myanmar.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_fuzzing_la-hb-ot-shape-complex-thai.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_fuzzing_la-hb-ot-shape-complex-tibetan.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_fuzzing_la-hb-ot-shape-complex-use-table.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_fuzzing_la-hb-ot-shape-complex-use.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_fuzzing_la-hb-ot-shape-fallback.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_fuzzing_la-hb-ot-shape-normalize.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_fuzzing_la-hb-ot-shape.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_fuzzing_la-hb-ot-tag.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_fuzzing_la-hb-set.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_fuzzing_la-hb-shape-plan.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_fuzzing_la-hb-shape.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_fuzzing_la-hb-shaper.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_fuzzing_la-hb-ucdn.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_fuzzing_la-hb-unicode.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_fuzzing_la-hb-uniscribe.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_fuzzing_la-hb-warning.Plo@am__quote@
 @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@
@@ -1536,14 +1201,12 @@ distclean-compile:
 @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-directwrite.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-graphite2.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-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@
@@ -1554,10 +1217,9 @@ distclean-compile:
 @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-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-tibetan.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-ot-shape-complex-use-table.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-ot-shape-complex-use.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@
@@ -1573,7 +1235,6 @@ distclean-compile:
 @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_ot_tag-hb-ot-tag.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@
 
@@ -1598,279 +1259,6 @@ distclean-compile:
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $<
 
-libharfbuzz_fuzzing_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_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_fuzzing_la-hb-blob.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_fuzzing_la-hb-blob.Tpo -c -o libharfbuzz_fuzzing_la-hb-blob.lo `test -f 'hb-blob.cc' || echo '$(srcdir)/'`hb-blob.cc
-@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_fuzzing_la-hb-blob.Tpo $(DEPDIR)/libharfbuzz_fuzzing_la-hb-blob.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-blob.cc' object='libharfbuzz_fuzzing_la-hb-blob.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_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_fuzzing_la-hb-blob.lo `test -f 'hb-blob.cc' || echo '$(srcdir)/'`hb-blob.cc
-
-libharfbuzz_fuzzing_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_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_fuzzing_la-hb-buffer-serialize.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_fuzzing_la-hb-buffer-serialize.Tpo -c -o libharfbuzz_fuzzing_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_fuzzing_la-hb-buffer-serialize.Tpo $(DEPDIR)/libharfbuzz_fuzzing_la-hb-buffer-serialize.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-buffer-serialize.cc' object='libharfbuzz_fuzzing_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_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_fuzzing_la-hb-buffer-serialize.lo `test -f 'hb-buffer-serialize.cc' || echo '$(srcdir)/'`hb-buffer-serialize.cc
-
-libharfbuzz_fuzzing_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_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_fuzzing_la-hb-buffer.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_fuzzing_la-hb-buffer.Tpo -c -o libharfbuzz_fuzzing_la-hb-buffer.lo `test -f 'hb-buffer.cc' || echo '$(srcdir)/'`hb-buffer.cc
-@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_fuzzing_la-hb-buffer.Tpo $(DEPDIR)/libharfbuzz_fuzzing_la-hb-buffer.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-buffer.cc' object='libharfbuzz_fuzzing_la-hb-buffer.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_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_fuzzing_la-hb-buffer.lo `test -f 'hb-buffer.cc' || echo '$(srcdir)/'`hb-buffer.cc
-
-libharfbuzz_fuzzing_la-hb-common.lo: hb-common.cc
-@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_fuzzing_la-hb-common.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_fuzzing_la-hb-common.Tpo -c -o libharfbuzz_fuzzing_la-hb-common.lo `test -f 'hb-common.cc' || echo '$(srcdir)/'`hb-common.cc
-@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_fuzzing_la-hb-common.Tpo $(DEPDIR)/libharfbuzz_fuzzing_la-hb-common.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-common.cc' object='libharfbuzz_fuzzing_la-hb-common.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_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_fuzzing_la-hb-common.lo `test -f 'hb-common.cc' || echo '$(srcdir)/'`hb-common.cc
-
-libharfbuzz_fuzzing_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_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_fuzzing_la-hb-face.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_fuzzing_la-hb-face.Tpo -c -o libharfbuzz_fuzzing_la-hb-face.lo `test -f 'hb-face.cc' || echo '$(srcdir)/'`hb-face.cc
-@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_fuzzing_la-hb-face.Tpo $(DEPDIR)/libharfbuzz_fuzzing_la-hb-face.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-face.cc' object='libharfbuzz_fuzzing_la-hb-face.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_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_fuzzing_la-hb-face.lo `test -f 'hb-face.cc' || echo '$(srcdir)/'`hb-face.cc
-
-libharfbuzz_fuzzing_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_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_fuzzing_la-hb-font.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_fuzzing_la-hb-font.Tpo -c -o libharfbuzz_fuzzing_la-hb-font.lo `test -f 'hb-font.cc' || echo '$(srcdir)/'`hb-font.cc
-@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_fuzzing_la-hb-font.Tpo $(DEPDIR)/libharfbuzz_fuzzing_la-hb-font.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-font.cc' object='libharfbuzz_fuzzing_la-hb-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_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_fuzzing_la-hb-font.lo `test -f 'hb-font.cc' || echo '$(srcdir)/'`hb-font.cc
-
-libharfbuzz_fuzzing_la-hb-ot-tag.lo: hb-ot-tag.cc
-@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_fuzzing_la-hb-ot-tag.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_fuzzing_la-hb-ot-tag.Tpo -c -o libharfbuzz_fuzzing_la-hb-ot-tag.lo `test -f 'hb-ot-tag.cc' || echo '$(srcdir)/'`hb-ot-tag.cc
-@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_fuzzing_la-hb-ot-tag.Tpo $(DEPDIR)/libharfbuzz_fuzzing_la-hb-ot-tag.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-ot-tag.cc' object='libharfbuzz_fuzzing_la-hb-ot-tag.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_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_fuzzing_la-hb-ot-tag.lo `test -f 'hb-ot-tag.cc' || echo '$(srcdir)/'`hb-ot-tag.cc
-
-libharfbuzz_fuzzing_la-hb-set.lo: hb-set.cc
-@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_fuzzing_la-hb-set.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_fuzzing_la-hb-set.Tpo -c -o libharfbuzz_fuzzing_la-hb-set.lo `test -f 'hb-set.cc' || echo '$(srcdir)/'`hb-set.cc
-@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_fuzzing_la-hb-set.Tpo $(DEPDIR)/libharfbuzz_fuzzing_la-hb-set.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-set.cc' object='libharfbuzz_fuzzing_la-hb-set.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_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_fuzzing_la-hb-set.lo `test -f 'hb-set.cc' || echo '$(srcdir)/'`hb-set.cc
-
-libharfbuzz_fuzzing_la-hb-shape.lo: hb-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_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_fuzzing_la-hb-shape.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_fuzzing_la-hb-shape.Tpo -c -o libharfbuzz_fuzzing_la-hb-shape.lo `test -f 'hb-shape.cc' || echo '$(srcdir)/'`hb-shape.cc
-@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_fuzzing_la-hb-shape.Tpo $(DEPDIR)/libharfbuzz_fuzzing_la-hb-shape.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-shape.cc' object='libharfbuzz_fuzzing_la-hb-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_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_fuzzing_la-hb-shape.lo `test -f 'hb-shape.cc' || echo '$(srcdir)/'`hb-shape.cc
-
-libharfbuzz_fuzzing_la-hb-shape-plan.lo: hb-shape-plan.cc
-@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_fuzzing_la-hb-shape-plan.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_fuzzing_la-hb-shape-plan.Tpo -c -o libharfbuzz_fuzzing_la-hb-shape-plan.lo `test -f 'hb-shape-plan.cc' || echo '$(srcdir)/'`hb-shape-plan.cc
-@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_fuzzing_la-hb-shape-plan.Tpo $(DEPDIR)/libharfbuzz_fuzzing_la-hb-shape-plan.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-shape-plan.cc' object='libharfbuzz_fuzzing_la-hb-shape-plan.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_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_fuzzing_la-hb-shape-plan.lo `test -f 'hb-shape-plan.cc' || echo '$(srcdir)/'`hb-shape-plan.cc
-
-libharfbuzz_fuzzing_la-hb-shaper.lo: hb-shaper.cc
-@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_fuzzing_la-hb-shaper.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_fuzzing_la-hb-shaper.Tpo -c -o libharfbuzz_fuzzing_la-hb-shaper.lo `test -f 'hb-shaper.cc' || echo '$(srcdir)/'`hb-shaper.cc
-@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_fuzzing_la-hb-shaper.Tpo $(DEPDIR)/libharfbuzz_fuzzing_la-hb-shaper.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-shaper.cc' object='libharfbuzz_fuzzing_la-hb-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) $(libharfbuzz_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_fuzzing_la-hb-shaper.lo `test -f 'hb-shaper.cc' || echo '$(srcdir)/'`hb-shaper.cc
-
-libharfbuzz_fuzzing_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_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_fuzzing_la-hb-unicode.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_fuzzing_la-hb-unicode.Tpo -c -o libharfbuzz_fuzzing_la-hb-unicode.lo `test -f 'hb-unicode.cc' || echo '$(srcdir)/'`hb-unicode.cc
-@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_fuzzing_la-hb-unicode.Tpo $(DEPDIR)/libharfbuzz_fuzzing_la-hb-unicode.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-unicode.cc' object='libharfbuzz_fuzzing_la-hb-unicode.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_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_fuzzing_la-hb-unicode.lo `test -f 'hb-unicode.cc' || echo '$(srcdir)/'`hb-unicode.cc
-
-libharfbuzz_fuzzing_la-hb-warning.lo: hb-warning.cc
-@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_fuzzing_la-hb-warning.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_fuzzing_la-hb-warning.Tpo -c -o libharfbuzz_fuzzing_la-hb-warning.lo `test -f 'hb-warning.cc' || echo '$(srcdir)/'`hb-warning.cc
-@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_fuzzing_la-hb-warning.Tpo $(DEPDIR)/libharfbuzz_fuzzing_la-hb-warning.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-warning.cc' object='libharfbuzz_fuzzing_la-hb-warning.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_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_fuzzing_la-hb-warning.lo `test -f 'hb-warning.cc' || echo '$(srcdir)/'`hb-warning.cc
-
-libharfbuzz_fuzzing_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_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_fuzzing_la-hb-ot-font.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_fuzzing_la-hb-ot-font.Tpo -c -o libharfbuzz_fuzzing_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_fuzzing_la-hb-ot-font.Tpo $(DEPDIR)/libharfbuzz_fuzzing_la-hb-ot-font.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-ot-font.cc' object='libharfbuzz_fuzzing_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_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_fuzzing_la-hb-ot-font.lo `test -f 'hb-ot-font.cc' || echo '$(srcdir)/'`hb-ot-font.cc
-
-libharfbuzz_fuzzing_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_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_fuzzing_la-hb-ot-layout.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_fuzzing_la-hb-ot-layout.Tpo -c -o libharfbuzz_fuzzing_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_fuzzing_la-hb-ot-layout.Tpo $(DEPDIR)/libharfbuzz_fuzzing_la-hb-ot-layout.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-ot-layout.cc' object='libharfbuzz_fuzzing_la-hb-ot-layout.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_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_fuzzing_la-hb-ot-layout.lo `test -f 'hb-ot-layout.cc' || echo '$(srcdir)/'`hb-ot-layout.cc
-
-libharfbuzz_fuzzing_la-hb-ot-map.lo: hb-ot-map.cc
-@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_fuzzing_la-hb-ot-map.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_fuzzing_la-hb-ot-map.Tpo -c -o libharfbuzz_fuzzing_la-hb-ot-map.lo `test -f 'hb-ot-map.cc' || echo '$(srcdir)/'`hb-ot-map.cc
-@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_fuzzing_la-hb-ot-map.Tpo $(DEPDIR)/libharfbuzz_fuzzing_la-hb-ot-map.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-ot-map.cc' object='libharfbuzz_fuzzing_la-hb-ot-map.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_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_fuzzing_la-hb-ot-map.lo `test -f 'hb-ot-map.cc' || echo '$(srcdir)/'`hb-ot-map.cc
-
-libharfbuzz_fuzzing_la-hb-ot-shape.lo: hb-ot-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_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_fuzzing_la-hb-ot-shape.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_fuzzing_la-hb-ot-shape.Tpo -c -o libharfbuzz_fuzzing_la-hb-ot-shape.lo `test -f 'hb-ot-shape.cc' || echo '$(srcdir)/'`hb-ot-shape.cc
-@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_fuzzing_la-hb-ot-shape.Tpo $(DEPDIR)/libharfbuzz_fuzzing_la-hb-ot-shape.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-ot-shape.cc' object='libharfbuzz_fuzzing_la-hb-ot-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_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_fuzzing_la-hb-ot-shape.lo `test -f 'hb-ot-shape.cc' || echo '$(srcdir)/'`hb-ot-shape.cc
-
-libharfbuzz_fuzzing_la-hb-ot-shape-complex-arabic.lo: hb-ot-shape-complex-arabic.cc
-@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_fuzzing_la-hb-ot-shape-complex-arabic.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_fuzzing_la-hb-ot-shape-complex-arabic.Tpo -c -o libharfbuzz_fuzzing_la-hb-ot-shape-complex-arabic.lo `test -f 'hb-ot-shape-complex-arabic.cc' || echo '$(srcdir)/'`hb-ot-shape-complex-arabic.cc
-@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_fuzzing_la-hb-ot-shape-complex-arabic.Tpo $(DEPDIR)/libharfbuzz_fuzzing_la-hb-ot-shape-complex-arabic.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-ot-shape-complex-arabic.cc' object='libharfbuzz_fuzzing_la-hb-ot-shape-complex-arabic.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_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_fuzzing_la-hb-ot-shape-complex-arabic.lo `test -f 'hb-ot-shape-complex-arabic.cc' || echo '$(srcdir)/'`hb-ot-shape-complex-arabic.cc
-
-libharfbuzz_fuzzing_la-hb-ot-shape-complex-default.lo: hb-ot-shape-complex-default.cc
-@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_fuzzing_la-hb-ot-shape-complex-default.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_fuzzing_la-hb-ot-shape-complex-default.Tpo -c -o libharfbuzz_fuzzing_la-hb-ot-shape-complex-default.lo `test -f 'hb-ot-shape-complex-default.cc' || echo '$(srcdir)/'`hb-ot-shape-complex-default.cc
-@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_fuzzing_la-hb-ot-shape-complex-default.Tpo $(DEPDIR)/libharfbuzz_fuzzing_la-hb-ot-shape-complex-default.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-ot-shape-complex-default.cc' object='libharfbuzz_fuzzing_la-hb-ot-shape-complex-default.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_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_fuzzing_la-hb-ot-shape-complex-default.lo `test -f 'hb-ot-shape-complex-default.cc' || echo '$(srcdir)/'`hb-ot-shape-complex-default.cc
-
-libharfbuzz_fuzzing_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_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_fuzzing_la-hb-ot-shape-complex-hangul.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_fuzzing_la-hb-ot-shape-complex-hangul.Tpo -c -o libharfbuzz_fuzzing_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_fuzzing_la-hb-ot-shape-complex-hangul.Tpo $(DEPDIR)/libharfbuzz_fuzzing_la-hb-ot-shape-complex-hangul.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-ot-shape-complex-hangul.cc' object='libharfbuzz_fuzzing_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_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_fuzzing_la-hb-ot-shape-complex-hangul.lo `test -f 'hb-ot-shape-complex-hangul.cc' || echo '$(srcdir)/'`hb-ot-shape-complex-hangul.cc
-
-libharfbuzz_fuzzing_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_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_fuzzing_la-hb-ot-shape-complex-hebrew.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_fuzzing_la-hb-ot-shape-complex-hebrew.Tpo -c -o libharfbuzz_fuzzing_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_fuzzing_la-hb-ot-shape-complex-hebrew.Tpo $(DEPDIR)/libharfbuzz_fuzzing_la-hb-ot-shape-complex-hebrew.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-ot-shape-complex-hebrew.cc' object='libharfbuzz_fuzzing_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_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_fuzzing_la-hb-ot-shape-complex-hebrew.lo `test -f 'hb-ot-shape-complex-hebrew.cc' || echo '$(srcdir)/'`hb-ot-shape-complex-hebrew.cc
-
-libharfbuzz_fuzzing_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_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_fuzzing_la-hb-ot-shape-complex-indic.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_fuzzing_la-hb-ot-shape-complex-indic.Tpo -c -o libharfbuzz_fuzzing_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_fuzzing_la-hb-ot-shape-complex-indic.Tpo $(DEPDIR)/libharfbuzz_fuzzing_la-hb-ot-shape-complex-indic.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-ot-shape-complex-indic.cc' object='libharfbuzz_fuzzing_la-hb-ot-shape-complex-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) $(libharfbuzz_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_fuzzing_la-hb-ot-shape-complex-indic.lo `test -f 'hb-ot-shape-complex-indic.cc' || echo '$(srcdir)/'`hb-ot-shape-complex-indic.cc
-
-libharfbuzz_fuzzing_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_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_fuzzing_la-hb-ot-shape-complex-indic-table.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_fuzzing_la-hb-ot-shape-complex-indic-table.Tpo -c -o libharfbuzz_fuzzing_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_fuzzing_la-hb-ot-shape-complex-indic-table.Tpo $(DEPDIR)/libharfbuzz_fuzzing_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_fuzzing_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_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_fuzzing_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_fuzzing_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_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_fuzzing_la-hb-ot-shape-complex-myanmar.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_fuzzing_la-hb-ot-shape-complex-myanmar.Tpo -c -o libharfbuzz_fuzzing_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_fuzzing_la-hb-ot-shape-complex-myanmar.Tpo $(DEPDIR)/libharfbuzz_fuzzing_la-hb-ot-shape-complex-myanmar.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-ot-shape-complex-myanmar.cc' object='libharfbuzz_fuzzing_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_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_fuzzing_la-hb-ot-shape-complex-myanmar.lo `test -f 'hb-ot-shape-complex-myanmar.cc' || echo '$(srcdir)/'`hb-ot-shape-complex-myanmar.cc
-
-libharfbuzz_fuzzing_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_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_fuzzing_la-hb-ot-shape-complex-thai.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_fuzzing_la-hb-ot-shape-complex-thai.Tpo -c -o libharfbuzz_fuzzing_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_fuzzing_la-hb-ot-shape-complex-thai.Tpo $(DEPDIR)/libharfbuzz_fuzzing_la-hb-ot-shape-complex-thai.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-ot-shape-complex-thai.cc' object='libharfbuzz_fuzzing_la-hb-ot-shape-complex-thai.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_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_fuzzing_la-hb-ot-shape-complex-thai.lo `test -f 'hb-ot-shape-complex-thai.cc' || echo '$(srcdir)/'`hb-ot-shape-complex-thai.cc
-
-libharfbuzz_fuzzing_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_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_fuzzing_la-hb-ot-shape-complex-tibetan.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_fuzzing_la-hb-ot-shape-complex-tibetan.Tpo -c -o libharfbuzz_fuzzing_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_fuzzing_la-hb-ot-shape-complex-tibetan.Tpo $(DEPDIR)/libharfbuzz_fuzzing_la-hb-ot-shape-complex-tibetan.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-ot-shape-complex-tibetan.cc' object='libharfbuzz_fuzzing_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_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_fuzzing_la-hb-ot-shape-complex-tibetan.lo `test -f 'hb-ot-shape-complex-tibetan.cc' || echo '$(srcdir)/'`hb-ot-shape-complex-tibetan.cc
-
-libharfbuzz_fuzzing_la-hb-ot-shape-complex-use.lo: hb-ot-shape-complex-use.cc
-@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_fuzzing_la-hb-ot-shape-complex-use.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_fuzzing_la-hb-ot-shape-complex-use.Tpo -c -o libharfbuzz_fuzzing_la-hb-ot-shape-complex-use.lo `test -f 'hb-ot-shape-complex-use.cc' || echo '$(srcdir)/'`hb-ot-shape-complex-use.cc
-@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_fuzzing_la-hb-ot-shape-complex-use.Tpo $(DEPDIR)/libharfbuzz_fuzzing_la-hb-ot-shape-complex-use.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-ot-shape-complex-use.cc' object='libharfbuzz_fuzzing_la-hb-ot-shape-complex-use.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_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_fuzzing_la-hb-ot-shape-complex-use.lo `test -f 'hb-ot-shape-complex-use.cc' || echo '$(srcdir)/'`hb-ot-shape-complex-use.cc
-
-libharfbuzz_fuzzing_la-hb-ot-shape-complex-use-table.lo: hb-ot-shape-complex-use-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_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_fuzzing_la-hb-ot-shape-complex-use-table.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_fuzzing_la-hb-ot-shape-complex-use-table.Tpo -c -o libharfbuzz_fuzzing_la-hb-ot-shape-complex-use-table.lo `test -f 'hb-ot-shape-complex-use-table.cc' || echo '$(srcdir)/'`hb-ot-shape-complex-use-table.cc
-@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_fuzzing_la-hb-ot-shape-complex-use-table.Tpo $(DEPDIR)/libharfbuzz_fuzzing_la-hb-ot-shape-complex-use-table.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-ot-shape-complex-use-table.cc' object='libharfbuzz_fuzzing_la-hb-ot-shape-complex-use-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_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_fuzzing_la-hb-ot-shape-complex-use-table.lo `test -f 'hb-ot-shape-complex-use-table.cc' || echo '$(srcdir)/'`hb-ot-shape-complex-use-table.cc
-
-libharfbuzz_fuzzing_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_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_fuzzing_la-hb-ot-shape-normalize.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_fuzzing_la-hb-ot-shape-normalize.Tpo -c -o libharfbuzz_fuzzing_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_fuzzing_la-hb-ot-shape-normalize.Tpo $(DEPDIR)/libharfbuzz_fuzzing_la-hb-ot-shape-normalize.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-ot-shape-normalize.cc' object='libharfbuzz_fuzzing_la-hb-ot-shape-normalize.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_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_fuzzing_la-hb-ot-shape-normalize.lo `test -f 'hb-ot-shape-normalize.cc' || echo '$(srcdir)/'`hb-ot-shape-normalize.cc
-
-libharfbuzz_fuzzing_la-hb-ot-shape-fallback.lo: hb-ot-shape-fallback.cc
-@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_fuzzing_la-hb-ot-shape-fallback.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_fuzzing_la-hb-ot-shape-fallback.Tpo -c -o libharfbuzz_fuzzing_la-hb-ot-shape-fallback.lo `test -f 'hb-ot-shape-fallback.cc' || echo '$(srcdir)/'`hb-ot-shape-fallback.cc
-@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_fuzzing_la-hb-ot-shape-fallback.Tpo $(DEPDIR)/libharfbuzz_fuzzing_la-hb-ot-shape-fallback.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-ot-shape-fallback.cc' object='libharfbuzz_fuzzing_la-hb-ot-shape-fallback.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_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_fuzzing_la-hb-ot-shape-fallback.lo `test -f 'hb-ot-shape-fallback.cc' || echo '$(srcdir)/'`hb-ot-shape-fallback.cc
-
-libharfbuzz_fuzzing_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_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_fuzzing_la-hb-fallback-shape.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_fuzzing_la-hb-fallback-shape.Tpo -c -o libharfbuzz_fuzzing_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_fuzzing_la-hb-fallback-shape.Tpo $(DEPDIR)/libharfbuzz_fuzzing_la-hb-fallback-shape.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-fallback-shape.cc' object='libharfbuzz_fuzzing_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_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_fuzzing_la-hb-fallback-shape.lo `test -f 'hb-fallback-shape.cc' || echo '$(srcdir)/'`hb-fallback-shape.cc
-
-libharfbuzz_fuzzing_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_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_fuzzing_la-hb-glib.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_fuzzing_la-hb-glib.Tpo -c -o libharfbuzz_fuzzing_la-hb-glib.lo `test -f 'hb-glib.cc' || echo '$(srcdir)/'`hb-glib.cc
-@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_fuzzing_la-hb-glib.Tpo $(DEPDIR)/libharfbuzz_fuzzing_la-hb-glib.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-glib.cc' object='libharfbuzz_fuzzing_la-hb-glib.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_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_fuzzing_la-hb-glib.lo `test -f 'hb-glib.cc' || echo '$(srcdir)/'`hb-glib.cc
-
-libharfbuzz_fuzzing_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_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_fuzzing_la-hb-ft.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_fuzzing_la-hb-ft.Tpo -c -o libharfbuzz_fuzzing_la-hb-ft.lo `test -f 'hb-ft.cc' || echo '$(srcdir)/'`hb-ft.cc
-@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_fuzzing_la-hb-ft.Tpo $(DEPDIR)/libharfbuzz_fuzzing_la-hb-ft.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-ft.cc' object='libharfbuzz_fuzzing_la-hb-ft.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_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_fuzzing_la-hb-ft.lo `test -f 'hb-ft.cc' || echo '$(srcdir)/'`hb-ft.cc
-
-libharfbuzz_fuzzing_la-hb-graphite2.lo: hb-graphite2.cc
-@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_fuzzing_la-hb-graphite2.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_fuzzing_la-hb-graphite2.Tpo -c -o libharfbuzz_fuzzing_la-hb-graphite2.lo `test -f 'hb-graphite2.cc' || echo '$(srcdir)/'`hb-graphite2.cc
-@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_fuzzing_la-hb-graphite2.Tpo $(DEPDIR)/libharfbuzz_fuzzing_la-hb-graphite2.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-graphite2.cc' object='libharfbuzz_fuzzing_la-hb-graphite2.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_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_fuzzing_la-hb-graphite2.lo `test -f 'hb-graphite2.cc' || echo '$(srcdir)/'`hb-graphite2.cc
-
-libharfbuzz_fuzzing_la-hb-uniscribe.lo: hb-uniscribe.cc
-@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_fuzzing_la-hb-uniscribe.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_fuzzing_la-hb-uniscribe.Tpo -c -o libharfbuzz_fuzzing_la-hb-uniscribe.lo `test -f 'hb-uniscribe.cc' || echo '$(srcdir)/'`hb-uniscribe.cc
-@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_fuzzing_la-hb-uniscribe.Tpo $(DEPDIR)/libharfbuzz_fuzzing_la-hb-uniscribe.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-uniscribe.cc' object='libharfbuzz_fuzzing_la-hb-uniscribe.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_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_fuzzing_la-hb-uniscribe.lo `test -f 'hb-uniscribe.cc' || echo '$(srcdir)/'`hb-uniscribe.cc
-
-libharfbuzz_fuzzing_la-hb-directwrite.lo: hb-directwrite.cc
-@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_fuzzing_la-hb-directwrite.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_fuzzing_la-hb-directwrite.Tpo -c -o libharfbuzz_fuzzing_la-hb-directwrite.lo `test -f 'hb-directwrite.cc' || echo '$(srcdir)/'`hb-directwrite.cc
-@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_fuzzing_la-hb-directwrite.Tpo $(DEPDIR)/libharfbuzz_fuzzing_la-hb-directwrite.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-directwrite.cc' object='libharfbuzz_fuzzing_la-hb-directwrite.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_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_fuzzing_la-hb-directwrite.lo `test -f 'hb-directwrite.cc' || echo '$(srcdir)/'`hb-directwrite.cc
-
-libharfbuzz_fuzzing_la-hb-coretext.lo: hb-coretext.cc
-@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_fuzzing_la-hb-coretext.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_fuzzing_la-hb-coretext.Tpo -c -o libharfbuzz_fuzzing_la-hb-coretext.lo `test -f 'hb-coretext.cc' || echo '$(srcdir)/'`hb-coretext.cc
-@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_fuzzing_la-hb-coretext.Tpo $(DEPDIR)/libharfbuzz_fuzzing_la-hb-coretext.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-coretext.cc' object='libharfbuzz_fuzzing_la-hb-coretext.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_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_fuzzing_la-hb-coretext.lo `test -f 'hb-coretext.cc' || echo '$(srcdir)/'`hb-coretext.cc
-
-libharfbuzz_fuzzing_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_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_fuzzing_la-hb-ucdn.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_fuzzing_la-hb-ucdn.Tpo -c -o libharfbuzz_fuzzing_la-hb-ucdn.lo `test -f 'hb-ucdn.cc' || echo '$(srcdir)/'`hb-ucdn.cc
-@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_fuzzing_la-hb-ucdn.Tpo $(DEPDIR)/libharfbuzz_fuzzing_la-hb-ucdn.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-ucdn.cc' object='libharfbuzz_fuzzing_la-hb-ucdn.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_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_fuzzing_la-hb-ucdn.lo `test -f 'hb-ucdn.cc' || echo '$(srcdir)/'`hb-ucdn.cc
-
-libharfbuzz_fuzzing_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_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_fuzzing_la-hb-icu.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_fuzzing_la-hb-icu.Tpo -c -o libharfbuzz_fuzzing_la-hb-icu.lo `test -f 'hb-icu.cc' || echo '$(srcdir)/'`hb-icu.cc
-@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_fuzzing_la-hb-icu.Tpo $(DEPDIR)/libharfbuzz_fuzzing_la-hb-icu.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-icu.cc' object='libharfbuzz_fuzzing_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_fuzzing_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_fuzzing_la-hb-icu.lo `test -f 'hb-icu.cc' || echo '$(srcdir)/'`hb-icu.cc
-
 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
@@ -2060,6 +1448,13 @@ libharfbuzz_la-hb-ot-shape-complex-myanmar.lo: hb-ot-shape-complex-myanmar.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-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
@@ -2074,20 +1469,6 @@ libharfbuzz_la-hb-ot-shape-complex-tibetan.lo: hb-ot-shape-complex-tibetan.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-tibetan.lo `test -f 'hb-ot-shape-complex-tibetan.cc' || echo '$(srcdir)/'`hb-ot-shape-complex-tibetan.cc
 
-libharfbuzz_la-hb-ot-shape-complex-use.lo: hb-ot-shape-complex-use.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-use.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-ot-shape-complex-use.Tpo -c -o libharfbuzz_la-hb-ot-shape-complex-use.lo `test -f 'hb-ot-shape-complex-use.cc' || echo '$(srcdir)/'`hb-ot-shape-complex-use.cc
-@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_la-hb-ot-shape-complex-use.Tpo $(DEPDIR)/libharfbuzz_la-hb-ot-shape-complex-use.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-ot-shape-complex-use.cc' object='libharfbuzz_la-hb-ot-shape-complex-use.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-use.lo `test -f 'hb-ot-shape-complex-use.cc' || echo '$(srcdir)/'`hb-ot-shape-complex-use.cc
-
-libharfbuzz_la-hb-ot-shape-complex-use-table.lo: hb-ot-shape-complex-use-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-use-table.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-ot-shape-complex-use-table.Tpo -c -o libharfbuzz_la-hb-ot-shape-complex-use-table.lo `test -f 'hb-ot-shape-complex-use-table.cc' || echo '$(srcdir)/'`hb-ot-shape-complex-use-table.cc
-@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_la-hb-ot-shape-complex-use-table.Tpo $(DEPDIR)/libharfbuzz_la-hb-ot-shape-complex-use-table.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-ot-shape-complex-use-table.cc' object='libharfbuzz_la-hb-ot-shape-complex-use-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-use-table.lo `test -f 'hb-ot-shape-complex-use-table.cc' || echo '$(srcdir)/'`hb-ot-shape-complex-use-table.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
@@ -2137,13 +1518,6 @@ libharfbuzz_la-hb-uniscribe.lo: hb-uniscribe.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-uniscribe.lo `test -f 'hb-uniscribe.cc' || echo '$(srcdir)/'`hb-uniscribe.cc
 
-libharfbuzz_la-hb-directwrite.lo: hb-directwrite.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-directwrite.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-directwrite.Tpo -c -o libharfbuzz_la-hb-directwrite.lo `test -f 'hb-directwrite.cc' || echo '$(srcdir)/'`hb-directwrite.cc
-@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_la-hb-directwrite.Tpo $(DEPDIR)/libharfbuzz_la-hb-directwrite.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-directwrite.cc' object='libharfbuzz_la-hb-directwrite.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-directwrite.lo `test -f 'hb-directwrite.cc' || echo '$(srcdir)/'`hb-directwrite.cc
-
 libharfbuzz_la-hb-coretext.lo: hb-coretext.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-coretext.lo -MD -MP -MF $(DEPDIR)/libharfbuzz_la-hb-coretext.Tpo -c -o libharfbuzz_la-hb-coretext.lo `test -f 'hb-coretext.cc' || echo '$(srcdir)/'`hb-coretext.cc
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/libharfbuzz_la-hb-coretext.Tpo $(DEPDIR)/libharfbuzz_la-hb-coretext.Plo
@@ -2158,13 +1532,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
 
-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
-
 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
@@ -2207,20 +1574,6 @@ test_buffer_serialize-test-buffer-serialize.obj: test-buffer-serialize.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_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_ot_tag-hb-ot-tag.o: hb-ot-tag.cc
-@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_ot_tag_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT test_ot_tag-hb-ot-tag.o -MD -MP -MF $(DEPDIR)/test_ot_tag-hb-ot-tag.Tpo -c -o test_ot_tag-hb-ot-tag.o `test -f 'hb-ot-tag.cc' || echo '$(srcdir)/'`hb-ot-tag.cc
-@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/test_ot_tag-hb-ot-tag.Tpo $(DEPDIR)/test_ot_tag-hb-ot-tag.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-ot-tag.cc' object='test_ot_tag-hb-ot-tag.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_ot_tag_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o test_ot_tag-hb-ot-tag.o `test -f 'hb-ot-tag.cc' || echo '$(srcdir)/'`hb-ot-tag.cc
-
-test_ot_tag-hb-ot-tag.obj: hb-ot-tag.cc
-@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_ot_tag_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT test_ot_tag-hb-ot-tag.obj -MD -MP -MF $(DEPDIR)/test_ot_tag-hb-ot-tag.Tpo -c -o test_ot_tag-hb-ot-tag.obj `if test -f 'hb-ot-tag.cc'; then $(CYGPATH_W) 'hb-ot-tag.cc'; else $(CYGPATH_W) '$(srcdir)/hb-ot-tag.cc'; fi`
-@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/test_ot_tag-hb-ot-tag.Tpo $(DEPDIR)/test_ot_tag-hb-ot-tag.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-ot-tag.cc' object='test_ot_tag-hb-ot-tag.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_ot_tag_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o test_ot_tag-hb-ot-tag.obj `if test -f 'hb-ot-tag.cc'; then $(CYGPATH_W) 'hb-ot-tag.cc'; else $(CYGPATH_W) '$(srcdir)/hb-ot-tag.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
@@ -2589,7 +1942,7 @@ check-TESTS:
        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) $(dist_check_SCRIPTS)
+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 \
@@ -2649,13 +2002,6 @@ check-symbols.sh.log: check-symbols.sh
        --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.log:
        @p='$<'; \
        $(am__set_b); \
@@ -2727,8 +2073,7 @@ distdir: $(DISTFILES)
          fi; \
        done
 check-am: all-am
-       $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) \
-         $(dist_check_SCRIPTS)
+       $(MAKE) $(AM_MAKEFLAGS) $(dist_check_SCRIPTS)
        $(MAKE) $(AM_MAKEFLAGS) check-TESTS
 check: $(BUILT_SOURCES)
        $(MAKE) $(AM_MAKEFLAGS) check-recursive
@@ -2780,9 +2125,8 @@ maintainer-clean-generic:
        -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
 clean: clean-recursive
 
-clean-am: clean-binPROGRAMS clean-checkPROGRAMS clean-generic \
-       clean-libLTLIBRARIES clean-libtool clean-noinstPROGRAMS \
-       mostlyclean-am
+clean-am: clean-binPROGRAMS clean-generic clean-libLTLIBRARIES \
+       clean-libtool clean-noinstPROGRAMS mostlyclean-am
 
 distclean: distclean-recursive
        -rm -rf ./$(DEPDIR)
@@ -2859,15 +2203,14 @@ uninstall-am: uninstall-binPROGRAMS uninstall-girDATA \
        install-strip
 
 .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
-       check-TESTS check-am clean clean-binPROGRAMS \
-       clean-checkPROGRAMS 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 \
+       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-pkgconfigDATA install-pkgincludeHEADERS install-ps \
@@ -2886,8 +2229,7 @@ uninstall-am: uninstall-binPROGRAMS uninstall-girDATA \
 #AM_CXXFLAGS =
 
 # Convenience targets:
-lib: $(BUILT_SOURCES) libharfbuzz.la
-fuzzing: $(BUILT_SOURCES) libharfbuzz-fuzzing.la
+lib: libharfbuzz.la
 @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 \
@@ -2901,8 +2243,6 @@ fuzzing: $(BUILT_SOURCES) libharfbuzz-fuzzing.la
                -e 's@%exec_prefix%@$(exec_prefix)@g' \
                -e 's@%libdir%@$(libdir)@g' \
                -e 's@%includedir%@$(includedir)@g' \
-               -e 's@%libs_private%@$(HBNONPCLIBS)@g' \
-               -e 's@%requires_private%@$(HBDEPS)@g' \
                -e 's@%VERSION%@$(VERSION)@g' \
        "$<" > "$@" \
        || ($(RM) "$@"; false)
@@ -2912,28 +2252,24 @@ harfbuzz.def: $(HBHEADERS) $(HBNODISTHEADERS)
        $(EGREP) '^hb_.* \(' | \
        sed -e 's/ (.*//' | \
        LANG=C sort; \
-       echo LIBRARY libharfbuzz-0.dll; \
+       echo LIBRARY libharfbuzz-$(HB_VERSION_MAJOR).dll; \
        ) >"$@"
        @ ! grep -q hb_ERROR "$@" \
        || ($(RM) "$@"; false)
 
-unicode-tables: arabic-table indic-table use-table
-
-arabic-table: gen-arabic-table.py ArabicShaping.txt UnicodeData.txt Blocks.txt
-       $(AM_V_GEN) $(builddir)/$^ > hb-ot-shape-complex-arabic-table.hh \
-       || ($(RM) hb-ot-shape-complex-arabic-table.hh; false)
+unicode-tables: arabic-table indic-table
 
-indic-table: gen-indic-table.py IndicSyllabicCategory-7.0.0.txt IndicMatraCategory-7.0.0.txt Blocks.txt
+indic-table: gen-indic-table.py IndicSyllabicCategory.txt IndicMatraCategory.txt Blocks.txt
        $(AM_V_GEN) $(builddir)/$^ > hb-ot-shape-complex-indic-table.cc \
        || ($(RM) hb-ot-shape-complex-indic-table.cc; false)
 
-use-table: gen-use-table.py IndicSyllabicCategory.txt IndicPositionalCategory.txt UnicodeData.txt Blocks.txt
-       $(AM_V_GEN) $(builddir)/$^ > hb-ot-shape-complex-use-table.cc \
-       || ($(RM) hb-ot-shape-complex-use-table.cc; false)
+arabic-table: gen-arabic-table.py ArabicShaping.txt UnicodeData.txt Blocks.txt
+       $(AM_V_GEN) $(builddir)/$^ > hb-ot-shape-complex-arabic-table.hh \
+       || ($(RM) hb-ot-shape-complex-arabic-table.hh; false)
 
 built-sources: $(BUILT_SOURCES)
 
-.PHONY: unicode-tables arabic-table indic-table use-table built-sources
+.PHONY: unicode-tables arabic-table indic-table built-sources
 $(srcdir)/%.hh: $(srcdir)/%.rl
        $(AM_V_GEN)(cd $(srcdir) && $(RAGEL) -e -F1 -o "$*.hh" "$*.rl") \
        || ($(RM) "$@"; false)
diff --git a/src/Makefile.sources b/src/Makefile.sources
deleted file mode 100644 (file)
index ac80683..0000000
+++ /dev/null
@@ -1,151 +0,0 @@
-NULL =
-
-# Base and default-included sources and headers
-
-HB_BASE_sources = \
-       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-glyf-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-os2-table.hh \
-       hb-ot-post-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-unicode-private.hh \
-       hb-unicode.cc \
-       hb-utf-private.hh \
-       hb-warning.cc \
-       $(NULL)
-
-HB_BASE_headers = \
-       hb.h \
-       hb-blob.h \
-       hb-buffer.h \
-       hb-common.h \
-       hb-deprecated.h \
-       hb-face.h \
-       hb-font.h \
-       hb-set.h \
-       hb-shape.h \
-       hb-shape-plan.h \
-       hb-unicode.h \
-       $(NULL)
-
-HB_NODIST_headers = \
-       hb-version.h \
-       $(NULL)
-
-HB_FALLBACK_sources = hb-fallback-shape.cc
-
-HB_OT_sources = \
-       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-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-private.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-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-table.cc \
-       hb-ot-shape-complex-myanmar.cc \
-       hb-ot-shape-complex-myanmar-machine.hh \
-       hb-ot-shape-complex-thai.cc \
-       hb-ot-shape-complex-tibetan.cc \
-       hb-ot-shape-complex-use.cc \
-       hb-ot-shape-complex-use-machine.hh \
-       hb-ot-shape-complex-use-private.hh \
-       hb-ot-shape-complex-use-table.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 \
-       $(NULL)
-
-HB_OT_headers = \
-       hb-ot.h \
-       hb-ot-font.h \
-       hb-ot-layout.h \
-       hb-ot-shape.h \
-       hb-ot-tag.h \
-       $(NULL)
-
-# Optional Sources and Headers with external deps
-
-HB_FT_sources = hb-ft.cc
-HB_FT_headers = hb-ft.h
-
-HB_GLIB_sources = hb-glib.cc
-HB_GLIB_headers = hb-glib.h
-
-HB_GRAPHITE2_sources = hb-graphite2.cc
-HB_GRAPHITE2_headers = hb-graphite2.h
-
-# System-dependent sources and headers
-
-HB_CORETEXT_sources = hb-coretext.cc
-HB_CORETEXT_headers = hb-coretext.h
-
-HB_DIRECTWRITE_sources = hb-directwrite.cc
-HB_DIRECTWRITE_headers = hb-directwrite.h
-
-HB_UNISCRIBE_sources = hb-uniscribe.cc
-HB_UNISCRIBE_headers = hb-uniscribe.h
-
-# Additional supplemental sources
-HB_UCDN_sources  = hb-ucdn.cc
-
-# Sources for libharfbuzz-gobject and libharfbuzz-icu
-HB_ICU_sources = hb-icu.cc
-HB_ICU_headers = hb-icu.h
-
-HB_GOBJECT_sources = hb-gobject-structs.cc
-HB_GOBJECT_STRUCTS_headers = hb-gobject-structs.h
-HB_GOBJECT_headers = hb-gobject.h $(HB_GOBJECT_STRUCTS_headers)
-HB_GOBJECT_ENUM_sources = hb-gobject-enums.cc
-HB_GOBJECT_ENUM_headers = hb-gobject-enums.h
index 09c5ea8..9a3302c 100755 (executable)
@@ -9,12 +9,13 @@ stat=0
 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
        test -f "$srcdir/$x" && x="$srcdir/$x"
-       echo "$x" | grep -q '[^h]$' && continue;
+       echo "$x" | grep '[^h]$' -q && continue;
        xx=`echo "$x" | sed 's@.*/@@'`
        tag=`echo "$xx" | tr 'a-z.-' 'A-Z_'`
-       lines=`grep -w "$tag" "$x" | wc -l | sed 's/[   ]*//g'`
+       lines=`grep "\<$tag\>" "$x" | wc -l | sed 's/[  ]*//g'`
        if test "x$lines" != x3; then
                echo "Ouch, header file $x does not have correct preprocessor guards"
                stat=1
index b541828..27deb42 100755 (executable)
@@ -19,9 +19,9 @@ for suffix in so dylib; do
        so=.libs/libharfbuzz.$suffix
        if ! test -f "$so"; then continue; fi
 
-       echo "Checking that we are not linking to libstdc++ or libc++"
-       if ldd $so | grep 'libstdc[+][+]\|libc[+][+]'; then
-               echo "Ouch, linked to libstdc++ or libc++"
+       echo "Checking that we are not linking to libstdc++"
+       if ldd $so | grep 'libstdc[+][+]'; then
+               echo "Ouch, linked to libstdc++"
                stat=1
        fi
        tested=true
index c055163..f5716bd 100755 (executable)
@@ -91,7 +91,6 @@ short = [{
        "Visarga":              'Vs',
        "Vowel":                'Vo',
        "Vowel_Dependent":      'M',
-       "Consonant_Prefixed":   'CPrf',
        "Other":                'x',
 },{
        "Not_Applicable":       'x',
diff --git a/src/gen-use-table.py b/src/gen-use-table.py
deleted file mode 100755 (executable)
index be04e4b..0000000
+++ /dev/null
@@ -1,476 +0,0 @@
-#!/usr/bin/python
-
-import sys
-
-if len (sys.argv) != 5:
-       print >>sys.stderr, "usage: ./gen-use-table.py IndicSyllabicCategory.txt IndicPositionalCategory.txt UnicodeData.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 j,f in enumerate(files) if j != 2]
-headers.append (["UnicodeData.txt does not have a header."])
-
-data = [{} for f in files]
-values = [{} for f in files]
-for i, f in enumerate (files):
-       for line in f:
-
-               j = line.find ('#')
-               if j >= 0:
-                       line = line[:j]
-
-               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 if i != 2 else 2]
-
-               for u in range (start, end + 1):
-                       data[i][u] = t
-               values[i][t] = values[i].get (t, 0) + end - start + 1
-
-defaults = ('Other', 'Not_Applicable', 'Cn', 'No_Block')
-
-# TODO Characters that are not in Unicode Indic files, but used in USE
-data[0][0x034F] = defaults[0]
-data[0][0x2060] = defaults[0]
-for u in range (0xFE00, 0xFE0F + 1):
-       data[0][u] = defaults[0]
-
-# Merge data into one dict:
-for i,v in enumerate (defaults):
-       values[i][v] = values[i].get (v, 0) + 1
-combined = {}
-for i,d in enumerate (data):
-       for u,v in d.items ():
-               if i >= 2 and not u in combined:
-                       continue
-               if not u in combined:
-                       combined[u] = list (defaults)
-               combined[u][i] = v
-combined = {k:v for k,v in combined.items() if v[3] not in BLACKLISTED_BLOCKS}
-data = combined
-del combined
-num = len (data)
-
-
-property_names = [
-       # General_Category
-       'Cc', 'Cf', 'Cn', 'Co', 'Cs', 'Ll', 'Lm', 'Lo', 'Lt', 'Lu', 'Mc',
-       'Me', 'Mn', 'Nd', 'Nl', 'No', 'Pc', 'Pd', 'Pe', 'Pf', 'Pi', 'Po',
-       'Ps', 'Sc', 'Sk', 'Sm', 'So', 'Zl', 'Zp', 'Zs',
-       # Indic_Syllabic_Category
-       'Other',
-       'Bindu',
-       'Visarga',
-       'Avagraha',
-       'Nukta',
-       'Virama',
-       'Pure_Killer',
-       'Invisible_Stacker',
-       'Vowel_Independent',
-       'Vowel_Dependent',
-       'Vowel',
-       'Consonant_Placeholder',
-       'Consonant',
-       'Consonant_Dead',
-       'Consonant_With_Stacker',
-       'Consonant_Prefixed',
-       'Consonant_Preceding_Repha',
-       'Consonant_Succeeding_Repha',
-       'Consonant_Subjoined',
-       'Consonant_Medial',
-       'Consonant_Final',
-       'Consonant_Head_Letter',
-       'Modifying_Letter',
-       'Tone_Letter',
-       'Tone_Mark',
-       'Gemination_Mark',
-       'Cantillation_Mark',
-       'Register_Shifter',
-       'Syllable_Modifier',
-       'Consonant_Killer',
-       'Non_Joiner',
-       'Joiner',
-       'Number_Joiner',
-       'Number',
-       'Brahmi_Joining_Number',
-       # Indic_Positional_Category
-       'Not_Applicable',
-       'Right',
-       'Left',
-       'Visual_Order_Left',
-       'Left_And_Right',
-       'Top',
-       'Bottom',
-       'Top_And_Bottom',
-       'Top_And_Right',
-       'Top_And_Left',
-       'Top_And_Left_And_Right',
-       'Bottom_And_Right',
-       'Top_And_Bottom_And_Right',
-       'Overstruck',
-]
-
-class PropertyValue(object):
-       def __init__(self, name_):
-               self.name = name_
-       def __str__(self):
-               return self.name
-       def __eq__(self, other):
-               return self.name == (other if isinstance(other, basestring) else other.name)
-       def __ne__(self, other):
-               return not (self == other)
-
-property_values = {}
-
-for name in property_names:
-       value = PropertyValue(name)
-       assert value not in property_values
-       assert value not in globals()
-       property_values[name] = value
-globals().update(property_values)
-
-
-def is_BASE(U, UISC, UGC):
-       return (UISC in [Number, Consonant, Consonant_Head_Letter,
-                       #SPEC-OUTDATED Consonant_Placeholder,
-                       Tone_Letter] or
-               (UGC == Lo and UISC in [Avagraha, Bindu, Consonant_Final, Consonant_Medial,
-                                       Consonant_Subjoined, Vowel, Vowel_Dependent]))
-def is_BASE_VOWEL(U, UISC, UGC):
-       return UISC == Vowel_Independent
-def is_BASE_IND(U, UISC, UGC):
-       #SPEC-BROKEN return (UISC in [Consonant_Dead, Modifying_Letter] or UGC == Po)
-       return (UISC in [Consonant_Dead, Modifying_Letter] or
-               (UGC == Po and not is_BASE_OTHER(U, UISC, UGC))) # for 104E
-def is_BASE_NUM(U, UISC, UGC):
-       return UISC == Brahmi_Joining_Number
-def is_BASE_OTHER(U, UISC, UGC):
-       if UISC == Consonant_Placeholder: return True #SPEC-OUTDATED
-       return U in [0x00A0, 0x00D7, 0x2015, 0x2022, 0x25CC,
-                    0x25FB, 0x25FC, 0x25FD, 0x25FE]
-def is_CGJ(U, UISC, UGC):
-       return U == 0x034F
-def is_CONS_FINAL(U, UISC, UGC):
-       return ((UISC == Consonant_Final and UGC != Lo) or
-               UISC == Consonant_Succeeding_Repha)
-def is_CONS_FINAL_MOD(U, UISC, UGC):
-       #SPEC-OUTDATED return  UISC in [Consonant_Final_Modifier, Syllable_Modifier]
-       return  UISC == Syllable_Modifier
-def is_CONS_MED(U, UISC, UGC):
-       return UISC == Consonant_Medial and UGC != Lo
-def is_CONS_MOD(U, UISC, UGC):
-       return UISC in [Nukta, Gemination_Mark, Consonant_Killer]
-def is_CONS_SUB(U, UISC, UGC):
-       #SPEC-OUTDATED return UISC == Consonant_Subjoined
-       return UISC == Consonant_Subjoined and UGC != Lo
-def is_HALANT(U, UISC, UGC):
-       return UISC in [Virama, Invisible_Stacker]
-def is_HALANT_NUM(U, UISC, UGC):
-       return UISC == Number_Joiner
-def is_ZWNJ(U, UISC, UGC):
-       return UISC == Non_Joiner
-def is_ZWJ(U, UISC, UGC):
-       return UISC == Joiner
-def is_Word_Joiner(U, UISC, UGC):
-       return U == 0x2060
-def is_OTHER(U, UISC, UGC):
-       #SPEC-OUTDATED return UGC == Zs # or any other SCRIPT_COMMON characters
-       return (UISC == Other
-               and not is_SYM_MOD(U, UISC, UGC)
-               and not is_CGJ(U, UISC, UGC)
-               and not is_Word_Joiner(U, UISC, UGC)
-               and not is_VARIATION_SELECTOR(U, UISC, UGC)
-       )
-def is_Reserved(U, UISC, UGC):
-       return UGC == 'Cn'
-def is_REPHA(U, UISC, UGC):
-       #return UISC == Consonant_Preceding_Repha
-       #SPEC-OUTDATED hack to categorize Consonant_With_Stacker and Consonant_Prefixed
-       return UISC in [Consonant_Preceding_Repha, Consonant_With_Stacker, Consonant_Prefixed]
-def is_SYM(U, UISC, UGC):
-       if U == 0x25CC: return False #SPEC-OUTDATED
-       #SPEC-OUTDATED return UGC in [So, Sc] or UISC == Symbol_Letter
-       return UGC in [So, Sc]
-def is_SYM_MOD(U, UISC, UGC):
-       return U in [0x1B6B, 0x1B6C, 0x1B6D, 0x1B6E, 0x1B6F, 0x1B70, 0x1B71, 0x1B72, 0x1B73]
-def is_VARIATION_SELECTOR(U, UISC, UGC):
-       return 0xFE00 <= U <= 0xFE0F
-def is_VOWEL(U, UISC, UGC):
-       return (UISC == Pure_Killer or
-               (UGC != Lo and UISC in [Vowel, Vowel_Dependent]))
-def is_VOWEL_MOD(U, UISC, UGC):
-       return (UISC in [Tone_Mark, Cantillation_Mark, Register_Shifter, Visarga] or
-               (UGC != Lo and UISC == Bindu))
-
-use_mapping = {
-       'B':    is_BASE,
-       'IV':   is_BASE_VOWEL,
-       'IND':  is_BASE_IND,
-       'N':    is_BASE_NUM,
-       'GB':   is_BASE_OTHER,
-       'CGJ':  is_CGJ,
-       'F':    is_CONS_FINAL,
-       'FM':   is_CONS_FINAL_MOD,
-       'M':    is_CONS_MED,
-       'CM':   is_CONS_MOD,
-       'SUB':  is_CONS_SUB,
-       'H':    is_HALANT,
-       'HN':   is_HALANT_NUM,
-       'ZWNJ': is_ZWNJ,
-       'ZWJ':  is_ZWJ,
-       'WJ':   is_Word_Joiner,
-       'O':    is_OTHER,
-       'Rsv':  is_Reserved,
-       'R':    is_REPHA,
-       'S':    is_SYM,
-       'SM':   is_SYM_MOD,
-       'VS':   is_VARIATION_SELECTOR,
-       'V':    is_VOWEL,
-       'VM':   is_VOWEL_MOD,
-}
-
-use_positions = {
-       'F': {
-               'Abv': [Top],
-               'Blw': [Bottom],
-               'Pst': [Right],
-       },
-       'M': {
-               'Abv': [Top],
-               'Blw': [Bottom],
-               'Pst': [Right],
-               'Pre': [Left],
-       },
-       'CM': {
-               'Abv': [Top],
-               'Blw': [Bottom],
-       },
-       'V': {
-               'Abv': [Top, Top_And_Bottom, Top_And_Bottom_And_Right, Top_And_Right],
-               'Blw': [Bottom, Overstruck, Bottom_And_Right],
-               'Pst': [Right],
-               'Pre': [Left, Top_And_Left, Top_And_Left_And_Right, Left_And_Right],
-       },
-       'VM': {
-               'Abv': [Top],
-               'Blw': [Bottom, Overstruck],
-               'Pst': [Right],
-               'Pre': [Left],
-       },
-       'SM': {
-               'Abv': [Top],
-               'Blw': [Bottom],
-       },
-       'H': None,
-       'B': None,
-       'FM': None,
-       'SUB': None,
-}
-
-def map_to_use(data):
-       out = {}
-       items = use_mapping.items()
-       for U,(UISC,UIPC,UGC,UBlock) in data.items():
-
-               # Resolve Indic_Syllabic_Category
-
-               # TODO: These don't have UISC assigned in Unicode 8.0, but
-               # have UIPC
-               if U == 0x17DD: UISC = Vowel_Dependent
-               if 0x1CE2 <= U <= 0x1CE8: UISC = Cantillation_Mark
-
-               # TODO: U+1CED should only be allowed after some of
-               # the nasalization marks, maybe only for U+1CE9..U+1CF1.
-               if U == 0x1CED: UISC = Tone_Mark
-
-               evals = [(k, v(U,UISC,UGC)) for k,v in items]
-               values = [k for k,v in evals if v]
-               assert len(values) == 1, "%s %s %s %s" % (hex(U), UISC, UGC, values)
-               USE = values[0]
-
-               # Resolve Indic_Positional_Category
-
-               # TODO: Not in Unicode 8.0 yet, but in spec.
-               if U == 0x1B6C: UIPC = Bottom
-
-               # TODO: These should die, but have UIPC in Unicode 8.0
-               if U in [0x953, 0x954]: UIPC = Not_Applicable
-
-               # TODO: In USE's override list but not in Unicode 8.0
-               if U == 0x103C: UIPC = Left
-
-               # TODO: These are not in USE's override list that we have, nor are they in Unicode 8.0
-               if 0xA926 <= U <= 0xA92A: UIPC = Top
-               if U == 0x111CA: UIPC = Bottom
-               if U == 0x11300: UIPC = Top
-               if U == 0x1133C: UIPC = Bottom
-               if U == 0x1171E: UIPC = Left # Correct?!
-               if 0x1CF2 <= U <= 0x1CF3: UIPC = Right
-               if 0x1CF8 <= U <= 0x1CF9: UIPC = Top
-
-               assert (UIPC in [Not_Applicable, Visual_Order_Left] or
-                       USE in use_positions), "%s %s %s %s %s" % (hex(U), UIPC, USE, UISC, UGC)
-
-               pos_mapping = use_positions.get(USE, None)
-               if pos_mapping:
-                       values = [k for k,v in pos_mapping.items() if v and UIPC in v]
-                       assert len(values) == 1, "%s %s %s %s %s %s" % (hex(U), UIPC, USE, UISC, UGC, values)
-                       USE = USE + values[0]
-
-               out[U] = (USE, UBlock)
-       return out
-
-defaults = ('O', 'No_Block')
-data = map_to_use(data)
-
-# Remove the outliers
-singles = {}
-for u in [0x034F, 0x25CC, 0x1107F]:
-       singles[u] = data[u]
-       del data[u]
-
-print "/* == Start of generated table == */"
-print "/*"
-print " * The following table is generated by running:"
-print " *"
-print " *   ./gen-use-table.py IndicSyllabicCategory.txt IndicPositionalCategory.txt UnicodeData.txt Blocks.txt"
-print " *"
-print " * on files with these headers:"
-print " *"
-for h in headers:
-       for l in h:
-               print " * %s" % (l.strip())
-print " */"
-print
-print '#include "hb-ot-shape-complex-use-private.hh"'
-print
-
-total = 0
-used = 0
-last_block = None
-def print_block (block, start, end, data):
-       global total, used, last_block
-       if block and block != last_block:
-               print
-               print
-               print "  /* %s */" % block
-               if start % 16:
-                       print ' ' * (20 + (start % 16 * 6)),
-       num = 0
-       assert start % 8 == 0
-       assert (end+1) % 8 == 0
-       for u in range (start, end+1):
-               if u % 16 == 0:
-                       print
-                       print "  /* %04X */" % u,
-               if u in data:
-                       num += 1
-               d = data.get (u, defaults)
-               sys.stdout.write ("%6s," % d[0])
-
-       total += end - start + 1
-       used += num
-       if block:
-               last_block = block
-
-uu = data.keys ()
-uu.sort ()
-
-last = -100000
-num = 0
-offset = 0
-starts = []
-ends = []
-for k,v in sorted(use_mapping.items()):
-       if k in use_positions and use_positions[k]: continue
-       print "#define %s       USE_%s  /* %s */" % (k, k, v.__name__[3:])
-for k,v in sorted(use_positions.items()):
-       if not v: continue
-       for suf in v.keys():
-               tag = k + suf
-               print "#define %s       USE_%s" % (tag, tag)
-print ""
-print "static const USE_TABLE_ELEMENT_TYPE use_table[] = {"
-for u in uu:
-       if u <= last:
-               continue
-       block = data[u][1]
-
-       start = u//8*8
-       end = start+1
-       while end in uu and block == data[end][1]:
-               end += 1
-       end = (end-1)//8*8 + 7
-
-       if start != last + 1:
-               if start - last <= 1+16*3:
-                       print_block (None, last+1, start-1, data)
-                       last = start-1
-               else:
-                       if last >= 0:
-                               ends.append (last + 1)
-                               offset += ends[-1] - starts[-1]
-                       print
-                       print
-                       print "#define use_offset_0x%04xu %d" % (start, offset)
-                       starts.append (start)
-
-       print_block (block, start, end, data)
-       last = end
-ends.append (last + 1)
-offset += ends[-1] - starts[-1]
-print
-print
-occupancy = used * 100. / total
-page_bits = 12
-print "}; /* Table items: %d; occupancy: %d%% */" % (offset, occupancy)
-print
-print "USE_TABLE_ELEMENT_TYPE"
-print "hb_use_get_categories (hb_codepoint_t u)"
-print "{"
-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 = "use_offset_0x%04xu" % start
-               print "      if (hb_in_range (u, 0x%04Xu, 0x%04Xu)) return use_table[u - 0x%04Xu + %s];" % (start, end-1, start, offset)
-       for u,d in singles.items ():
-               if p != u>>page_bits: continue
-               print "      if (unlikely (u == 0x%04Xu)) return %s;" % (u, d[0])
-       print "      break;"
-       print ""
-print "    default:"
-print "      break;"
-print "  }"
-print "  return USE_O;"
-print "}"
-print
-for k in sorted(use_mapping.keys()):
-       if k in use_positions and use_positions[k]: continue
-       print "#undef %s" % k
-for k,v in sorted(use_positions.items()):
-       if not v: continue
-       for suf in v.keys():
-               tag = k + suf
-               print "#undef %s" % tag
-print
-print "/* == End of generated table == */"
-
-# Maintain at least 50% occupancy in the table */
-if occupancy < 50:
-       raise Exception ("Table too sparse, please investigate: ", occupancy)
index b3e124a..7f27bbb 100644 (file)
@@ -8,6 +8,4 @@ Description: HarfBuzz text shaping library
 Version: %VERSION%
 
 Libs: -L${libdir} -lharfbuzz
-Libs.private: %libs_private%
-Requires.private: %requires_private%
 Cflags: -I${includedir}/harfbuzz
index 100ba53..e6738b7 100644 (file)
 
 /* We need external help for these */
 
-#if defined(hb_atomic_int_impl_add) \
- && defined(hb_atomic_ptr_impl_get) \
- && defined(hb_atomic_ptr_impl_cmpexch)
-
-/* Defined externally, i.e. in config.h; must have typedef'ed hb_atomic_int_impl_t as well. */
+#if 0
 
 
 #elif !defined(HB_NO_MT) && (defined(_WIN32) || defined(__CYGWIN__))
@@ -62,12 +58,11 @@ static inline void _HBMemoryBarrier (void) {
 #endif
 }
 
-typedef LONG hb_atomic_int_impl_t;
-#define HB_ATOMIC_INT_IMPL_INIT(V) (V)
-#define hb_atomic_int_impl_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_impl_get(P)              (_HBMemoryBarrier (), (void *) *(P))
-#define hb_atomic_ptr_impl_cmpexch(P,O,N)      (InterlockedCompareExchangePointer ((void **) (P), (void *) (N), (void *) (O)) == (void *) (O))
+#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))
 
 
 #elif !defined(HB_NO_MT) && defined(__APPLE__)
@@ -79,31 +74,28 @@ typedef LONG hb_atomic_int_impl_t;
 #include <Availability.h>
 #endif
 
+typedef int32_t hb_atomic_int_t;
+#define hb_atomic_int_add(AI, V)       (OSAtomicAdd32Barrier ((V), &(AI)) - (V))
 
-typedef int32_t hb_atomic_int_impl_t;
-#define HB_ATOMIC_INT_IMPL_INIT(V) (V)
-#define hb_atomic_int_impl_add(AI, V)          (OSAtomicAdd32Barrier ((V), &(AI)) - (V))
-
-#define hb_atomic_ptr_impl_get(P)              (OSMemoryBarrier (), (void *) *(P))
+#define hb_atomic_ptr_get(P)           (OSMemoryBarrier (), (void *) *(P))
 #if (MAC_OS_X_VERSION_MIN_REQUIRED > MAC_OS_X_VERSION_10_4 || __IPHONE_VERSION_MIN_REQUIRED >= 20100)
-#define hb_atomic_ptr_impl_cmpexch(P,O,N)      OSAtomicCompareAndSwapPtrBarrier ((void *) (O), (void *) (N), (void **) (P))
+#define hb_atomic_ptr_cmpexch(P,O,N)   OSAtomicCompareAndSwapPtrBarrier ((void *) (O), (void *) (N), (void **) (P))
 #else
 #if __ppc64__ || __x86_64__ || __aarch64__
-#define hb_atomic_ptr_impl_cmpexch(P,O,N)      OSAtomicCompareAndSwap64Barrier ((int64_t) (O), (int64_t) (N), (int64_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_impl_cmpexch(P,O,N)      OSAtomicCompareAndSwap32Barrier ((int32_t) (O), (int32_t) (N), (int32_t*) (P))
+#define hb_atomic_ptr_cmpexch(P,O,N)    OSAtomicCompareAndSwap32Barrier ((int32_t) (O), (int32_t) (N), (int32_t*) (P))
 #endif
 #endif
 
 
 #elif !defined(HB_NO_MT) && defined(HAVE_INTEL_ATOMIC_PRIMITIVES)
 
-typedef int hb_atomic_int_impl_t;
-#define HB_ATOMIC_INT_IMPL_INIT(V) (V)
-#define hb_atomic_int_impl_add(AI, V)          __sync_fetch_and_add (&(AI), (V))
+typedef int hb_atomic_int_t;
+#define hb_atomic_int_add(AI, V)       __sync_fetch_and_add (&(AI), (V))
 
-#define hb_atomic_ptr_impl_get(P)              (void *) (__sync_synchronize (), *(P))
-#define hb_atomic_ptr_impl_cmpexch(P,O,N)      __sync_bool_compare_and_swap ((P), (O), (N))
+#define hb_atomic_ptr_get(P)           (void *) (__sync_synchronize (), *(P))
+#define hb_atomic_ptr_cmpexch(P,O,N)   __sync_bool_compare_and_swap ((P), (O), (N))
 
 
 #elif !defined(HB_NO_MT) && defined(HAVE_SOLARIS_ATOMIC_OPS)
@@ -111,79 +103,33 @@ typedef int hb_atomic_int_impl_t;
 #include <atomic.h>
 #include <mbarrier.h>
 
-typedef unsigned int hb_atomic_int_impl_t;
-#define HB_ATOMIC_INT_IMPL_INIT(V) (V)
-#define hb_atomic_int_impl_add(AI, V)          ( ({__machine_rw_barrier ();}), atomic_add_int_nv (&(AI), (V)) - (V))
-
-#define hb_atomic_ptr_impl_get(P)              ( ({__machine_rw_barrier ();}), (void *) *(P))
-#define hb_atomic_ptr_impl_cmpexch(P,O,N)      ( ({__machine_rw_barrier ();}), atomic_cas_ptr ((void **) (P), (void *) (O), (void *) (N)) == (void *) (O) ? true : false)
-
-
-#elif !defined(HB_NO_MT) && defined(_AIX) && defined(__IBMCPP__)
-
-#include <builtins.h>
-
-
-static inline int hb_fetch_and_add(volatile int* AI, unsigned int V) {
-  __lwsync();
-  int result = __fetch_and_add(AI, V);
-  __isync();
-  return result;
-}
-static inline int hb_compare_and_swaplp(volatile long* P, long O, long N) {
-  __sync();
-  int result = __compare_and_swaplp (P, &O, N);
-  __sync();
-  return result;
-}
+typedef unsigned int hb_atomic_int_t;
+#define hb_atomic_int_add(AI, V)       ( ({__machine_rw_barrier ();}), atomic_add_int_nv (&(AI), (V)) - (V))
 
-typedef int hb_atomic_int_impl_t;
-#define HB_ATOMIC_INT_IMPL_INIT(V) (V)
-#define hb_atomic_int_impl_add(AI, V)           hb_fetch_and_add (&(AI), (V))
+#define hb_atomic_ptr_get(P)           ( ({__machine_rw_barrier ();}), (void *) *(P))
+#define hb_atomic_ptr_cmpexch(P,O,N)   ( ({__machine_rw_barrier ();}), atomic_cas_ptr ((void **) (P), (void *) (O), (void *) (N)) == (void *) (O) ? true : false)
 
-#define hb_atomic_ptr_impl_get(P)               (__sync(), (void *) *(P))
-#define hb_atomic_ptr_impl_cmpexch(P,O,N)       hb_compare_and_swaplp ((long*)(P), (long)(O), (long)(N))
 
 #elif !defined(HB_NO_MT)
 
 #define HB_ATOMIC_INT_NIL 1 /* Warn that fallback implementation is in use. */
+typedef volatile int hb_atomic_int_t;
+#define hb_atomic_int_add(AI, V)       (((AI) += (V)) - (V))
 
-typedef volatile int hb_atomic_int_impl_t;
-#define HB_ATOMIC_INT_IMPL_INIT(V) (V)
-#define hb_atomic_int_impl_add(AI, V)          (((AI) += (V)) - (V))
-
-#define hb_atomic_ptr_impl_get(P)              ((void *) *(P))
-#define hb_atomic_ptr_impl_cmpexch(P,O,N)      (* (void * volatile *) (P) == (void *) (O) ? (* (void * volatile *) (P) = (void *) (N), true) : false)
+#define hb_atomic_ptr_get(P)           ((void *) *(P))
+#define hb_atomic_ptr_cmpexch(P,O,N)   (* (void * volatile *) (P) == (void *) (O) ? (* (void * volatile *) (P) = (void *) (N), true) : false)
 
 
 #else /* HB_NO_MT */
 
-typedef int hb_atomic_int_impl_t;
-#define HB_ATOMIC_INT_IMPL_INIT(V)             (V)
-#define hb_atomic_int_impl_add(AI, V)          (((AI) += (V)) - (V))
-
-#define hb_atomic_ptr_impl_get(P)              ((void *) *(P))
-#define hb_atomic_ptr_impl_cmpexch(P,O,N)      (* (void **) (P) == (void *) (O) ? (* (void **) (P) = (void *) (N), true) : false)
+typedef int hb_atomic_int_t;
+#define hb_atomic_int_add(AI, V)       (((AI) += (V)) - (V))
 
+#define hb_atomic_ptr_get(P)           ((void *) *(P))
+#define hb_atomic_ptr_cmpexch(P,O,N)   (* (void **) (P) == (void *) (O) ? (* (void **) (P) = (void *) (N), true) : false)
 
 #endif
 
-
-#define HB_ATOMIC_INT_INIT(V)          {HB_ATOMIC_INT_IMPL_INIT(V)}
-
-struct hb_atomic_int_t
-{
-  hb_atomic_int_impl_t v;
-
-  inline void set_unsafe (int v_) { v = v_; }
-  inline int get_unsafe (void) const { return v; }
-  inline int inc (void) { return hb_atomic_int_impl_add (const_cast<hb_atomic_int_impl_t &> (v),  1); }
-  inline int dec (void) { return hb_atomic_int_impl_add (const_cast<hb_atomic_int_impl_t &> (v), -1); }
-};
-
-
-#define hb_atomic_ptr_get(P) hb_atomic_ptr_impl_get(P)
-#define hb_atomic_ptr_cmpexch(P,O,N) hb_atomic_ptr_impl_cmpexch((P),(O),(N))
-
+/* TODO Add tracing. */
 
 #endif /* HB_ATOMIC_PRIVATE_HH */
index fb48f03..8759a25 100644 (file)
@@ -91,7 +91,7 @@ _hb_blob_destroy_user_data (hb_blob_t *blob)
  * Return value: New blob, or the empty blob if something failed or if @length is
  * zero.  Destroy with hb_blob_destroy().
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_blob_t *
 hb_blob_create (const char        *data,
@@ -104,6 +104,7 @@ hb_blob_create (const char        *data,
 
   if (!length ||
       length >= 1u << 31 ||
+      data + length < data /* overflows */ ||
       !(blob = hb_object_create<hb_blob_t> ())) {
     if (destroy)
       destroy (user_data);
@@ -146,7 +147,7 @@ hb_blob_create (const char        *data,
  * @length is zero or @offset is beyond the end of @parent's data.  Destroy
  * with hb_blob_destroy().
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_blob_t *
 hb_blob_create_sub_blob (hb_blob_t    *parent,
@@ -178,7 +179,7 @@ hb_blob_create_sub_blob (hb_blob_t    *parent,
  *
  * Return value: (transfer full): the empty blob.
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_blob_t *
 hb_blob_get_empty (void)
@@ -209,7 +210,7 @@ hb_blob_get_empty (void)
  *
  * Return value: @blob.
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_blob_t *
 hb_blob_reference (hb_blob_t *blob)
@@ -227,7 +228,7 @@ hb_blob_reference (hb_blob_t *blob)
  *
  * See TODO:link object types for more information.
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 void
 hb_blob_destroy (hb_blob_t *blob)
@@ -249,7 +250,7 @@ hb_blob_destroy (hb_blob_t *blob)
  *
  * Return value: 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_bool_t
 hb_blob_set_user_data (hb_blob_t          *blob,
@@ -270,7 +271,7 @@ hb_blob_set_user_data (hb_blob_t          *blob,
  *
  * Return value: (transfer none): 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 void *
 hb_blob_get_user_data (hb_blob_t          *blob,
@@ -286,7 +287,7 @@ hb_blob_get_user_data (hb_blob_t          *blob,
  *
  * 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 void
 hb_blob_make_immutable (hb_blob_t *blob)
@@ -305,7 +306,7 @@ hb_blob_make_immutable (hb_blob_t *blob)
  *
  * Return value: TODO
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_bool_t
 hb_blob_is_immutable (hb_blob_t *blob)
@@ -322,7 +323,7 @@ hb_blob_is_immutable (hb_blob_t *blob)
  *
  * Return value: the length of blob data in bytes.
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 unsigned int
 hb_blob_get_length (hb_blob_t *blob)
@@ -339,7 +340,7 @@ hb_blob_get_length (hb_blob_t *blob)
  *
  * Returns: (transfer none) (array length=length): 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 const char *
 hb_blob_get_data (hb_blob_t *blob, unsigned int *length)
@@ -364,7 +365,7 @@ hb_blob_get_data (hb_blob_t *blob, unsigned int *length)
  * Returns: (transfer none) (array length=length): Writable blob data,
  * or %NULL if failed.
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 char *
 hb_blob_get_data_writable (hb_blob_t *blob, unsigned int *length)
index ef3fc98..b2419ab 100644 (file)
@@ -64,7 +64,7 @@ typedef enum {
 
 typedef struct hb_blob_t hb_blob_t;
 
-HB_EXTERN hb_blob_t *
+hb_blob_t *
 hb_blob_create (const char        *data,
                unsigned int       length,
                hb_memory_mode_t   mode,
@@ -77,21 +77,21 @@ hb_blob_create (const char        *data,
  * modify the parent data as that data may be
  * shared among multiple sub-blobs.
  */
-HB_EXTERN hb_blob_t *
+hb_blob_t *
 hb_blob_create_sub_blob (hb_blob_t    *parent,
                         unsigned int  offset,
                         unsigned int  length);
 
-HB_EXTERN hb_blob_t *
+hb_blob_t *
 hb_blob_get_empty (void);
 
-HB_EXTERN hb_blob_t *
+hb_blob_t *
 hb_blob_reference (hb_blob_t *blob);
 
-HB_EXTERN void
+void
 hb_blob_destroy (hb_blob_t *blob);
 
-HB_EXTERN hb_bool_t
+hb_bool_t
 hb_blob_set_user_data (hb_blob_t          *blob,
                       hb_user_data_key_t *key,
                       void *              data,
@@ -99,25 +99,25 @@ hb_blob_set_user_data (hb_blob_t          *blob,
                       hb_bool_t           replace);
 
 
-HB_EXTERN void *
+void *
 hb_blob_get_user_data (hb_blob_t          *blob,
                       hb_user_data_key_t *key);
 
 
-HB_EXTERN void
+void
 hb_blob_make_immutable (hb_blob_t *blob);
 
-HB_EXTERN hb_bool_t
+hb_bool_t
 hb_blob_is_immutable (hb_blob_t *blob);
 
 
-HB_EXTERN unsigned int
+unsigned int
 hb_blob_get_length (hb_blob_t *blob);
 
-HB_EXTERN const char *
+const char *
 hb_blob_get_data (hb_blob_t *blob, unsigned int *length);
 
-HB_EXTERN char *
+char *
 hb_blob_get_data_writable (hb_blob_t *blob, unsigned int *length);
 
 
index d2d8daa..7a46ab2 100644 (file)
@@ -336,8 +336,8 @@ _hb_buffer_deserialize_glyphs_text (hb_buffer_t *buffer,
 
   const char *eof = pe, *tok = NULL;
   int cs;
-  hb_glyph_info_t info = {0};
-  hb_glyph_position_t pos = {0};
+  hb_glyph_info_t info;
+  hb_glyph_position_t pos;
   
 #line 343 "hb-buffer-deserialize-text.hh"
        {
index 8a682f7..8856580 100644 (file)
@@ -111,8 +111,8 @@ _hb_buffer_deserialize_glyphs_text (hb_buffer_t *buffer,
 
   const char *eof = pe, *tok = NULL;
   int cs;
-  hb_glyph_info_t info = {0};
-  hb_glyph_position_t pos = {0};
+  hb_glyph_info_t info;
+  hb_glyph_position_t pos;
   %%{
     write init;
     write exec;
index ed592f4..069f925 100644 (file)
 #include "hb-unicode-private.hh"
 
 
-#ifndef HB_BUFFER_MAX_EXPANSION_FACTOR
-#define HB_BUFFER_MAX_EXPANSION_FACTOR 32
-#endif
-#ifndef HB_BUFFER_MAX_LEN_MIN
-#define HB_BUFFER_MAX_LEN_MIN 8192
-#endif
-#ifndef HB_BUFFER_MAX_LEN_DEFAULT
-#define HB_BUFFER_MAX_LEN_DEFAULT 0x3FFFFFFF /* Shaping more than a billion chars? Let us know! */
-#endif
-
 ASSERT_STATIC (sizeof (hb_glyph_info_t) == 20);
 ASSERT_STATIC (sizeof (hb_glyph_info_t) == sizeof (hb_glyph_position_t));
 
-HB_MARK_AS_FLAG_T (hb_buffer_flags_t);
-HB_MARK_AS_FLAG_T (hb_buffer_serialize_flags_t);
-
-enum hb_buffer_scratch_flags_t {
-  HB_BUFFER_SCRATCH_FLAG_DEFAULT                       = 0x00000000u,
-  HB_BUFFER_SCRATCH_FLAG_HAS_NON_ASCII                 = 0x00000001u,
-  HB_BUFFER_SCRATCH_FLAG_HAS_DEFAULT_IGNORABLES                = 0x00000002u,
-  HB_BUFFER_SCRATCH_FLAG_HAS_SPACE_FALLBACK            = 0x00000004u,
-  HB_BUFFER_SCRATCH_FLAG_HAS_GPOS_ATTACHMENT           = 0x00000008u,
-  /* Reserved for complex shapers' internal use. */
-  HB_BUFFER_SCRATCH_FLAG_COMPLEX0                      = 0x01000000u,
-  HB_BUFFER_SCRATCH_FLAG_COMPLEX1                      = 0x02000000u,
-  HB_BUFFER_SCRATCH_FLAG_COMPLEX2                      = 0x04000000u,
-  HB_BUFFER_SCRATCH_FLAG_COMPLEX3                      = 0x08000000u,
-};
-HB_MARK_AS_FLAG_T (hb_buffer_scratch_flags_t);
-
 
 /*
  * hb_buffer_t
@@ -77,10 +50,7 @@ struct hb_buffer_t {
   /* Information about how the text in the buffer should be treated */
   hb_unicode_funcs_t *unicode; /* Unicode functions */
   hb_buffer_flags_t flags; /* BOT / EOT / etc. */
-  hb_buffer_cluster_level_t cluster_level;
   hb_codepoint_t replacement; /* U+FFFD or something else. */
-  hb_buffer_scratch_flags_t scratch_flags; /* Have space-flallback, etc. */
-  unsigned int max_len; /* Maximum allowed len. */
 
   /* Buffer contents */
   hb_buffer_content_type_t content_type;
@@ -105,13 +75,17 @@ struct hb_buffer_t {
   inline hb_glyph_position_t &cur_pos (unsigned int i = 0) { return pos[idx + i]; }
   inline hb_glyph_position_t cur_pos (unsigned int i = 0) const { return pos[idx + i]; }
 
-  inline hb_glyph_info_t &prev (void) { return out_info[out_len ? out_len - 1 : 0]; }
-  inline hb_glyph_info_t prev (void) const { return out_info[out_len ? out_len - 1 : 0]; }
+  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. */
+  uint8_t allocated_var_bytes[8];
+  const char *allocated_var_owner[8];
+
   /* Text before / after the main buffer contents.
    * Always in Unicode, and ordered outward.
    * Index 0 is for "pre-context", 1 for "post-context". */
@@ -119,52 +93,6 @@ struct hb_buffer_t {
   hb_codepoint_t context[2][CONTEXT_LENGTH];
   unsigned int context_len[2];
 
-  /* Debugging API */
-  hb_buffer_message_func_t message_func;
-  void *message_data;
-  hb_destroy_func_t message_destroy;
-
-  /* Internal debugging. */
-  /* The bits here reflect current allocations of the bytes in glyph_info_t's var1 and var2. */
-#ifndef HB_NDEBUG
-  uint8_t allocated_var_bits;
-#endif
-  inline void allocate_var (unsigned int start, unsigned int count)
-  {
-#ifndef HB_NDEBUG
-    unsigned int end = start + count;
-    assert (end <= 8);
-    unsigned int bits = (1<<end) - (1<<start);
-    assert (0 == (allocated_var_bits & bits));
-    allocated_var_bits |= bits;
-#endif
-  }
-  inline void deallocate_var (unsigned int start, unsigned int count)
-  {
-#ifndef HB_NDEBUG
-    unsigned int end = start + count;
-    assert (end <= 8);
-    unsigned int bits = (1<<end) - (1<<start);
-    assert (bits == (allocated_var_bits & bits));
-    allocated_var_bits &= ~bits;
-#endif
-  }
-  inline void assert_var (unsigned int start, unsigned int count)
-  {
-#ifndef HB_NDEBUG
-    unsigned int end = start + count;
-    assert (end <= 8);
-    unsigned int bits = (1<<end) - (1<<start);
-    assert (bits == (allocated_var_bits & bits));
-#endif
-  }
-  inline void deallocate_var_all (void)
-  {
-#ifndef HB_NDEBUG
-    allocated_var_bits = 0;
-#endif
-  }
-
 
   /* Methods */
 
@@ -177,6 +105,11 @@ struct hb_buffer_t {
   { 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);
+  HB_INTERNAL void deallocate_var (unsigned int byte_i, unsigned int count, const char *owner);
+  HB_INTERNAL void assert_var (unsigned int byte_i, unsigned int count, const char *owner);
+  HB_INTERNAL void deallocate_var_all (void);
+
   HB_INTERNAL void add (hb_codepoint_t  codepoint,
                        unsigned int    cluster);
   HB_INTERNAL void add_info (const hb_glyph_info_t &glyph_info);
@@ -238,18 +171,9 @@ struct hb_buffer_t {
                              unsigned int cluster_end);
 
   HB_INTERNAL void merge_clusters (unsigned int start,
-                                  unsigned int end)
-  {
-    if (end - start < 2)
-      return;
-    merge_clusters_impl (start, end);
-  }
-  HB_INTERNAL void merge_clusters_impl (unsigned int start,
-                                       unsigned int end);
+                                  unsigned int end);
   HB_INTERNAL void merge_out_clusters (unsigned int start,
                                       unsigned int end);
-  /* Merge clusters for deleting current glyph, and skip it. */
-  HB_INTERNAL void delete_glyph (void);
 
   /* Internal methods */
   HB_INTERNAL bool enlarge (unsigned int size);
@@ -267,30 +191,18 @@ struct hb_buffer_t {
   HB_INTERNAL scratch_buffer_t *get_scratch_buffer (unsigned int *size);
 
   inline void clear_context (unsigned int side) { context_len[side] = 0; }
-
-  HB_INTERNAL void sort (unsigned int start, unsigned int end, int(*compar)(const hb_glyph_info_t *, const hb_glyph_info_t *));
-
-  inline bool messaging (void) { return unlikely (message_func); }
-  inline bool message (hb_font_t *font, const char *fmt, ...) HB_PRINTF_FUNC(3, 4)
-  {
-    if (!messaging ())
-      return true;
-    va_list ap;
-    va_start (ap, fmt);
-    bool ret = message_impl (font, fmt, ap);
-    va_end (ap);
-    return ret;
-  }
-  HB_INTERNAL bool message_impl (hb_font_t *font, const char *fmt, va_list ap) HB_PRINTF_FUNC(3, 0);
 };
 
 
-#define HB_BUFFER_XALLOCATE_VAR(b, func, var) \
+#define HB_BUFFER_XALLOCATE_VAR(b, func, var, owner) \
   b->func (offsetof (hb_glyph_info_t, var) - offsetof(hb_glyph_info_t, var1), \
-          sizeof (b->info[0].var))
-#define HB_BUFFER_ALLOCATE_VAR(b, var)         HB_BUFFER_XALLOCATE_VAR (b, allocate_var,   var ())
-#define HB_BUFFER_DEALLOCATE_VAR(b, var)       HB_BUFFER_XALLOCATE_VAR (b, deallocate_var, var ())
-#define HB_BUFFER_ASSERT_VAR(b, var)           HB_BUFFER_XALLOCATE_VAR (b, assert_var,     var ())
+          sizeof (b->info[0].var), owner)
+#define HB_BUFFER_ALLOCATE_VAR(b, var) \
+       HB_BUFFER_XALLOCATE_VAR (b, allocate_var, var (), #var)
+#define HB_BUFFER_DEALLOCATE_VAR(b, var) \
+       HB_BUFFER_XALLOCATE_VAR (b, deallocate_var, var (), #var)
+#define HB_BUFFER_ASSERT_VAR(b, var) \
+       HB_BUFFER_XALLOCATE_VAR (b, assert_var, var (), #var)
 
 
 #endif /* HB_BUFFER_PRIVATE_HH */
index 63a0f34..406d69d 100644 (file)
@@ -36,12 +36,11 @@ static const char *serialize_formats[] = {
 /**
  * hb_buffer_serialize_list_formats:
  *
- * Returns a list of supported buffer serialization formats.
+ * 
  *
  * Return value: (transfer none):
- * A string array of buffer serialization formats. Should not be freed.
  *
- * Since: 0.9.7
+ * Since: 1.0
  **/
 const char **
 hb_buffer_serialize_list_formats (void)
@@ -51,17 +50,14 @@ hb_buffer_serialize_list_formats (void)
 
 /**
  * hb_buffer_serialize_format_from_string:
- * @str: (array length=len) (element-type uint8_t): a string to parse
- * @len: length of @str, or -1 if string is %NULL terminated
+ * @str: 
+ * @len: 
  *
- * Parses a string into an #hb_buffer_serialize_format_t. Does not check if
- * @str is a valid buffer serialization format, use
- * hb_buffer_serialize_list_formats() to get the list of supported formats.
+ * 
  *
  * Return value: 
- * The parsed #hb_buffer_serialize_format_t.
  *
- * Since: 0.9.7
+ * Since: 1.0
  **/
 hb_buffer_serialize_format_t
 hb_buffer_serialize_format_from_string (const char *str, int len)
@@ -72,15 +68,13 @@ hb_buffer_serialize_format_from_string (const char *str, int len)
 
 /**
  * hb_buffer_serialize_format_to_string:
- * @format: an #hb_buffer_serialize_format_t to convert.
+ * @format: 
  *
- * Converts @format to the string corresponding it, or %NULL if it is not a valid
- * #hb_buffer_serialize_format_t.
+ * 
  *
- * Return value: (transfer none):
- * A %NULL terminated string corresponding to @format. Should not be freed.
+ * Return value: 
  *
- * Since: 0.9.7
+ * Since: 1.0
  **/
 const char *
 hb_buffer_serialize_format_to_string (hb_buffer_serialize_format_t format)
@@ -105,8 +99,7 @@ _hb_buffer_serialize_glyphs_json (hb_buffer_t *buffer,
                                  hb_buffer_serialize_flags_t flags)
 {
   hb_glyph_info_t *info = hb_buffer_get_glyph_infos (buffer, NULL);
-  hb_glyph_position_t *pos = (flags & HB_BUFFER_SERIALIZE_FLAG_NO_POSITIONS) ?
-                            NULL : hb_buffer_get_glyph_positions (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++)
@@ -151,16 +144,6 @@ _hb_buffer_serialize_glyphs_json (hb_buffer_t *buffer,
                     pos[i].x_advance, pos[i].y_advance);
     }
 
-    if (flags & HB_BUFFER_SERIALIZE_FLAG_GLYPH_EXTENTS)
-    {
-      hb_glyph_extents_t extents;
-      hb_font_get_glyph_extents(font, info[i].codepoint, &extents);
-      p += MAX (0, snprintf (p, ARRAY_LENGTH (b) - (p - b), ",\"xb\":%d,\"yb\":%d",
-        extents.x_bearing, extents.y_bearing));
-      p += MAX (0, snprintf (p, ARRAY_LENGTH (b) - (p - b), ",\"w\":%d,\"h\":%d",
-        extents.width, extents.height));
-    }
-
     *p++ = '}';
 
     unsigned int l = p - b;
@@ -189,8 +172,7 @@ _hb_buffer_serialize_glyphs_text (hb_buffer_t *buffer,
                                  hb_buffer_serialize_flags_t flags)
 {
   hb_glyph_info_t *info = hb_buffer_get_glyph_infos (buffer, NULL);
-  hb_glyph_position_t *pos = (flags & HB_BUFFER_SERIALIZE_FLAG_NO_POSITIONS) ?
-                            NULL : hb_buffer_get_glyph_positions (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++)
@@ -226,13 +208,6 @@ _hb_buffer_serialize_glyphs_text (hb_buffer_t *buffer,
        p += MAX (0, snprintf (p, ARRAY_LENGTH (b) - (p - b), ",%d", pos[i].y_advance));
     }
 
-    if (flags & HB_BUFFER_SERIALIZE_FLAG_GLYPH_EXTENTS)
-    {
-      hb_glyph_extents_t extents;
-      hb_font_get_glyph_extents(font, info[i].codepoint, &extents);
-      p += MAX (0, snprintf (p, ARRAY_LENGTH (b) - (p - b), "<%d,%d,%d,%d>", extents.x_bearing, extents.y_bearing, extents.width, extents.height));
-    }
-
     unsigned int l = p - b;
     if (buf_size > l)
     {
@@ -248,51 +223,24 @@ _hb_buffer_serialize_glyphs_text (hb_buffer_t *buffer,
   return end - start;
 }
 
+/* Returns number of items, starting at start, that were serialized. */
 /**
  * hb_buffer_serialize_glyphs:
- * @buffer: an #hb_buffer_t buffer.
- * @start: the first item in @buffer to serialize.
- * @end: the last item in @buffer to serialize.
- * @buf: (out) (array length=buf_size) (element-type uint8_t): output string to
- *       write serialized buffer into.
- * @buf_size: the size of @buf.
- * @buf_consumed: (out) (allow-none): if not %NULL, will be set to the number of byes written into @buf.
- * @font: (allow-none): the #hb_font_t used to shape this buffer, needed to
- *        read glyph names and extents. If %NULL, and empty font will be used.
- * @format: the #hb_buffer_serialize_format_t to use for formatting the output.
- * @flags: the #hb_buffer_serialize_flags_t that control what glyph properties
- *         to serialize.
- *
- * Serializes @buffer into a textual representation of its glyph content,
- * useful for showing the contents of the buffer, for example during debugging.
- * There are currently two supported serialization formats:
- *
- * ## text
- * A human-readable, plain text format.
- * The serialized glyphs will look something like:
- *
- * ```
- * [uni0651=0@518,0+0|uni0628=0+1897]
- * ```
- * - The serialized glyphs are delimited with `[` and `]`.
- * - Glyphs are separated with `|`
- * - Each glyph starts with glyph name, or glyph index if
- *   #HB_BUFFER_SERIALIZE_FLAG_NO_GLYPH_NAMES flag is set. Then,
- *   - If #HB_BUFFER_SERIALIZE_FLAG_NO_CLUSTERS is not set, `=` then #hb_glyph_info_t.cluster.
- *   - If #HB_BUFFER_SERIALIZE_FLAG_NO_POSITIONS is not set, the #hb_glyph_position_t in the format:
- *     - If both #hb_glyph_position_t.x_offset and #hb_glyph_position_t.y_offset are not 0, `@x_offset,y_offset`. Then,
- *     - `+x_advance`, then `,y_advance` if #hb_glyph_position_t.y_advance is not 0. Then,
- *   - If #HB_BUFFER_SERIALIZE_FLAG_GLYPH_EXTENTS is set, the
- *     #hb_glyph_extents_t in the format
- *     `&lt;x_bearing,y_bearing,width,height&gt;`
+ * @buffer: a buffer.
+ * @start: 
+ * @end: 
+ * @buf: (array length=buf_size):
+ * @buf_size: 
+ * @buf_consumed: (out):
+ * @font: 
+ * @format: 
+ * @flags: 
  *
- * ## json
- * TODO.
+ * 
  *
  * Return value: 
- * The number of serialized items.
  *
- * Since: 0.9.7
+ * Since: 1.0
  **/
 unsigned int
 hb_buffer_serialize_glyphs (hb_buffer_t *buffer,
@@ -300,8 +248,8 @@ hb_buffer_serialize_glyphs (hb_buffer_t *buffer,
                            unsigned int end,
                            char *buf,
                            unsigned int buf_size,
-                           unsigned int *buf_consumed,
-                           hb_font_t *font,
+                           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)
 {
@@ -315,9 +263,6 @@ hb_buffer_serialize_glyphs (hb_buffer_t *buffer,
   assert ((!buffer->len && buffer->content_type == HB_BUFFER_CONTENT_TYPE_INVALID) ||
          buffer->content_type == HB_BUFFER_CONTENT_TYPE_GLYPHS);
 
-  if (!buffer->have_positions)
-    flags |= HB_BUFFER_SERIALIZE_FLAG_NO_POSITIONS;
-
   if (unlikely (start == end))
     return 0;
 
@@ -391,7 +336,7 @@ parse_int (const char *pp, const char *end, int32_t *pv)
 
 /**
  * hb_buffer_deserialize_glyphs:
- * @buffer: an #hb_buffer_t buffer.
+ * @buffer: a buffer.
  * @buf: (array length=buf_len):
  * @buf_len: 
  * @end_ptr: (out):
@@ -402,7 +347,7 @@ parse_int (const char *pp, const char *end, int32_t *pv)
  *
  * Return value: 
  *
- * Since: 0.9.7
+ * Since: 1.0
  **/
 hb_bool_t
 hb_buffer_deserialize_glyphs (hb_buffer_t *buffer,
index 406db9c..b9fe263 100644 (file)
 #define HB_DEBUG_BUFFER (HB_DEBUG+0)
 #endif
 
-/**
- * SECTION: hb-buffer
- * @title: Buffers
- * @short_description: Input and output buffers
- * @include: hb.h
- *
- * Buffers serve dual role in HarfBuzz; they hold the input characters that are
- * passed hb_shape(), and after shaping they hold the output glyphs.
- **/
 
-/**
- * hb_segment_properties_equal:
- * @a: first #hb_segment_properties_t to compare.
- * @b: second #hb_segment_properties_t to compare.
- *
- * Checks the equality of two #hb_segment_properties_t's.
- *
- * Return value: (transfer full):
- * %true if all properties of @a equal those of @b, false otherwise.
- *
- * Since: 0.9.7
- **/
 hb_bool_t
 hb_segment_properties_equal (const hb_segment_properties_t *a,
                             const hb_segment_properties_t *b)
@@ -69,17 +48,6 @@ hb_segment_properties_equal (const hb_segment_properties_t *a,
 
 }
 
-/**
- * hb_segment_properties_hash:
- * @p: #hb_segment_properties_t to hash.
- *
- * Creates a hash representing @p.
- *
- * Return value:
- * A hash of @p.
- *
- * Since: 0.9.7
- **/
 unsigned int
 hb_segment_properties_hash (const hb_segment_properties_t *p)
 {
@@ -117,11 +85,6 @@ hb_buffer_t::enlarge (unsigned int size)
 {
   if (unlikely (in_error))
     return false;
-  if (unlikely (size > max_len))
-  {
-    in_error = true;
-    return false;
-  }
 
   unsigned int new_allocated = allocated;
   hb_glyph_position_t *new_pos = NULL;
@@ -229,7 +192,6 @@ hb_buffer_t::clear (void)
 
   hb_segment_properties_t default_props = HB_SEGMENT_PROPERTIES_DEFAULT;
   props = default_props;
-  scratch_flags = HB_BUFFER_SCRATCH_FLAG_DEFAULT;
 
   content_type = HB_BUFFER_CONTENT_TYPE_INVALID;
   in_error = false;
@@ -242,11 +204,11 @@ hb_buffer_t::clear (void)
   out_info = info;
 
   serial = 0;
+  memset (allocated_var_bytes, 0, sizeof allocated_var_bytes);
+  memset (allocated_var_owner, 0, sizeof allocated_var_owner);
 
   memset (context, 0, sizeof context);
   memset (context_len, 0, sizeof context_len);
-
-  deallocate_var_all ();
 }
 
 void
@@ -407,8 +369,6 @@ hb_buffer_t::move_to (unsigned int i)
     idx = i;
     return true;
   }
-  if (unlikely (in_error))
-    return false;
 
   assert (i <= out_len + (len - idx));
 
@@ -538,10 +498,14 @@ hb_buffer_t::reverse_clusters (void)
 }
 
 void
-hb_buffer_t::merge_clusters_impl (unsigned int start,
-                                 unsigned int end)
+hb_buffer_t::merge_clusters (unsigned int start,
+                            unsigned int end)
 {
-  if (cluster_level == HB_BUFFER_CLUSTER_LEVEL_CHARACTERS)
+#ifdef HB_NO_MERGE_CLUSTERS
+  return;
+#endif
+
+  if (unlikely (end - start < 2))
     return;
 
   unsigned int cluster = info[start].cluster;
@@ -559,7 +523,7 @@ hb_buffer_t::merge_clusters_impl (unsigned int start,
 
   /* If we hit the start of buffer, continue in out-buffer. */
   if (idx == start)
-    for (unsigned int i = out_len; i && out_info[i - 1].cluster == info[start].cluster; i--)
+    for (unsigned i = out_len; i && out_info[i - 1].cluster == info[start].cluster; i--)
       out_info[i - 1].cluster = cluster;
 
   for (unsigned int i = start; i < end; i++)
@@ -569,8 +533,9 @@ void
 hb_buffer_t::merge_out_clusters (unsigned int start,
                                 unsigned int end)
 {
-  if (cluster_level == HB_BUFFER_CLUSTER_LEVEL_CHARACTERS)
-    return;
+#ifdef HB_NO_MERGE_CLUSTERS
+  return;
+#endif
 
   if (unlikely (end - start < 2))
     return;
@@ -590,44 +555,12 @@ hb_buffer_t::merge_out_clusters (unsigned int start,
 
   /* If we hit the end of out-buffer, continue in buffer. */
   if (end == out_len)
-    for (unsigned int i = idx; i < len && info[i].cluster == out_info[end - 1].cluster; i++)
+    for (unsigned i = idx; i < len && info[i].cluster == out_info[end - 1].cluster; i++)
       info[i].cluster = cluster;
 
   for (unsigned int i = start; i < end; i++)
     out_info[i].cluster = cluster;
 }
-void
-hb_buffer_t::delete_glyph ()
-{
-  unsigned int cluster = info[idx].cluster;
-  if (idx + 1 < len && cluster == info[idx + 1].cluster)
-  {
-    /* Cluster survives; do nothing. */
-    goto done;
-  }
-
-  if (out_len)
-  {
-    /* Merge cluster backward. */
-    if (cluster < out_info[out_len - 1].cluster)
-    {
-      unsigned int old_cluster = out_info[out_len - 1].cluster;
-      for (unsigned i = out_len; i && out_info[i - 1].cluster == old_cluster; i--)
-       out_info[i - 1].cluster = cluster;
-    }
-    goto done;
-  }
-
-  if (idx + 1 < len)
-  {
-    /* Merge cluster forward. */
-    merge_clusters (idx, idx + 2);
-    goto done;
-  }
-
-done:
-  skip_glyph ();
-}
 
 void
 hb_buffer_t::guess_segment_properties (void)
@@ -661,21 +594,84 @@ hb_buffer_t::guess_segment_properties (void)
 }
 
 
+static inline void
+dump_var_allocation (const hb_buffer_t *buffer)
+{
+  char buf[80];
+  for (unsigned int i = 0; i < 8; i++)
+    buf[i] = '0' + buffer->allocated_var_bytes[7 - i];
+  buf[8] = '\0';
+  DEBUG_MSG (BUFFER, buffer,
+            "Current var allocation: %s",
+            buf);
+}
+
+void hb_buffer_t::allocate_var (unsigned int byte_i, unsigned int count, const char *owner)
+{
+  assert (byte_i < 8 && byte_i + count <= 8);
+
+  if (DEBUG_ENABLED (BUFFER))
+    dump_var_allocation (this);
+  DEBUG_MSG (BUFFER, this,
+            "Allocating var bytes %d..%d for %s",
+            byte_i, byte_i + count - 1, owner);
+
+  for (unsigned int i = byte_i; i < byte_i + count; i++) {
+    assert (!allocated_var_bytes[i]);
+    allocated_var_bytes[i]++;
+    allocated_var_owner[i] = owner;
+  }
+}
+
+void hb_buffer_t::deallocate_var (unsigned int byte_i, unsigned int count, const char *owner)
+{
+  if (DEBUG_ENABLED (BUFFER))
+    dump_var_allocation (this);
+
+  DEBUG_MSG (BUFFER, this,
+            "Deallocating var bytes %d..%d for %s",
+            byte_i, byte_i + count - 1, owner);
+
+  assert (byte_i < 8 && byte_i + count <= 8);
+  for (unsigned int i = byte_i; i < byte_i + count; i++) {
+    assert (allocated_var_bytes[i]);
+    assert (0 == strcmp (allocated_var_owner[i], owner));
+    allocated_var_bytes[i]--;
+  }
+}
+
+void hb_buffer_t::assert_var (unsigned int byte_i, unsigned int count, const char *owner)
+{
+  if (DEBUG_ENABLED (BUFFER))
+    dump_var_allocation (this);
+
+  DEBUG_MSG (BUFFER, this,
+            "Asserting var bytes %d..%d for %s",
+            byte_i, byte_i + count - 1, owner);
+
+  assert (byte_i < 8 && byte_i + count <= 8);
+  for (unsigned int i = byte_i; i < byte_i + count; i++) {
+    assert (allocated_var_bytes[i]);
+    assert (0 == strcmp (allocated_var_owner[i], owner));
+  }
+}
+
+void hb_buffer_t::deallocate_var_all (void)
+{
+  memset (allocated_var_bytes, 0, sizeof (allocated_var_bytes));
+  memset (allocated_var_owner, 0, sizeof (allocated_var_owner));
+}
+
 /* Public API */
 
 /**
  * hb_buffer_create: (Xconstructor)
  *
- * Creates a new #hb_buffer_t with all properties to defaults.
+ * 
  *
- * Return value: (transfer full):
- * A newly allocated #hb_buffer_t with a reference count of 1. The initial
- * reference count should be released with hb_buffer_destroy() when you are done
- * using the #hb_buffer_t. This function never returns %NULL. If memory cannot
- * be allocated, a special #hb_buffer_t object will be returned on which
- * hb_buffer_allocation_successful() returns %false.
+ * Return value: (transfer full)
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_buffer_t *
 hb_buffer_create (void)
@@ -685,8 +681,6 @@ hb_buffer_create (void)
   if (!(buffer = hb_object_create<hb_buffer_t> ()))
     return hb_buffer_get_empty ();
 
-  buffer->max_len = HB_BUFFER_MAX_LEN_DEFAULT;
-
   buffer->reset ();
 
   return buffer;
@@ -699,7 +693,7 @@ hb_buffer_create (void)
  *
  * Return value: (transfer full):
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_buffer_t *
 hb_buffer_get_empty (void)
@@ -709,10 +703,7 @@ hb_buffer_get_empty (void)
 
     const_cast<hb_unicode_funcs_t *> (&_hb_unicode_funcs_nil),
     HB_BUFFER_FLAG_DEFAULT,
-    HB_BUFFER_CLUSTER_LEVEL_DEFAULT,
     HB_BUFFER_REPLACEMENT_CODEPOINT_DEFAULT,
-    HB_BUFFER_SCRATCH_FLAG_DEFAULT,
-    HB_BUFFER_MAX_LEN_DEFAULT,
 
     HB_BUFFER_CONTENT_TYPE_INVALID,
     HB_SEGMENT_PROPERTIES_DEFAULT,
@@ -728,15 +719,13 @@ hb_buffer_get_empty (void)
 
 /**
  * hb_buffer_reference: (skip)
- * @buffer: an #hb_buffer_t.
+ * @buffer: a buffer.
  *
- * Increases the reference count on @buffer by one. This prevents @buffer from
- * being destroyed until a matching call to hb_buffer_destroy() is made.
+ * 
  *
  * Return value: (transfer full):
- * The referenced #hb_buffer_t.
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_buffer_t *
 hb_buffer_reference (hb_buffer_t *buffer)
@@ -746,13 +735,11 @@ hb_buffer_reference (hb_buffer_t *buffer)
 
 /**
  * hb_buffer_destroy: (skip)
- * @buffer: an #hb_buffer_t.
+ * @buffer: a buffer.
  *
- * Deallocate the @buffer.
- * Decreases the reference count on @buffer by one. If the result is zero, then
- * @buffer and all associated resources are freed. See hb_buffer_reference().
+ * 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 void
 hb_buffer_destroy (hb_buffer_t *buffer)
@@ -763,15 +750,13 @@ hb_buffer_destroy (hb_buffer_t *buffer)
 
   free (buffer->info);
   free (buffer->pos);
-  if (buffer->message_destroy)
-    buffer->message_destroy (buffer->message_data);
 
   free (buffer);
 }
 
 /**
  * hb_buffer_set_user_data: (skip)
- * @buffer: an #hb_buffer_t.
+ * @buffer: a buffer.
  * @key: 
  * @data: 
  * @destroy: 
@@ -781,7 +766,7 @@ hb_buffer_destroy (hb_buffer_t *buffer)
  *
  * Return value: 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_bool_t
 hb_buffer_set_user_data (hb_buffer_t        *buffer,
@@ -795,14 +780,14 @@ hb_buffer_set_user_data (hb_buffer_t        *buffer,
 
 /**
  * hb_buffer_get_user_data: (skip)
- * @buffer: an #hb_buffer_t.
+ * @buffer: a buffer.
  * @key: 
  *
  * 
  *
  * Return value: 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 void *
 hb_buffer_get_user_data (hb_buffer_t        *buffer,
@@ -814,13 +799,12 @@ hb_buffer_get_user_data (hb_buffer_t        *buffer,
 
 /**
  * hb_buffer_set_content_type:
- * @buffer: an #hb_buffer_t.
- * @content_type: the type of buffer contents to set
+ * @buffer: a buffer.
+ * @content_type: 
  *
- * Sets the type of @buffer contents, buffers are either empty, contain
- * characters (before shaping) or glyphs (the result of shaping).
+ * 
  *
- * Since: 0.9.5
+ * Since: 1.0
  **/
 void
 hb_buffer_set_content_type (hb_buffer_t              *buffer,
@@ -831,14 +815,13 @@ hb_buffer_set_content_type (hb_buffer_t              *buffer,
 
 /**
  * hb_buffer_get_content_type:
- * @buffer: an #hb_buffer_t.
+ * @buffer: a buffer.
  *
- * see hb_buffer_set_content_type().
+ * 
  *
- * Return value:
- * The type of @buffer contents.
+ * Return value: 
  *
- * Since: 0.9.5
+ * Since: 1.0
  **/
 hb_buffer_content_type_t
 hb_buffer_get_content_type (hb_buffer_t *buffer)
@@ -849,12 +832,12 @@ hb_buffer_get_content_type (hb_buffer_t *buffer)
 
 /**
  * hb_buffer_set_unicode_funcs:
- * @buffer: an #hb_buffer_t.
+ * @buffer: a buffer.
  * @unicode_funcs: 
  *
  * 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 void
 hb_buffer_set_unicode_funcs (hb_buffer_t        *buffer,
@@ -874,13 +857,13 @@ hb_buffer_set_unicode_funcs (hb_buffer_t        *buffer,
 
 /**
  * hb_buffer_get_unicode_funcs:
- * @buffer: an #hb_buffer_t.
+ * @buffer: a buffer.
  *
  * 
  *
  * Return value: 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_unicode_funcs_t *
 hb_buffer_get_unicode_funcs (hb_buffer_t        *buffer)
@@ -890,18 +873,12 @@ hb_buffer_get_unicode_funcs (hb_buffer_t        *buffer)
 
 /**
  * hb_buffer_set_direction:
- * @buffer: an #hb_buffer_t.
- * @direction: the #hb_direction_t of the @buffer
- *
- * Set the text flow direction of the buffer. No shaping can happen without
- * setting @buffer direction, and it controls the visual direction for the
- * output glyphs; for RTL direction the glyphs will be reversed. Many layout
- * features depend on the proper setting of the direction, for example,
- * reversing RTL text before shaping, then shaping with LTR direction is not
- * the same as keeping the text in logical order and shaping with RTL
- * direction.
- *
- * Since: 0.9.2
+ * @buffer: a buffer.
+ * @direction: 
+ *
+ * 
+ *
+ * Since: 1.0
  **/
 void
 hb_buffer_set_direction (hb_buffer_t    *buffer,
@@ -916,14 +893,13 @@ hb_buffer_set_direction (hb_buffer_t    *buffer,
 
 /**
  * hb_buffer_get_direction:
- * @buffer: an #hb_buffer_t.
+ * @buffer: a buffer.
  *
- * See hb_buffer_set_direction()
+ * 
  *
- * Return value:
- * The direction of the @buffer.
+ * Return value: 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_direction_t
 hb_buffer_get_direction (hb_buffer_t    *buffer)
@@ -933,20 +909,12 @@ hb_buffer_get_direction (hb_buffer_t    *buffer)
 
 /**
  * hb_buffer_set_script:
- * @buffer: an #hb_buffer_t.
- * @script: an #hb_script_t to set.
+ * @buffer: a buffer.
+ * @script: 
  *
- * Sets the script of @buffer to @script.
- *
- * Script is crucial for choosing the proper shaping behaviour for scripts that
- * require it (e.g. Arabic) and the which OpenType features defined in the font
- * to be applied.
- *
- * You can pass one of the predefined #hb_script_t values, or use
- * hb_script_from_string() or hb_script_from_iso15924_tag() to get the
- * corresponding script from an ISO 15924 script tag.
+ * 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 void
 hb_buffer_set_script (hb_buffer_t *buffer,
@@ -960,14 +928,13 @@ hb_buffer_set_script (hb_buffer_t *buffer,
 
 /**
  * hb_buffer_get_script:
- * @buffer: an #hb_buffer_t.
+ * @buffer: a buffer.
  *
- * See hb_buffer_set_script().
+ * 
  *
- * Return value:
- * The #hb_script_t of the @buffer.
+ * Return value: 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_script_t
 hb_buffer_get_script (hb_buffer_t *buffer)
@@ -977,20 +944,12 @@ hb_buffer_get_script (hb_buffer_t *buffer)
 
 /**
  * hb_buffer_set_language:
- * @buffer: an #hb_buffer_t.
- * @language: an hb_language_t to set.
- *
- * Sets the language of @buffer to @language.
+ * @buffer: a buffer.
+ * @language: 
  *
- * Languages are crucial for selecting which OpenType feature to apply to the
- * buffer which can result in applying language-specific behaviour. Languages
- * are orthogonal to the scripts, and though they are related, they are
- * different concepts and should not be confused with each other.
- *
- * Use hb_language_from_string() to convert from ISO 639 language codes to
- * #hb_language_t.
+ * 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 void
 hb_buffer_set_language (hb_buffer_t   *buffer,
@@ -1004,14 +963,13 @@ hb_buffer_set_language (hb_buffer_t   *buffer,
 
 /**
  * hb_buffer_get_language:
- * @buffer: an #hb_buffer_t.
+ * @buffer: a buffer.
  *
- * See hb_buffer_set_language().
+ * 
  *
- * Return value: (transfer none):
- * The #hb_language_t of the buffer. Must not be freed by the caller.
+ * Return value: 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_language_t
 hb_buffer_get_language (hb_buffer_t *buffer)
@@ -1021,14 +979,12 @@ hb_buffer_get_language (hb_buffer_t *buffer)
 
 /**
  * hb_buffer_set_segment_properties:
- * @buffer: an #hb_buffer_t.
- * @props: an #hb_segment_properties_t to use.
+ * @buffer: a buffer.
+ * @props: 
  *
- * Sets the segment properties of the buffer, a shortcut for calling
- * hb_buffer_set_direction(), hb_buffer_set_script() and
- * hb_buffer_set_language() individually.
+ * 
  *
- * Since: 0.9.7
+ * Since: 1.0
  **/
 void
 hb_buffer_set_segment_properties (hb_buffer_t *buffer,
@@ -1042,12 +998,12 @@ hb_buffer_set_segment_properties (hb_buffer_t *buffer,
 
 /**
  * hb_buffer_get_segment_properties:
- * @buffer: an #hb_buffer_t.
- * @props: (out): the output #hb_segment_properties_t.
+ * @buffer: a buffer.
+ * @props: 
  *
- * Sets @props to the #hb_segment_properties_t of @buffer.
+ * 
  *
- * Since: 0.9.7
+ * Since: 1.0
  **/
 void
 hb_buffer_get_segment_properties (hb_buffer_t *buffer,
@@ -1059,12 +1015,12 @@ hb_buffer_get_segment_properties (hb_buffer_t *buffer,
 
 /**
  * hb_buffer_set_flags:
- * @buffer: an #hb_buffer_t.
- * @flags: the buffer flags to set.
+ * @buffer: a buffer.
+ * @flags: 
  *
- * Sets @buffer flags to @flags. See #hb_buffer_flags_t.
+ * 
  *
- * Since: 0.9.7
+ * Since: 1.0
  **/
 void
 hb_buffer_set_flags (hb_buffer_t       *buffer,
@@ -1078,14 +1034,13 @@ hb_buffer_set_flags (hb_buffer_t       *buffer,
 
 /**
  * hb_buffer_get_flags:
- * @buffer: an #hb_buffer_t.
+ * @buffer: a buffer.
  *
- * See hb_buffer_set_flags().
+ * 
  *
  * Return value: 
- * The @buffer flags.
  *
- * Since: 0.9.7
+ * Since: 1.0
  **/
 hb_buffer_flags_t
 hb_buffer_get_flags (hb_buffer_t *buffer)
@@ -1093,53 +1048,15 @@ hb_buffer_get_flags (hb_buffer_t *buffer)
   return buffer->flags;
 }
 
-/**
- * hb_buffer_set_cluster_level:
- * @buffer: an #hb_buffer_t.
- * @cluster_level: 
- *
- * 
- *
- * Since: 0.9.42
- **/
-void
-hb_buffer_set_cluster_level (hb_buffer_t       *buffer,
-                    hb_buffer_cluster_level_t  cluster_level)
-{
-  if (unlikely (hb_object_is_inert (buffer)))
-    return;
-
-  buffer->cluster_level = cluster_level;
-}
-
-/**
- * hb_buffer_get_cluster_level:
- * @buffer: an #hb_buffer_t.
- *
- * 
- *
- * Return value: 
- *
- * Since: 0.9.42
- **/
-hb_buffer_cluster_level_t
-hb_buffer_get_cluster_level (hb_buffer_t *buffer)
-{
-  return buffer->cluster_level;
-}
-
 
 /**
  * hb_buffer_set_replacement_codepoint:
- * @buffer: an #hb_buffer_t.
- * @replacement: the replacement #hb_codepoint_t
- *
- * Sets the #hb_codepoint_t that replaces invalid entries for a given encoding
- * when adding text to @buffer.
+ * @buffer: a buffer.
+ * @replacement: 
  *
- * Default is %HB_BUFFER_REPLACEMENT_CODEPOINT_DEFAULT.
+ * 
  *
- * Since: 0.9.31
+ * Since: 1.0
  **/
 void
 hb_buffer_set_replacement_codepoint (hb_buffer_t    *buffer,
@@ -1153,14 +1070,13 @@ hb_buffer_set_replacement_codepoint (hb_buffer_t    *buffer,
 
 /**
  * hb_buffer_get_replacement_codepoint:
- * @buffer: an #hb_buffer_t.
+ * @buffer: a buffer.
  *
- * See hb_buffer_set_replacement_codepoint().
+ * 
  *
  * Return value: 
- * The @buffer replacement #hb_codepoint_t.
  *
- * Since: 0.9.31
+ * Since: 1.0
  **/
 hb_codepoint_t
 hb_buffer_get_replacement_codepoint (hb_buffer_t    *buffer)
@@ -1171,12 +1087,11 @@ hb_buffer_get_replacement_codepoint (hb_buffer_t    *buffer)
 
 /**
  * hb_buffer_reset:
- * @buffer: an #hb_buffer_t.
+ * @buffer: a buffer.
  *
- * Resets the buffer to its initial status, as if it was just newly created
- * with hb_buffer_create().
+ * 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 void
 hb_buffer_reset (hb_buffer_t *buffer)
@@ -1186,12 +1101,11 @@ hb_buffer_reset (hb_buffer_t *buffer)
 
 /**
  * hb_buffer_clear_contents:
- * @buffer: an #hb_buffer_t.
+ * @buffer: a buffer.
  *
- * Similar to hb_buffer_reset(), but does not clear the Unicode functions and
- * the replacement code point.
+ * 
  *
- * Since: 0.9.11
+ * Since: 1.0
  **/
 void
 hb_buffer_clear_contents (hb_buffer_t *buffer)
@@ -1201,15 +1115,14 @@ hb_buffer_clear_contents (hb_buffer_t *buffer)
 
 /**
  * hb_buffer_pre_allocate:
- * @buffer: an #hb_buffer_t.
- * @size: number of items to pre allocate.
+ * @buffer: a buffer.
+ * @size: 
  *
- * Pre allocates memory for @buffer to fit at least @size number of items.
+ * 
  *
- * Return value:
- * %true if @buffer memory allocation succeeded, %false otherwise.
+ * Return value: 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_bool_t
 hb_buffer_pre_allocate (hb_buffer_t *buffer, unsigned int size)
@@ -1219,14 +1132,13 @@ hb_buffer_pre_allocate (hb_buffer_t *buffer, unsigned int size)
 
 /**
  * hb_buffer_allocation_successful:
- * @buffer: an #hb_buffer_t.
+ * @buffer: a buffer.
  *
- * Check if allocating memory for the buffer succeeded.
+ * 
  *
- * Return value:
- * %true if @buffer memory allocation succeeded, %false otherwise.
+ * Return value: 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_bool_t
 hb_buffer_allocation_successful (hb_buffer_t  *buffer)
@@ -1236,20 +1148,13 @@ hb_buffer_allocation_successful (hb_buffer_t  *buffer)
 
 /**
  * hb_buffer_add:
- * @buffer: an #hb_buffer_t.
- * @codepoint: a Unicode code point.
- * @cluster: the cluster value of @codepoint.
+ * @buffer: a buffer.
+ * @codepoint: 
+ * @cluster: 
  *
- * Appends a character with the Unicode value of @codepoint to @buffer, and
- * gives it the initial cluster value of @cluster. Clusters can be any thing
- * the client wants, they are usually used to refer to the index of the
- * character in the input text stream and are output in
- * #hb_glyph_info_t.cluster field.
- *
- * This function does not check the validity of @codepoint, it is up to the
- * caller to ensure it is a valid Unicode code point.
+ * 
  *
- * Since: 0.9.7
+ * Since: 1.0
  **/
 void
 hb_buffer_add (hb_buffer_t    *buffer,
@@ -1262,16 +1167,14 @@ hb_buffer_add (hb_buffer_t    *buffer,
 
 /**
  * hb_buffer_set_length:
- * @buffer: an #hb_buffer_t.
- * @length: the new length of @buffer.
+ * @buffer: a buffer.
+ * @length: 
  *
- * Similar to hb_buffer_pre_allocate(), but clears any new items added at the
- * end.
+ * 
  *
  * Return value: 
- * %true if @buffer memory allocation succeeded, %false otherwise.
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_bool_t
 hb_buffer_set_length (hb_buffer_t  *buffer,
@@ -1304,15 +1207,13 @@ hb_buffer_set_length (hb_buffer_t  *buffer,
 
 /**
  * hb_buffer_get_length:
- * @buffer: an #hb_buffer_t.
+ * @buffer: a buffer.
  *
  * Returns the number of items in the buffer.
  *
- * Return value:
- * The @buffer length.
- * The value valid as long as buffer has not been modified.
+ * Return value: buffer length.
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 unsigned int
 hb_buffer_get_length (hb_buffer_t *buffer)
@@ -1322,17 +1223,15 @@ hb_buffer_get_length (hb_buffer_t *buffer)
 
 /**
  * hb_buffer_get_glyph_infos:
- * @buffer: an #hb_buffer_t.
+ * @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.
+ * Returns buffer glyph information array.  Returned pointer
+ * is valid as long as buffer contents are not modified.
  *
- * Return value: (transfer none) (array length=length):
- * The @buffer glyph information array.
- * The value valid as long as buffer has not been modified.
+ * Return value: (transfer none) (array length=length): buffer glyph information array.
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_glyph_info_t *
 hb_buffer_get_glyph_infos (hb_buffer_t  *buffer,
@@ -1346,17 +1245,15 @@ hb_buffer_get_glyph_infos (hb_buffer_t  *buffer,
 
 /**
  * hb_buffer_get_glyph_positions:
- * @buffer: an #hb_buffer_t.
+ * @buffer: a buffer.
  * @length: (out): output length.
  *
- * Returns @buffer glyph position array.  Returned pointer
- * is valid as long as @buffer contents are not modified.
+ * Returns buffer glyph position array.  Returned pointer
+ * is valid as long as buffer contents are not modified.
  *
- * Return value: (transfer none) (array length=length):
- * The @buffer glyph position array.
- * The value valid as long as buffer has not been modified.
+ * Return value: (transfer none) (array length=length): buffer glyph position array.
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_glyph_position_t *
 hb_buffer_get_glyph_positions (hb_buffer_t  *buffer,
@@ -1373,11 +1270,11 @@ hb_buffer_get_glyph_positions (hb_buffer_t  *buffer,
 
 /**
  * hb_buffer_reverse:
- * @buffer: an #hb_buffer_t.
+ * @buffer: a buffer.
  *
  * Reverses buffer contents.
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 void
 hb_buffer_reverse (hb_buffer_t *buffer)
@@ -1386,31 +1283,14 @@ hb_buffer_reverse (hb_buffer_t *buffer)
 }
 
 /**
- * hb_buffer_reverse_range:
- * @buffer: an #hb_buffer_t.
- * @start: start index.
- * @end: end index.
- *
- * Reverses buffer contents between start to end.
- *
- * Since: 0.9.41
- **/
-void
-hb_buffer_reverse_range (hb_buffer_t *buffer,
-                        unsigned int start, unsigned int end)
-{
-  buffer->reverse_range (start, end);
-}
-
-/**
  * hb_buffer_reverse_clusters:
- * @buffer: an #hb_buffer_t.
+ * @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: 0.9.2
+ * Since: 1.0
  **/
 void
 hb_buffer_reverse_clusters (hb_buffer_t *buffer)
@@ -1420,7 +1300,7 @@ hb_buffer_reverse_clusters (hb_buffer_t *buffer)
 
 /**
  * hb_buffer_guess_segment_properties:
- * @buffer: an #hb_buffer_t.
+ * @buffer: a buffer.
  *
  * Sets unset buffer segment properties based on buffer Unicode
  * contents.  If buffer is not empty, it must have content type
@@ -1440,7 +1320,7 @@ hb_buffer_reverse_clusters (hb_buffer_t *buffer)
  * hb_language_get_default().  This may change in the future by
  * taking buffer script into consideration when choosing a language.
  *
- * Since: 0.9.7
+ * Since: 1.0
  **/
 void
 hb_buffer_guess_segment_properties (hb_buffer_t *buffer)
@@ -1519,20 +1399,15 @@ hb_buffer_add_utf (hb_buffer_t  *buffer,
 
 /**
  * hb_buffer_add_utf8:
- * @buffer: an #hb_buffer_t.
- * @text: (array length=text_length) (element-type uint8_t): an array of UTF-8
- *               characters to append.
- * @text_length: the length of the @text, or -1 if it is %NULL terminated.
- * @item_offset: the offset of the first character to add to the @buffer.
- * @item_length: the number of characters to add to the @buffer, or -1 for the
- *               end of @text (assuming it is %NULL terminated).
+ * @buffer: a buffer.
+ * @text: (array length=text_length) (element-type uint8_t):
+ * @text_length: 
+ * @item_offset: 
+ * @item_length: 
  *
- * See hb_buffer_add_codepoints().
- *
- * Replaces invalid UTF-8 characters with the @buffer replacement code point,
- * see hb_buffer_set_replacement_codepoint().
+ * 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 void
 hb_buffer_add_utf8 (hb_buffer_t  *buffer,
@@ -1546,19 +1421,15 @@ hb_buffer_add_utf8 (hb_buffer_t  *buffer,
 
 /**
  * hb_buffer_add_utf16:
- * @buffer: an #hb_buffer_t.
- * @text: (array length=text_length): an array of UTF-16 characters to append.
- * @text_length: the length of the @text, or -1 if it is %NULL terminated.
- * @item_offset: the offset of the first character to add to the @buffer.
- * @item_length: the number of characters to add to the @buffer, or -1 for the
- *               end of @text (assuming it is %NULL terminated).
- *
- * See hb_buffer_add_codepoints().
+ * @buffer: a buffer.
+ * @text: (array length=text_length):
+ * @text_length: 
+ * @item_offset: 
+ * @item_length: 
  *
- * Replaces invalid UTF-16 characters with the @buffer replacement code point,
- * see hb_buffer_set_replacement_codepoint().
+ * 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 void
 hb_buffer_add_utf16 (hb_buffer_t    *buffer,
@@ -1572,19 +1443,15 @@ hb_buffer_add_utf16 (hb_buffer_t    *buffer,
 
 /**
  * hb_buffer_add_utf32:
- * @buffer: an #hb_buffer_t.
- * @text: (array length=text_length): an array of UTF-32 characters to append.
- * @text_length: the length of the @text, or -1 if it is %NULL terminated.
- * @item_offset: the offset of the first character to add to the @buffer.
- * @item_length: the number of characters to add to the @buffer, or -1 for the
- *               end of @text (assuming it is %NULL terminated).
- *
- * See hb_buffer_add_codepoints().
+ * @buffer: a buffer.
+ * @text: (array length=text_length):
+ * @text_length: 
+ * @item_offset: 
+ * @item_length: 
  *
- * Replaces invalid UTF-32 characters with the @buffer replacement code point,
- * see hb_buffer_set_replacement_codepoint().
+ * 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 void
 hb_buffer_add_utf32 (hb_buffer_t    *buffer,
@@ -1598,20 +1465,15 @@ hb_buffer_add_utf32 (hb_buffer_t    *buffer,
 
 /**
  * hb_buffer_add_latin1:
- * @buffer: an #hb_buffer_t.
- * @text: (array length=text_length) (element-type uint8_t): an array of UTF-8
- *               characters to append.
- * @text_length: the length of the @text, or -1 if it is %NULL terminated.
- * @item_offset: the offset of the first character to add to the @buffer.
- * @item_length: the number of characters to add to the @buffer, or -1 for the
- *               end of @text (assuming it is %NULL terminated).
+ * @buffer: a buffer.
+ * @text: (array length=text_length) (element-type uint8_t):
+ * @text_length: 
+ * @item_offset: 
+ * @item_length: 
  *
- * Similar to hb_buffer_add_codepoints(), but allows only access to first 256
- * Unicode code points that can fit in 8-bit strings.
- *
- * <note>Has nothing to do with non-Unicode Latin-1 encoding.</note>
+ * 
  *
- * Since: 0.9.39
+ * Since: 1.0
  **/
 void
 hb_buffer_add_latin1 (hb_buffer_t   *buffer,
@@ -1625,27 +1487,15 @@ hb_buffer_add_latin1 (hb_buffer_t   *buffer,
 
 /**
  * hb_buffer_add_codepoints:
- * @buffer: a #hb_buffer_t to append characters to.
- * @text: (array length=text_length): an array of Unicode code points to append.
- * @text_length: the length of the @text, or -1 if it is %NULL terminated.
- * @item_offset: the offset of the first code point to add to the @buffer.
- * @item_length: the number of code points to add to the @buffer, or -1 for the
- *               end of @text (assuming it is %NULL terminated).
- *
- * Appends characters from @text array to @buffer. The @item_offset is the
- * position of the first character from @text that will be appended, and
- * @item_length is the number of character. When shaping part of a larger text
- * (e.g. a run of text from a paragraph), instead of passing just the substring
- * corresponding to the run, it is preferable to pass the whole
- * paragraph and specify the run start and length as @item_offset and
- * @item_length, respectively, to give HarfBuzz the full context to be able,
- * for example, to do cross-run Arabic shaping or properly handle combining
- * marks at stat of run.
- *
- * This function does not check the validity of @text, it is up to the caller
- * to ensure it contains a valid Unicode code points.
- *
- * Since: 0.9.31
+ * @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,
@@ -1700,7 +1550,7 @@ normalize_glyphs_cluster (hb_buffer_t *buffer,
     pos[end - 1].x_advance = total_x_advance;
     pos[end - 1].y_advance = total_y_advance;
 
-    hb_stable_sort (buffer->info + start, end - start - 1, compare_info_codepoint, buffer->pos + start);
+    hb_bubble_sort (buffer->info + start, end - start - 1, compare_info_codepoint, buffer->pos + start);
   } else {
     /* Transfer all cluster advance to the first glyph. */
     pos[start].x_advance += total_x_advance;
@@ -1709,20 +1559,17 @@ normalize_glyphs_cluster (hb_buffer_t *buffer,
       pos[i].x_offset -= total_x_advance;
       pos[i].y_offset -= total_y_advance;
     }
-    hb_stable_sort (buffer->info + start + 1, end - start - 1, compare_info_codepoint, buffer->pos + start + 1);
+    hb_bubble_sort (buffer->info + start + 1, end - start - 1, compare_info_codepoint, buffer->pos + start + 1);
   }
 }
 
 /**
  * hb_buffer_normalize_glyphs:
- * @buffer: an #hb_buffer_t.
+ * @buffer: a buffer.
  *
- * Reorders a glyph buffer to have canonical in-cluster glyph order / position.
- * The resulting clusters should behave identical to pre-reordering clusters.
- *
- * <note>This has nothing to do with Unicode normalization.</note>
+ * 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 void
 hb_buffer_normalize_glyphs (hb_buffer_t *buffer)
@@ -1745,66 +1592,3 @@ hb_buffer_normalize_glyphs (hb_buffer_t *buffer)
     }
   normalize_glyphs_cluster (buffer, start, end, backward);
 }
-
-void
-hb_buffer_t::sort (unsigned int start, unsigned int end, int(*compar)(const hb_glyph_info_t *, const hb_glyph_info_t *))
-{
-  assert (!have_positions);
-  for (unsigned int i = start + 1; i < end; i++)
-  {
-    unsigned int j = i;
-    while (j > start && compar (&info[j - 1], &info[i]) > 0)
-      j--;
-    if (i == j)
-      continue;
-    /* Move item i to occupy place for item j, shift what's in between. */
-    merge_clusters (j, i + 1);
-    {
-      hb_glyph_info_t t = info[i];
-      memmove (&info[j + 1], &info[j], (i - j) * sizeof (hb_glyph_info_t));
-      info[j] = t;
-    }
-  }
-}
-
-/*
- * Debugging.
- */
-
-/**
- * hb_buffer_set_message_func:
- * @buffer: an #hb_buffer_t.
- * @func: (closure user_data) (destroy destroy) (scope notified):
- * @user_data:
- * @destroy:
- *
- * 
- *
- * Since: 1.1.3
- **/
-void
-hb_buffer_set_message_func (hb_buffer_t *buffer,
-                           hb_buffer_message_func_t func,
-                           void *user_data, hb_destroy_func_t destroy)
-{
-  if (buffer->message_destroy)
-    buffer->message_destroy (buffer->message_data);
-
-  if (func) {
-    buffer->message_func = func;
-    buffer->message_data = user_data;
-    buffer->message_destroy = destroy;
-  } else {
-    buffer->message_func = NULL;
-    buffer->message_data = NULL;
-    buffer->message_destroy = NULL;
-  }
-}
-
-bool
-hb_buffer_t::message_impl (hb_font_t *font, const char *fmt, va_list ap)
-{
-  char buf[100];
-  vsnprintf (buf, sizeof (buf),  fmt, ap);
-  return (bool) this->message_func (this, font, buf, this->message_data);
-}
index bf289c1..e5b46d8 100644 (file)
 
 HB_BEGIN_DECLS
 
-/**
- * hb_glyph_info_t:
- * @codepoint: either a Unicode code point (before shaping) or a glyph index
- *             (after shaping).
- * @mask: 
- * @cluster: the index of the character in the original text that corresponds
- *           to this #hb_glyph_info_t, or whatever the client passes to
- *           hb_buffer_add(). More than one #hb_glyph_info_t can have the same
- *           @cluster value, if they resulted from the same character (e.g. one
- *           to many glyph substitution), and when more than one character gets
- *           merged in the same glyph (e.g. many to one glyph substitution) the
- *           #hb_glyph_info_t will have the smallest cluster value of them.
- *           By default some characters are merged into the same cluster
- *           (e.g. combining marks have the same cluster as their bases)
- *           even if they are separate glyphs, hb_buffer_set_cluster_level()
- *           allow selecting more fine-grained cluster handling.
- *
- * The #hb_glyph_info_t is the structure that holds information about the
- * glyphs and their relation to input text.
- *
- */
+
 typedef struct hb_glyph_info_t {
   hb_codepoint_t codepoint;
   hb_mask_t      mask;
@@ -71,22 +51,6 @@ typedef struct hb_glyph_info_t {
   hb_var_int_t   var2;
 } hb_glyph_info_t;
 
-/**
- * hb_glyph_position_t:
- * @x_advance: how much the line advances after drawing this glyph when setting
- *             text in horizontal direction.
- * @y_advance: how much the line advances after drawing this glyph when setting
- *             text in vertical direction.
- * @x_offset: how much the glyph moves on the X-axis before drawing it, this
- *            should not affect how much the line advances.
- * @y_offset: how much the glyph moves on the Y-axis before drawing it, this
- *            should not affect how much the line advances.
- *
- * The #hb_glyph_position_t is the structure that holds the positions of the
- * glyph in both horizontal and vertical directions. All positions in
- * #hb_glyph_position_t are relative to the current point.
- *
- */
 typedef struct hb_glyph_position_t {
   hb_position_t  x_advance;
   hb_position_t  y_advance;
@@ -97,16 +61,7 @@ typedef struct hb_glyph_position_t {
   hb_var_int_t   var;
 } hb_glyph_position_t;
 
-/**
- * hb_segment_properties_t:
- * @direction: the #hb_direction_t of the buffer, see hb_buffer_set_direction().
- * @script: the #hb_script_t of the buffer, see hb_buffer_set_script().
- * @language: the #hb_language_t of the buffer, see hb_buffer_set_language().
- *
- * The structure that holds various text properties of an #hb_buffer_t. Can be
- * set and retrieved using hb_buffer_set_segment_properties() and
- * hb_buffer_get_segment_properties(), respectively.
- */
+
 typedef struct hb_segment_properties_t {
   hb_direction_t  direction;
   hb_script_t     script;
@@ -122,127 +77,100 @@ typedef struct hb_segment_properties_t {
                                       NULL, \
                                       NULL}
 
-HB_EXTERN hb_bool_t
+hb_bool_t
 hb_segment_properties_equal (const hb_segment_properties_t *a,
                             const hb_segment_properties_t *b);
 
-HB_EXTERN unsigned int
+unsigned int
 hb_segment_properties_hash (const hb_segment_properties_t *p);
 
 
 
-/**
- * hb_buffer_t:
- *
- * The main structure holding the input text and its properties before shaping,
- * and output glyphs and their information after shaping.
+/*
+ * hb_buffer_t
  */
 
 typedef struct hb_buffer_t hb_buffer_t;
 
-HB_EXTERN hb_buffer_t *
+hb_buffer_t *
 hb_buffer_create (void);
 
-HB_EXTERN hb_buffer_t *
+hb_buffer_t *
 hb_buffer_get_empty (void);
 
-HB_EXTERN hb_buffer_t *
+hb_buffer_t *
 hb_buffer_reference (hb_buffer_t *buffer);
 
-HB_EXTERN void
+void
 hb_buffer_destroy (hb_buffer_t *buffer);
 
-HB_EXTERN hb_bool_t
+hb_bool_t
 hb_buffer_set_user_data (hb_buffer_t        *buffer,
                         hb_user_data_key_t *key,
                         void *              data,
                         hb_destroy_func_t   destroy,
                         hb_bool_t           replace);
 
-HB_EXTERN void *
+void *
 hb_buffer_get_user_data (hb_buffer_t        *buffer,
                         hb_user_data_key_t *key);
 
-/**
- * hb_buffer_content_type_t:
- * @HB_BUFFER_CONTENT_TYPE_INVALID: Initial value for new buffer.
- * @HB_BUFFER_CONTENT_TYPE_UNICODE: The buffer contains input characters (before shaping).
- * @HB_BUFFER_CONTENT_TYPE_GLYPHS: The buffer contains output glyphs (after shaping).
- */
+
 typedef enum {
   HB_BUFFER_CONTENT_TYPE_INVALID = 0,
   HB_BUFFER_CONTENT_TYPE_UNICODE,
   HB_BUFFER_CONTENT_TYPE_GLYPHS
 } hb_buffer_content_type_t;
 
-HB_EXTERN void
+void
 hb_buffer_set_content_type (hb_buffer_t              *buffer,
                            hb_buffer_content_type_t  content_type);
 
-HB_EXTERN hb_buffer_content_type_t
+hb_buffer_content_type_t
 hb_buffer_get_content_type (hb_buffer_t *buffer);
 
 
-HB_EXTERN void
+void
 hb_buffer_set_unicode_funcs (hb_buffer_t        *buffer,
                             hb_unicode_funcs_t *unicode_funcs);
 
-HB_EXTERN hb_unicode_funcs_t *
+hb_unicode_funcs_t *
 hb_buffer_get_unicode_funcs (hb_buffer_t        *buffer);
 
-HB_EXTERN void
+void
 hb_buffer_set_direction (hb_buffer_t    *buffer,
                         hb_direction_t  direction);
 
-HB_EXTERN hb_direction_t
+hb_direction_t
 hb_buffer_get_direction (hb_buffer_t *buffer);
 
-HB_EXTERN void
+void
 hb_buffer_set_script (hb_buffer_t *buffer,
                      hb_script_t  script);
 
-HB_EXTERN hb_script_t
+hb_script_t
 hb_buffer_get_script (hb_buffer_t *buffer);
 
-HB_EXTERN void
+void
 hb_buffer_set_language (hb_buffer_t   *buffer,
                        hb_language_t  language);
 
 
-HB_EXTERN hb_language_t
+hb_language_t
 hb_buffer_get_language (hb_buffer_t *buffer);
 
-HB_EXTERN void
+void
 hb_buffer_set_segment_properties (hb_buffer_t *buffer,
                                  const hb_segment_properties_t *props);
 
-HB_EXTERN void
+void
 hb_buffer_get_segment_properties (hb_buffer_t *buffer,
                                  hb_segment_properties_t *props);
 
-HB_EXTERN void
+void
 hb_buffer_guess_segment_properties (hb_buffer_t *buffer);
 
 
-/**
- * hb_buffer_flags_t:
- * @HB_BUFFER_FLAG_DEFAULT: the default buffer flag.
- * @HB_BUFFER_FLAG_BOT: flag indicating that special handling of the beginning
- *                      of text paragraph can be applied to this buffer. Should usually
- *                      be set, unless you are passing to the buffer only part
- *                      of the text without the full context.
- * @HB_BUFFER_FLAG_EOT: flag indicating that special handling of the end of text
- *                      paragraph can be applied to this buffer, similar to
- *                      @HB_BUFFER_FLAG_EOT.
- * @HB_BUFFER_FLAG_PRESERVE_DEFAULT_IGNORABLES:
- *                      flag indication that character with Default_Ignorable
- *                      Unicode property should use the corresponding glyph
- *                      from the font, instead of hiding them (currently done
- *                      by replacing them with the space glyph and zeroing the
- *                      advance width.)
- *
- * Since: 0.9.20
- */
 typedef enum { /*< flags >*/
   HB_BUFFER_FLAG_DEFAULT                       = 0x00000000u,
   HB_BUFFER_FLAG_BOT                           = 0x00000001u, /* Beginning-of-text */
@@ -250,109 +178,91 @@ typedef enum { /*< flags >*/
   HB_BUFFER_FLAG_PRESERVE_DEFAULT_IGNORABLES   = 0x00000004u
 } hb_buffer_flags_t;
 
-HB_EXTERN void
+void
 hb_buffer_set_flags (hb_buffer_t       *buffer,
                     hb_buffer_flags_t  flags);
 
-HB_EXTERN hb_buffer_flags_t
+hb_buffer_flags_t
 hb_buffer_get_flags (hb_buffer_t *buffer);
 
-/*
- * Since: 0.9.42
- */
-typedef enum {
-  HB_BUFFER_CLUSTER_LEVEL_MONOTONE_GRAPHEMES   = 0,
-  HB_BUFFER_CLUSTER_LEVEL_MONOTONE_CHARACTERS  = 1,
-  HB_BUFFER_CLUSTER_LEVEL_CHARACTERS           = 2,
-  HB_BUFFER_CLUSTER_LEVEL_DEFAULT = HB_BUFFER_CLUSTER_LEVEL_MONOTONE_GRAPHEMES
-} hb_buffer_cluster_level_t;
-
-HB_EXTERN void
-hb_buffer_set_cluster_level (hb_buffer_t               *buffer,
-                            hb_buffer_cluster_level_t  cluster_level);
 
-HB_EXTERN hb_buffer_cluster_level_t
-hb_buffer_get_cluster_level (hb_buffer_t *buffer);
 
-/**
- * HB_BUFFER_REPLACEMENT_CODEPOINT_DEFAULT:
- *
- * The default code point for replacing invalid characters in a given encoding.
- * Set to U+FFFD REPLACEMENT CHARACTER.
- *
- * Since: 0.9.31
- */
 #define HB_BUFFER_REPLACEMENT_CODEPOINT_DEFAULT 0xFFFDu
 
-HB_EXTERN void
+/* 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_EXTERN hb_codepoint_t
+hb_codepoint_t
 hb_buffer_get_replacement_codepoint (hb_buffer_t    *buffer);
 
 
-HB_EXTERN void
+/* 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);
 
-HB_EXTERN void
+/* Like reset, but does NOT clear unicode_funcs and replacement_codepoint. */
+void
 hb_buffer_clear_contents (hb_buffer_t *buffer);
 
-HB_EXTERN hb_bool_t
+/* Returns false if allocation failed */
+hb_bool_t
 hb_buffer_pre_allocate (hb_buffer_t  *buffer,
                        unsigned int  size);
 
 
-HB_EXTERN hb_bool_t
+/* Returns false if allocation has failed before */
+hb_bool_t
 hb_buffer_allocation_successful (hb_buffer_t  *buffer);
 
-HB_EXTERN void
+void
 hb_buffer_reverse (hb_buffer_t *buffer);
 
-HB_EXTERN void
-hb_buffer_reverse_range (hb_buffer_t *buffer,
-                        unsigned int start, unsigned int end);
-
-HB_EXTERN void
+void
 hb_buffer_reverse_clusters (hb_buffer_t *buffer);
 
 
 /* Filling the buffer in */
 
-HB_EXTERN void
+void
 hb_buffer_add (hb_buffer_t    *buffer,
               hb_codepoint_t  codepoint,
               unsigned int    cluster);
 
-HB_EXTERN void
+void
 hb_buffer_add_utf8 (hb_buffer_t  *buffer,
                    const char   *text,
                    int           text_length,
                    unsigned int  item_offset,
                    int           item_length);
 
-HB_EXTERN void
+void
 hb_buffer_add_utf16 (hb_buffer_t    *buffer,
                     const uint16_t *text,
                     int             text_length,
                     unsigned int    item_offset,
                     int             item_length);
 
-HB_EXTERN void
+void
 hb_buffer_add_utf32 (hb_buffer_t    *buffer,
                     const uint32_t *text,
                     int             text_length,
                     unsigned int    item_offset,
                     int             item_length);
 
-HB_EXTERN void
+/* Allows only access to first 256 Unicode codepoints. */
+void
 hb_buffer_add_latin1 (hb_buffer_t   *buffer,
                      const uint8_t *text,
                      int            text_length,
                      unsigned int   item_offset,
                      int            item_length);
 
-HB_EXTERN void
+/* 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,
@@ -360,25 +270,32 @@ hb_buffer_add_codepoints (hb_buffer_t          *buffer,
                          int                   item_length);
 
 
-HB_EXTERN hb_bool_t
+/* Clears any new items added at the end */
+hb_bool_t
 hb_buffer_set_length (hb_buffer_t  *buffer,
                      unsigned int  length);
 
-HB_EXTERN unsigned int
+/* Return value valid as long as buffer not modified */
+unsigned int
 hb_buffer_get_length (hb_buffer_t *buffer);
 
 /* Getting glyphs out of the buffer */
 
-HB_EXTERN hb_glyph_info_t *
+/* Return value valid as long as buffer not modified */
+hb_glyph_info_t *
 hb_buffer_get_glyph_infos (hb_buffer_t  *buffer,
                            unsigned int *length);
 
-HB_EXTERN hb_glyph_position_t *
+/* Return value valid as long as buffer not modified */
+hb_glyph_position_t *
 hb_buffer_get_glyph_positions (hb_buffer_t  *buffer,
                                unsigned int *length);
 
 
-HB_EXTERN void
+/* Reorders a glyph buffer to have canonical in-cluster glyph order / position.
+ * The resulting clusters should behave identical to pre-reordering clusters.
+ * NOTE: This has nothing to do with Unicode normalization. */
+void
 hb_buffer_normalize_glyphs (hb_buffer_t *buffer);
 
 
@@ -386,87 +303,50 @@ hb_buffer_normalize_glyphs (hb_buffer_t *buffer);
  * Serialize
  */
 
-/**
- * hb_buffer_serialize_flags_t:
- * @HB_BUFFER_SERIALIZE_FLAG_DEFAULT: serialize glyph names, clusters and positions.
- * @HB_BUFFER_SERIALIZE_FLAG_NO_CLUSTERS: do not serialize glyph cluster.
- * @HB_BUFFER_SERIALIZE_FLAG_NO_POSITIONS: do not serialize glyph position information.
- * @HB_BUFFER_SERIALIZE_FLAG_NO_GLYPH_NAMES: do no serialize glyph name.
- * @HB_BUFFER_SERIALIZE_FLAG_GLYPH_EXTENTS: serialize glyph extents.
- *
- * Flags that control what glyph information are serialized in hb_buffer_serialize_glyphs().
- *
- * Since: 0.9.20
- */
 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_FLAG_GLYPH_EXTENTS       = 0x00000008u
+  HB_BUFFER_SERIALIZE_FLAG_NO_GLYPH_NAMES      = 0x00000004u
 } hb_buffer_serialize_flags_t;
 
-/**
- * hb_buffer_serialize_format_t:
- * @HB_BUFFER_SERIALIZE_FORMAT_TEXT: a human-readable, plain text format.
- * @HB_BUFFER_SERIALIZE_FORMAT_JSON: a machine-readable JSON format.
- * @HB_BUFFER_SERIALIZE_FORMAT_INVALID: invalid format.
- *
- * The buffer serialization and de-serialization format used in
- * hb_buffer_serialize_glyphs() and hb_buffer_deserialize_glyphs().
- *
- * Since: 0.9.2
- */
 typedef enum {
   HB_BUFFER_SERIALIZE_FORMAT_TEXT      = HB_TAG('T','E','X','T'),
   HB_BUFFER_SERIALIZE_FORMAT_JSON      = HB_TAG('J','S','O','N'),
   HB_BUFFER_SERIALIZE_FORMAT_INVALID   = HB_TAG_NONE
 } hb_buffer_serialize_format_t;
 
-HB_EXTERN hb_buffer_serialize_format_t
+/* len=-1 means str is NUL-terminated. */
+hb_buffer_serialize_format_t
 hb_buffer_serialize_format_from_string (const char *str, int len);
 
-HB_EXTERN const char *
+const char *
 hb_buffer_serialize_format_to_string (hb_buffer_serialize_format_t format);
 
-HB_EXTERN const char **
+const char **
 hb_buffer_serialize_list_formats (void);
 
-HB_EXTERN unsigned int
+/* 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,
+                           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_EXTERN hb_bool_t
+hb_bool_t
 hb_buffer_deserialize_glyphs (hb_buffer_t *buffer,
                              const char *buf,
-                             int buf_len,
-                             const char **end_ptr,
-                             hb_font_t *font,
+                             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);
 
 
-/*
- * Debugging.
- */
-
-typedef hb_bool_t      (*hb_buffer_message_func_t)     (hb_buffer_t *buffer,
-                                                        hb_font_t   *font,
-                                                        const char  *message,
-                                                        void        *user_data);
-
-HB_EXTERN void
-hb_buffer_set_message_func (hb_buffer_t *buffer,
-                           hb_buffer_message_func_t func,
-                           void *user_data, hb_destroy_func_t destroy);
-
-
 HB_END_DECLS
 
 #endif /* HB_BUFFER_H */
index 140ee0a..05a1f9c 100644 (file)
@@ -57,14 +57,14 @@ _hb_options_init (void)
 
 /**
  * hb_tag_from_string:
- * @str: (array length=len) (element-type uint8_t)
+ * @str: (array length=len): 
  * @len: 
  *
  * 
  *
  * Return value: 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_tag_t
 hb_tag_from_string (const char *str, int len)
@@ -92,7 +92,7 @@ hb_tag_from_string (const char *str, int len)
  *
  * 
  *
- * Since: 0.9.5
+ * Since: 1.0
  **/
 void
 hb_tag_to_string (hb_tag_t tag, char *buf)
@@ -115,14 +115,14 @@ const char direction_strings[][4] = {
 
 /**
  * hb_direction_from_string:
- * @str: (array length=len) (element-type uint8_t)
+ * @str: (array length=len): 
  * @len: 
  *
  * 
  *
  * Return value: 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_direction_t
 hb_direction_from_string (const char *str, int len)
@@ -149,7 +149,7 @@ hb_direction_from_string (const char *str, int len)
  *
  * Return value: (transfer none): 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 const char *
 hb_direction_to_string (hb_direction_t direction)
@@ -179,7 +179,7 @@ static const char canon_map[256] = {
   'p', 'q', 'r', 's', 't', 'u', 'v', 'w',  'x', 'y', 'z',  0,   0,   0,   0,   0
 };
 
-static bool
+static hb_bool_t
 lang_equal (hb_language_t  v1,
            const void    *v2)
 {
@@ -281,51 +281,46 @@ retry:
 
 /**
  * hb_language_from_string:
- * @str: (array length=len) (element-type uint8_t): a string representing
- *       ISO 639 language code
- * @len: length of the @str, or -1 if it is %NULL-terminated.
+ * @str: (array length=len): 
+ * @len: 
  *
- * Converts @str representing an ISO 639 language code to the corresponding
- * #hb_language_t.
+ * 
  *
- * Return value: (transfer none):
- * The #hb_language_t corresponding to the ISO 639 language code.
+ * Return value: 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_language_t
 hb_language_from_string (const char *str, int len)
 {
+  char strbuf[64];
+
   if (!str || !len || !*str)
     return HB_LANGUAGE_INVALID;
 
-  hb_language_item_t *item = NULL;
   if (len >= 0)
   {
     /* NUL-terminate it. */
-    char strbuf[64];
     len = MIN (len, (int) sizeof (strbuf) - 1);
     memcpy (strbuf, str, len);
     strbuf[len] = '\0';
-    item = lang_find_or_insert (strbuf);
+    str = strbuf;
   }
-  else
-    item = lang_find_or_insert (str);
+
+  hb_language_item_t *item = lang_find_or_insert (str);
 
   return likely (item) ? item->lang : HB_LANGUAGE_INVALID;
 }
 
 /**
  * hb_language_to_string:
- * @language: an #hb_language_t to convert.
+ * @language: 
  *
- * See hb_language_from_string().
+ * 
  *
- * Return value: (transfer none):
- * A %NULL-terminated string representing the @language. Must not be freed by
- * the caller.
+ * Return value: (transfer none): 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 const char *
 hb_language_to_string (hb_language_t language)
@@ -339,9 +334,9 @@ hb_language_to_string (hb_language_t language)
  *
  * 
  *
- * Return value: (transfer none):
+ * Return value: 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_language_t
 hb_language_get_default (void)
@@ -362,14 +357,13 @@ hb_language_get_default (void)
 
 /**
  * hb_script_from_iso15924_tag:
- * @tag: an #hb_tag_t representing an ISO 15924 tag.
+ * @tag: 
  *
- * Converts an ISO 15924 script tag to a corresponding #hb_script_t.
+ * 
  *
  * Return value: 
- * An #hb_script_t corresponding to the ISO 15924 tag.
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_script_t
 hb_script_from_iso15924_tag (hb_tag_t tag)
@@ -407,35 +401,30 @@ hb_script_from_iso15924_tag (hb_tag_t tag)
 
 /**
  * hb_script_from_string:
- * @str: (array length=len) (element-type uint8_t): a string representing an
- *       ISO 15924 tag.
- * @len: length of the @str, or -1 if it is %NULL-terminated.
+ * @s: (array length=len): 
+ * @len: 
  *
- * Converts a string @str representing an ISO 15924 script tag to a
- * corresponding #hb_script_t. Shorthand for hb_tag_from_string() then
- * hb_script_from_iso15924_tag().
+ * 
  *
  * Return value: 
- * An #hb_script_t corresponding to the ISO 15924 tag.
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_script_t
-hb_script_from_string (const char *str, int len)
+hb_script_from_string (const char *s, int len)
 {
-  return hb_script_from_iso15924_tag (hb_tag_from_string (str, len));
+  return hb_script_from_iso15924_tag (hb_tag_from_string (s, len));
 }
 
 /**
  * hb_script_to_iso15924_tag:
- * @script: an #hb_script_ to convert.
+ * @script: 
  *
- * See hb_script_from_iso15924_tag().
+ * 
  *
- * Return value:
- * An #hb_tag_t representing an ISO 15924 script tag.
+ * Return value: 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_tag_t
 hb_script_to_iso15924_tag (hb_script_t script)
@@ -451,7 +440,7 @@ hb_script_to_iso15924_tag (hb_script_t script)
  *
  * Return value: 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_direction_t
 hb_script_get_horizontal_direction (hb_script_t script)
@@ -504,9 +493,6 @@ hb_script_get_horizontal_direction (hb_script_t script)
     case HB_SCRIPT_PALMYRENE:
     case HB_SCRIPT_PSALTER_PAHLAVI:
 
-    /* Unicode-8.0 additions */
-    case HB_SCRIPT_OLD_HUNGARIAN:
-
       return HB_DIRECTION_RTL;
   }
 
@@ -532,7 +518,7 @@ hb_user_data_array_t::set (hb_user_data_key_t *key,
     }
   }
   hb_user_data_item_t item = {key, data, destroy};
-  bool ret = !!items.replace_or_insert (item, lock, (bool) replace);
+  bool ret = !!items.replace_or_insert (item, lock, replace);
 
   return ret;
 }
@@ -540,7 +526,7 @@ hb_user_data_array_t::set (hb_user_data_key_t *key,
 void *
 hb_user_data_array_t::get (hb_user_data_key_t *key)
 {
-  hb_user_data_item_t item = {NULL, NULL, NULL};
+  hb_user_data_item_t item = {NULL };
 
   return items.find (key, &item, lock) ? item.data : NULL;
 }
@@ -556,7 +542,7 @@ hb_user_data_array_t::get (hb_user_data_key_t *key)
  *
  * Returns library version as three integer components.
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 void
 hb_version (unsigned int *major,
@@ -575,7 +561,7 @@ hb_version (unsigned int *major,
  *
  * Return value: library version string.
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 const char *
 hb_version_string (void)
@@ -593,7 +579,7 @@ hb_version_string (void)
  *
  * Return value: 
  *
- * Since: 0.9.30
+ * Since: 1.0
  **/
 hb_bool_t
 hb_version_atleast (unsigned int major,
index 5b0a0b6..b6ce3f7 100644 (file)
@@ -98,22 +98,16 @@ typedef uint32_t hb_tag_t;
 #define HB_TAG_MAX_SIGNED HB_TAG(0x7f,0xff,0xff,0xff)
 
 /* len=-1 means str is NUL-terminated. */
-HB_EXTERN hb_tag_t
+hb_tag_t
 hb_tag_from_string (const char *str, int len);
 
 /* buf should have 4 bytes. */
-HB_EXTERN void
+void
 hb_tag_to_string (hb_tag_t tag, char *buf);
 
 
-/**
- * hb_direction_t:
- * @HB_DIRECTION_INVALID: Initial, unset direction.
- * @HB_DIRECTION_LTR: Text is set horizontally from left to right.
- * @HB_DIRECTION_RTL: Text is set horizontally from right to left.
- * @HB_DIRECTION_TTB: Text is set vertically from top to bottom.
- * @HB_DIRECTION_BTT: Text is set vertically from bottom to top.
- */
+/* hb_direction_t */
+
 typedef enum {
   HB_DIRECTION_INVALID = 0,
   HB_DIRECTION_LTR = 4,
@@ -123,10 +117,10 @@ typedef enum {
 } hb_direction_t;
 
 /* len=-1 means str is NUL-terminated */
-HB_EXTERN hb_direction_t
+hb_direction_t
 hb_direction_from_string (const char *str, int len);
 
-HB_EXTERN const char *
+const char *
 hb_direction_to_string (hb_direction_t direction);
 
 #define HB_DIRECTION_IS_VALID(dir)     ((((unsigned int) (dir)) & ~3U) == 4)
@@ -142,15 +136,16 @@ hb_direction_to_string (hb_direction_t direction);
 
 typedef const struct hb_language_impl_t *hb_language_t;
 
-HB_EXTERN hb_language_t
+/* len=-1 means str is NUL-terminated */
+hb_language_t
 hb_language_from_string (const char *str, int len);
 
-HB_EXTERN const char *
+const char *
 hb_language_to_string (hb_language_t language);
 
 #define HB_LANGUAGE_INVALID ((hb_language_t) NULL)
 
-HB_EXTERN hb_language_t
+hb_language_t
 hb_language_get_default (void);
 
 
@@ -277,9 +272,6 @@ typedef enum
   /*6.1*/ HB_SCRIPT_SORA_SOMPENG               = HB_TAG ('S','o','r','a'),
   /*6.1*/ HB_SCRIPT_TAKRI                      = HB_TAG ('T','a','k','r'),
 
-  /*
-   * Since: 0.9.30
-   */
   /*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'),
@@ -304,13 +296,6 @@ typedef enum
   /*7.0*/ HB_SCRIPT_TIRHUTA                    = HB_TAG ('T','i','r','h'),
   /*7.0*/ HB_SCRIPT_WARANG_CITI                        = HB_TAG ('W','a','r','a'),
 
-  /*8.0*/ HB_SCRIPT_AHOM                        = HB_TAG ('A','h','o','m'),
-  /*8.0*/ HB_SCRIPT_ANATOLIAN_HIEROGLYPHS       = HB_TAG ('H','l','u','w'),
-  /*8.0*/ HB_SCRIPT_HATRAN                      = HB_TAG ('H','a','t','r'),
-  /*8.0*/ HB_SCRIPT_MULTANI                     = HB_TAG ('M','u','l','t'),
-  /*8.0*/ HB_SCRIPT_OLD_HUNGARIAN               = HB_TAG ('H','u','n','g'),
-  /*8.0*/ HB_SCRIPT_SIGNWRITING                 = HB_TAG ('S','g','n','w'),
-
   /* No script set. */
   HB_SCRIPT_INVALID                            = HB_TAG_NONE,
 
@@ -329,16 +314,18 @@ typedef enum
 
 /* Script functions */
 
-HB_EXTERN hb_script_t
+hb_script_t
 hb_script_from_iso15924_tag (hb_tag_t tag);
 
-HB_EXTERN hb_script_t
-hb_script_from_string (const char *str, int len);
+/* 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);
 
-HB_EXTERN hb_tag_t
+hb_tag_t
 hb_script_to_iso15924_tag (hb_script_t script);
 
-HB_EXTERN hb_direction_t
+hb_direction_t
 hb_script_get_horizontal_direction (hb_script_t script);
 
 
index e64d265..4a45175 100644 (file)
@@ -27,6 +27,7 @@
  */
 
 #define HB_SHAPER coretext
+#define hb_coretext_shaper_face_data_t CGFont
 #include "hb-shaper-impl-private.hh"
 
 #include "hb-coretext.h"
@@ -77,29 +78,6 @@ HB_SHAPER_DATA_ENSURE_DECLARE(coretext, font)
  * shaper face data
  */
 
-static CTFontDescriptorRef
-get_last_resort_font_desc (void)
-{
-  // TODO Handle allocation failures?
-  CTFontDescriptorRef last_resort = CTFontDescriptorCreateWithNameAndSize (CFSTR("LastResort"), 0);
-  CFArrayRef cascade_list = CFArrayCreate (kCFAllocatorDefault,
-                                          (const void **) &last_resort,
-                                          1,
-                                          &kCFTypeArrayCallBacks);
-  CFRelease (last_resort);
-  CFDictionaryRef attributes = CFDictionaryCreate (kCFAllocatorDefault,
-                                                  (const void **) &kCTFontCascadeListAttribute,
-                                                  (const void **) &cascade_list,
-                                                  1,
-                                                  &kCFTypeDictionaryKeyCallBacks,
-                                                  &kCFTypeDictionaryValueCallBacks);
-  CFRelease (cascade_list);
-
-  CTFontDescriptorRef font_desc = CTFontDescriptorCreateWithAttributes (attributes);
-  CFRelease (attributes);
-  return font_desc;
-}
-
 static void
 release_data (void *info, const void *data, size_t size)
 {
@@ -109,13 +87,14 @@ release_data (void *info, const void *data, size_t size)
   hb_blob_destroy ((hb_blob_t *) info);
 }
 
-static CGFontRef
-create_cg_font (hb_face_t *face)
+hb_coretext_shaper_face_data_t *
+_hb_coretext_shaper_face_data_create (hb_face_t *face)
 {
-  CGFontRef cg_font = NULL;
+  hb_coretext_shaper_face_data_t *data = NULL;
+
   if (face->destroy == (hb_destroy_func_t) CGFontRelease)
   {
-    cg_font = CGFontRetain ((CGFontRef) face->user_data);
+    data = CGFontRetain ((CGFontRef) face->user_data);
   }
   else
   {
@@ -128,76 +107,13 @@ create_cg_font (hb_face_t *face)
     CGDataProviderRef provider = CGDataProviderCreateWithData (blob, blob_data, blob_length, &release_data);
     if (likely (provider))
     {
-      cg_font = CGFontCreateWithDataProvider (provider);
-      if (unlikely (!cg_font))
-       DEBUG_MSG (CORETEXT, face, "Face CGFontCreateWithDataProvider() failed");
+      data = CGFontCreateWithDataProvider (provider);
       CGDataProviderRelease (provider);
     }
   }
-  return cg_font;
-}
-
-static CTFontRef
-create_ct_font (CGFontRef cg_font, CGFloat font_size)
-{
-  CTFontRef ct_font = CTFontCreateWithGraphicsFont (cg_font, font_size, NULL, NULL);
-  if (unlikely (!ct_font)) {
-    DEBUG_MSG (CORETEXT, cg_font, "Font CTFontCreateWithGraphicsFont() failed");
-    return NULL;
-  }
-
-  /* Create font copy with cascade list that has LastResort first; this speeds up CoreText
-   * font fallback which we don't need anyway. */
-  {
-    CTFontDescriptorRef last_resort_font_desc = get_last_resort_font_desc ();
-    CTFontRef new_ct_font = CTFontCreateCopyWithAttributes (ct_font, 0.0, NULL, last_resort_font_desc);
-    CFRelease (last_resort_font_desc);
-    if (new_ct_font)
-    {
-      CFRelease (ct_font);
-      ct_font = new_ct_font;
-    }
-    else
-      DEBUG_MSG (CORETEXT, ct_font, "Font copy with empty cascade list failed");
-  }
 
- return ct_font;
-}
-
-struct hb_coretext_shaper_face_data_t {
-  CGFontRef cg_font;
-  CTFontRef ct_font;
-};
-
-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;
-
-  data->cg_font = create_cg_font (face);
-  if (unlikely (!data->cg_font))
-  {
-    DEBUG_MSG (CORETEXT, face, "CGFont creation failed..");
-    free (data);
-    return NULL;
-  }
-
-  /* We use 36pt size instead of UPEM, because CoreText implements the 'trak' table,
-   * which can make the font too tight at large sizes.  36pt should be a good semi-neutral
-   * size.
-   *
-   * Since we always create CTFont at a fixed size, our CTFont lives in face_data
-   * instead of font_data.  Which is good, because when people change scale on
-   * hb_font_t, we won't need to update our CTFont. */
-  data->ct_font = create_ct_font (data->cg_font, 36.);
-  if (unlikely (!data->ct_font))
-  {
-    DEBUG_MSG (CORETEXT, face, "CTFont creation failed.");
-    CFRelease (data->cg_font);
-    free (data);
-    return NULL;
+  if (unlikely (!data)) {
+    DEBUG_MSG (CORETEXT, face, "Face CGFontCreateWithDataProvider() failed");
   }
 
   return data;
@@ -206,20 +122,15 @@ _hb_coretext_shaper_face_data_create (hb_face_t *face)
 void
 _hb_coretext_shaper_face_data_destroy (hb_coretext_shaper_face_data_t *data)
 {
-  CFRelease (data->ct_font);
-  CFRelease (data->cg_font);
-  free (data);
+  CFRelease (data);
 }
 
-/*
- * Since: 0.9.10
- */
 CGFontRef
 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);
-  return face_data->cg_font;
+  return face_data;
 }
 
 
@@ -227,17 +138,48 @@ hb_coretext_face_get_cg_font (hb_face_t *face)
  * shaper font data
  */
 
-struct hb_coretext_shaper_font_data_t {};
+struct hb_coretext_shaper_font_data_t {
+  CTFontRef ct_font;
+  CGFloat x_mult, y_mult; /* From CT space to HB space. */
+};
 
 hb_coretext_shaper_font_data_t *
-_hb_coretext_shaper_font_data_create (hb_font_t *font HB_UNUSED)
+_hb_coretext_shaper_font_data_create (hb_font_t *font)
 {
-  return (hb_coretext_shaper_font_data_t *) HB_SHAPER_DATA_SUCCEEDED;
+  if (unlikely (!hb_coretext_shaper_face_data_ensure (font->face))) return NULL;
+
+  hb_coretext_shaper_font_data_t *data = (hb_coretext_shaper_font_data_t *) calloc (1, sizeof (hb_coretext_shaper_font_data_t));
+  if (unlikely (!data))
+    return NULL;
+
+  hb_face_t *face = font->face;
+  hb_coretext_shaper_face_data_t *face_data = HB_SHAPER_DATA_GET (face);
+
+  /* Choose a CoreText font size and calculate multipliers to convert to HarfBuzz space. */
+  CGFloat font_size = 36.; /* Default... */
+  /* No idea if the following is even a good idea. */
+  if (font->y_ppem)
+    font_size = font->y_ppem;
+
+  if (font_size < 0)
+    font_size = -font_size;
+  data->x_mult = (CGFloat) font->x_scale / font_size;
+  data->y_mult = (CGFloat) font->y_scale / font_size;
+  data->ct_font = CTFontCreateWithGraphicsFont (face_data, font_size, NULL, NULL);
+  if (unlikely (!data->ct_font)) {
+    DEBUG_MSG (CORETEXT, font, "Font CTFontCreateWithGraphicsFont() failed");
+    free (data);
+    return NULL;
+  }
+
+  return data;
 }
 
 void
 _hb_coretext_shaper_font_data_destroy (hb_coretext_shaper_font_data_t *data)
 {
+  CFRelease (data->ct_font);
+  free (data);
 }
 
 
@@ -263,10 +205,9 @@ _hb_coretext_shaper_shape_plan_data_destroy (hb_coretext_shaper_shape_plan_data_
 CTFontRef
 hb_coretext_font_get_ct_font (hb_font_t *font)
 {
-  hb_face_t *face = font->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->ct_font;
+  if (unlikely (!hb_coretext_shaper_font_data_ensure (font))) return NULL;
+  hb_coretext_shaper_font_data_t *font_data = HB_SHAPER_DATA_GET (font);
+  return font_data->ct_font;
 }
 
 
@@ -499,10 +440,7 @@ _hb_coretext_shape (hb_shape_plan_t    *shape_plan,
 {
   hb_face_t *face = font->face;
   hb_coretext_shaper_face_data_t *face_data = HB_SHAPER_DATA_GET (face);
-
-  CGFloat ct_font_size = CTFontGetSize (face_data->ct_font);
-  CGFloat x_mult = (CGFloat) font->x_scale / ct_font_size;
-  CGFloat y_mult = (CGFloat) font->y_scale / ct_font_size;
+  hb_coretext_shaper_font_data_t *font_data = HB_SHAPER_DATA_GET (font);
 
   /* Attach marks to their bases, to match the 'ot' shaper.
    * Adapted from hb-ot-shape:hb_form_clusters().
@@ -511,7 +449,6 @@ _hb_coretext_shape (hb_shape_plan_t    *shape_plan,
    * 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... */
-  if (buffer->cluster_level == HB_BUFFER_CLUSTER_LEVEL_MONOTONE_GRAPHEMES)
   {
     hb_unicode_funcs_t *unicode = buffer->unicode;
     unsigned int count = buffer->len;
@@ -634,7 +571,7 @@ _hb_coretext_shape (hb_shape_plan_t    *shape_plan,
          CTFontDescriptorRef font_desc = CTFontDescriptorCreateWithAttributes (attributes);
          CFRelease (attributes);
 
-         range->font = CTFontCreateCopyWithAttributes (face_data->ct_font, 0.0, NULL, font_desc);
+         range->font = CTFontCreateCopyWithAttributes (font_data->ct_font, 0.0, NULL, font_desc);
          CFRelease (font_desc);
        }
        else
@@ -752,6 +689,7 @@ resize_and_retry:
     scratch += old_scratch_used;
     scratch_size -= old_scratch_used;
   }
+retry:
   {
     string_ref = CFStringCreateWithCharactersNoCopy (NULL,
                                                     pchars, chars_len,
@@ -791,7 +729,7 @@ resize_and_retry:
        CFRelease (lang);
       }
       CFAttributedStringSetAttribute (attr_string, CFRangeMake (0, chars_len),
-                                     kCTFontAttributeName, face_data->ct_font);
+                                     kCTFontAttributeName, font_data->ct_font);
 
       if (num_features)
       {
@@ -850,17 +788,6 @@ resize_and_retry:
     buffer->len = 0;
     uint32_t status_and = ~0, status_or = 0;
     double advances_so_far = 0;
-    /* For right-to-left runs, CoreText returns the glyphs positioned such that
-     * any trailing whitespace is to the left of (0,0).  Adjust coordinate system
-     * to fix for that.  Test with any RTL string with trailing spaces.
-     * https://code.google.com/p/chromium/issues/detail?id=469028
-     */
-    if (HB_DIRECTION_IS_BACKWARD (buffer->props.direction))
-    {
-      advances_so_far -= CTLineGetTrailingWhitespaceWidth (line);
-      if (HB_DIRECTION_IS_VERTICAL (buffer->props.direction))
-         advances_so_far = -advances_so_far;
-    }
 
     const CFRange range_all = CFRangeMake (0, 0);
 
@@ -884,7 +811,7 @@ resize_and_retry:
        */
       CFDictionaryRef attributes = CTRunGetAttributes (run);
       CTFontRef run_ct_font = static_cast<CTFontRef>(CFDictionaryGetValue (attributes, kCTFontAttributeName));
-      if (!CFEqual (run_ct_font, face_data->ct_font))
+      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
@@ -904,11 +831,15 @@ resize_and_retry:
         * backend.
         *
         * However, even that wouldn't work if we were passed in the CGFont to
-        * construct a hb_face to begin with.
+        * begin with.
         *
-        * See: http://github.com/behdad/harfbuzz/pull/36
+        * 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.
         *
-        * Also see: https://bugs.chromium.org/p/chromium/issues/detail?id=597098
+        * See: http://github.com/behdad/harfbuzz/pull/36
         */
        bool matched = false;
        for (unsigned int i = 0; i < range_records.len; i++)
@@ -922,13 +853,13 @@ resize_and_retry:
          CGFontRef run_cg_font = CTFontCopyGraphicsFont (run_ct_font, 0);
          if (run_cg_font)
          {
-           matched = CFEqual (run_cg_font, face_data->cg_font);
+           matched = CFEqual (run_cg_font, face_data);
            CFRelease (run_cg_font);
          }
        }
        if (!matched)
        {
-         CFStringRef font_ps_name = CTFontCopyName (face_data->ct_font, kCTFontPostScriptNameKey);
+         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);
@@ -973,8 +904,8 @@ resize_and_retry:
              info->cluster = log_clusters[j];
 
              info->mask = advance;
-             info->var1.i32 = x_offset;
-             info->var2.i32 = y_offset;
+             info->var1.u32 = x_offset;
+             info->var2.u32 = y_offset;
 
              info++;
              buffer->len++;
@@ -1048,6 +979,7 @@ resize_and_retry:
          positions = position_buf;
        }
        hb_glyph_info_t *info = run_info;
+       CGFloat x_mult = font_data->x_mult, y_mult = font_data->y_mult;
        if (HB_DIRECTION_IS_HORIZONTAL (buffer->props.direction))
        {
          hb_position_t x_offset = (positions[0].x - advances_so_far) * x_mult;
@@ -1059,8 +991,8 @@ resize_and_retry:
            else /* last glyph */
              advance = run_advance - (positions[j].x - positions[0].x);
            info->mask = advance * x_mult;
-           info->var1.i32 = x_offset;
-           info->var2.i32 = positions[j].y * y_mult;
+           info->var1.u32 = x_offset;
+           info->var2.u32 = positions[j].y * y_mult;
            info++;
          }
        }
@@ -1075,8 +1007,8 @@ resize_and_retry:
            else /* last glyph */
              advance = run_advance - (positions[j].y - positions[0].y);
            info->mask = advance * y_mult;
-           info->var1.i32 = positions[j].x * x_mult;
-           info->var2.i32 = y_offset;
+           info->var1.u32 = positions[j].x * x_mult;
+           info->var2.u32 = y_offset;
            info++;
          }
        }
@@ -1091,20 +1023,10 @@ resize_and_retry:
       buffer->len += num_glyphs;
     }
 
-    /* Mac OS 10.6 doesn't have kCTTypesetterOptionForcedEmbeddingLevel,
-     * or if it does, it doesn't resepct it.  So we get runs with wrong
-     * directions.  As such, disable the assert...  It wouldn't crash, but
-     * cursoring will be off...
-     *
-     * http://crbug.com/419769
-     */
-    if (0)
-    {
-      /* 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);
-    }
+    /* 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 ();
 
@@ -1115,16 +1037,16 @@ resize_and_retry:
       for (unsigned int i = 0; i < count; i++)
       {
        pos->x_advance = info->mask;
-       pos->x_offset = info->var1.i32;
-       pos->y_offset = info->var2.i32;
+       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.i32;
-       pos->y_offset = info->var2.i32;
+       pos->x_offset = info->var1.u32;
+       pos->y_offset = info->var2.u32;
        info++, pos++;
       }
 
@@ -1182,6 +1104,10 @@ fail:
  * AAT shaper
  */
 
+HB_SHAPER_DATA_ENSURE_DECLARE(coretext_aat, face)
+HB_SHAPER_DATA_ENSURE_DECLARE(coretext_aat, font)
+
+
 /*
  * shaper face data
  */
index 82066e4..25267bc 100644 (file)
@@ -44,14 +44,14 @@ HB_BEGIN_DECLS
 #define HB_CORETEXT_TAG_MORX HB_TAG('m','o','r','x')
 
 
-HB_EXTERN hb_face_t *
+hb_face_t *
 hb_coretext_face_create (CGFontRef cg_font);
 
 
-HB_EXTERN CGFontRef
+CGFontRef
 hb_coretext_face_get_cg_font (hb_face_t *face);
 
-HB_EXTERN CTFontRef
+CTFontRef
 hb_coretext_font_get_ct_font (hb_font_t *font);
 
 
index 0398dfa..30ae4b1 100644 (file)
@@ -44,16 +44,6 @@ HB_BEGIN_DECLS
 #define HB_BUFFER_FLAGS_DEFAULT                        HB_BUFFER_FLAG_DEFAULT
 #define HB_BUFFER_SERIALIZE_FLAGS_DEFAULT      HB_BUFFER_SERIALIZE_FLAG_DEFAULT
 
-typedef hb_bool_t (*hb_font_get_glyph_func_t) (hb_font_t *font, void *font_data,
-                                              hb_codepoint_t unicode, hb_codepoint_t variation_selector,
-                                              hb_codepoint_t *glyph,
-                                              void *user_data);
-
-HB_EXTERN void
-hb_font_funcs_set_glyph_func (hb_font_funcs_t *ffuncs,
-                             hb_font_get_glyph_func_t func,
-                             void *user_data, hb_destroy_func_t destroy);
-
 #endif
 
 HB_END_DECLS
diff --git a/src/hb-directwrite.cc b/src/hb-directwrite.cc
deleted file mode 100644 (file)
index 96d1870..0000000
+++ /dev/null
@@ -1,970 +0,0 @@
-/*
- * Copyright © 2015-2016  Ebrahim Byagowi
- *
- *  This is part of HarfBuzz, a text shaping library.
- *
- * Permission is hereby granted, without written agreement and without
- * license or royalty fees, to use, copy, modify, and distribute this
- * software and its documentation for any purpose, provided that the
- * above copyright notice and the following two paragraphs appear in
- * all copies of this software.
- *
- * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
- * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
- * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
- * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
- * DAMAGE.
- *
- * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
- * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
- * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
- * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
- */
-
-#define HB_SHAPER directwrite
-#include "hb-shaper-impl-private.hh"
-
-#ifndef HB_DIRECTWRITE_EXPERIMENTAL_JUSTIFICATION
-  #include <DWrite.h>
-#else
-  #include <DWrite_1.h>
-#endif
-
-#include "hb-directwrite.h"
-
-#include "hb-open-file-private.hh"
-#include "hb-ot-name-table.hh"
-#include "hb-ot-tag.h"
-
-
-#ifndef HB_DEBUG_DIRECTWRITE
-#define HB_DEBUG_DIRECTWRITE (HB_DEBUG+0)
-#endif
-
-HB_SHAPER_DATA_ENSURE_DECLARE(directwrite, face)
-HB_SHAPER_DATA_ENSURE_DECLARE(directwrite, font)
-
-/*
-* shaper face data
-*/
-
-struct hb_directwrite_shaper_face_data_t {
-  HANDLE fh;
-  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_directwrite_shaper_face_data_t *
-_hb_directwrite_shaper_face_data_create(hb_face_t *face)
-{
-  hb_directwrite_shaper_face_data_t *data =
-    (hb_directwrite_shaper_face_data_t *) calloc (1, sizeof (hb_directwrite_shaper_face_data_t));
-  if (unlikely (!data))
-    return NULL;
-
-  hb_blob_t *blob = hb_face_reference_blob (face);
-  if (unlikely (!hb_blob_get_length (blob)))
-    DEBUG_MSG(DIRECTWRITE, face, "Face has empty blob");
-
-  blob = _hb_rename_font (blob, data->face_name);
-  if (unlikely (!blob))
-  {
-    free(data);
-    return NULL;
-  }
-
-  DWORD num_fonts_installed;
-  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 (DIRECTWRITE, face, "Face AddFontMemResourceEx() failed");
-    free (data);
-    return NULL;
-  }
-
-  return data;
-}
-
-void
-_hb_directwrite_shaper_face_data_destroy(hb_directwrite_shaper_face_data_t *data)
-{
-  RemoveFontMemResourceEx(data->fh);
-  free(data);
-}
-
-
-/*
- * shaper font data
- */
-
-struct hb_directwrite_shaper_font_data_t {
-  HDC hdc;
-  LOGFONTW log_font;
-  HFONT hfont;
-};
-
-static bool
-populate_log_font (LOGFONTW  *lf,
-       hb_font_t *font)
-{
-  memset (lf, 0, sizeof (*lf));
-  lf->lfHeight = -font->y_scale;
-  lf->lfCharSet = DEFAULT_CHARSET;
-
-  hb_face_t *face = font->face;
-  hb_directwrite_shaper_face_data_t *face_data = HB_SHAPER_DATA_GET (face);
-
-  memcpy (lf->lfFaceName, face_data->face_name, sizeof (lf->lfFaceName));
-
-  return true;
-}
-
-hb_directwrite_shaper_font_data_t *
-_hb_directwrite_shaper_font_data_create (hb_font_t *font)
-{
-  if (unlikely (!hb_directwrite_shaper_face_data_ensure (font->face))) return NULL;
-
-  hb_directwrite_shaper_font_data_t *data =
-    (hb_directwrite_shaper_font_data_t *) calloc (1, sizeof (hb_directwrite_shaper_font_data_t));
-  if (unlikely (!data))
-    return NULL;
-
-  data->hdc = GetDC (NULL);
-
-  if (unlikely (!populate_log_font (&data->log_font, font)))
-  {
-    DEBUG_MSG (DIRECTWRITE, font, "Font populate_log_font() failed");
-    _hb_directwrite_shaper_font_data_destroy (data);
-    return NULL;
-  }
-
-  data->hfont = CreateFontIndirectW (&data->log_font);
-  if (unlikely (!data->hfont))
-  {
-    DEBUG_MSG (DIRECTWRITE, font, "Font CreateFontIndirectW() failed");
-    _hb_directwrite_shaper_font_data_destroy (data);
-     return NULL;
-  }
-
-  if (!SelectObject (data->hdc, data->hfont))
-  {
-    DEBUG_MSG (DIRECTWRITE, font, "Font SelectObject() failed");
-    _hb_directwrite_shaper_font_data_destroy (data);
-     return NULL;
-  }
-
-  return data;
-}
-
-void
-_hb_directwrite_shaper_font_data_destroy (hb_directwrite_shaper_font_data_t *data)
-{
-  if (data->hdc)
-    ReleaseDC (NULL, data->hdc);
-  if (data->hfont)
-    DeleteObject (data->hfont);
-  free (data);
-}
-
-LOGFONTW *
-hb_directwrite_font_get_logfontw (hb_font_t *font)
-{
-  if (unlikely (!hb_directwrite_shaper_font_data_ensure (font))) return NULL;
-  hb_directwrite_shaper_font_data_t *font_data =  HB_SHAPER_DATA_GET (font);
-  return &font_data->log_font;
-}
-
-HFONT
-hb_directwrite_font_get_hfont (hb_font_t *font)
-{
-  if (unlikely (!hb_directwrite_shaper_font_data_ensure (font))) return NULL;
-  hb_directwrite_shaper_font_data_t *font_data =  HB_SHAPER_DATA_GET (font);
-  return font_data->hfont;
-}
-
-
-/*
- * shaper shape_plan data
- */
-
-struct hb_directwrite_shaper_shape_plan_data_t {};
-
-hb_directwrite_shaper_shape_plan_data_t *
-_hb_directwrite_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_directwrite_shaper_shape_plan_data_t *) HB_SHAPER_DATA_SUCCEEDED;
-}
-
-void
-_hb_directwrite_shaper_shape_plan_data_destroy (hb_directwrite_shaper_shape_plan_data_t *data HB_UNUSED)
-{
-}
-
-// Most of here TextAnalysis is originally written by Bas Schouten for Mozilla project
-// but now is relicensed to MIT for HarfBuzz use
-class TextAnalysis
-  : public IDWriteTextAnalysisSource, public IDWriteTextAnalysisSink
-{
-public:
-
-  IFACEMETHOD(QueryInterface)(IID const& iid, OUT void** ppObject) { return S_OK; }
-  IFACEMETHOD_(ULONG, AddRef)() { return 1; }
-  IFACEMETHOD_(ULONG, Release)() { return 1; }
-
-  // A single contiguous run of characters containing the same analysis 
-  // results.
-  struct Run
-  {
-    uint32_t mTextStart;   // starting text position of this run
-    uint32_t mTextLength;  // number of contiguous code units covered
-    uint32_t mGlyphStart;  // starting glyph in the glyphs array
-    uint32_t mGlyphCount;  // number of glyphs associated with this run of 
-    // text
-    DWRITE_SCRIPT_ANALYSIS mScript;
-    uint8_t mBidiLevel;
-    bool mIsSideways;
-
-    inline bool ContainsTextPosition(uint32_t aTextPosition) const
-    {
-      return aTextPosition >= mTextStart
-        && aTextPosition <  mTextStart + mTextLength;
-    }
-
-    Run *nextRun;
-  };
-
-public:
-  TextAnalysis(const wchar_t* text,
-    uint32_t textLength,
-    const wchar_t* localeName,
-    DWRITE_READING_DIRECTION readingDirection)
-    : mText(text)
-    , mTextLength(textLength)
-    , mLocaleName(localeName)
-    , mReadingDirection(readingDirection)
-    , mCurrentRun(NULL) { };
-
-  ~TextAnalysis() {
-    // delete runs, except mRunHead which is part of the TextAnalysis object
-    for (Run *run = mRunHead.nextRun; run;) {
-      Run *origRun = run;
-      run = run->nextRun;
-      free (origRun);
-    }
-  }
-
-  STDMETHODIMP GenerateResults(IDWriteTextAnalyzer* textAnalyzer,
-    Run **runHead) {
-    // Analyzes the text using the script analyzer and returns
-    // the result as a series of runs.
-
-    HRESULT hr = S_OK;
-
-    // Initially start out with one result that covers the entire range.
-    // This result will be subdivided by the analysis processes.
-    mRunHead.mTextStart = 0;
-    mRunHead.mTextLength = mTextLength;
-    mRunHead.mBidiLevel =
-      (mReadingDirection == DWRITE_READING_DIRECTION_RIGHT_TO_LEFT);
-    mRunHead.nextRun = NULL;
-    mCurrentRun = &mRunHead;
-
-    // Call each of the analyzers in sequence, recording their results.
-    if (SUCCEEDED (hr = textAnalyzer->AnalyzeScript (this, 0, mTextLength, this))) {
-      *runHead = &mRunHead;
-    }
-
-    return hr;
-  }
-
-  // IDWriteTextAnalysisSource implementation
-
-  IFACEMETHODIMP GetTextAtPosition(uint32_t textPosition,
-    OUT wchar_t const** textString,
-    OUT uint32_t* textLength)
-  {
-    if (textPosition >= mTextLength) {
-      // No text at this position, valid query though.
-      *textString = NULL;
-      *textLength = 0;
-    }
-    else {
-      *textString = mText + textPosition;
-      *textLength = mTextLength - textPosition;
-    }
-    return S_OK;
-  }
-
-  IFACEMETHODIMP GetTextBeforePosition(uint32_t textPosition,
-    OUT wchar_t const** textString,
-    OUT uint32_t* textLength)
-  {
-    if (textPosition == 0 || textPosition > mTextLength) {
-      // Either there is no text before here (== 0), or this
-      // is an invalid position. The query is considered valid thouh.
-      *textString = NULL;
-      *textLength = 0;
-    }
-    else {
-      *textString = mText;
-      *textLength = textPosition;
-    }
-    return S_OK;
-  }
-
-  IFACEMETHODIMP_(DWRITE_READING_DIRECTION)
-    GetParagraphReadingDirection() { return mReadingDirection; }
-
-  IFACEMETHODIMP GetLocaleName(uint32_t textPosition,
-    uint32_t* textLength,
-    wchar_t const** localeName) {
-    return S_OK;
-  }
-
-  IFACEMETHODIMP
-    GetNumberSubstitution(uint32_t textPosition,
-    OUT uint32_t* textLength,
-    OUT IDWriteNumberSubstitution** numberSubstitution)
-  {
-    // We do not support number substitution.
-    *numberSubstitution = NULL;
-    *textLength = mTextLength - textPosition;
-
-    return S_OK;
-  }
-
-  // IDWriteTextAnalysisSink implementation
-
-  IFACEMETHODIMP
-    SetScriptAnalysis(uint32_t textPosition,
-    uint32_t textLength,
-    DWRITE_SCRIPT_ANALYSIS const* scriptAnalysis)
-  {
-    SetCurrentRun(textPosition);
-    SplitCurrentRun(textPosition);
-    while (textLength > 0) {
-      Run *run = FetchNextRun(&textLength);
-      run->mScript = *scriptAnalysis;
-    }
-
-    return S_OK;
-  }
-
-  IFACEMETHODIMP
-    SetLineBreakpoints(uint32_t textPosition,
-    uint32_t textLength,
-    const DWRITE_LINE_BREAKPOINT* lineBreakpoints) { return S_OK; }
-
-  IFACEMETHODIMP SetBidiLevel(uint32_t textPosition,
-    uint32_t textLength,
-    uint8_t explicitLevel,
-    uint8_t resolvedLevel) { return S_OK; }
-
-  IFACEMETHODIMP
-    SetNumberSubstitution(uint32_t textPosition,
-    uint32_t textLength,
-    IDWriteNumberSubstitution* numberSubstitution) { return S_OK; }
-
-protected:
-  Run *FetchNextRun(IN OUT uint32_t* textLength)
-  {
-    // Used by the sink setters, this returns a reference to the next run.
-    // Position and length are adjusted to now point after the current run
-    // being returned.
-
-    Run *origRun = mCurrentRun;
-    // Split the tail if needed (the length remaining is less than the
-    // current run's size).
-    if (*textLength < mCurrentRun->mTextLength) {
-      SplitCurrentRun(mCurrentRun->mTextStart + *textLength);
-    }
-    else {
-      // Just advance the current run.
-      mCurrentRun = mCurrentRun->nextRun;
-    }
-    *textLength -= origRun->mTextLength;
-
-    // Return a reference to the run that was just current.
-    return origRun;
-  }
-
-  void SetCurrentRun(uint32_t textPosition)
-  {
-    // Move the current run to the given position.
-    // Since the analyzers generally return results in a forward manner,
-    // this will usually just return early. If not, find the
-    // corresponding run for the text position.
-
-    if (mCurrentRun && mCurrentRun->ContainsTextPosition(textPosition)) {
-      return;
-    }
-
-    for (Run *run = &mRunHead; run; run = run->nextRun) {
-      if (run->ContainsTextPosition(textPosition)) {
-        mCurrentRun = run;
-        return;
-      }
-    }
-    //NS_NOTREACHED("We should always be able to find the text position in one \
-            //                of our runs");
-  }
-
-  void SplitCurrentRun(uint32_t splitPosition)
-  {
-    if (!mCurrentRun) {
-      //NS_ASSERTION(false, "SplitCurrentRun called without current run.");
-      // Shouldn't be calling this when no current run is set!
-      return;
-    }
-    // Split the current run.
-    if (splitPosition <= mCurrentRun->mTextStart) {
-      // No need to split, already the start of a run
-      // or before it. Usually the first.
-      return;
-    }
-    Run *newRun = (Run*) malloc (sizeof (Run));
-
-    *newRun = *mCurrentRun;
-
-    // Insert the new run in our linked list.
-    newRun->nextRun = mCurrentRun->nextRun;
-    mCurrentRun->nextRun = newRun;
-
-    // Adjust runs' text positions and lengths.
-    uint32_t splitPoint = splitPosition - mCurrentRun->mTextStart;
-    newRun->mTextStart += splitPoint;
-    newRun->mTextLength -= splitPoint;
-    mCurrentRun->mTextLength = splitPoint;
-    mCurrentRun = newRun;
-  }
-
-protected:
-  // Input
-  // (weak references are fine here, since this class is a transient
-  //  stack-based helper that doesn't need to copy data)
-  uint32_t mTextLength;
-  const wchar_t* mText;
-  const wchar_t* mLocaleName;
-  DWRITE_READING_DIRECTION mReadingDirection;
-
-  // Current processing state.
-  Run *mCurrentRun;
-
-  // Output is a list of runs starting here
-  Run  mRunHead;
-};
-
-static inline uint16_t hb_uint16_swap (const uint16_t v)
-{ return (v >> 8) | (v << 8); }
-static inline uint32_t hb_uint32_swap (const uint32_t v)
-{ return (hb_uint16_swap(v) << 16) | hb_uint16_swap(v >> 16); }
-
-/*
- * shaper
- */
-
-hb_bool_t
-_hb_directwrite_shape(hb_shape_plan_t    *shape_plan,
-  hb_font_t          *font,
-  hb_buffer_t        *buffer,
-  const hb_feature_t *features,
-  unsigned int        num_features)
-{
-  hb_face_t *face = font->face;
-  hb_directwrite_shaper_face_data_t *face_data = HB_SHAPER_DATA_GET (face);
-  hb_directwrite_shaper_font_data_t *font_data = HB_SHAPER_DATA_GET (font);
-
-  // factory probably should be cached
-#ifndef HB_DIRECTWRITE_EXPERIMENTAL_JUSTIFICATION
-  IDWriteFactory* dwriteFactory;
-#else
-  IDWriteFactory1* dwriteFactory;
-#endif
-  DWriteCreateFactory (
-    DWRITE_FACTORY_TYPE_SHARED,
-    __uuidof (IDWriteFactory),
-    (IUnknown**) &dwriteFactory
-  );
-
-  IDWriteGdiInterop *gdiInterop;
-  dwriteFactory->GetGdiInterop (&gdiInterop);
-  IDWriteFontFace* fontFace;
-  gdiInterop->CreateFontFaceFromHdc (font_data->hdc, &fontFace);
-
-#ifndef HB_DIRECTWRITE_EXPERIMENTAL_JUSTIFICATION
-  IDWriteTextAnalyzer* analyzer;
-  dwriteFactory->CreateTextAnalyzer(&analyzer);
-#else
-  IDWriteTextAnalyzer* analyzer0;
-  dwriteFactory->CreateTextAnalyzer (&analyzer0);
-  IDWriteTextAnalyzer1* analyzer = (IDWriteTextAnalyzer1*) analyzer0;
-#endif
-
-  unsigned int scratch_size;
-  hb_buffer_t::scratch_buffer_t *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; \
-  }
-
-#define utf16_index() var1.u32
-
-  ALLOCATE_ARRAY(wchar_t, textString, buffer->len * 2);
-
-  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 <= 0xFFFFu))
-      textString[chars_len++] = c;
-    else if (unlikely(c > 0x10FFFFu))
-      textString[chars_len++] = 0xFFFDu;
-    else {
-      textString[chars_len++] = 0xD800u + ((c - 0x10000u) >> 10);
-      textString[chars_len++] = 0xDC00u + ((c - 0x10000u) & ((1 << 10) - 1));
-    }
-  }
-
-  ALLOCATE_ARRAY(WORD, log_clusters, chars_len);
-  // 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. */
-    }
-  }
-
-  HRESULT hr;
-  // TODO: Handle TEST_DISABLE_OPTIONAL_LIGATURES
-
-  DWRITE_READING_DIRECTION readingDirection = buffer->props.direction ? 
-    DWRITE_READING_DIRECTION_RIGHT_TO_LEFT :
-    DWRITE_READING_DIRECTION_LEFT_TO_RIGHT;
-
-  /*
-  * There's an internal 16-bit limit on some things inside the analyzer,
-  * but we never attempt to shape a word longer than 64K characters
-  * in a single gfxShapedWord, so we cannot exceed that limit.
-  */
-  uint32_t textLength = buffer->len;
-
-  TextAnalysis analysis(textString, textLength, NULL, readingDirection);
-  TextAnalysis::Run *runHead;
-  hr = analysis.GenerateResults(analyzer, &runHead);
-
-#define FAIL(...) \
-  HB_STMT_START { \
-    DEBUG_MSG (DIRECTWRITE, NULL, __VA_ARGS__); \
-    return false; \
-  } HB_STMT_END;
-
-  if (FAILED (hr))
-  {
-    FAIL ("Analyzer failed to generate results.");
-    return false;
-  }
-
-  uint32_t maxGlyphCount = 3 * textLength / 2 + 16;
-  uint32_t glyphCount;
-  bool isRightToLeft = HB_DIRECTION_IS_BACKWARD (buffer->props.direction);
-
-  const wchar_t localeName[20] = {0};
-  if (buffer->props.language != NULL)
-  {
-    mbstowcs ((wchar_t*) localeName,
-      hb_language_to_string (buffer->props.language), 20);
-  }
-
-  DWRITE_TYPOGRAPHIC_FEATURES singleFeatures;
-  singleFeatures.featureCount = num_features;
-  if (num_features)
-  {
-    DWRITE_FONT_FEATURE* dwfeatureArray = (DWRITE_FONT_FEATURE*)
-      malloc (sizeof (DWRITE_FONT_FEATURE) * num_features);
-    for (unsigned int i = 0; i < num_features; ++i)
-    {
-      dwfeatureArray[i].nameTag = (DWRITE_FONT_FEATURE_TAG)
-        hb_uint32_swap (features[i].tag);
-      dwfeatureArray[i].parameter = features[i].value;
-    }
-    singleFeatures.features = dwfeatureArray;
-  }
-  const DWRITE_TYPOGRAPHIC_FEATURES* dwFeatures =
-    (const DWRITE_TYPOGRAPHIC_FEATURES*) &singleFeatures;
-  const uint32_t featureRangeLengths[] = { textLength };
-
-retry_getglyphs:
-  uint16_t* clusterMap = (uint16_t*) malloc (maxGlyphCount * sizeof (uint16_t));
-  uint16_t* glyphIndices = (uint16_t*) malloc (maxGlyphCount * sizeof (uint16_t));
-  DWRITE_SHAPING_TEXT_PROPERTIES* textProperties = (DWRITE_SHAPING_TEXT_PROPERTIES*)
-    malloc (maxGlyphCount * sizeof (DWRITE_SHAPING_TEXT_PROPERTIES));
-  DWRITE_SHAPING_GLYPH_PROPERTIES* glyphProperties = (DWRITE_SHAPING_GLYPH_PROPERTIES*)
-    malloc (maxGlyphCount * sizeof (DWRITE_SHAPING_GLYPH_PROPERTIES));
-
-  hr = analyzer->GetGlyphs (textString, textLength, fontFace, FALSE,
-    isRightToLeft, &runHead->mScript, localeName, NULL, &dwFeatures,
-    featureRangeLengths, 1, maxGlyphCount, clusterMap, textProperties, glyphIndices,
-    glyphProperties, &glyphCount);
-
-  if (unlikely (hr == HRESULT_FROM_WIN32 (ERROR_INSUFFICIENT_BUFFER)))
-  {
-    free (clusterMap);
-    free (glyphIndices);
-    free (textProperties);
-    free (glyphProperties);
-
-    maxGlyphCount *= 2;
-
-    goto retry_getglyphs;
-  }
-  if (FAILED (hr))
-  {
-    FAIL ("Analyzer failed to get glyphs.");
-    return false;
-  }
-
-  float* glyphAdvances = (float*) malloc (maxGlyphCount * sizeof (float));
-  DWRITE_GLYPH_OFFSET* glyphOffsets = (DWRITE_GLYPH_OFFSET*)
-    malloc(maxGlyphCount * sizeof (DWRITE_GLYPH_OFFSET));
-
-  /* The -2 in the following is to compensate for possible
-   * alignment needed after the WORD array.  sizeof(WORD) == 2. */
-  unsigned int glyphs_size = (scratch_size * sizeof(int) - 2)
-         / (sizeof(WORD) +
-            sizeof(DWRITE_SHAPING_GLYPH_PROPERTIES) +
-            sizeof(int) +
-            sizeof(DWRITE_GLYPH_OFFSET) +
-            sizeof(uint32_t));
-  ALLOCATE_ARRAY (uint32_t, vis_clusters, glyphs_size);
-
-#undef ALLOCATE_ARRAY
-
-  int fontEmSize = font->face->get_upem();
-  if (fontEmSize < 0)
-    fontEmSize = -fontEmSize;
-
-  if (fontEmSize < 0)
-    fontEmSize = -fontEmSize;
-  double x_mult = (double) font->x_scale / fontEmSize;
-  double y_mult = (double) font->y_scale / fontEmSize;
-
-  hr = analyzer->GetGlyphPlacements (textString,
-    clusterMap, textProperties, textLength, glyphIndices,
-    glyphProperties, glyphCount, fontFace, fontEmSize,
-    FALSE, isRightToLeft, &runHead->mScript, localeName,
-    &dwFeatures, featureRangeLengths, 1,
-    glyphAdvances, glyphOffsets);
-
-  if (FAILED (hr))
-  {
-    FAIL ("Analyzer failed to get glyph placements.");
-    return false;
-  }
-
-#ifdef HB_DIRECTWRITE_EXPERIMENTAL_JUSTIFICATION
-
-  DWRITE_JUSTIFICATION_OPPORTUNITY* justificationOpportunities =
-    (DWRITE_JUSTIFICATION_OPPORTUNITY*)
-    malloc (maxGlyphCount * sizeof (DWRITE_JUSTIFICATION_OPPORTUNITY));
-  hr = analyzer->GetJustificationOpportunities (fontFace, fontEmSize,
-    runHead->mScript, textLength, glyphCount, textString, clusterMap,
-    glyphProperties, justificationOpportunities);
-
-  if (FAILED (hr))
-  {
-    FAIL ("Analyzer failed to get justification opportunities.");
-    return false;
-  }
-
-  // TODO: get lineWith from somewhere
-  float lineWidth = 60000;
-
-  float* justifiedGlyphAdvances =
-    (float*) malloc (maxGlyphCount * sizeof (float));
-  DWRITE_GLYPH_OFFSET* justifiedGlyphOffsets = (DWRITE_GLYPH_OFFSET*)
-    malloc (glyphCount * sizeof (DWRITE_GLYPH_OFFSET));
-  hr = analyzer->JustifyGlyphAdvances (lineWidth, glyphCount, justificationOpportunities,
-    glyphAdvances, glyphOffsets, justifiedGlyphAdvances, justifiedGlyphOffsets);
-
-  if (FAILED (hr))
-  {
-    FAIL ("Analyzer failed to get justified glyph advances.");
-    return false;
-  }
-
-  DWRITE_SCRIPT_PROPERTIES scriptProperties;
-  hr = analyzer->GetScriptProperties (runHead->mScript, &scriptProperties);
-  if (FAILED (hr))
-  {
-    FAIL ("Analyzer failed to get script properties.");
-    return false;
-  }
-  uint32_t justificationCharacter = scriptProperties.justificationCharacter;
-
-  // if a script justificationCharacter is not space, it can have GetJustifiedGlyphs
-  if (justificationCharacter != 32)
-  {
-retry_getjustifiedglyphs:
-    uint16_t* modifiedClusterMap = (uint16_t*) malloc (maxGlyphCount * sizeof (uint16_t));
-    uint16_t* modifiedGlyphIndices = (uint16_t*) malloc (maxGlyphCount * sizeof (uint16_t));
-    float* modifiedGlyphAdvances = (float*) malloc (maxGlyphCount * sizeof (float));
-    DWRITE_GLYPH_OFFSET* modifiedGlyphOffsets = (DWRITE_GLYPH_OFFSET*)
-      malloc (maxGlyphCount * sizeof (DWRITE_GLYPH_OFFSET));
-    uint32_t actualGlyphsCount;
-    hr = analyzer->GetJustifiedGlyphs (fontFace, fontEmSize, runHead->mScript,
-        textLength, glyphCount, maxGlyphCount, clusterMap, glyphIndices,
-        glyphAdvances, justifiedGlyphAdvances, justifiedGlyphOffsets,
-        glyphProperties, &actualGlyphsCount, modifiedClusterMap, modifiedGlyphIndices,
-        modifiedGlyphAdvances, modifiedGlyphOffsets);
-
-    if (hr == HRESULT_FROM_WIN32 (ERROR_INSUFFICIENT_BUFFER))
-    {
-      maxGlyphCount = actualGlyphsCount;
-      free (modifiedClusterMap);
-      free (modifiedGlyphIndices);
-      free (modifiedGlyphAdvances);
-      free (modifiedGlyphOffsets);
-
-      maxGlyphCount = actualGlyphsCount;
-
-      goto retry_getjustifiedglyphs;
-    }
-    if (FAILED (hr))
-    {
-      FAIL ("Analyzer failed to get justified glyphs.");
-      return false;
-    }
-
-    free (clusterMap);
-    free (glyphIndices);
-    free (glyphAdvances);
-    free (glyphOffsets);
-
-    glyphCount = actualGlyphsCount;
-    clusterMap = modifiedClusterMap;
-    glyphIndices = modifiedGlyphIndices;
-    glyphAdvances = modifiedGlyphAdvances;
-    glyphOffsets = modifiedGlyphOffsets;
-
-    free(justifiedGlyphAdvances);
-    free(justifiedGlyphOffsets);
-  }
-  else
-  {
-    free(glyphAdvances);
-    free(glyphOffsets);
-
-    glyphAdvances = justifiedGlyphAdvances;
-    glyphOffsets = justifiedGlyphOffsets;
-  }
-
-  free(justificationOpportunities);
-
-#endif
-
-  /* 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 < glyphCount; i++)
-    vis_clusters[i] = -1;
-  for (unsigned int i = 0; i < buffer->len; i++)
-  {
-    uint32_t *p =
-      &vis_clusters[log_clusters[buffer->info[i].utf16_index()]];
-    *p = MIN (*p, buffer->info[i].cluster);
-  }
-  for (unsigned int i = 1; i < glyphCount; i++)
-    if (vis_clusters[i] == -1)
-      vis_clusters[i] = vis_clusters[i - 1];
-
-#undef utf16_index
-
-  if (unlikely (!buffer->ensure (glyphCount)))
-    FAIL ("Buffer in error");
-
-#undef FAIL
-
-  /* Set glyph infos */
-  buffer->len = 0;
-  for (unsigned int i = 0; i < glyphCount; i++)
-  {
-    hb_glyph_info_t *info = &buffer->info[buffer->len++];
-
-    info->codepoint = glyphIndices[i];
-    info->cluster = vis_clusters[i];
-
-    /* The rest is crap.  Let's store position info there for now. */
-    info->mask = glyphAdvances[i];
-    info->var1.i32 = glyphOffsets[i].advanceOffset;
-    info->var2.i32 = glyphOffsets[i].ascenderOffset;
-  }
-
-  /* Set glyph positions */
-  buffer->clear_positions ();
-  for (unsigned int i = 0; i < glyphCount; i++)
-  {
-    hb_glyph_info_t *info = &buffer->info[i];
-    hb_glyph_position_t *pos = &buffer->pos[i];
-
-    /* TODO vertical */
-    pos->x_advance = x_mult * (int32_t) info->mask;
-    pos->x_offset =
-      x_mult * (isRightToLeft ? -info->var1.i32 : info->var1.i32);
-    pos->y_offset = y_mult * info->var2.i32;
-  }
-
-  if (isRightToLeft)
-    hb_buffer_reverse (buffer);
-
-  free (clusterMap);
-  free (glyphIndices);
-  free (textProperties);
-  free (glyphProperties);
-  free (glyphAdvances);
-  free (glyphOffsets);
-
-  if (num_features)
-    free (singleFeatures.features);
-
-  /* Wow, done! */
-  return true;
-}
diff --git a/src/hb-directwrite.h b/src/hb-directwrite.h
deleted file mode 100644 (file)
index adf33df..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright © 2015  Ebrahim Byagowi
- *
- *  This is part of HarfBuzz, a text shaping library.
- *
- * Permission is hereby granted, without written agreement and without
- * license or royalty fees, to use, copy, modify, and distribute this
- * software and its documentation for any purpose, provided that the
- * above copyright notice and the following two paragraphs appear in
- * all copies of this software.
- *
- * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
- * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
- * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
- * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
- * DAMAGE.
- *
- * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
- * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
- * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
- * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
- */
-
-#ifndef HB_DIRECTWRITE_H
-#define HB_DIRECTWRITE_H
-
-#include "hb.h"
-
-HB_BEGIN_DECLS
-
-HB_END_DECLS
-
-#endif /* HB_UNISCRIBE_H */
index 9effc41..9348af7 100644 (file)
@@ -77,7 +77,7 @@ const hb_face_t _hb_face_nil = {
  *
  * Return value: (transfer full)
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_face_t *
 hb_face_create_for_tables (hb_reference_table_func_t  reference_table_func,
@@ -113,7 +113,7 @@ _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 *) calloc (1, sizeof (hb_face_for_data_closure_t));
+  closure = (hb_face_for_data_closure_t *) malloc (sizeof (hb_face_for_data_closure_t));
   if (unlikely (!closure))
     return NULL;
 
@@ -157,7 +157,7 @@ _hb_face_for_data_reference_table (hb_face_t *face HB_UNUSED, hb_tag_t tag, void
  *
  * Return value: (transfer full):
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_face_t *
 hb_face_create (hb_blob_t    *blob,
@@ -165,8 +165,8 @@ hb_face_create (hb_blob_t    *blob,
 {
   hb_face_t *face;
 
-  if (unlikely (!blob))
-    blob = hb_blob_get_empty ();
+  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);
 
@@ -189,7 +189,7 @@ hb_face_create (hb_blob_t    *blob,
  *
  * Return value: (transfer full)
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_face_t *
 hb_face_get_empty (void)
@@ -206,7 +206,7 @@ hb_face_get_empty (void)
  *
  * Return value: 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_face_t *
 hb_face_reference (hb_face_t *face)
@@ -220,7 +220,7 @@ hb_face_reference (hb_face_t *face)
  *
  * 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 void
 hb_face_destroy (hb_face_t *face)
@@ -257,7 +257,7 @@ hb_face_destroy (hb_face_t *face)
  *
  * Return value: 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_bool_t
 hb_face_set_user_data (hb_face_t          *face,
@@ -278,7 +278,7 @@ hb_face_set_user_data (hb_face_t          *face,
  *
  * Return value: (transfer none):
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 void *
 hb_face_get_user_data (hb_face_t          *face,
@@ -293,7 +293,7 @@ hb_face_get_user_data (hb_face_t          *face,
  *
  * 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 void
 hb_face_make_immutable (hb_face_t *face)
@@ -312,7 +312,7 @@ hb_face_make_immutable (hb_face_t *face)
  *
  * Return value: 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_bool_t
 hb_face_is_immutable (hb_face_t *face)
@@ -330,7 +330,7 @@ hb_face_is_immutable (hb_face_t *face)
  *
  * Return value: (transfer full):
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_blob_t *
 hb_face_reference_table (hb_face_t *face,
@@ -347,7 +347,7 @@ hb_face_reference_table (hb_face_t *face,
  *
  * Return value: (transfer full):
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_blob_t *
 hb_face_reference_blob (hb_face_t *face)
@@ -362,7 +362,7 @@ hb_face_reference_blob (hb_face_t *face)
  *
  * 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 void
 hb_face_set_index (hb_face_t    *face,
@@ -382,7 +382,7 @@ hb_face_set_index (hb_face_t    *face,
  *
  * Return value: 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 unsigned int
 hb_face_get_index (hb_face_t    *face)
@@ -397,7 +397,7 @@ hb_face_get_index (hb_face_t    *face)
  *
  * 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 void
 hb_face_set_upem (hb_face_t    *face,
@@ -417,7 +417,7 @@ hb_face_set_upem (hb_face_t    *face,
  *
  * Return value: 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 unsigned int
 hb_face_get_upem (hb_face_t *face)
@@ -441,7 +441,7 @@ hb_face_t::load_upem (void) const
  *
  * 
  *
- * Since: 0.9.7
+ * Since: 1.0
  **/
 void
 hb_face_set_glyph_count (hb_face_t    *face,
@@ -461,7 +461,7 @@ hb_face_set_glyph_count (hb_face_t    *face,
  *
  * Return value: 
  *
- * Since: 0.9.7
+ * Since: 1.0
  **/
 unsigned int
 hb_face_get_glyph_count (hb_face_t *face)
index 91237b7..f682c46 100644 (file)
@@ -43,28 +43,28 @@ HB_BEGIN_DECLS
 
 typedef struct hb_face_t hb_face_t;
 
-HB_EXTERN 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_EXTERN hb_face_t *
+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_EXTERN hb_face_t *
+hb_face_t *
 hb_face_get_empty (void);
 
-HB_EXTERN hb_face_t *
+hb_face_t *
 hb_face_reference (hb_face_t *face);
 
-HB_EXTERN void
+void
 hb_face_destroy (hb_face_t *face);
 
-HB_EXTERN hb_bool_t
+hb_bool_t
 hb_face_set_user_data (hb_face_t          *face,
                       hb_user_data_key_t *key,
                       void *              data,
@@ -72,43 +72,43 @@ hb_face_set_user_data (hb_face_t          *face,
                       hb_bool_t           replace);
 
 
-HB_EXTERN void *
+void *
 hb_face_get_user_data (hb_face_t          *face,
                       hb_user_data_key_t *key);
 
-HB_EXTERN void
+void
 hb_face_make_immutable (hb_face_t *face);
 
-HB_EXTERN hb_bool_t
+hb_bool_t
 hb_face_is_immutable (hb_face_t *face);
 
 
-HB_EXTERN hb_blob_t *
+hb_blob_t *
 hb_face_reference_table (hb_face_t *face,
                         hb_tag_t   tag);
 
-HB_EXTERN hb_blob_t *
+hb_blob_t *
 hb_face_reference_blob (hb_face_t *face);
 
-HB_EXTERN void
+void
 hb_face_set_index (hb_face_t    *face,
                   unsigned int  index);
 
-HB_EXTERN unsigned int
+unsigned int
 hb_face_get_index (hb_face_t    *face);
 
-HB_EXTERN void
+void
 hb_face_set_upem (hb_face_t    *face,
                  unsigned int  upem);
 
-HB_EXTERN unsigned int
+unsigned int
 hb_face_get_upem (hb_face_t *face);
 
-HB_EXTERN void
+void
 hb_face_set_glyph_count (hb_face_t    *face,
                         unsigned int  glyph_count);
 
-HB_EXTERN unsigned int
+unsigned int
 hb_face_get_glyph_count (hb_face_t *face);
 
 
index e2ad240..9d061a9 100644 (file)
@@ -106,7 +106,7 @@ _hb_fallback_shape (hb_shape_plan_t    *shape_plan HB_UNUSED,
    */
 
   hb_codepoint_t space;
-  bool has_space = (bool) font->get_nominal_glyph (' ', &space);
+  bool has_space = font->get_glyph (' ', 0, &space);
 
   buffer->clear_positions ();
 
@@ -123,7 +123,7 @@ _hb_fallback_shape (hb_shape_plan_t    *shape_plan HB_UNUSED,
       pos[i].y_advance = 0;
       continue;
     }
-    font->get_nominal_glyph (info[i].codepoint, &info[i].codepoint);
+    font->get_glyph (info[i].codepoint, 0, &info[i].codepoint);
     font->get_glyph_advance_for_direction (info[i].codepoint,
                                           direction,
                                           &pos[i].x_advance,
index 8da40a9..33bbf71 100644 (file)
  */
 
 #define HB_FONT_FUNCS_IMPLEMENT_CALLBACKS \
-  HB_FONT_FUNC_IMPLEMENT (font_h_extents) \
-  HB_FONT_FUNC_IMPLEMENT (font_v_extents) \
-  HB_FONT_FUNC_IMPLEMENT (nominal_glyph) \
-  HB_FONT_FUNC_IMPLEMENT (variation_glyph) \
+  HB_FONT_FUNC_IMPLEMENT (glyph) \
   HB_FONT_FUNC_IMPLEMENT (glyph_h_advance) \
   HB_FONT_FUNC_IMPLEMENT (glyph_v_advance) \
   HB_FONT_FUNC_IMPLEMENT (glyph_h_origin) \
@@ -64,6 +61,14 @@ struct hb_font_funcs_t {
 
   hb_bool_t immutable;
 
+  /* Don't access these directly.  Call hb_font_get_*() instead. */
+
+  struct {
+#define HB_FONT_FUNC_IMPLEMENT(name) hb_font_get_##name##_func_t name;
+    HB_FONT_FUNCS_IMPLEMENT_CALLBACKS
+#undef HB_FONT_FUNC_IMPLEMENT
+  } get;
+
   struct {
 #define HB_FONT_FUNC_IMPLEMENT(name) void *name;
     HB_FONT_FUNCS_IMPLEMENT_CALLBACKS
@@ -75,16 +80,6 @@ struct hb_font_funcs_t {
     HB_FONT_FUNCS_IMPLEMENT_CALLBACKS
 #undef HB_FONT_FUNC_IMPLEMENT
   } destroy;
-
-  /* Don't access these directly.  Call font->get_*() instead. */
-  union get_t {
-    struct get_funcs_t {
-#define HB_FONT_FUNC_IMPLEMENT(name) hb_font_get_##name##_func_t name;
-      HB_FONT_FUNCS_IMPLEMENT_CALLBACKS
-#undef HB_FONT_FUNC_IMPLEMENT
-    } f;
-    void (*array[VAR]) (void);
-  } get;
 };
 
 
@@ -149,133 +144,95 @@ struct hb_font_t {
 
   /* Public getters */
 
-  HB_INTERNAL bool has_func (unsigned int i);
-
-  /* has_* ... */
-#define HB_FONT_FUNC_IMPLEMENT(name) \
-  bool \
-  has_##name##_func (void) \
-  { \
-    hb_font_funcs_t *funcs = this->klass; \
-    unsigned int i = offsetof (hb_font_funcs_t::get_t::get_funcs_t, name) / sizeof (funcs->get.array[0]); \
-    return has_func (i); \
-  }
-  HB_FONT_FUNCS_IMPLEMENT_CALLBACKS
-#undef HB_FONT_FUNC_IMPLEMENT
-
-  inline hb_bool_t get_font_h_extents (hb_font_extents_t *extents)
-  {
-    memset (extents, 0, sizeof (*extents));
-    return klass->get.f.font_h_extents (this, user_data,
-                                       extents,
-                                       klass->user_data.font_h_extents);
-  }
-  inline hb_bool_t get_font_v_extents (hb_font_extents_t *extents)
-  {
-    memset (extents, 0, sizeof (*extents));
-    return klass->get.f.font_v_extents (this, user_data,
-                                       extents,
-                                       klass->user_data.font_v_extents);
-  }
-
-  inline bool has_glyph (hb_codepoint_t unicode)
+  inline hb_bool_t has_glyph (hb_codepoint_t unicode)
   {
     hb_codepoint_t glyph;
-    return get_nominal_glyph (unicode, &glyph);
+    return get_glyph (unicode, 0, &glyph);
   }
 
-  inline hb_bool_t get_nominal_glyph (hb_codepoint_t unicode,
-                                     hb_codepoint_t *glyph)
-  {
-    *glyph = 0;
-    return klass->get.f.nominal_glyph (this, user_data,
-                                      unicode, glyph,
-                                      klass->user_data.nominal_glyph);
-  }
-
-  inline hb_bool_t get_variation_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)
   {
     *glyph = 0;
-    return klass->get.f.variation_glyph (this, user_data,
-                                        unicode, variation_selector, glyph,
-                                        klass->user_data.variation_glyph);
+    return klass->get.glyph (this, user_data,
+                            unicode, variation_selector, glyph,
+                            klass->user_data.glyph);
   }
 
   inline hb_position_t get_glyph_h_advance (hb_codepoint_t glyph)
   {
-    return klass->get.f.glyph_h_advance (this, user_data,
-                                        glyph,
-                                        klass->user_data.glyph_h_advance);
+    return klass->get.glyph_h_advance (this, user_data,
+                                      glyph,
+                                      klass->user_data.glyph_h_advance);
   }
 
   inline hb_position_t get_glyph_v_advance (hb_codepoint_t glyph)
   {
-    return klass->get.f.glyph_v_advance (this, user_data,
-                                        glyph,
-                                        klass->user_data.glyph_v_advance);
+    return klass->get.glyph_v_advance (this, user_data,
+                                      glyph,
+                                      klass->user_data.glyph_v_advance);
   }
 
   inline hb_bool_t get_glyph_h_origin (hb_codepoint_t glyph,
                                       hb_position_t *x, hb_position_t *y)
   {
     *x = *y = 0;
-    return klass->get.f.glyph_h_origin (this, user_data,
-                                       glyph, x, y,
-                                       klass->user_data.glyph_h_origin);
+    return klass->get.glyph_h_origin (this, user_data,
+                                     glyph, x, y,
+                                     klass->user_data.glyph_h_origin);
   }
 
   inline hb_bool_t get_glyph_v_origin (hb_codepoint_t glyph,
                                       hb_position_t *x, hb_position_t *y)
   {
     *x = *y = 0;
-    return klass->get.f.glyph_v_origin (this, user_data,
-                                       glyph, x, y,
-                                       klass->user_data.glyph_v_origin);
+    return klass->get.glyph_v_origin (this, user_data,
+                                     glyph, x, y,
+                                     klass->user_data.glyph_v_origin);
   }
 
   inline hb_position_t get_glyph_h_kerning (hb_codepoint_t left_glyph, hb_codepoint_t right_glyph)
   {
-    return klass->get.f.glyph_h_kerning (this, user_data,
-                                        left_glyph, right_glyph,
-                                        klass->user_data.glyph_h_kerning);
+    return klass->get.glyph_h_kerning (this, user_data,
+                                      left_glyph, right_glyph,
+                                      klass->user_data.glyph_h_kerning);
   }
 
   inline hb_position_t get_glyph_v_kerning (hb_codepoint_t top_glyph, hb_codepoint_t bottom_glyph)
   {
-    return klass->get.f.glyph_v_kerning (this, user_data,
-                                        top_glyph, bottom_glyph,
-                                        klass->user_data.glyph_v_kerning);
+    return klass->get.glyph_v_kerning (this, user_data,
+                                      top_glyph, bottom_glyph,
+                                      klass->user_data.glyph_v_kerning);
   }
 
   inline hb_bool_t get_glyph_extents (hb_codepoint_t glyph,
                                      hb_glyph_extents_t *extents)
   {
     memset (extents, 0, sizeof (*extents));
-    return klass->get.f.glyph_extents (this, user_data,
-                                      glyph,
-                                      extents,
-                                      klass->user_data.glyph_extents);
+    return klass->get.glyph_extents (this, user_data,
+                                    glyph,
+                                    extents,
+                                    klass->user_data.glyph_extents);
   }
 
   inline hb_bool_t get_glyph_contour_point (hb_codepoint_t glyph, unsigned int point_index,
                                            hb_position_t *x, hb_position_t *y)
   {
     *x = *y = 0;
-    return klass->get.f.glyph_contour_point (this, user_data,
-                                            glyph, point_index,
-                                            x, y,
-                                            klass->user_data.glyph_contour_point);
+    return klass->get.glyph_contour_point (this, user_data,
+                                          glyph, point_index,
+                                          x, y,
+                                          klass->user_data.glyph_contour_point);
   }
 
   inline hb_bool_t get_glyph_name (hb_codepoint_t glyph,
                                   char *name, unsigned int size)
   {
     if (size) *name = '\0';
-    return klass->get.f.glyph_name (this, user_data,
-                                   glyph,
-                                   name, size,
-                                   klass->user_data.glyph_name);
+    return klass->get.glyph_name (this, user_data,
+                                 glyph,
+                                 name, size,
+                                 klass->user_data.glyph_name);
   }
 
   inline hb_bool_t get_glyph_from_name (const char *name, int len, /* -1 means nul-terminated */
@@ -283,35 +240,15 @@ struct hb_font_t {
   {
     *glyph = 0;
     if (len == -1) len = strlen (name);
-    return klass->get.f.glyph_from_name (this, user_data,
-                                        name, len,
-                                        glyph,
-                                        klass->user_data.glyph_from_name);
+    return klass->get.glyph_from_name (this, user_data,
+                                      name, len,
+                                      glyph,
+                                      klass->user_data.glyph_from_name);
   }
 
 
   /* A bit higher-level, and with fallback */
 
-  inline void get_extents_for_direction (hb_direction_t direction,
-                                        hb_font_extents_t *extents)
-  {
-    if (likely (HB_DIRECTION_IS_HORIZONTAL (direction))) {
-      if (!get_font_h_extents (extents))
-      {
-       extents->ascender = y_scale * .8;
-       extents->descender = y_scale - extents->ascender;
-       extents->line_gap = 0;
-      }
-    } else {
-      if (!get_font_v_extents (extents))
-      {
-       extents->ascender = x_scale / 2;
-       extents->descender = x_scale - extents->ascender;
-       extents->line_gap = 0;
-      }
-    }
-  }
-
   inline void get_glyph_advance_for_direction (hb_codepoint_t glyph,
                                               hb_direction_t direction,
                                               hb_position_t *x, hb_position_t *y)
@@ -331,7 +268,7 @@ struct hb_font_t {
   {
     *x = get_glyph_h_advance (glyph) / 2;
 
-    /* TODO use font_extents.ascender */
+    /* TODO use font_metics.ascent */
     *y = y_scale;
   }
 
@@ -361,26 +298,6 @@ struct hb_font_t {
     }
   }
 
-  inline void add_glyph_h_origin (hb_codepoint_t glyph,
-                                 hb_position_t *x, hb_position_t *y)
-  {
-    hb_position_t origin_x, origin_y;
-
-    get_glyph_h_origin (glyph, &origin_x, &origin_y);
-
-    *x += origin_x;
-    *y += origin_y;
-  }
-  inline void add_glyph_v_origin (hb_codepoint_t glyph,
-                                 hb_position_t *x, hb_position_t *y)
-  {
-    hb_position_t origin_x, origin_y;
-
-    get_glyph_v_origin (glyph, &origin_x, &origin_y);
-
-    *x += origin_x;
-    *y += origin_y;
-  }
   inline void add_glyph_origin_for_direction (hb_codepoint_t glyph,
                                              hb_direction_t direction,
                                              hb_position_t *x, hb_position_t *y)
@@ -393,26 +310,6 @@ struct hb_font_t {
     *y += origin_y;
   }
 
-  inline void subtract_glyph_h_origin (hb_codepoint_t glyph,
-                                      hb_position_t *x, hb_position_t *y)
-  {
-    hb_position_t origin_x, origin_y;
-
-    get_glyph_h_origin (glyph, &origin_x, &origin_y);
-
-    *x -= origin_x;
-    *y -= origin_y;
-  }
-  inline void subtract_glyph_v_origin (hb_codepoint_t glyph,
-                                      hb_position_t *x, hb_position_t *y)
-  {
-    hb_position_t origin_x, origin_y;
-
-    get_glyph_v_origin (glyph, &origin_x, &origin_y);
-
-    *x -= origin_x;
-    *y -= origin_y;
-  }
   inline void subtract_glyph_origin_for_direction (hb_codepoint_t glyph,
                                                   hb_direction_t direction,
                                                   hb_position_t *x, hb_position_t *y)
@@ -497,7 +394,7 @@ struct hb_font_t {
       hb_codepoint_t unichar;
       if (0 == strncmp (s, "uni", 3) &&
          hb_codepoint_parse (s + 3, len - 3, 16, &unichar) &&
-         get_nominal_glyph (unichar, glyph))
+         get_glyph (unichar, 0, glyph))
        return true;
     }
 
index 6a4823a..4364ca7 100644 (file)
  */
 
 static hb_bool_t
-hb_font_get_font_h_extents_nil (hb_font_t *font,
-                               void *font_data HB_UNUSED,
-                               hb_font_extents_t *metrics,
-                               void *user_data HB_UNUSED)
-{
-  memset (metrics, 0, sizeof (*metrics));
-  return false;
-}
-static hb_bool_t
-hb_font_get_font_h_extents_parent (hb_font_t *font,
-                                  void *font_data HB_UNUSED,
-                                  hb_font_extents_t *metrics,
-                                  void *user_data HB_UNUSED)
-{
-  hb_bool_t ret = font->parent->get_font_h_extents (metrics);
-  if (ret) {
-    metrics->ascender = font->parent_scale_y_distance (metrics->ascender);
-    metrics->descender = font->parent_scale_y_distance (metrics->descender);
-    metrics->line_gap = font->parent_scale_y_distance (metrics->line_gap);
-  }
-  return ret;
-}
-
-static hb_bool_t
-hb_font_get_font_v_extents_nil (hb_font_t *font,
-                               void *font_data HB_UNUSED,
-                               hb_font_extents_t *metrics,
-                               void *user_data HB_UNUSED)
-{
-  memset (metrics, 0, sizeof (*metrics));
-  return false;
-}
-static hb_bool_t
-hb_font_get_font_v_extents_parent (hb_font_t *font,
-                                  void *font_data HB_UNUSED,
-                                  hb_font_extents_t *metrics,
-                                  void *user_data HB_UNUSED)
+hb_font_get_glyph_nil (hb_font_t *font,
+                      void *font_data HB_UNUSED,
+                      hb_codepoint_t unicode,
+                      hb_codepoint_t variation_selector,
+                      hb_codepoint_t *glyph,
+                      void *user_data HB_UNUSED)
 {
-  hb_bool_t ret = font->parent->get_font_v_extents (metrics);
-  if (ret) {
-    metrics->ascender = font->parent_scale_x_distance (metrics->ascender);
-    metrics->descender = font->parent_scale_x_distance (metrics->descender);
-    metrics->line_gap = font->parent_scale_x_distance (metrics->line_gap);
-  }
-  return ret;
-}
+  if (font->parent)
+    return font->parent->get_glyph (unicode, variation_selector, glyph);
 
-static hb_bool_t
-hb_font_get_nominal_glyph_nil (hb_font_t *font HB_UNUSED,
-                              void *font_data HB_UNUSED,
-                              hb_codepoint_t unicode,
-                              hb_codepoint_t *glyph,
-                              void *user_data HB_UNUSED)
-{
   *glyph = 0;
   return false;
 }
-static hb_bool_t
-hb_font_get_nominal_glyph_parent (hb_font_t *font,
-                                 void *font_data HB_UNUSED,
-                                 hb_codepoint_t unicode,
-                                 hb_codepoint_t *glyph,
-                                 void *user_data HB_UNUSED)
-{
-  return font->parent->get_nominal_glyph (unicode, glyph);
-}
-
-static hb_bool_t
-hb_font_get_variation_glyph_nil (hb_font_t *font HB_UNUSED,
-                                void *font_data HB_UNUSED,
-                                hb_codepoint_t unicode,
-                                hb_codepoint_t variation_selector,
-                                hb_codepoint_t *glyph,
-                                void *user_data HB_UNUSED)
-{
-  *glyph = 0;
-  return false;
-}
-static hb_bool_t
-hb_font_get_variation_glyph_parent (hb_font_t *font,
-                                   void *font_data HB_UNUSED,
-                                   hb_codepoint_t unicode,
-                                   hb_codepoint_t variation_selector,
-                                   hb_codepoint_t *glyph,
-                                   void *user_data HB_UNUSED)
-{
-  return font->parent->get_variation_glyph (unicode, variation_selector, glyph);
-}
-
 
 static hb_position_t
-hb_font_get_glyph_h_advance_nil (hb_font_t *font HB_UNUSED,
+hb_font_get_glyph_h_advance_nil (hb_font_t *font,
                                 void *font_data HB_UNUSED,
                                 hb_codepoint_t glyph,
                                 void *user_data HB_UNUSED)
 {
+  if (font->parent)
+    return font->parent_scale_x_distance (font->parent->get_glyph_h_advance (glyph));
+
   return font->x_scale;
 }
-static hb_position_t
-hb_font_get_glyph_h_advance_parent (hb_font_t *font,
-                                   void *font_data HB_UNUSED,
-                                   hb_codepoint_t glyph,
-                                   void *user_data HB_UNUSED)
-{
-  return font->parent_scale_x_distance (font->parent->get_glyph_h_advance (glyph));
-}
 
 static hb_position_t
-hb_font_get_glyph_v_advance_nil (hb_font_t *font HB_UNUSED,
+hb_font_get_glyph_v_advance_nil (hb_font_t *font,
                                 void *font_data HB_UNUSED,
                                 hb_codepoint_t glyph,
                                 void *user_data HB_UNUSED)
 {
+  if (font->parent)
+    return font->parent_scale_y_distance (font->parent->get_glyph_v_advance (glyph));
+
   return font->y_scale;
 }
-static hb_position_t
-hb_font_get_glyph_v_advance_parent (hb_font_t *font,
-                                   void *font_data HB_UNUSED,
-                                   hb_codepoint_t glyph,
-                                   void *user_data HB_UNUSED)
-{
-  return font->parent_scale_y_distance (font->parent->get_glyph_v_advance (glyph));
-}
 
 static hb_bool_t
-hb_font_get_glyph_h_origin_nil (hb_font_t *font HB_UNUSED,
+hb_font_get_glyph_h_origin_nil (hb_font_t *font,
                                void *font_data HB_UNUSED,
                                hb_codepoint_t glyph,
                                hb_position_t *x,
                                hb_position_t *y,
                                void *user_data HB_UNUSED)
 {
+  if (font->parent) {
+    hb_bool_t ret = font->parent->get_glyph_h_origin (glyph, x, y);
+    if (ret)
+      font->parent_scale_position (x, y);
+    return ret;
+  }
+
   *x = *y = 0;
-  return true;
-}
-static hb_bool_t
-hb_font_get_glyph_h_origin_parent (hb_font_t *font,
-                                  void *font_data HB_UNUSED,
-                                  hb_codepoint_t glyph,
-                                  hb_position_t *x,
-                                  hb_position_t *y,
-                                  void *user_data HB_UNUSED)
-{
-  hb_bool_t ret = font->parent->get_glyph_h_origin (glyph, x, y);
-  if (ret)
-    font->parent_scale_position (x, y);
-  return ret;
+  return false;
 }
 
 static hb_bool_t
-hb_font_get_glyph_v_origin_nil (hb_font_t *font HB_UNUSED,
+hb_font_get_glyph_v_origin_nil (hb_font_t *font,
                                void *font_data HB_UNUSED,
                                hb_codepoint_t glyph,
                                hb_position_t *x,
                                hb_position_t *y,
                                void *user_data HB_UNUSED)
 {
+  if (font->parent) {
+    hb_bool_t ret = font->parent->get_glyph_v_origin (glyph, x, y);
+    if (ret)
+      font->parent_scale_position (x, y);
+    return ret;
+  }
+
   *x = *y = 0;
   return false;
 }
-static hb_bool_t
-hb_font_get_glyph_v_origin_parent (hb_font_t *font,
-                                  void *font_data HB_UNUSED,
-                                  hb_codepoint_t glyph,
-                                  hb_position_t *x,
-                                  hb_position_t *y,
-                                  void *user_data HB_UNUSED)
-{
-  hb_bool_t ret = font->parent->get_glyph_v_origin (glyph, x, y);
-  if (ret)
-    font->parent_scale_position (x, y);
-  return ret;
-}
 
 static hb_position_t
-hb_font_get_glyph_h_kerning_nil (hb_font_t *font HB_UNUSED,
+hb_font_get_glyph_h_kerning_nil (hb_font_t *font,
                                 void *font_data HB_UNUSED,
                                 hb_codepoint_t left_glyph,
                                 hb_codepoint_t right_glyph,
                                 void *user_data HB_UNUSED)
 {
+  if (font->parent)
+    return font->parent_scale_x_distance (font->parent->get_glyph_h_kerning (left_glyph, right_glyph));
+
   return 0;
 }
-static hb_position_t
-hb_font_get_glyph_h_kerning_parent (hb_font_t *font,
-                                   void *font_data HB_UNUSED,
-                                   hb_codepoint_t left_glyph,
-                                   hb_codepoint_t right_glyph,
-                                   void *user_data HB_UNUSED)
-{
-  return font->parent_scale_x_distance (font->parent->get_glyph_h_kerning (left_glyph, right_glyph));
-}
 
 static hb_position_t
-hb_font_get_glyph_v_kerning_nil (hb_font_t *font HB_UNUSED,
+hb_font_get_glyph_v_kerning_nil (hb_font_t *font,
                                 void *font_data HB_UNUSED,
                                 hb_codepoint_t top_glyph,
                                 hb_codepoint_t bottom_glyph,
                                 void *user_data HB_UNUSED)
 {
+  if (font->parent)
+    return font->parent_scale_y_distance (font->parent->get_glyph_v_kerning (top_glyph, bottom_glyph));
+
   return 0;
 }
-static hb_position_t
-hb_font_get_glyph_v_kerning_parent (hb_font_t *font,
-                                   void *font_data HB_UNUSED,
-                                   hb_codepoint_t top_glyph,
-                                   hb_codepoint_t bottom_glyph,
-                                   void *user_data HB_UNUSED)
-{
-  return font->parent_scale_y_distance (font->parent->get_glyph_v_kerning (top_glyph, bottom_glyph));
-}
 
 static hb_bool_t
-hb_font_get_glyph_extents_nil (hb_font_t *font HB_UNUSED,
+hb_font_get_glyph_extents_nil (hb_font_t *font,
                               void *font_data HB_UNUSED,
                               hb_codepoint_t glyph,
                               hb_glyph_extents_t *extents,
                               void *user_data HB_UNUSED)
 {
+  if (font->parent) {
+    hb_bool_t ret = font->parent->get_glyph_extents (glyph, extents);
+    if (ret) {
+      font->parent_scale_position (&extents->x_bearing, &extents->y_bearing);
+      font->parent_scale_distance (&extents->width, &extents->height);
+    }
+    return ret;
+  }
+
   memset (extents, 0, sizeof (*extents));
   return false;
 }
-static hb_bool_t
-hb_font_get_glyph_extents_parent (hb_font_t *font,
-                                 void *font_data HB_UNUSED,
-                                 hb_codepoint_t glyph,
-                                 hb_glyph_extents_t *extents,
-                                 void *user_data HB_UNUSED)
-{
-  hb_bool_t ret = font->parent->get_glyph_extents (glyph, extents);
-  if (ret) {
-    font->parent_scale_position (&extents->x_bearing, &extents->y_bearing);
-    font->parent_scale_distance (&extents->width, &extents->height);
-  }
-  return ret;
-}
 
 static hb_bool_t
-hb_font_get_glyph_contour_point_nil (hb_font_t *font HB_UNUSED,
+hb_font_get_glyph_contour_point_nil (hb_font_t *font,
                                     void *font_data HB_UNUSED,
                                     hb_codepoint_t glyph,
                                     unsigned int point_index,
@@ -291,63 +176,45 @@ hb_font_get_glyph_contour_point_nil (hb_font_t *font HB_UNUSED,
                                     hb_position_t *y,
                                     void *user_data HB_UNUSED)
 {
+  if (font->parent) {
+    hb_bool_t ret = font->parent->get_glyph_contour_point (glyph, point_index, x, y);
+    if (ret)
+      font->parent_scale_position (x, y);
+    return ret;
+  }
+
   *x = *y = 0;
   return false;
 }
-static hb_bool_t
-hb_font_get_glyph_contour_point_parent (hb_font_t *font,
-                                       void *font_data HB_UNUSED,
-                                       hb_codepoint_t glyph,
-                                       unsigned int point_index,
-                                       hb_position_t *x,
-                                       hb_position_t *y,
-                                       void *user_data HB_UNUSED)
-{
-  hb_bool_t ret = font->parent->get_glyph_contour_point (glyph, point_index, x, y);
-  if (ret)
-    font->parent_scale_position (x, y);
-  return ret;
-}
 
 static hb_bool_t
-hb_font_get_glyph_name_nil (hb_font_t *font HB_UNUSED,
+hb_font_get_glyph_name_nil (hb_font_t *font,
                            void *font_data HB_UNUSED,
                            hb_codepoint_t glyph,
                            char *name, unsigned int size,
                            void *user_data HB_UNUSED)
 {
+  if (font->parent)
+    return font->parent->get_glyph_name (glyph, name, size);
+
   if (size) *name = '\0';
   return false;
 }
-static hb_bool_t
-hb_font_get_glyph_name_parent (hb_font_t *font,
-                              void *font_data HB_UNUSED,
-                              hb_codepoint_t glyph,
-                              char *name, unsigned int size,
-                              void *user_data HB_UNUSED)
-{
-  return font->parent->get_glyph_name (glyph, name, size);
-}
 
 static hb_bool_t
-hb_font_get_glyph_from_name_nil (hb_font_t *font HB_UNUSED,
+hb_font_get_glyph_from_name_nil (hb_font_t *font,
                                 void *font_data HB_UNUSED,
                                 const char *name, int len, /* -1 means nul-terminated */
                                 hb_codepoint_t *glyph,
                                 void *user_data HB_UNUSED)
 {
+  if (font->parent)
+    return font->parent->get_glyph_from_name (name, len, glyph);
+
   *glyph = 0;
   return false;
 }
-static hb_bool_t
-hb_font_get_glyph_from_name_parent (hb_font_t *font,
-                                   void *font_data HB_UNUSED,
-                                   const char *name, int len, /* -1 means nul-terminated */
-                                   hb_codepoint_t *glyph,
-                                   void *user_data HB_UNUSED)
-{
-  return font->parent->get_glyph_from_name (name, len, glyph);
-}
+
 
 static const hb_font_funcs_t _hb_font_funcs_nil = {
   HB_OBJECT_HEADER_STATIC,
@@ -355,44 +222,9 @@ static const hb_font_funcs_t _hb_font_funcs_nil = {
   true, /* immutable */
 
   {
-#define HB_FONT_FUNC_IMPLEMENT(name) NULL,
-    HB_FONT_FUNCS_IMPLEMENT_CALLBACKS
-#undef HB_FONT_FUNC_IMPLEMENT
-  },
-  {
-#define HB_FONT_FUNC_IMPLEMENT(name) NULL,
-    HB_FONT_FUNCS_IMPLEMENT_CALLBACKS
-#undef HB_FONT_FUNC_IMPLEMENT
-  },
-  {
-    {
 #define HB_FONT_FUNC_IMPLEMENT(name) hb_font_get_##name##_nil,
-      HB_FONT_FUNCS_IMPLEMENT_CALLBACKS
-#undef HB_FONT_FUNC_IMPLEMENT
-    }
-  }
-};
-static const hb_font_funcs_t _hb_font_funcs_parent = {
-  HB_OBJECT_HEADER_STATIC,
-
-  true, /* immutable */
-
-  {
-#define HB_FONT_FUNC_IMPLEMENT(name) NULL,
     HB_FONT_FUNCS_IMPLEMENT_CALLBACKS
 #undef HB_FONT_FUNC_IMPLEMENT
-  },
-  {
-#define HB_FONT_FUNC_IMPLEMENT(name) NULL,
-    HB_FONT_FUNCS_IMPLEMENT_CALLBACKS
-#undef HB_FONT_FUNC_IMPLEMENT
-  },
-  {
-    {
-#define HB_FONT_FUNC_IMPLEMENT(name) hb_font_get_##name##_parent,
-      HB_FONT_FUNCS_IMPLEMENT_CALLBACKS
-#undef HB_FONT_FUNC_IMPLEMENT
-    }
   }
 };
 
@@ -404,7 +236,7 @@ static const hb_font_funcs_t _hb_font_funcs_parent = {
  *
  * Return value: (transfer full): 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_font_funcs_t *
 hb_font_funcs_create (void)
@@ -414,7 +246,7 @@ hb_font_funcs_create (void)
   if (!(ffuncs = hb_object_create<hb_font_funcs_t> ()))
     return hb_font_funcs_get_empty ();
 
-  ffuncs->get = _hb_font_funcs_parent.get;
+  ffuncs->get = _hb_font_funcs_nil.get;
 
   return ffuncs;
 }
@@ -426,12 +258,12 @@ hb_font_funcs_create (void)
  *
  * Return value: (transfer full): 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_font_funcs_t *
 hb_font_funcs_get_empty (void)
 {
-  return const_cast<hb_font_funcs_t *> (&_hb_font_funcs_parent);
+  return const_cast<hb_font_funcs_t *> (&_hb_font_funcs_nil);
 }
 
 /**
@@ -442,7 +274,7 @@ hb_font_funcs_get_empty (void)
  *
  * Return value: 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_font_funcs_t *
 hb_font_funcs_reference (hb_font_funcs_t *ffuncs)
@@ -456,7 +288,7 @@ hb_font_funcs_reference (hb_font_funcs_t *ffuncs)
  *
  * 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 void
 hb_font_funcs_destroy (hb_font_funcs_t *ffuncs)
@@ -483,7 +315,7 @@ hb_font_funcs_destroy (hb_font_funcs_t *ffuncs)
  *
  * Return value: 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_bool_t
 hb_font_funcs_set_user_data (hb_font_funcs_t    *ffuncs,
@@ -504,7 +336,7 @@ hb_font_funcs_set_user_data (hb_font_funcs_t    *ffuncs,
  *
  * Return value: (transfer none): 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 void *
 hb_font_funcs_get_user_data (hb_font_funcs_t    *ffuncs,
@@ -520,7 +352,7 @@ hb_font_funcs_get_user_data (hb_font_funcs_t    *ffuncs,
  *
  * 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 void
 hb_font_funcs_make_immutable (hb_font_funcs_t *ffuncs)
@@ -539,7 +371,7 @@ hb_font_funcs_make_immutable (hb_font_funcs_t *ffuncs)
  *
  * Return value: 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_bool_t
 hb_font_funcs_is_immutable (hb_font_funcs_t *ffuncs)
@@ -566,11 +398,11 @@ hb_font_funcs_set_##name##_func (hb_font_funcs_t             *ffuncs,    \
     ffuncs->destroy.name (ffuncs->user_data.name);                       \
                                                                          \
   if (func) {                                                            \
-    ffuncs->get.f.name = func;                                           \
+    ffuncs->get.name = func;                                             \
     ffuncs->user_data.name = user_data;                                  \
     ffuncs->destroy.name = destroy;                                      \
   } else {                                                               \
-    ffuncs->get.f.name = hb_font_get_##name##_parent;                    \
+    ffuncs->get.name = hb_font_get_##name##_nil;                         \
     ffuncs->user_data.name = NULL;                                       \
     ffuncs->destroy.name = NULL;                                         \
   }                                                                      \
@@ -579,53 +411,10 @@ hb_font_funcs_set_##name##_func (hb_font_funcs_t             *ffuncs,    \
 HB_FONT_FUNCS_IMPLEMENT_CALLBACKS
 #undef HB_FONT_FUNC_IMPLEMENT
 
-bool
-hb_font_t::has_func (unsigned int i)
-{
-  if (parent && parent != hb_font_get_empty () && parent->has_func (i))
-    return true;
-  return this->klass->get.array[i] != _hb_font_funcs_parent.get.array[i];
-}
 
 /* Public getters */
 
 /**
- * hb_font_get_h_extents:
- * @font: a font.
- * @extents: (out):
- *
- *
- *
- * Return value:
- *
- * Since: 1.1.3
- **/
-hb_bool_t
-hb_font_get_h_extents (hb_font_t *font,
-                      hb_font_extents_t *extents)
-{
-  return font->get_font_h_extents (extents);
-}
-
-/**
- * hb_font_get_v_extents:
- * @font: a font.
- * @extents: (out):
- *
- *
- *
- * Return value:
- *
- * Since: 1.1.3
- **/
-hb_bool_t
-hb_font_get_v_extents (hb_font_t *font,
-                      hb_font_extents_t *extents)
-{
-  return font->get_font_v_extents (extents);
-}
-
-/**
  * hb_font_get_glyph:
  * @font: a font.
  * @unicode: 
@@ -636,57 +425,14 @@ hb_font_get_v_extents (hb_font_t *font,
  *
  * Return value: 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_bool_t
 hb_font_get_glyph (hb_font_t *font,
                   hb_codepoint_t unicode, hb_codepoint_t variation_selector,
                   hb_codepoint_t *glyph)
 {
-  if (unlikely (variation_selector))
-    return font->get_variation_glyph (unicode, variation_selector, glyph);
-  return font->get_nominal_glyph (unicode, glyph);
-}
-
-/**
- * hb_font_get_nominal_glyph:
- * @font: a font.
- * @unicode: 
- * @glyph: (out): 
- *
- * 
- *
- * Return value: 
- *
- * Since: 1.2.3
- **/
-hb_bool_t
-hb_font_get_nominal_glyph (hb_font_t *font,
-                          hb_codepoint_t unicode,
-                          hb_codepoint_t *glyph)
-{
-  return font->get_nominal_glyph (unicode, glyph);
-}
-
-/**
- * hb_font_get_variation_glyph:
- * @font: a font.
- * @unicode: 
- * @variation_selector: 
- * @glyph: (out): 
- *
- * 
- *
- * Return value: 
- *
- * Since: 1.2.3
- **/
-hb_bool_t
-hb_font_get_variation_glyph (hb_font_t *font,
-                            hb_codepoint_t unicode, hb_codepoint_t variation_selector,
-                            hb_codepoint_t *glyph)
-{
-  return font->get_variation_glyph (unicode, variation_selector, glyph);
+  return font->get_glyph (unicode, variation_selector, glyph);
 }
 
 /**
@@ -698,7 +444,7 @@ hb_font_get_variation_glyph (hb_font_t *font,
  *
  * Return value: 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_position_t
 hb_font_get_glyph_h_advance (hb_font_t *font,
@@ -716,7 +462,7 @@ hb_font_get_glyph_h_advance (hb_font_t *font,
  *
  * Return value: 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_position_t
 hb_font_get_glyph_v_advance (hb_font_t *font,
@@ -736,7 +482,7 @@ hb_font_get_glyph_v_advance (hb_font_t *font,
  *
  * Return value: 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_bool_t
 hb_font_get_glyph_h_origin (hb_font_t *font,
@@ -757,7 +503,7 @@ hb_font_get_glyph_h_origin (hb_font_t *font,
  *
  * Return value: 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_bool_t
 hb_font_get_glyph_v_origin (hb_font_t *font,
@@ -777,7 +523,7 @@ hb_font_get_glyph_v_origin (hb_font_t *font,
  *
  * Return value: 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_position_t
 hb_font_get_glyph_h_kerning (hb_font_t *font,
@@ -796,7 +542,7 @@ hb_font_get_glyph_h_kerning (hb_font_t *font,
  *
  * Return value: 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_position_t
 hb_font_get_glyph_v_kerning (hb_font_t *font,
@@ -815,7 +561,7 @@ hb_font_get_glyph_v_kerning (hb_font_t *font,
  *
  * Return value: 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_bool_t
 hb_font_get_glyph_extents (hb_font_t *font,
@@ -837,7 +583,7 @@ hb_font_get_glyph_extents (hb_font_t *font,
  *
  * Return value: 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_bool_t
 hb_font_get_glyph_contour_point (hb_font_t *font,
@@ -858,7 +604,7 @@ hb_font_get_glyph_contour_point (hb_font_t *font,
  *
  * Return value: 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_bool_t
 hb_font_get_glyph_name (hb_font_t *font,
@@ -879,7 +625,7 @@ hb_font_get_glyph_name (hb_font_t *font,
  *
  * Return value: 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_bool_t
 hb_font_get_glyph_from_name (hb_font_t *font,
@@ -893,23 +639,6 @@ hb_font_get_glyph_from_name (hb_font_t *font,
 /* A bit higher-level, and with fallback */
 
 /**
- * hb_font_get_extents_for_direction:
- * @font: a font.
- * @direction:
- * @extents:
- *
- *
- *
- * Since: 1.1.3
- **/
-void
-hb_font_get_extents_for_direction (hb_font_t *font,
-                                  hb_direction_t direction,
-                                  hb_font_extents_t *extents)
-{
-  return font->get_extents_for_direction (direction, extents);
-}
-/**
  * hb_font_get_glyph_advance_for_direction:
  * @font: a font.
  * @glyph: 
@@ -919,7 +648,7 @@ hb_font_get_extents_for_direction (hb_font_t *font,
  *
  * 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 void
 hb_font_get_glyph_advance_for_direction (hb_font_t *font,
@@ -940,7 +669,7 @@ hb_font_get_glyph_advance_for_direction (hb_font_t *font,
  *
  * 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 void
 hb_font_get_glyph_origin_for_direction (hb_font_t *font,
@@ -961,7 +690,7 @@ hb_font_get_glyph_origin_for_direction (hb_font_t *font,
  *
  * 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 void
 hb_font_add_glyph_origin_for_direction (hb_font_t *font,
@@ -982,7 +711,7 @@ hb_font_add_glyph_origin_for_direction (hb_font_t *font,
  *
  * 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 void
 hb_font_subtract_glyph_origin_for_direction (hb_font_t *font,
@@ -1004,7 +733,7 @@ hb_font_subtract_glyph_origin_for_direction (hb_font_t *font,
  *
  * 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 void
 hb_font_get_glyph_kerning_for_direction (hb_font_t *font,
@@ -1026,7 +755,7 @@ hb_font_get_glyph_kerning_for_direction (hb_font_t *font,
  *
  * Return value: 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_bool_t
 hb_font_get_glyph_extents_for_origin (hb_font_t *font,
@@ -1050,7 +779,7 @@ hb_font_get_glyph_extents_for_origin (hb_font_t *font,
  *
  * Return value: 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_bool_t
 hb_font_get_glyph_contour_point_for_origin (hb_font_t *font,
@@ -1071,7 +800,7 @@ hb_font_get_glyph_contour_point_for_origin (hb_font_t *font,
  *
  * 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 void
 hb_font_glyph_to_string (hb_font_t *font,
@@ -1085,7 +814,7 @@ hb_font_glyph_to_string (hb_font_t *font,
 /**
  * hb_font_glyph_from_string:
  * @font: a font.
- * @s: (array length=len) (element-type uint8_t)
+ * @s: (array length=len): 
  * @len: 
  * @glyph: (out): 
  *
@@ -1093,7 +822,7 @@ hb_font_glyph_to_string (hb_font_t *font,
  *
  * Return value: 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_bool_t
 hb_font_glyph_from_string (hb_font_t *font,
@@ -1116,7 +845,7 @@ hb_font_glyph_from_string (hb_font_t *font,
  *
  * Return value: (transfer full): 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_font_t *
 hb_font_create (hb_face_t *face)
@@ -1125,16 +854,15 @@ hb_font_create (hb_face_t *face)
 
   if (unlikely (!face))
     face = hb_face_get_empty ();
+  if (unlikely (hb_object_is_inert (face)))
+    return hb_font_get_empty ();
   if (!(font = hb_object_create<hb_font_t> ()))
     return hb_font_get_empty ();
 
   hb_face_make_immutable (face);
-  font->parent = hb_font_get_empty ();
   font->face = hb_face_reference (face);
   font->klass = hb_font_funcs_get_empty ();
 
-  font->x_scale = font->y_scale = hb_face_get_upem (face);
-
   return font;
 }
 
@@ -1146,19 +874,20 @@ hb_font_create (hb_face_t *face)
  *
  * Return value: (transfer full): 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_font_t *
 hb_font_create_sub_font (hb_font_t *parent)
 {
   if (unlikely (!parent))
-    parent = hb_font_get_empty ();
+    return hb_font_get_empty ();
 
   hb_font_t *font = hb_font_create (parent->face);
 
   if (unlikely (hb_object_is_inert (font)))
     return font;
 
+  hb_font_make_immutable (parent);
   font->parent = hb_font_reference (parent);
 
   font->x_scale = parent->x_scale;
@@ -1176,7 +905,7 @@ hb_font_create_sub_font (hb_font_t *parent)
  *
  * Return value: (transfer full)
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_font_t *
 hb_font_get_empty (void)
@@ -1189,8 +918,8 @@ hb_font_get_empty (void)
     NULL, /* parent */
     const_cast<hb_face_t *> (&_hb_face_nil),
 
-    1000, /* x_scale */
-    1000, /* y_scale */
+    0, /* x_scale */
+    0, /* y_scale */
 
     0, /* x_ppem */
     0, /* y_ppem */
@@ -1217,7 +946,7 @@ hb_font_get_empty (void)
  *
  * Return value: (transfer full): 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_font_t *
 hb_font_reference (hb_font_t *font)
@@ -1231,7 +960,7 @@ hb_font_reference (hb_font_t *font)
  *
  * 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 void
 hb_font_destroy (hb_font_t *font)
@@ -1264,7 +993,7 @@ hb_font_destroy (hb_font_t *font)
  *
  * Return value: 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_bool_t
 hb_font_set_user_data (hb_font_t          *font,
@@ -1285,7 +1014,7 @@ hb_font_set_user_data (hb_font_t          *font,
  *
  * Return value: (transfer none): 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 void *
 hb_font_get_user_data (hb_font_t          *font,
@@ -1300,7 +1029,7 @@ hb_font_get_user_data (hb_font_t          *font,
  *
  * 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 void
 hb_font_make_immutable (hb_font_t *font)
@@ -1308,9 +1037,6 @@ hb_font_make_immutable (hb_font_t *font)
   if (unlikely (hb_object_is_inert (font)))
     return;
 
-  if (font->parent)
-    hb_font_make_immutable (font->parent);
-
   font->immutable = true;
 }
 
@@ -1322,7 +1048,7 @@ hb_font_make_immutable (hb_font_t *font)
  *
  * Return value: 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_bool_t
 hb_font_is_immutable (hb_font_t *font)
@@ -1331,32 +1057,6 @@ hb_font_is_immutable (hb_font_t *font)
 }
 
 /**
- * hb_font_set_parent:
- * @font: a font.
- * @parent: new parent.
- *
- * Sets parent font of @font.
- *
- * Since: 1.0.5
- **/
-void
-hb_font_set_parent (hb_font_t *font,
-                   hb_font_t *parent)
-{
-  if (font->immutable)
-    return;
-
-  if (!parent)
-    parent = hb_font_get_empty ();
-
-  hb_font_t *old = font->parent;
-
-  font->parent = hb_font_reference (parent);
-
-  hb_font_destroy (old);
-}
-
-/**
  * hb_font_get_parent:
  * @font: a font.
  *
@@ -1364,7 +1064,7 @@ hb_font_set_parent (hb_font_t *font,
  *
  * Return value: (transfer none): 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_font_t *
 hb_font_get_parent (hb_font_t *font)
@@ -1380,7 +1080,7 @@ hb_font_get_parent (hb_font_t *font)
  *
  * Return value: (transfer none): 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_face_t *
 hb_font_get_face (hb_font_t *font)
@@ -1398,7 +1098,7 @@ hb_font_get_face (hb_font_t *font)
  *
  * 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 void
 hb_font_set_funcs (hb_font_t         *font,
@@ -1433,7 +1133,7 @@ hb_font_set_funcs (hb_font_t         *font,
  *
  * 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 void
 hb_font_set_funcs_data (hb_font_t         *font,
@@ -1463,7 +1163,7 @@ hb_font_set_funcs_data (hb_font_t         *font,
  *
  * 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 void
 hb_font_set_scale (hb_font_t *font,
@@ -1485,7 +1185,7 @@ hb_font_set_scale (hb_font_t *font,
  *
  * 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 void
 hb_font_get_scale (hb_font_t *font,
@@ -1504,7 +1204,7 @@ hb_font_get_scale (hb_font_t *font,
  *
  * 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 void
 hb_font_set_ppem (hb_font_t *font,
@@ -1526,7 +1226,7 @@ hb_font_set_ppem (hb_font_t *font,
  *
  * 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 void
 hb_font_get_ppem (hb_font_t *font,
@@ -1536,131 +1236,3 @@ hb_font_get_ppem (hb_font_t *font,
   if (x_ppem) *x_ppem = font->x_ppem;
   if (y_ppem) *y_ppem = font->y_ppem;
 }
-
-
-#ifndef HB_DISABLE_DEPRECATED
-
-/*
- * Deprecated get_glyph_func():
- */
-
-struct hb_trampoline_closure_t
-{
-  void *user_data;
-  hb_destroy_func_t destroy;
-  unsigned int ref_count;
-};
-
-template <typename FuncType>
-struct hb_trampoline_t
-{
-  hb_trampoline_closure_t closure; /* Must be first. */
-  FuncType func;
-};
-
-template <typename FuncType>
-static hb_trampoline_t<FuncType> *
-trampoline_create (FuncType           func,
-                  void              *user_data,
-                  hb_destroy_func_t  destroy)
-{
-  typedef hb_trampoline_t<FuncType> trampoline_t;
-
-  trampoline_t *trampoline = (trampoline_t *) calloc (1, sizeof (trampoline_t));
-
-  if (unlikely (!trampoline))
-    return NULL;
-
-  trampoline->closure.user_data = user_data;
-  trampoline->closure.destroy = destroy;
-  trampoline->closure.ref_count = 1;
-  trampoline->func = func;
-
-  return trampoline;
-}
-
-static void
-trampoline_reference (hb_trampoline_closure_t *closure)
-{
-  closure->ref_count++;
-}
-
-static void
-trampoline_destroy (void *user_data)
-{
-  hb_trampoline_closure_t *closure = (hb_trampoline_closure_t *) user_data;
-
-  if (--closure->ref_count)
-    return;
-
-  if (closure->destroy)
-    closure->destroy (closure->user_data);
-  free (closure);
-}
-
-typedef hb_trampoline_t<hb_font_get_glyph_func_t> hb_font_get_glyph_trampoline_t;
-
-static hb_bool_t
-hb_font_get_nominal_glyph_trampoline (hb_font_t *font,
-                                     void *font_data,
-                                     hb_codepoint_t unicode,
-                                     hb_codepoint_t *glyph,
-                                     void *user_data)
-{
-  hb_font_get_glyph_trampoline_t *trampoline = (hb_font_get_glyph_trampoline_t *) user_data;
-  return trampoline->func (font, font_data, unicode, 0, glyph, trampoline->closure.user_data);
-}
-
-static hb_bool_t
-hb_font_get_variation_glyph_trampoline (hb_font_t *font,
-                                       void *font_data,
-                                       hb_codepoint_t unicode,
-                                       hb_codepoint_t variation_selector,
-                                       hb_codepoint_t *glyph,
-                                       void *user_data)
-{
-  hb_font_get_glyph_trampoline_t *trampoline = (hb_font_get_glyph_trampoline_t *) user_data;
-  return trampoline->func (font, font_data, unicode, variation_selector, glyph, trampoline->closure.user_data);
-}
-
-/**
- * hb_font_funcs_set_glyph_func:
- * @ffuncs: font functions.
- * @func: (closure user_data) (destroy destroy) (scope notified):
- * @user_data:
- * @destroy:
- *
- * Deprecated.  Use hb_font_funcs_set_nominal_glyph_func() and
- * hb_font_funcs_set_variation_glyph_func() instead.
- *
- * Since: 0.9.2
- * Deprecated: 1.2.3
- **/
-void
-hb_font_funcs_set_glyph_func (hb_font_funcs_t *ffuncs,
-                             hb_font_get_glyph_func_t func,
-                             void *user_data, hb_destroy_func_t destroy)
-{
-  hb_font_get_glyph_trampoline_t *trampoline;
-
-  trampoline = trampoline_create (func, user_data, destroy);
-  if (unlikely (!trampoline))
-  {
-    if (destroy)
-      destroy (user_data);
-    return;
-  }
-
-  hb_font_funcs_set_nominal_glyph_func (ffuncs,
-                                       hb_font_get_nominal_glyph_trampoline,
-                                       trampoline,
-                                       trampoline_destroy);
-
-  trampoline_reference (&trampoline->closure);
-  hb_font_funcs_set_variation_glyph_func (ffuncs,
-                                         hb_font_get_variation_glyph_trampoline,
-                                         trampoline,
-                                         trampoline_destroy);
-}
-
-#endif /* HB_DISABLE_DEPRECATED */
index 2b6ab50..7273db4 100644 (file)
@@ -46,19 +46,19 @@ typedef struct hb_font_t hb_font_t;
 
 typedef struct hb_font_funcs_t hb_font_funcs_t;
 
-HB_EXTERN hb_font_funcs_t *
+hb_font_funcs_t *
 hb_font_funcs_create (void);
 
-HB_EXTERN hb_font_funcs_t *
+hb_font_funcs_t *
 hb_font_funcs_get_empty (void);
 
-HB_EXTERN hb_font_funcs_t *
+hb_font_funcs_t *
 hb_font_funcs_reference (hb_font_funcs_t *ffuncs);
 
-HB_EXTERN void
+void
 hb_font_funcs_destroy (hb_font_funcs_t *ffuncs);
 
-HB_EXTERN hb_bool_t
+hb_bool_t
 hb_font_funcs_set_user_data (hb_font_funcs_t    *ffuncs,
                             hb_user_data_key_t *key,
                             void *              data,
@@ -66,64 +66,35 @@ hb_font_funcs_set_user_data (hb_font_funcs_t    *ffuncs,
                             hb_bool_t           replace);
 
 
-HB_EXTERN void *
+void *
 hb_font_funcs_get_user_data (hb_font_funcs_t    *ffuncs,
                             hb_user_data_key_t *key);
 
 
-HB_EXTERN void
+void
 hb_font_funcs_make_immutable (hb_font_funcs_t *ffuncs);
 
-HB_EXTERN hb_bool_t
+hb_bool_t
 hb_font_funcs_is_immutable (hb_font_funcs_t *ffuncs);
 
 
-/* font and glyph extents */
+/* glyph extents */
 
-/* Note that typically ascender is positive and descender negative in coordinate systems that grow up. */
-typedef struct hb_font_extents_t
-{
-  hb_position_t ascender; /* typographic ascender. */
-  hb_position_t descender; /* typographic descender. */
-  hb_position_t line_gap; /* suggested line spacing gap. */
-  /*< private >*/
-  hb_position_t reserved9;
-  hb_position_t reserved8;
-  hb_position_t reserved7;
-  hb_position_t reserved6;
-  hb_position_t reserved5;
-  hb_position_t reserved4;
-  hb_position_t reserved3;
-  hb_position_t reserved2;
-  hb_position_t reserved1;
-} hb_font_extents_t;
-
-/* Note that height is negative in coordinate systems that grow up. */
 typedef struct hb_glyph_extents_t
 {
-  hb_position_t x_bearing; /* left side of glyph from origin. */
-  hb_position_t y_bearing; /* top side of glyph from origin. */
-  hb_position_t width; /* distance from left to right side. */
-  hb_position_t height; /* distance from top to bottom side. */
+  hb_position_t x_bearing;
+  hb_position_t y_bearing;
+  hb_position_t width;
+  hb_position_t height;
 } hb_glyph_extents_t;
 
-/* func types */
-
-typedef hb_bool_t (*hb_font_get_font_extents_func_t) (hb_font_t *font, void *font_data,
-                                                      hb_font_extents_t *metrics,
-                                                      void *user_data);
-typedef hb_font_get_font_extents_func_t hb_font_get_font_h_extents_func_t;
-typedef hb_font_get_font_extents_func_t hb_font_get_font_v_extents_func_t;
 
+/* func types */
 
-typedef hb_bool_t (*hb_font_get_nominal_glyph_func_t) (hb_font_t *font, void *font_data,
-                                                      hb_codepoint_t unicode,
-                                                      hb_codepoint_t *glyph,
-                                                      void *user_data);
-typedef hb_bool_t (*hb_font_get_variation_glyph_func_t) (hb_font_t *font, void *font_data,
-                                                        hb_codepoint_t unicode, hb_codepoint_t variation_selector,
-                                                        hb_codepoint_t *glyph,
-                                                        void *user_data);
+typedef hb_bool_t (*hb_font_get_glyph_func_t) (hb_font_t *font, void *font_data,
+                                              hb_codepoint_t unicode, hb_codepoint_t variation_selector,
+                                              hb_codepoint_t *glyph,
+                                              void *user_data);
 
 
 typedef hb_position_t (*hb_font_get_glyph_advance_func_t) (hb_font_t *font, void *font_data,
@@ -169,39 +140,7 @@ typedef hb_bool_t (*hb_font_get_glyph_from_name_func_t) (hb_font_t *font, void *
 /* func setters */
 
 /**
- * hb_font_funcs_set_font_h_extents_func:
- * @ffuncs: font functions.
- * @func: (closure user_data) (destroy destroy) (scope notified):
- * @user_data:
- * @destroy:
- *
- *
- *
- * Since: 1.1.2
- **/
-HB_EXTERN void
-hb_font_funcs_set_font_h_extents_func (hb_font_funcs_t *ffuncs,
-                                      hb_font_get_font_h_extents_func_t func,
-                                      void *user_data, hb_destroy_func_t destroy);
-
-/**
- * hb_font_funcs_set_font_v_extents_func:
- * @ffuncs: font functions.
- * @func: (closure user_data) (destroy destroy) (scope notified):
- * @user_data:
- * @destroy:
- *
- *
- *
- * Since: 1.1.2
- **/
-HB_EXTERN void
-hb_font_funcs_set_font_v_extents_func (hb_font_funcs_t *ffuncs,
-                                      hb_font_get_font_v_extents_func_t func,
-                                      void *user_data, hb_destroy_func_t destroy);
-
-/**
- * hb_font_funcs_set_nominal_glyph_func:
+ * hb_font_funcs_set_glyph_func:
  * @ffuncs: font functions.
  * @func: (closure user_data) (destroy destroy) (scope notified):
  * @user_data:
@@ -209,28 +148,12 @@ hb_font_funcs_set_font_v_extents_func (hb_font_funcs_t *ffuncs,
  *
  * 
  *
- * Since: 1.2.3
+ * Since: 1.0
  **/
-HB_EXTERN void
-hb_font_funcs_set_nominal_glyph_func (hb_font_funcs_t *ffuncs,
-                                     hb_font_get_nominal_glyph_func_t func,
-                                     void *user_data, hb_destroy_func_t destroy);
-
-/**
- * hb_font_funcs_set_variation_glyph_func:
- * @ffuncs: font functions.
- * @func: (closure user_data) (destroy destroy) (scope notified):
- * @user_data:
- * @destroy:
- *
- * 
- *
- * Since: 1.2.3
- **/
-HB_EXTERN void
-hb_font_funcs_set_variation_glyph_func (hb_font_funcs_t *ffuncs,
-                                       hb_font_get_variation_glyph_func_t func,
-                                       void *user_data, hb_destroy_func_t destroy);
+void
+hb_font_funcs_set_glyph_func (hb_font_funcs_t *ffuncs,
+                             hb_font_get_glyph_func_t func,
+                             void *user_data, hb_destroy_func_t destroy);
 
 /**
  * hb_font_funcs_set_glyph_h_advance_func:
@@ -241,9 +164,9 @@ hb_font_funcs_set_variation_glyph_func (hb_font_funcs_t *ffuncs,
  *
  * 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
-HB_EXTERN void
+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);
@@ -257,9 +180,9 @@ hb_font_funcs_set_glyph_h_advance_func (hb_font_funcs_t *ffuncs,
  *
  * 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
-HB_EXTERN void
+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);
@@ -273,9 +196,9 @@ hb_font_funcs_set_glyph_v_advance_func (hb_font_funcs_t *ffuncs,
  *
  * 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
-HB_EXTERN void
+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);
@@ -289,9 +212,9 @@ hb_font_funcs_set_glyph_h_origin_func (hb_font_funcs_t *ffuncs,
  *
  * 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
-HB_EXTERN void
+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);
@@ -305,9 +228,9 @@ hb_font_funcs_set_glyph_v_origin_func (hb_font_funcs_t *ffuncs,
  *
  * 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
-HB_EXTERN void
+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);
@@ -321,9 +244,9 @@ hb_font_funcs_set_glyph_h_kerning_func (hb_font_funcs_t *ffuncs,
  *
  * 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
-HB_EXTERN void
+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);
@@ -337,9 +260,9 @@ hb_font_funcs_set_glyph_v_kerning_func (hb_font_funcs_t *ffuncs,
  *
  * 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
-HB_EXTERN void
+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);
@@ -353,9 +276,9 @@ hb_font_funcs_set_glyph_extents_func (hb_font_funcs_t *ffuncs,
  *
  * 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
-HB_EXTERN void
+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);
@@ -369,9 +292,9 @@ hb_font_funcs_set_glyph_contour_point_func (hb_font_funcs_t *ffuncs,
  *
  * 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
-HB_EXTERN void
+void
 hb_font_funcs_set_glyph_name_func (hb_font_funcs_t *ffuncs,
                                   hb_font_get_glyph_name_func_t func,
                                   void *user_data, hb_destroy_func_t destroy);
@@ -385,69 +308,59 @@ hb_font_funcs_set_glyph_name_func (hb_font_funcs_t *ffuncs,
  *
  * 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
-HB_EXTERN void
+void
 hb_font_funcs_set_glyph_from_name_func (hb_font_funcs_t *ffuncs,
                                        hb_font_get_glyph_from_name_func_t func,
                                        void *user_data, hb_destroy_func_t destroy);
 
-/* func dispatch */
 
-HB_EXTERN hb_bool_t
-hb_font_get_h_extents (hb_font_t *font,
-                      hb_font_extents_t *extents);
-HB_EXTERN hb_bool_t
-hb_font_get_v_extents (hb_font_t *font,
-                      hb_font_extents_t *extents);
+/* func dispatch */
 
-HB_EXTERN hb_bool_t
-hb_font_get_nominal_glyph (hb_font_t *font,
-                          hb_codepoint_t unicode,
-                          hb_codepoint_t *glyph);
-HB_EXTERN hb_bool_t
-hb_font_get_variation_glyph (hb_font_t *font,
-                            hb_codepoint_t unicode, hb_codepoint_t variation_selector,
-                            hb_codepoint_t *glyph);
+hb_bool_t
+hb_font_get_glyph (hb_font_t *font,
+                  hb_codepoint_t unicode, hb_codepoint_t variation_selector,
+                  hb_codepoint_t *glyph);
 
-HB_EXTERN hb_position_t
+hb_position_t
 hb_font_get_glyph_h_advance (hb_font_t *font,
                             hb_codepoint_t glyph);
-HB_EXTERN hb_position_t
+hb_position_t
 hb_font_get_glyph_v_advance (hb_font_t *font,
                             hb_codepoint_t glyph);
 
-HB_EXTERN hb_bool_t
+hb_bool_t
 hb_font_get_glyph_h_origin (hb_font_t *font,
                            hb_codepoint_t glyph,
                            hb_position_t *x, hb_position_t *y);
-HB_EXTERN hb_bool_t
+hb_bool_t
 hb_font_get_glyph_v_origin (hb_font_t *font,
                            hb_codepoint_t glyph,
                            hb_position_t *x, hb_position_t *y);
 
-HB_EXTERN hb_position_t
+hb_position_t
 hb_font_get_glyph_h_kerning (hb_font_t *font,
                             hb_codepoint_t left_glyph, hb_codepoint_t right_glyph);
-HB_EXTERN hb_position_t
+hb_position_t
 hb_font_get_glyph_v_kerning (hb_font_t *font,
                             hb_codepoint_t top_glyph, hb_codepoint_t bottom_glyph);
 
-HB_EXTERN hb_bool_t
+hb_bool_t
 hb_font_get_glyph_extents (hb_font_t *font,
                           hb_codepoint_t glyph,
                           hb_glyph_extents_t *extents);
 
-HB_EXTERN hb_bool_t
+hb_bool_t
 hb_font_get_glyph_contour_point (hb_font_t *font,
                                 hb_codepoint_t glyph, unsigned int point_index,
                                 hb_position_t *x, hb_position_t *y);
 
-HB_EXTERN hb_bool_t
+hb_bool_t
 hb_font_get_glyph_name (hb_font_t *font,
                        hb_codepoint_t glyph,
                        char *name, unsigned int size);
-HB_EXTERN hb_bool_t
+hb_bool_t
 hb_font_get_glyph_from_name (hb_font_t *font,
                             const char *name, int len, /* -1 means nul-terminated */
                             hb_codepoint_t *glyph);
@@ -455,63 +368,52 @@ hb_font_get_glyph_from_name (hb_font_t *font,
 
 /* high-level funcs, with fallback */
 
-/* Calls either hb_font_get_nominal_glyph() if variation_selector is 0,
- * otherwise callse hb_font_get_variation_glyph(). */
-HB_EXTERN hb_bool_t
-hb_font_get_glyph (hb_font_t *font,
-                  hb_codepoint_t unicode, hb_codepoint_t variation_selector,
-                  hb_codepoint_t *glyph);
-
-HB_EXTERN void
-hb_font_get_extents_for_direction (hb_font_t *font,
-                                  hb_direction_t direction,
-                                  hb_font_extents_t *extents);
-HB_EXTERN void
+void
 hb_font_get_glyph_advance_for_direction (hb_font_t *font,
                                         hb_codepoint_t glyph,
                                         hb_direction_t direction,
                                         hb_position_t *x, hb_position_t *y);
-HB_EXTERN void
+void
 hb_font_get_glyph_origin_for_direction (hb_font_t *font,
                                        hb_codepoint_t glyph,
                                        hb_direction_t direction,
                                        hb_position_t *x, hb_position_t *y);
-HB_EXTERN void
+void
 hb_font_add_glyph_origin_for_direction (hb_font_t *font,
                                        hb_codepoint_t glyph,
                                        hb_direction_t direction,
                                        hb_position_t *x, hb_position_t *y);
-HB_EXTERN void
+void
 hb_font_subtract_glyph_origin_for_direction (hb_font_t *font,
                                             hb_codepoint_t glyph,
                                             hb_direction_t direction,
                                             hb_position_t *x, hb_position_t *y);
 
-HB_EXTERN void
+void
 hb_font_get_glyph_kerning_for_direction (hb_font_t *font,
                                         hb_codepoint_t first_glyph, hb_codepoint_t second_glyph,
                                         hb_direction_t direction,
                                         hb_position_t *x, hb_position_t *y);
 
-HB_EXTERN hb_bool_t
+hb_bool_t
 hb_font_get_glyph_extents_for_origin (hb_font_t *font,
                                      hb_codepoint_t glyph,
                                      hb_direction_t direction,
                                      hb_glyph_extents_t *extents);
 
-HB_EXTERN hb_bool_t
+hb_bool_t
 hb_font_get_glyph_contour_point_for_origin (hb_font_t *font,
                                            hb_codepoint_t glyph, unsigned int point_index,
                                            hb_direction_t direction,
                                            hb_position_t *x, hb_position_t *y);
 
 /* Generates gidDDD if glyph has no name. */
-HB_EXTERN void
+void
 hb_font_glyph_to_string (hb_font_t *font,
                         hb_codepoint_t glyph,
                         char *s, unsigned int size);
 /* Parses gidDDD and uniUUUU strings automatically. */
-HB_EXTERN hb_bool_t
+hb_bool_t
 hb_font_glyph_from_string (hb_font_t *font,
                           const char *s, int len, /* -1 means nul-terminated */
                           hb_codepoint_t *glyph);
@@ -523,22 +425,22 @@ hb_font_glyph_from_string (hb_font_t *font,
 
 /* Fonts are very light-weight objects */
 
-HB_EXTERN hb_font_t *
+hb_font_t *
 hb_font_create (hb_face_t *face);
 
-HB_EXTERN hb_font_t *
+hb_font_t *
 hb_font_create_sub_font (hb_font_t *parent);
 
-HB_EXTERN hb_font_t *
+hb_font_t *
 hb_font_get_empty (void);
 
-HB_EXTERN hb_font_t *
+hb_font_t *
 hb_font_reference (hb_font_t *font);
 
-HB_EXTERN void
+void
 hb_font_destroy (hb_font_t *font);
 
-HB_EXTERN hb_bool_t
+hb_bool_t
 hb_font_set_user_data (hb_font_t          *font,
                       hb_user_data_key_t *key,
                       void *              data,
@@ -546,46 +448,42 @@ hb_font_set_user_data (hb_font_t          *font,
                       hb_bool_t           replace);
 
 
-HB_EXTERN void *
+void *
 hb_font_get_user_data (hb_font_t          *font,
                       hb_user_data_key_t *key);
 
-HB_EXTERN void
+void
 hb_font_make_immutable (hb_font_t *font);
 
-HB_EXTERN hb_bool_t
+hb_bool_t
 hb_font_is_immutable (hb_font_t *font);
 
-HB_EXTERN void
-hb_font_set_parent (hb_font_t *font,
-                   hb_font_t *parent);
-
-HB_EXTERN hb_font_t *
+hb_font_t *
 hb_font_get_parent (hb_font_t *font);
 
-HB_EXTERN hb_face_t *
+hb_face_t *
 hb_font_get_face (hb_font_t *font);
 
 
-HB_EXTERN void
+void
 hb_font_set_funcs (hb_font_t         *font,
                   hb_font_funcs_t   *klass,
                   void              *font_data,
                   hb_destroy_func_t  destroy);
 
 /* Be *very* careful with this function! */
-HB_EXTERN void
+void
 hb_font_set_funcs_data (hb_font_t         *font,
                        void              *font_data,
                        hb_destroy_func_t  destroy);
 
 
-HB_EXTERN void
+void
 hb_font_set_scale (hb_font_t *font,
                   int x_scale,
                   int y_scale);
 
-HB_EXTERN void
+void
 hb_font_get_scale (hb_font_t *font,
                   int *x_scale,
                   int *y_scale);
@@ -593,12 +491,12 @@ hb_font_get_scale (hb_font_t *font,
 /*
  * A zero value means "no hinting in that direction"
  */
-HB_EXTERN void
+void
 hb_font_set_ppem (hb_font_t *font,
                  unsigned int x_ppem,
                  unsigned int y_ppem);
 
-HB_EXTERN void
+void
 hb_font_get_ppem (hb_font_t *font,
                  unsigned int *x_ppem,
                  unsigned int *y_ppem);
index 2cad8c2..322f93a 100644 (file)
@@ -1,7 +1,6 @@
 /*
  * Copyright © 2009  Red Hat, Inc.
  * Copyright © 2009  Keith Stribley
- * Copyright © 2015  Google, Inc.
  *
  *  This is part of HarfBuzz, a text shaping library.
  *
@@ -24,7 +23,6 @@
  * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
  *
  * Red Hat Author(s): Behdad Esfahbod
- * Google Author(s): Behdad Esfahbod
  */
 
 #include "hb-private.hh"
  * In general, this file does a fine job of what it's supposed to do.
  * There are, however, things that need more work:
  *
- *   - I remember seeing FT_Get_Advance() without the NO_HINTING flag to be buggy.
- *     Have not investigated.
+ *   - We don't handle any load_flags.  That definitely has API implications. :(
+ *     I believe hb_ft_font_create() should take load_flags input.
+ *     In particular, FT_Get_Advance() without the NO_HINTING flag seems to be
+ *     buggy.
  *
- *   - FreeType works in 26.6 mode.  Clients can decide to use that mode, and everything
+ *     FreeType works in 26.6 mode.  Clients can decide to use that mode, and everything
  *     would work fine.  However, we also abuse this API for performing in font-space,
  *     but don't pass the correct flags to FreeType.  We just abuse the no-hinting mode
  *     for that, such that no rounding etc happens.  As such, we don't set ppem, and
- *     pass NO_HINTING as load_flags.  Would be much better to use NO_SCALE, and scale
- *     ourselves, like we do in uniscribe, etc.
+ *     pass NO_HINTING around.  This seems to work best, until we go ahead and add a full
+ *     load_flags API.
  *
  *   - We don't handle / allow for emboldening / obliqueing.
  *
  */
 
 
-struct hb_ft_font_t
-{
-  FT_Face ft_face;
-  int load_flags;
-  bool unref; /* Whether to destroy ft_face when done. */
-};
-
-static hb_ft_font_t *
-_hb_ft_font_create (FT_Face ft_face, bool unref)
-{
-  hb_ft_font_t *ft_font = (hb_ft_font_t *) calloc (1, sizeof (hb_ft_font_t));
-
-  if (unlikely (!ft_font))
-    return NULL;
-
-  ft_font->ft_face = ft_face;
-  ft_font->unref = unref;
-
-  ft_font->load_flags = FT_LOAD_DEFAULT | FT_LOAD_NO_HINTING;
-
-  return ft_font;
-}
-
-static void
-_hb_ft_font_destroy (hb_ft_font_t *ft_font)
-{
-  if (ft_font->unref)
-    FT_Done_Face (ft_font->ft_face);
-
-  free (ft_font);
-}
-
-/**
- * hb_ft_font_set_load_flags:
- * @font:
- * @load_flags:
- *
- * 
- *
- * Since: 1.0.5
- **/
-void
-hb_ft_font_set_load_flags (hb_font_t *font, int load_flags)
-{
-  if (font->immutable)
-    return;
-
-  if (font->destroy != (hb_destroy_func_t) _hb_ft_font_destroy)
-    return;
-
-  hb_ft_font_t *ft_font = (hb_ft_font_t *) font->user_data;
-
-  ft_font->load_flags = load_flags;
-}
-
-/**
- * hb_ft_font_get_load_flags:
- * @font:
- *
- * 
- *
- * Return value:
- * Since: 1.0.5
- **/
-int
-hb_ft_font_get_load_flags (hb_font_t *font)
-{
-  if (font->destroy != (hb_destroy_func_t) _hb_ft_font_destroy)
-    return 0;
-
-  const hb_ft_font_t *ft_font = (const hb_ft_font_t *) font->user_data;
-
-  return ft_font->load_flags;
-}
-
-FT_Face
-hb_ft_font_get_face (hb_font_t *font)
-{
-  if (font->destroy != (hb_destroy_func_t) _hb_ft_font_destroy)
-    return NULL;
-
-  const hb_ft_font_t *ft_font = (const hb_ft_font_t *) font->user_data;
-
-  return ft_font->ft_face;
-}
-
-
-
 static hb_bool_t
-hb_ft_get_nominal_glyph (hb_font_t *font HB_UNUSED,
-                        void *font_data,
-                        hb_codepoint_t unicode,
-                        hb_codepoint_t *glyph,
-                        void *user_data HB_UNUSED)
-{
-  const hb_ft_font_t *ft_font = (const hb_ft_font_t *) font_data;
-  unsigned int g = FT_Get_Char_Index (ft_font->ft_face, unicode);
-
-  if (unlikely (!g))
-    return false;
+hb_ft_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)
 
-  *glyph = g;
-  return true;
-}
-
-static hb_bool_t
-hb_ft_get_variation_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_ft_font_t *ft_font = (const hb_ft_font_t *) font_data;
-  unsigned int g = FT_Face_GetCharVariantIndex (ft_font->ft_face, unicode, variation_selector);
+  FT_Face ft_face = (FT_Face) font_data;
 
-  if (unlikely (!g))
-    return false;
+  if (unlikely (variation_selector)) {
+    *glyph = FT_Face_GetCharVariantIndex (ft_face, unicode, variation_selector);
+    return *glyph != 0;
+  }
 
-  *glyph = g;
-  return true;
+  *glyph = FT_Get_Char_Index (ft_face, unicode);
+  return *glyph != 0;
 }
 
 static hb_position_t
@@ -195,10 +92,11 @@ hb_ft_get_glyph_h_advance (hb_font_t *font HB_UNUSED,
                           hb_codepoint_t glyph,
                           void *user_data HB_UNUSED)
 {
-  const hb_ft_font_t *ft_font = (const hb_ft_font_t *) font_data;
+  FT_Face ft_face = (FT_Face) font_data;
+  int load_flags = FT_LOAD_DEFAULT | FT_LOAD_NO_HINTING;
   FT_Fixed v;
 
-  if (unlikely (FT_Get_Advance (ft_font->ft_face, glyph, ft_font->load_flags, &v)))
+  if (unlikely (FT_Get_Advance (ft_face, glyph, load_flags, &v)))
     return 0;
 
   if (font->x_scale < 0)
@@ -213,10 +111,11 @@ hb_ft_get_glyph_v_advance (hb_font_t *font HB_UNUSED,
                           hb_codepoint_t glyph,
                           void *user_data HB_UNUSED)
 {
-  const hb_ft_font_t *ft_font = (const hb_ft_font_t *) font_data;
+  FT_Face ft_face = (FT_Face) font_data;
+  int load_flags = FT_LOAD_DEFAULT | FT_LOAD_NO_HINTING | FT_LOAD_VERTICAL_LAYOUT;
   FT_Fixed v;
 
-  if (unlikely (FT_Get_Advance (ft_font->ft_face, glyph, ft_font->load_flags | FT_LOAD_VERTICAL_LAYOUT, &v)))
+  if (unlikely (FT_Get_Advance (ft_face, glyph, load_flags, &v)))
     return 0;
 
   if (font->y_scale < 0)
@@ -228,6 +127,18 @@ hb_ft_get_glyph_v_advance (hb_font_t *font HB_UNUSED,
 }
 
 static hb_bool_t
+hb_ft_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_ft_get_glyph_v_origin (hb_font_t *font HB_UNUSED,
                          void *font_data,
                          hb_codepoint_t glyph,
@@ -235,10 +146,10 @@ hb_ft_get_glyph_v_origin (hb_font_t *font HB_UNUSED,
                          hb_position_t *y,
                          void *user_data HB_UNUSED)
 {
-  const hb_ft_font_t *ft_font = (const hb_ft_font_t *) font_data;
-  FT_Face ft_face = ft_font->ft_face;
+  FT_Face ft_face = (FT_Face) font_data;
+  int load_flags = FT_LOAD_DEFAULT | FT_LOAD_NO_HINTING;
 
-  if (unlikely (FT_Load_Glyph (ft_face, glyph, ft_font->load_flags)))
+  if (unlikely (FT_Load_Glyph (ft_face, glyph, load_flags)))
     return false;
 
   /* Note: FreeType's vertical metrics grows downward while other FreeType coordinates
@@ -261,16 +172,27 @@ hb_ft_get_glyph_h_kerning (hb_font_t *font,
                           hb_codepoint_t right_glyph,
                           void *user_data HB_UNUSED)
 {
-  const hb_ft_font_t *ft_font = (const hb_ft_font_t *) font_data;
+  FT_Face ft_face = (FT_Face) font_data;
   FT_Vector kerningv;
 
   FT_Kerning_Mode mode = font->x_ppem ? FT_KERNING_DEFAULT : FT_KERNING_UNFITTED;
-  if (FT_Get_Kerning (ft_font->ft_face, left_glyph, right_glyph, mode, &kerningv))
+  if (FT_Get_Kerning (ft_face, left_glyph, right_glyph, mode, &kerningv))
     return 0;
 
   return kerningv.x;
 }
 
+static hb_position_t
+hb_ft_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)
+{
+  /* FreeType API doesn't support vertical kerning */
+  return 0;
+}
+
 static hb_bool_t
 hb_ft_get_glyph_extents (hb_font_t *font HB_UNUSED,
                         void *font_data,
@@ -278,26 +200,16 @@ hb_ft_get_glyph_extents (hb_font_t *font HB_UNUSED,
                         hb_glyph_extents_t *extents,
                         void *user_data HB_UNUSED)
 {
-  const hb_ft_font_t *ft_font = (const hb_ft_font_t *) font_data;
-  FT_Face ft_face = ft_font->ft_face;
+  FT_Face ft_face = (FT_Face) font_data;
+  int load_flags = FT_LOAD_DEFAULT | FT_LOAD_NO_HINTING;
 
-  if (unlikely (FT_Load_Glyph (ft_face, glyph, ft_font->load_flags)))
+  if (unlikely (FT_Load_Glyph (ft_face, glyph, load_flags)))
     return false;
 
   extents->x_bearing = ft_face->glyph->metrics.horiBearingX;
   extents->y_bearing = ft_face->glyph->metrics.horiBearingY;
   extents->width = ft_face->glyph->metrics.width;
   extents->height = -ft_face->glyph->metrics.height;
-  if (font->x_scale < 0)
-  {
-    extents->x_bearing = -extents->x_bearing;
-    extents->width = -extents->width;
-  }
-  if (font->y_scale < 0)
-  {
-    extents->y_bearing = -extents->y_bearing;
-    extents->height = -extents->height;
-  }
   return true;
 }
 
@@ -310,10 +222,10 @@ hb_ft_get_glyph_contour_point (hb_font_t *font HB_UNUSED,
                               hb_position_t *y,
                               void *user_data HB_UNUSED)
 {
-  const hb_ft_font_t *ft_font = (const hb_ft_font_t *) font_data;
-  FT_Face ft_face = ft_font->ft_face;
+  FT_Face ft_face = (FT_Face) font_data;
+  int load_flags = FT_LOAD_DEFAULT;
 
-  if (unlikely (FT_Load_Glyph (ft_face, glyph, ft_font->load_flags)))
+  if (unlikely (FT_Load_Glyph (ft_face, glyph, load_flags)))
       return false;
 
   if (unlikely (ft_face->glyph->format != FT_GLYPH_FORMAT_OUTLINE))
@@ -335,9 +247,9 @@ hb_ft_get_glyph_name (hb_font_t *font HB_UNUSED,
                      char *name, unsigned int size,
                      void *user_data HB_UNUSED)
 {
-  const hb_ft_font_t *ft_font = (const hb_ft_font_t *) font_data;
+  FT_Face ft_face = (FT_Face) font_data;
 
-  hb_bool_t ret = !FT_Get_Glyph_Name (ft_font->ft_face, glyph, name, size);
+  hb_bool_t ret = !FT_Get_Glyph_Name (ft_face, glyph, name, size);
   if (ret && (size && !*name))
     ret = false;
 
@@ -351,8 +263,7 @@ hb_ft_get_glyph_from_name (hb_font_t *font HB_UNUSED,
                           hb_codepoint_t *glyph,
                           void *user_data HB_UNUSED)
 {
-  const hb_ft_font_t *ft_font = (const hb_ft_font_t *) font_data;
-  FT_Face ft_face = ft_font->ft_face;
+  FT_Face ft_face = (FT_Face) font_data;
 
   if (len < 0)
     *glyph = FT_Get_Name_Index (ft_face, (FT_String *) name);
@@ -377,77 +288,23 @@ hb_ft_get_glyph_from_name (hb_font_t *font HB_UNUSED,
   return *glyph != 0;
 }
 
-static hb_bool_t
-hb_ft_get_font_h_extents (hb_font_t *font HB_UNUSED,
-                         void *font_data,
-                         hb_font_extents_t *metrics,
-                         void *user_data HB_UNUSED)
-{
-  const hb_ft_font_t *ft_font = (const hb_ft_font_t *) font_data;
-  FT_Face ft_face = ft_font->ft_face;
-  metrics->ascender = ft_face->size->metrics.ascender;
-  metrics->descender = ft_face->size->metrics.descender;
-  metrics->line_gap = ft_face->size->metrics.height - (ft_face->size->metrics.ascender - ft_face->size->metrics.descender);
-  if (font->y_scale < 0)
-  {
-    metrics->ascender = -metrics->ascender;
-    metrics->descender = -metrics->descender;
-    metrics->line_gap = -metrics->line_gap;
-  }
-  return true;
-}
-
-static hb_font_funcs_t *static_ft_funcs = NULL;
 
-#ifdef HB_USE_ATEXIT
-static
-void free_static_ft_funcs (void)
+static hb_font_funcs_t *
+_hb_ft_get_font_funcs (void)
 {
-  hb_font_funcs_destroy (static_ft_funcs);
-}
-#endif
+  static const hb_font_funcs_t ft_ffuncs = {
+    HB_OBJECT_HEADER_STATIC,
 
-static void
-_hb_ft_font_set_funcs (hb_font_t *font, FT_Face ft_face, bool unref)
-{
-retry:
-  hb_font_funcs_t *funcs = (hb_font_funcs_t *) hb_atomic_ptr_get (&static_ft_funcs);
+    true, /* immutable */
 
-  if (unlikely (!funcs))
-  {
-    funcs = hb_font_funcs_create ();
-
-    hb_font_funcs_set_font_h_extents_func (funcs, hb_ft_get_font_h_extents, NULL, NULL);
-    //hb_font_funcs_set_font_v_extents_func (funcs, hb_ft_get_font_v_extents, NULL, NULL);
-    hb_font_funcs_set_nominal_glyph_func (funcs, hb_ft_get_nominal_glyph, NULL, NULL);
-    hb_font_funcs_set_variation_glyph_func (funcs, hb_ft_get_variation_glyph, NULL, NULL);
-    hb_font_funcs_set_glyph_h_advance_func (funcs, hb_ft_get_glyph_h_advance, NULL, NULL);
-    hb_font_funcs_set_glyph_v_advance_func (funcs, hb_ft_get_glyph_v_advance, NULL, NULL);
-    //hb_font_funcs_set_glyph_h_origin_func (funcs, hb_ft_get_glyph_h_origin, NULL, NULL);
-    hb_font_funcs_set_glyph_v_origin_func (funcs, hb_ft_get_glyph_v_origin, NULL, NULL);
-    hb_font_funcs_set_glyph_h_kerning_func (funcs, hb_ft_get_glyph_h_kerning, NULL, NULL);
-    //hb_font_funcs_set_glyph_v_kerning_func (funcs, hb_ft_get_glyph_v_kerning, NULL, NULL);
-    hb_font_funcs_set_glyph_extents_func (funcs, hb_ft_get_glyph_extents, NULL, NULL);
-    hb_font_funcs_set_glyph_contour_point_func (funcs, hb_ft_get_glyph_contour_point, NULL, NULL);
-    hb_font_funcs_set_glyph_name_func (funcs, hb_ft_get_glyph_name, NULL, NULL);
-    hb_font_funcs_set_glyph_from_name_func (funcs, hb_ft_get_glyph_from_name, NULL, NULL);
-
-    hb_font_funcs_make_immutable (funcs);
-
-    if (!hb_atomic_ptr_cmpexch (&static_ft_funcs, NULL, funcs)) {
-      hb_font_funcs_destroy (funcs);
-      goto retry;
+    {
+#define HB_FONT_FUNC_IMPLEMENT(name) hb_ft_get_##name,
+      HB_FONT_FUNCS_IMPLEMENT_CALLBACKS
+#undef HB_FONT_FUNC_IMPLEMENT
     }
-
-#ifdef HB_USE_ATEXIT
-    atexit (free_static_ft_funcs); /* First person registers atexit() callback. */
-#endif
   };
 
-  hb_font_set_funcs (font,
-                    funcs,
-                    _hb_ft_font_create (ft_face, unref),
-                    (hb_destroy_func_t) _hb_ft_font_destroy);
+  return const_cast<hb_font_funcs_t *> (&ft_ffuncs);
 }
 
 
@@ -486,7 +343,7 @@ reference_table  (hb_face_t *face HB_UNUSED, hb_tag_t tag, void *user_data)
  * 
  *
  * Return value: (transfer full): 
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_face_t *
 hb_ft_face_create (FT_Face           ft_face,
@@ -520,7 +377,7 @@ hb_ft_face_create (FT_Face           ft_face,
  * 
  *
  * Return value: (transfer full): 
- * Since: 0.9.38
+ * Since: 1.0
  **/
 hb_face_t *
 hb_ft_face_create_referenced (FT_Face ft_face)
@@ -542,7 +399,7 @@ hb_ft_face_finalize (FT_Face ft_face)
  * 
  *
  * Return value: (transfer full): 
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_face_t *
 hb_ft_face_create_cached (FT_Face ft_face)
@@ -559,6 +416,11 @@ hb_ft_face_create_cached (FT_Face ft_face)
   return hb_face_reference ((hb_face_t *) ft_face->generic.data);
 }
 
+static void
+_do_nothing (void)
+{
+}
+
 
 /**
  * hb_ft_font_create:
@@ -568,7 +430,7 @@ hb_ft_face_create_cached (FT_Face ft_face)
  * 
  *
  * Return value: (transfer full): 
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_font_t *
 hb_ft_font_create (FT_Face           ft_face,
@@ -580,7 +442,9 @@ hb_ft_font_create (FT_Face           ft_face,
   face = hb_ft_face_create (ft_face, destroy);
   font = hb_font_create (face);
   hb_face_destroy (face);
-  _hb_ft_font_set_funcs (font, ft_face, false);
+  hb_font_set_funcs (font,
+                    _hb_ft_get_font_funcs (),
+                    ft_face, (hb_destroy_func_t) _do_nothing);
   hb_font_set_scale (font,
                     (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));
@@ -600,7 +464,7 @@ hb_ft_font_create (FT_Face           ft_face,
  * 
  *
  * Return value: (transfer full): 
- * Since: 0.9.38
+ * Since: 1.0
  **/
 hb_font_t *
 hb_ft_font_create_referenced (FT_Face ft_face)
@@ -694,6 +558,18 @@ hb_ft_font_set_funcs (hb_font_t *font)
   ft_face->generic.data = blob;
   ft_face->generic.finalizer = (FT_Generic_Finalizer) _release_blob;
 
-  _hb_ft_font_set_funcs (font, ft_face, true);
-  hb_ft_font_set_load_flags (font, FT_LOAD_DEFAULT | FT_LOAD_NO_HINTING);
+  hb_font_set_funcs (font,
+                    _hb_ft_get_font_funcs (),
+                    ft_face,
+                    (hb_destroy_func_t) FT_Done_Face);
+}
+
+FT_Face
+hb_ft_font_get_face (hb_font_t *font)
+{
+  if (font->destroy == (hb_destroy_func_t) FT_Done_Face ||
+      font->destroy == (hb_destroy_func_t) _do_nothing)
+    return (FT_Face) font->user_data;
+
+  return NULL;
 }
index dc8ef85..92f4b36 100644 (file)
@@ -1,6 +1,5 @@
 /*
  * Copyright © 2009  Red Hat, Inc.
- * Copyright © 2015  Google, Inc.
  *
  *  This is part of HarfBuzz, a text shaping library.
  *
@@ -23,7 +22,6 @@
  * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
  *
  * Red Hat Author(s): Behdad Esfahbod
- * Google Author(s): Behdad Esfahbod
  */
 
 #ifndef HB_FT_H
@@ -59,7 +57,7 @@ HB_BEGIN_DECLS
  * probably should use (the more recent) hb_ft_face_create_referenced()
  * instead.
  */
-HB_EXTERN hb_face_t *
+hb_face_t *
 hb_ft_face_create (FT_Face           ft_face,
                   hb_destroy_func_t destroy);
 
@@ -71,7 +69,7 @@ hb_ft_face_create (FT_Face           ft_face,
  * Client is still responsible for making sure that ft-face is destroyed
  * after hb-face is.
  */
-HB_EXTERN hb_face_t *
+hb_face_t *
 hb_ft_face_create_cached (FT_Face ft_face);
 
 /* This version is like hb_ft_face_create(), except that it calls
@@ -81,7 +79,7 @@ hb_ft_face_create_cached (FT_Face ft_face);
  * This is the most convenient version to use.  Use it unless you have
  * very good reasons not to.
  */
-HB_EXTERN hb_face_t *
+hb_face_t *
 hb_ft_face_create_referenced (FT_Face ft_face);
 
 
@@ -98,28 +96,23 @@ hb_ft_face_create_referenced (FT_Face ft_face);
 
 /* See notes on hb_ft_face_create().  Same issues re lifecycle-management
  * apply here.  Use hb_ft_font_create_referenced() if you can. */
-HB_EXTERN hb_font_t *
+hb_font_t *
 hb_ft_font_create (FT_Face           ft_face,
                   hb_destroy_func_t destroy);
 
 /* See notes on hb_ft_face_create_referenced() re lifecycle-management
  * issues. */
-HB_EXTERN hb_font_t *
+hb_font_t *
 hb_ft_font_create_referenced (FT_Face ft_face);
 
-HB_EXTERN FT_Face
-hb_ft_font_get_face (hb_font_t *font);
-
-HB_EXTERN void
-hb_ft_font_set_load_flags (hb_font_t *font, int load_flags);
-
-HB_EXTERN int
-hb_ft_font_get_load_flags (hb_font_t *font);
 
 /* Makes an hb_font_t use FreeType internally to implement font functions. */
-HB_EXTERN void
+void
 hb_ft_font_set_funcs (hb_font_t *font);
 
+FT_Face
+hb_ft_font_get_face (hb_font_t *font);
+
 
 HB_END_DECLS
 
index e203524..61dff5e 100644 (file)
@@ -382,11 +382,6 @@ hb_glib_get_unicode_funcs (void)
   return const_cast<hb_unicode_funcs_t *> (&_hb_glib_unicode_funcs);
 }
 
-/**
- * hb_glib_blob_create:
- *
- * Since: 0.9.38
- **/
 hb_blob_t *
 hb_glib_blob_create (GBytes *gbytes)
 {
index 12c3e3b..1a8f42e 100644 (file)
 HB_BEGIN_DECLS
 
 
-HB_EXTERN hb_script_t
+hb_script_t
 hb_glib_script_to_script (GUnicodeScript script);
 
-HB_EXTERN GUnicodeScript
+GUnicodeScript
 hb_glib_script_from_script (hb_script_t script);
 
 
-HB_EXTERN hb_unicode_funcs_t *
+hb_unicode_funcs_t *
 hb_glib_get_unicode_funcs (void);
 
-HB_EXTERN hb_blob_t *
+hb_blob_t *
 hb_glib_blob_create (GBytes *gbytes);
 
 
index e28510c..6ecda06 100644 (file)
@@ -42,7 +42,7 @@ HB_BEGIN_DECLS
 /*** END file-header ***/
 
 /*** BEGIN value-header ***/
-HB_EXTERN GType @enum_name@_get_type (void) G_GNUC_CONST;
+GType @enum_name@_get_type (void) G_GNUC_CONST;
 #define @ENUMPREFIX@_TYPE_@ENUMSHORT@ (@enum_name@_get_type ())
 
 /*** END value-header ***/
index 6bd6336..2451b66 100644 (file)
@@ -54,17 +54,6 @@ hb_gobject_##name##_get_type (void) \
 #define HB_DEFINE_OBJECT_TYPE(name) \
        HB_DEFINE_BOXED_TYPE (name, hb_##name##_reference, hb_##name##_destroy);
 
-#define HB_DEFINE_VALUE_TYPE(name) \
-       static hb_##name##_t *_hb_##name##_reference (const hb_##name##_t *l) \
-       { \
-         hb_##name##_t *c = (hb_##name##_t *) calloc (1, sizeof (hb_##name##_t)); \
-         if (unlikely (!c)) return NULL; \
-         *c = *l; \
-         return c; \
-       } \
-       static void _hb_##name##_destroy (hb_##name##_t *l) { free (l); } \
-       HB_DEFINE_BOXED_TYPE (name, _hb_##name##_reference, _hb_##name##_destroy);
-
 HB_DEFINE_OBJECT_TYPE (buffer)
 HB_DEFINE_OBJECT_TYPE (blob)
 HB_DEFINE_OBJECT_TYPE (face)
@@ -73,8 +62,59 @@ HB_DEFINE_OBJECT_TYPE (font_funcs)
 HB_DEFINE_OBJECT_TYPE (set)
 HB_DEFINE_OBJECT_TYPE (shape_plan)
 HB_DEFINE_OBJECT_TYPE (unicode_funcs)
-HB_DEFINE_VALUE_TYPE (feature)
-HB_DEFINE_VALUE_TYPE (glyph_info)
-HB_DEFINE_VALUE_TYPE (glyph_position)
-HB_DEFINE_VALUE_TYPE (segment_properties)
-HB_DEFINE_VALUE_TYPE (user_data_key)
+
+
+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)
index 0ea3b12..4a88d56 100644 (file)
@@ -40,65 +40,55 @@ HB_BEGIN_DECLS
 
 /* Object types */
 
-/**
- * Since: 0.9.2
- **/
-HB_EXTERN GType hb_gobject_blob_get_type (void);
+GType hb_gobject_blob_get_type (void);
 #define HB_GOBJECT_TYPE_BLOB (hb_gobject_blob_get_type ())
 
-/**
- * Since: 0.9.2
- **/
-HB_EXTERN GType hb_gobject_buffer_get_type (void);
+GType hb_gobject_buffer_get_type (void);
 #define HB_GOBJECT_TYPE_BUFFER (hb_gobject_buffer_get_type ())
 
-/**
- * Since: 0.9.2
- **/
-HB_EXTERN GType hb_gobject_face_get_type (void);
+GType hb_gobject_face_get_type (void);
 #define HB_GOBJECT_TYPE_FACE (hb_gobject_face_get_type ())
 
-/**
- * Since: 0.9.2
- **/
-HB_EXTERN GType hb_gobject_font_get_type (void);
+GType hb_gobject_font_get_type (void);
 #define HB_GOBJECT_TYPE_FONT (hb_gobject_font_get_type ())
 
-/**
- * Since: 0.9.2
- **/
-HB_EXTERN GType hb_gobject_font_funcs_get_type (void);
+GType hb_gobject_font_funcs_get_type (void);
 #define HB_GOBJECT_TYPE_FONT_FUNCS (hb_gobject_font_funcs_get_type ())
 
-HB_EXTERN GType hb_gobject_set_get_type (void);
+GType hb_gobject_set_get_type (void);
 #define HB_GOBJECT_TYPE_SET (hb_gobject_set_get_type ())
 
-HB_EXTERN GType hb_gobject_shape_plan_get_type (void);
+GType hb_gobject_shape_plan_get_type (void);
 #define HB_GOBJECT_TYPE_SHAPE_PLAN (hb_gobject_shape_plan_get_type ())
 
-/**
- * Since: 0.9.2
- **/
-HB_EXTERN GType hb_gobject_unicode_funcs_get_type (void);
+GType hb_gobject_unicode_funcs_get_type (void);
 #define HB_GOBJECT_TYPE_UNICODE_FUNCS (hb_gobject_unicode_funcs_get_type ())
 
 /* Value types */
 
-HB_EXTERN GType hb_gobject_feature_get_type (void);
+GType hb_gobject_feature_get_type (void);
 #define HB_GOBJECT_TYPE_FEATURE (hb_gobject_feature_get_type ())
 
-HB_EXTERN GType hb_gobject_glyph_info_get_type (void);
+GType hb_gobject_glyph_info_get_type (void);
 #define HB_GOBJECT_TYPE_GLYPH_INFO (hb_gobject_glyph_info_get_type ())
 
-HB_EXTERN GType hb_gobject_glyph_position_get_type (void);
+GType hb_gobject_glyph_position_get_type (void);
 #define HB_GOBJECT_TYPE_GLYPH_POSITION (hb_gobject_glyph_position_get_type ())
 
-HB_EXTERN GType hb_gobject_segment_properties_get_type (void);
+GType hb_gobject_segment_properties_get_type (void);
 #define HB_GOBJECT_TYPE_SEGMENT_PROPERTIES (hb_gobject_segment_properties_get_type ())
 
-HB_EXTERN GType hb_gobject_user_data_key_get_type (void);
+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
 
index c32318d..807c330 100644 (file)
@@ -138,9 +138,6 @@ _hb_graphite2_shaper_face_data_destroy (hb_graphite2_shaper_face_data_t *data)
   free (data);
 }
 
-/*
- * Since: 0.9.10
- */
 gr_face *
 hb_graphite2_face_get_gr_face (hb_face_t *face)
 {
@@ -175,9 +172,6 @@ _hb_graphite2_shaper_font_data_destroy (hb_graphite2_shaper_font_data_t *data)
   gr_font_destroy (data);
 }
 
-/*
- * Since: 0.9.10
- */
 gr_font *
 hb_graphite2_font_get_gr_font (hb_font_t *font)
 {
@@ -216,7 +210,6 @@ struct hb_graphite2_cluster_t {
   unsigned int base_glyph;
   unsigned int num_glyphs;
   unsigned int cluster;
-  float advance;
 };
 
 hb_bool_t
@@ -235,11 +228,12 @@ _hb_graphite2_shape (hb_shape_plan_t    *shape_plan,
   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);
 
-  for (unsigned int i = 0; i < num_features; i++)
+  while (num_features--)
   {
-    const gr_feature_ref *fref = gr_face_find_fref (grface, features[i].tag);
+    const gr_feature_ref *fref = gr_face_find_fref (grface, features->tag);
     if (fref)
-      gr_fref_set_feature_value (fref, features[i].value, feats);
+      gr_fref_set_feature_value (fref, features->value, feats);
+    features++;
   }
 
   gr_segment *seg = NULL;
@@ -255,8 +249,6 @@ _hb_graphite2_shape (hb_shape_plan_t    *shape_plan,
   for (unsigned int i = 0; i < buffer->len; ++i)
     chars[i] = buffer->info[i].codepoint;
 
-  /* TODO ensure_native_direction. */
-
   hb_tag_t script_tag[2];
   hb_ot_tags_from_script (hb_buffer_get_script (buffer), &script_tag[0], &script_tag[1]);
 
@@ -275,11 +267,9 @@ _hb_graphite2_shape (hb_shape_plan_t    *shape_plan,
   if (unlikely (!glyph_count)) {
     if (feats) gr_featureval_destroy (feats);
     gr_seg_destroy (seg);
-    buffer->len = 0;
-    return true;
+    return false;
   }
 
-  buffer->ensure (glyph_count);
   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)
@@ -311,12 +301,6 @@ _hb_graphite2_shape (hb_shape_plan_t    *shape_plan,
 
   hb_codepoint_t *pg = gids;
   clusters[0].cluster = buffer->info[0].cluster;
-  float curradv = HB_DIRECTION_IS_BACKWARD(buffer->props.direction) ? gr_slot_origin_X(gr_seg_first_slot(seg)) : 0.;
-  if (HB_DIRECTION_IS_BACKWARD(buffer->props.direction))
-  {
-    curradv = gr_slot_origin_X(gr_seg_first_slot(seg));
-    clusters[0].advance = gr_seg_advance_X(seg) - curradv;
-  }
   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);
@@ -327,7 +311,6 @@ _hb_graphite2_shape (hb_shape_plan_t    *shape_plan,
     {
       clusters[ci-1].num_chars += clusters[ci].num_chars;
       clusters[ci-1].num_glyphs += clusters[ci].num_glyphs;
-      clusters[ci-1].advance += clusters[ci].advance;
       ci--;
     }
 
@@ -339,26 +322,16 @@ _hb_graphite2_shape (hb_shape_plan_t    *shape_plan,
       c->num_chars = before - c->base_char;
       c->base_glyph = ic;
       c->num_glyphs = 0;
-      if (HB_DIRECTION_IS_BACKWARD(buffer->props.direction))
-      {
-        ci++;
-        clusters[ci].advance = curradv - gr_slot_origin_X(is);
-      } else {
-        clusters[ci].advance = gr_slot_origin_X(is) - curradv;
-        ci++;
-      }
-      curradv = gr_slot_origin_X(is);
+      ci++;
     }
     clusters[ci].num_glyphs++;
 
     if (clusters[ci].base_char + clusters[ci].num_chars < after + 1)
        clusters[ci].num_chars = after + 1 - clusters[ci].base_char;
   }
-
-  if (!HB_DIRECTION_IS_BACKWARD(buffer->props.direction))
-    clusters[ci].advance = gr_seg_advance_X(seg) - curradv;
   ci++;
 
+  //buffer->clear_output ();
   for (unsigned int i = 0; i < ci; ++i)
   {
     for (unsigned int j = 0; j < clusters[i].num_glyphs; ++j)
@@ -366,57 +339,35 @@ _hb_graphite2_shape (hb_shape_plan_t    *shape_plan,
       hb_glyph_info_t *info = &buffer->info[clusters[i].base_glyph + j];
       info->codepoint = gids[clusters[i].base_glyph + j];
       info->cluster = clusters[i].cluster;
-      info->var1.i32 = clusters[i].advance;     // all glyphs in the cluster get the same advance
     }
   }
   buffer->len = glyph_count;
+  //buffer->swap_buffers ();
 
-  float yscale = font->y_scale / font->x_scale;
-  /* Positioning. */
-  if (!HB_DIRECTION_IS_BACKWARD(buffer->props.direction))
+  if (HB_DIRECTION_IS_BACKWARD(buffer->props.direction))
+    curradvx = gr_seg_advance_X(seg);
+
+  hb_glyph_position_t *pPos;
+  for (pPos = hb_buffer_get_glyph_positions (buffer, NULL), is = gr_seg_first_slot (seg);
+       is; pPos++, is = gr_slot_next_in_segment (is))
   {
-    int currclus = -1;
-    const hb_glyph_info_t *info = buffer->info;
-    hb_glyph_position_t *pPos = hb_buffer_get_glyph_positions (buffer, NULL);
-    curradvx = 0;
-    for (is = gr_seg_first_slot (seg); is; pPos++, ++info, is = gr_slot_next_in_segment (is))
-    {
-      pPos->x_offset = gr_slot_origin_X (is) - curradvx;
-      pPos->y_offset = gr_slot_origin_Y (is) * yscale - curradvy;
-      if (info->cluster != currclus) {
-        pPos->x_advance = info->var1.i32;
-        curradvx += pPos->x_advance;
-        currclus = info->cluster;
-      } else
-        pPos->x_advance = 0.;
-
-      pPos->y_advance = gr_slot_advance_Y (is, grface, grfont) * yscale;
-      curradvy += pPos->y_advance;
-    }
+    pPos->x_offset = gr_slot_origin_X (is) - curradvx;
+    pPos->y_offset = gr_slot_origin_Y (is) - curradvy;
+    pPos->x_advance = gr_slot_advance_X (is, grface, grfont);
+    pPos->y_advance = gr_slot_advance_Y (is, grface, grfont);
+    if (HB_DIRECTION_IS_BACKWARD (buffer->props.direction))
+      curradvx -= pPos->x_advance;
+    pPos->x_offset = gr_slot_origin_X (is) - curradvx;
+    if (!HB_DIRECTION_IS_BACKWARD (buffer->props.direction))
+      curradvx += pPos->x_advance;
+    pPos->y_offset = gr_slot_origin_Y (is) - curradvy;
+    curradvy += pPos->y_advance;
   }
-  else
-  {
-    int currclus = -1;
-    const hb_glyph_info_t *info = buffer->info;
-    hb_glyph_position_t *pPos = hb_buffer_get_glyph_positions (buffer, NULL);
-    curradvx = gr_seg_advance_X(seg);
-    for (is = gr_seg_first_slot (seg); is; pPos++, info++, is = gr_slot_next_in_segment (is))
-    {
-      if (info->cluster != currclus)
-      {
-        pPos->x_advance = info->var1.i32;
-        if (currclus != -1) curradvx -= info[-1].var1.i32;
-        currclus = info->cluster;
-      } else
-      pPos->x_advance = 0.;
-
-      pPos->y_advance = gr_slot_advance_Y (is, grface, grfont) * yscale;
-      curradvy -= pPos->y_advance;
-      pPos->x_offset = gr_slot_origin_X (is) - curradvx + pPos->x_advance;
-      pPos->y_offset = gr_slot_origin_Y (is) * yscale - curradvy;
-    }
+  if (!HB_DIRECTION_IS_BACKWARD (buffer->props.direction))
+    pPos[-1].x_advance += gr_seg_advance_X(seg) - curradvx;
+
+  if (HB_DIRECTION_IS_BACKWARD (buffer->props.direction))
     hb_buffer_reverse_clusters (buffer);
-  }
 
   if (feats) gr_featureval_destroy (feats);
   gr_seg_destroy (seg);
index 122c3e4..3eae54a 100644 (file)
@@ -36,10 +36,10 @@ HB_BEGIN_DECLS
 #define HB_GRAPHITE2_TAG_SILF HB_TAG('S','i','l','f')
 
 
-HB_EXTERN gr_face *
+gr_face *
 hb_graphite2_face_get_gr_face (hb_face_t *face);
 
-HB_EXTERN gr_font *
+gr_font *
 hb_graphite2_font_get_gr_font (hb_font_t *font);
 
 
index ee54721..24cec9d 100644 (file)
@@ -36,7 +36,6 @@
 #include <unicode/uchar.h>
 #include <unicode/unorm.h>
 #include <unicode/ustring.h>
-#include <unicode/utf16.h>
 #include <unicode/uversion.h>
 
 
index 2db6a7b..f2f35f0 100644 (file)
 HB_BEGIN_DECLS
 
 
-HB_EXTERN hb_script_t
+hb_script_t
 hb_icu_script_to_script (UScriptCode script);
 
-HB_EXTERN UScriptCode
+UScriptCode
 hb_icu_script_from_script (hb_script_t script);
 
 
-HB_EXTERN hb_unicode_funcs_t *
+hb_unicode_funcs_t *
 hb_icu_get_unicode_funcs (void);
 
 
index ed27035..a8ea39c 100644 (file)
 
 /* We need external help for these */
 
-#if defined(HB_MUTEX_IMPL_INIT) \
- && defined(hb_mutex_impl_init) \
- && defined(hb_mutex_impl_lock) \
- && defined(hb_mutex_impl_unlock) \
- && defined(hb_mutex_impl_finish)
-
-/* Defined externally, i.e. in config.h; must have typedef'ed hb_mutex_impl_t as well. */
+#if 0
 
 
 #elif !defined(HB_NO_MT) && (defined(_WIN32) || defined(__CYGWIN__))
@@ -119,12 +113,10 @@ typedef int hb_mutex_impl_t;
 #define hb_mutex_impl_unlock(M)        HB_STMT_START {} HB_STMT_END
 #define hb_mutex_impl_finish(M)        HB_STMT_START {} HB_STMT_END
 
-
 #endif
 
 
 #define HB_MUTEX_INIT          {HB_MUTEX_IMPL_INIT}
-
 struct hb_mutex_t
 {
   /* TODO Add tracing. */
index 6b73ff9..7bd0f16 100644 (file)
 
 /* reference_count */
 
-#define HB_REFERENCE_COUNT_INERT_VALUE -1
-#define HB_REFERENCE_COUNT_POISON_VALUE -0x0000DEAD
-#define HB_REFERENCE_COUNT_INIT {HB_ATOMIC_INT_INIT(HB_REFERENCE_COUNT_INERT_VALUE)}
-
+#define HB_REFERENCE_COUNT_INVALID_VALUE ((hb_atomic_int_t) -1)
+#define HB_REFERENCE_COUNT_INVALID {HB_REFERENCE_COUNT_INVALID_VALUE}
 struct hb_reference_count_t
 {
   hb_atomic_int_t ref_count;
 
-  inline void init (int v) { ref_count.set_unsafe (v); }
-  inline int get_unsafe (void) const { return ref_count.get_unsafe (); }
-  inline int inc (void) { return ref_count.inc (); }
-  inline int dec (void) { return ref_count.dec (); }
-  inline void finish (void) { ref_count.set_unsafe (HB_REFERENCE_COUNT_POISON_VALUE); }
+  inline void init (int v) { ref_count = v; }
+  inline int inc (void) { return hb_atomic_int_add (const_cast<hb_atomic_int_t &> (ref_count),  1); }
+  inline int dec (void) { return hb_atomic_int_add (const_cast<hb_atomic_int_t &> (ref_count), -1); }
+  inline void finish (void) { ref_count = HB_REFERENCE_COUNT_INVALID_VALUE; }
+
+  inline bool is_invalid (void) const { return ref_count == HB_REFERENCE_COUNT_INVALID_VALUE; }
 
-  inline bool is_inert (void) const { return ref_count.get_unsafe () == HB_REFERENCE_COUNT_INERT_VALUE; }
-  inline bool is_valid (void) const { return ref_count.get_unsafe () > 0; }
 };
 
 
@@ -105,7 +102,7 @@ struct hb_object_header_t
   hb_reference_count_t ref_count;
   hb_user_data_array_t user_data;
 
-#define HB_OBJECT_HEADER_STATIC {HB_REFERENCE_COUNT_INIT, HB_USER_DATA_ARRAY_INIT}
+#define HB_OBJECT_HEADER_STATIC {HB_REFERENCE_COUNT_INVALID, HB_USER_DATA_ARRAY_INIT}
 
   private:
   ASSERT_POD ();
@@ -120,7 +117,7 @@ static inline void hb_object_trace (const Type *obj, const char *function)
   DEBUG_MSG (OBJECT, (void *) obj,
             "%s refcount=%d",
             function,
-            obj ? obj->header.ref_count.get_unsafe () : 0);
+            obj ? obj->header.ref_count.ref_count : 0);
 }
 
 template <typename Type>
@@ -144,12 +141,7 @@ static inline void hb_object_init (Type *obj)
 template <typename Type>
 static inline bool hb_object_is_inert (const Type *obj)
 {
-  return unlikely (obj->header.ref_count.is_inert ());
-}
-template <typename Type>
-static inline bool hb_object_is_valid (const Type *obj)
-{
-  return likely (obj->header.ref_count.is_valid ());
+  return unlikely (obj->header.ref_count.is_invalid ());
 }
 template <typename Type>
 static inline Type *hb_object_reference (Type *obj)
@@ -157,7 +149,6 @@ static inline Type *hb_object_reference (Type *obj)
   hb_object_trace (obj, HB_FUNC);
   if (unlikely (!obj || hb_object_is_inert (obj)))
     return obj;
-  assert (hb_object_is_valid (obj));
   obj->header.ref_count.inc ();
   return obj;
 }
@@ -167,7 +158,6 @@ static inline bool hb_object_destroy (Type *obj)
   hb_object_trace (obj, HB_FUNC);
   if (unlikely (!obj || hb_object_is_inert (obj)))
     return false;
-  assert (hb_object_is_valid (obj));
   if (obj->header.ref_count.dec () != 1)
     return false;
 
@@ -184,7 +174,6 @@ static inline bool hb_object_set_user_data (Type               *obj,
 {
   if (unlikely (!obj || hb_object_is_inert (obj)))
     return false;
-  assert (hb_object_is_valid (obj));
   return obj->header.user_data.set (key, data, destroy, replace);
 }
 
@@ -194,7 +183,6 @@ static inline void *hb_object_get_user_data (Type               *obj,
 {
   if (unlikely (!obj || hb_object_is_inert (obj)))
     return NULL;
-  assert (hb_object_is_valid (obj));
   return obj->header.user_data.get (key);
 }
 
index 5357ddc..178bc7c 100644 (file)
@@ -56,7 +56,7 @@ typedef struct TableRecord
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    return_trace (c->check_struct (this));
+    return TRACE_RETURN (c->check_struct (this));
   }
 
   Tag          tag;            /* 4-byte identifier. */
@@ -106,7 +106,7 @@ typedef struct OffsetTable
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    return_trace (c->check_struct (this) && c->check_array (tables, TableRecord::static_size, numTables));
+    return TRACE_RETURN (c->check_struct (this) && c->check_array (tables, TableRecord::static_size, numTables));
   }
 
   protected:
@@ -135,12 +135,12 @@ struct TTCHeaderVersion1
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    return_trace (table.sanitize (c, this));
+    return TRACE_RETURN (table.sanitize (c, this));
   }
 
   protected:
   Tag          ttcTag;         /* TrueType Collection ID string: 'ttcf' */
-  FixedVersion<>version;       /* Version of the TTC Header (1.0),
+  FixedVersion version;        /* Version of the TTC Header (1.0),
                                 * 0x00010000u */
   ArrayOf<OffsetTo<OffsetTable, ULONG>, ULONG>
                table;          /* Array of offsets to the OffsetTable for each font
@@ -175,11 +175,11 @@ struct TTCHeader
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    if (unlikely (!u.header.version.sanitize (c))) return_trace (false);
+    if (unlikely (!u.header.version.sanitize (c))) return TRACE_RETURN (false);
     switch (u.header.version.major) {
     case 2: /* version 2 is compatible with version 1 */
-    case 1: return_trace (u.version1.sanitize (c));
-    default:return_trace (true);
+    case 1: return TRACE_RETURN (u.version1.sanitize (c));
+    default:return TRACE_RETURN (true);
     }
   }
 
@@ -187,7 +187,7 @@ struct TTCHeader
   union {
   struct {
   Tag          ttcTag;         /* TrueType Collection ID string: 'ttcf' */
-  FixedVersion<>version;       /* Version of the TTC Header (1.0 or 2.0),
+  FixedVersion version;        /* Version of the TTC Header (1.0 or 2.0),
                                 * 0x00010000u or 0x00020000u */
   }                    header;
   TTCHeaderVersion1    version1;
@@ -240,14 +240,14 @@ struct OpenTypeFontFile
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    if (unlikely (!u.tag.sanitize (c))) return_trace (false);
+    if (unlikely (!u.tag.sanitize (c))) return TRACE_RETURN (false);
     switch (u.tag) {
     case CFFTag:       /* All the non-collection tags */
     case TrueTag:
     case Typ1Tag:
-    case TrueTypeTag:  return_trace (u.fontFace.sanitize (c));
-    case TTCTag:       return_trace (u.ttcHeader.sanitize (c));
-    default:           return_trace (true);
+    case TrueTypeTag:  return TRACE_RETURN (u.fontFace.sanitize (c));
+    case TTCTag:       return TRACE_RETURN (u.ttcHeader.sanitize (c));
+    default:           return TRACE_RETURN (true);
     }
   }
 
index df683ca..75a0f56 100644 (file)
@@ -101,8 +101,10 @@ static inline Type& StructAfter(TObject &X)
 #define DEFINE_SIZE_STATIC(size) \
   DEFINE_INSTANCE_ASSERTION (sizeof (*this) == (size)); \
   static const unsigned int static_size = (size); \
-  static const unsigned int min_size = (size); \
-  inline unsigned int get_size (void) const { return (size); }
+  static const unsigned int min_size = (size)
+
+/* Size signifying variable-sized array */
+#define VAR 1
 
 #define DEFINE_SIZE_UNION(size, _member) \
   DEFINE_INSTANCE_ASSERTION (this->u._member.static_size == (size)); \
@@ -152,20 +154,6 @@ ASSERT_STATIC (Type::min_size + 1 <= sizeof (_Null##Type))
 #define Null(Type) Null<Type>()
 
 
-/*
- * Dispatch
- */
-
-template <typename Context, typename Return, unsigned int MaxDebugDepth>
-struct hb_dispatch_context_t
-{
-  static const unsigned int max_debug_depth = MaxDebugDepth;
-  typedef Return return_t;
-  template <typename T, typename F>
-  inline bool may_dispatch (const T *obj, const F *format) { return true; }
-  static return_t no_dispatch_return_value (void) { return Context::default_return_value (); }
-};
-
 
 /*
  * Sanitize
@@ -183,26 +171,20 @@ struct hb_dispatch_context_t
 
 /* This limits sanitizing time on really broken fonts. */
 #ifndef HB_SANITIZE_MAX_EDITS
-#define HB_SANITIZE_MAX_EDITS 32
+#define HB_SANITIZE_MAX_EDITS 100
 #endif
 
-struct hb_sanitize_context_t :
-       hb_dispatch_context_t<hb_sanitize_context_t, bool, HB_DEBUG_SANITIZE>
+struct hb_sanitize_context_t
 {
-  inline hb_sanitize_context_t (void) :
-       debug_depth (0),
-       start (NULL), end (NULL),
-       writable (false), edit_count (0),
-       blob (NULL) {}
-
   inline const char *get_name (void) { return "SANITIZE"; }
+  static const unsigned int max_debug_depth = HB_DEBUG_SANITIZE;
+  typedef bool return_t;
   template <typename T, typename F>
   inline bool may_dispatch (const T *obj, const F *format)
   { return format->sanitize (this); }
   template <typename T>
   inline return_t dispatch (const T &obj) { return obj.sanitize (this); }
   static return_t default_return_value (void) { return true; }
-  static return_t no_dispatch_return_value (void) { return false; }
   bool stop_sublookup_iteration (const return_t r) const { return !r; }
 
   inline void init (hb_blob_t *b)
@@ -313,7 +295,7 @@ template <typename Type>
 struct Sanitizer
 {
   static hb_blob_t *sanitize (hb_blob_t *blob) {
-    hb_sanitize_context_t c[1];
+    hb_sanitize_context_t c[1] = {{0, NULL, NULL, false, 0, NULL}};
     bool sane;
 
     /* TODO is_sane() stuff */
@@ -397,9 +379,9 @@ struct Sanitizer
 
 struct hb_serialize_context_t
 {
-  inline hb_serialize_context_t (void *start_, unsigned int size)
+  inline hb_serialize_context_t (void *start, unsigned int size)
   {
-    this->start = (char *) start_;
+    this->start = (char *) start;
     this->end = this->start + size;
 
     this->ran_out_of_room = false;
@@ -493,10 +475,10 @@ struct hb_serialize_context_t
     return reinterpret_cast<Type *> (&obj);
   }
 
-  inline void truncate (void *new_head)
+  inline void truncate (void *head)
   {
-    assert (this->start < new_head && new_head <= this->head);
-    this->head = (char *) new_head;
+    assert (this->start < head && head <= this->head);
+    this->head = (char *) head;
   }
 
   unsigned int debug_depth;
@@ -554,20 +536,6 @@ struct Supplier
 template <typename Type, int Bytes> struct BEInt;
 
 template <typename Type>
-struct BEInt<Type, 1>
-{
-  public:
-  inline void set (Type V)
-  {
-    v = V;
-  }
-  inline operator Type (void) const
-  {
-    return v;
-  }
-  private: uint8_t v;
-};
-template <typename Type>
 struct BEInt<Type, 2>
 {
   public:
@@ -642,7 +610,7 @@ struct IntType
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    return_trace (likely (c->check_struct (this)));
+    return TRACE_RETURN (likely (c->check_struct (this)));
   }
   protected:
   BEInt<Type, Size> v;
@@ -650,7 +618,7 @@ struct IntType
   DEFINE_SIZE_STATIC (Size);
 };
 
-typedef        IntType<uint8_t , 1> BYTE;      /* 8-bit unsigned integer. */
+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. */
@@ -663,24 +631,6 @@ typedef SHORT FWORD;
 /* 16-bit unsigned integer (USHORT) that describes a quantity in FUnits. */
 typedef USHORT UFWORD;
 
-/* 16-bit signed fixed number with the low 14 bits of fraction (2.14). */
-struct F2DOT14 : SHORT
-{
-  //inline float to_float (void) const { return ???; }
-  //inline void set_float (float f) { v.set (f * ???); }
-  public:
-  DEFINE_SIZE_STATIC (2);
-};
-
-/* 32-bit signed fixed-point number (16.16). */
-struct Fixed: LONG
-{
-  //inline float to_float (void) const { return ???; }
-  //inline void set_float (float f) { v.set (f * ???); }
-  public:
-  DEFINE_SIZE_STATIC (4);
-};
-
 /* Date represented in number of seconds since 12:00 midnight, January 1,
  * 1904. The value is represented as a signed 64-bit integer. */
 struct LONGDATETIME
@@ -688,7 +638,7 @@ struct LONGDATETIME
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    return_trace (likely (c->check_struct (this)));
+    return TRACE_RETURN (likely (c->check_struct (this)));
   }
   protected:
   LONG major;
@@ -758,21 +708,20 @@ struct CheckSum : ULONG
  * Version Numbers
  */
 
-template <typename FixedType=USHORT>
 struct FixedVersion
 {
-  inline uint32_t to_int (void) const { return (major << (sizeof(FixedType) * 8)) + minor; }
+  inline uint32_t to_int (void) const { return (major << 16) + minor; }
 
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    return_trace (c->check_struct (this));
+    return TRACE_RETURN (c->check_struct (this));
   }
 
-  FixedType major;
-  FixedType minor;
+  USHORT major;
+  USHORT minor;
   public:
-  DEFINE_SIZE_STATIC (2 * sizeof(FixedType));
+  DEFINE_SIZE_STATIC (4);
 };
 
 
@@ -802,21 +751,21 @@ struct OffsetTo : Offset<OffsetType>
   inline bool sanitize (hb_sanitize_context_t *c, const void *base) const
   {
     TRACE_SANITIZE (this);
-    if (unlikely (!c->check_struct (this))) return_trace (false);
+    if (unlikely (!c->check_struct (this))) return TRACE_RETURN (false);
     unsigned int offset = *this;
-    if (unlikely (!offset)) return_trace (true);
+    if (unlikely (!offset)) return TRACE_RETURN (true);
     const Type &obj = StructAtOffset<Type> (base, offset);
-    return_trace (likely (obj.sanitize (c)) || neuter (c));
+    return TRACE_RETURN (likely (obj.sanitize (c)) || neuter (c));
   }
   template <typename T>
   inline bool sanitize (hb_sanitize_context_t *c, const void *base, T user_data) const
   {
     TRACE_SANITIZE (this);
-    if (unlikely (!c->check_struct (this))) return_trace (false);
+    if (unlikely (!c->check_struct (this))) return TRACE_RETURN (false);
     unsigned int offset = *this;
-    if (unlikely (!offset)) return_trace (true);
+    if (unlikely (!offset)) return TRACE_RETURN (true);
     const Type &obj = StructAtOffset<Type> (base, offset);
-    return_trace (likely (obj.sanitize (c, user_data)) || neuter (c));
+    return TRACE_RETURN (likely (obj.sanitize (c, user_data)) || neuter (c));
   }
 
   /* Set the offset to Null */
@@ -867,10 +816,10 @@ struct ArrayOf
                         unsigned int items_len)
   {
     TRACE_SERIALIZE (this);
-    if (unlikely (!c->extend_min (*this))) return_trace (false);
+    if (unlikely (!c->extend_min (*this))) return TRACE_RETURN (false);
     len.set (items_len); /* TODO(serialize) Overflow? */
-    if (unlikely (!c->extend (*this))) return_trace (false);
-    return_trace (true);
+    if (unlikely (!c->extend (*this))) return TRACE_RETURN (false);
+    return TRACE_RETURN (true);
   }
 
   inline bool serialize (hb_serialize_context_t *c,
@@ -878,17 +827,17 @@ struct ArrayOf
                         unsigned int items_len)
   {
     TRACE_SERIALIZE (this);
-    if (unlikely (!serialize (c, items_len))) return_trace (false);
+    if (unlikely (!serialize (c, items_len))) return TRACE_RETURN (false);
     for (unsigned int i = 0; i < items_len; i++)
       array[i] = items[i];
     items.advance (items_len);
-    return_trace (true);
+    return TRACE_RETURN (true);
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    if (unlikely (!sanitize_shallow (c))) return_trace (false);
+    if (unlikely (!sanitize_shallow (c))) return TRACE_RETURN (false);
 
     /* Note: for structs that do not reference other structs,
      * we do not need to call their sanitize() as we already did
@@ -899,28 +848,28 @@ struct ArrayOf
      */
     (void) (false && array[0].sanitize (c));
 
-    return_trace (true);
+    return TRACE_RETURN (true);
   }
   inline bool sanitize (hb_sanitize_context_t *c, const void *base) const
   {
     TRACE_SANITIZE (this);
-    if (unlikely (!sanitize_shallow (c))) return_trace (false);
+    if (unlikely (!sanitize_shallow (c))) return TRACE_RETURN (false);
     unsigned int count = len;
     for (unsigned int i = 0; i < count; i++)
       if (unlikely (!array[i].sanitize (c, base)))
-        return_trace (false);
-    return_trace (true);
+        return TRACE_RETURN (false);
+    return TRACE_RETURN (true);
   }
   template <typename T>
   inline bool sanitize (hb_sanitize_context_t *c, const void *base, T user_data) const
   {
     TRACE_SANITIZE (this);
-    if (unlikely (!sanitize_shallow (c))) return_trace (false);
+    if (unlikely (!sanitize_shallow (c))) return TRACE_RETURN (false);
     unsigned int count = len;
     for (unsigned int i = 0; i < count; i++)
       if (unlikely (!array[i].sanitize (c, base, user_data)))
-        return_trace (false);
-    return_trace (true);
+        return TRACE_RETURN (false);
+    return TRACE_RETURN (true);
   }
 
   template <typename SearchType>
@@ -937,7 +886,7 @@ struct ArrayOf
   inline bool sanitize_shallow (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    return_trace (c->check_struct (this) && c->check_array (array, Type::static_size, len));
+    return TRACE_RETURN (c->check_struct (this) && c->check_array (this, Type::static_size, len));
   }
 
   public:
@@ -964,13 +913,13 @@ struct OffsetListOf : OffsetArrayOf<Type>
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    return_trace (OffsetArrayOf<Type>::sanitize (c, this));
+    return TRACE_RETURN (OffsetArrayOf<Type>::sanitize (c, this));
   }
   template <typename T>
   inline bool sanitize (hb_sanitize_context_t *c, T user_data) const
   {
     TRACE_SANITIZE (this);
-    return_trace (OffsetArrayOf<Type>::sanitize (c, this, user_data));
+    return TRACE_RETURN (OffsetArrayOf<Type>::sanitize (c, this, user_data));
   }
 };
 
@@ -992,14 +941,14 @@ struct HeadlessArrayOf
                         unsigned int items_len)
   {
     TRACE_SERIALIZE (this);
-    if (unlikely (!c->extend_min (*this))) return_trace (false);
+    if (unlikely (!c->extend_min (*this))) return TRACE_RETURN (false);
     len.set (items_len); /* TODO(serialize) Overflow? */
-    if (unlikely (!items_len)) return_trace (true);
-    if (unlikely (!c->extend (*this))) return_trace (false);
+    if (unlikely (!items_len)) return TRACE_RETURN (true);
+    if (unlikely (!c->extend (*this))) return TRACE_RETURN (false);
     for (unsigned int i = 0; i < items_len - 1; i++)
       array[i] = items[i];
     items.advance (items_len - 1);
-    return_trace (true);
+    return TRACE_RETURN (true);
   }
 
   inline bool sanitize_shallow (hb_sanitize_context_t *c) const
@@ -1011,7 +960,7 @@ struct HeadlessArrayOf
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    if (unlikely (!sanitize_shallow (c))) return_trace (false);
+    if (unlikely (!sanitize_shallow (c))) return TRACE_RETURN (false);
 
     /* Note: for structs that do not reference other structs,
      * we do not need to call their sanitize() as we already did
@@ -1022,7 +971,7 @@ struct HeadlessArrayOf
      */
     (void) (false && array[0].sanitize (c));
 
-    return_trace (true);
+    return TRACE_RETURN (true);
   }
 
   LenType len;
index d7a94a1..0482312 100644 (file)
@@ -54,7 +54,7 @@ struct CmapSubtableFormat0
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    return_trace (c->check_struct (this));
+    return TRACE_RETURN (c->check_struct (this));
   }
 
   protected:
@@ -69,85 +69,68 @@ struct CmapSubtableFormat0
 
 struct CmapSubtableFormat4
 {
-  struct accelerator_t
+  inline bool get_glyph (hb_codepoint_t codepoint, hb_codepoint_t *glyph) const
   {
-    inline void init (const CmapSubtableFormat4 *subtable)
-    {
-      segCount = subtable->segCountX2 / 2;
-      endCount = subtable->values;
-      startCount = endCount + segCount + 1;
-      idDelta = startCount + segCount;
-      idRangeOffset = idDelta + segCount;
-      glyphIdArray = idRangeOffset + segCount;
-      glyphIdArrayLength = (subtable->length - 16 - 8 * segCount) / 2;
-    }
-
-    static inline bool get_glyph_func (const void *obj, hb_codepoint_t codepoint, hb_codepoint_t *glyph)
-    {
-      const accelerator_t *thiz = (const accelerator_t *) obj;
-
-      /* Custom two-array bsearch. */
-      int min = 0, max = (int) thiz->segCount - 1;
-      const USHORT *startCount = thiz->startCount;
-      const USHORT *endCount = thiz->endCount;
-      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 = thiz->idRangeOffset[i];
-      if (rangeOffset == 0)
-       gid = codepoint + thiz->idDelta[i];
-      else
-      {
-       /* Somebody has been smoking... */
-       unsigned int index = rangeOffset / 2 + (codepoint - thiz->startCount[i]) + i - thiz->segCount;
-       if (unlikely (index >= thiz->glyphIdArrayLength))
-         return false;
-       gid = thiz->glyphIdArray[index];
-       if (unlikely (!gid))
-         return false;
-       gid += thiz->idDelta[i];
-      }
-
-      *glyph = gid & 0xFFFFu;
-      return true;
-    }
-
+    unsigned int segCount;
     const USHORT *endCount;
     const USHORT *startCount;
     const USHORT *idDelta;
     const USHORT *idRangeOffset;
     const USHORT *glyphIdArray;
-    unsigned int segCount;
     unsigned int glyphIdArrayLength;
-  };
 
-  inline bool get_glyph (hb_codepoint_t codepoint, hb_codepoint_t *glyph) const
-  {
-    accelerator_t accel;
-    accel.init (this);
-    return accel.get_glyph_func (&accel, codepoint, glyph);
+    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) const
   {
     TRACE_SANITIZE (this);
     if (unlikely (!c->check_struct (this)))
-      return_trace (false);
+      return TRACE_RETURN (false);
 
     if (unlikely (!c->check_range (this, length)))
     {
@@ -158,10 +141,10 @@ struct CmapSubtableFormat4
                                            (uintptr_t) (c->end -
                                                         (char *) this));
       if (!c->try_set (&length, new_length))
-       return_trace (false);
+       return TRACE_RETURN (false);
     }
 
-    return_trace (16 + 4 * (unsigned int) segCountX2 <= length);
+    return TRACE_RETURN (16 + 4 * (unsigned int) segCountX2 <= length);
   }
 
   protected:
@@ -204,7 +187,7 @@ struct CmapSubtableLongGroup
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    return_trace (c->check_struct (this));
+    return TRACE_RETURN (c->check_struct (this));
   }
 
   private:
@@ -232,7 +215,7 @@ struct CmapSubtableTrimmed
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    return_trace (c->check_struct (this) && glyphIdArray.sanitize (c));
+    return TRACE_RETURN (c->check_struct (this) && glyphIdArray.sanitize (c));
   }
 
   protected:
@@ -265,7 +248,7 @@ struct CmapSubtableLongSegmented
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    return_trace (c->check_struct (this) && groups.sanitize (c));
+    return TRACE_RETURN (c->check_struct (this) && groups.sanitize (c));
   }
 
   protected:
@@ -312,7 +295,7 @@ struct UnicodeValueRange
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    return_trace (c->check_struct (this));
+    return TRACE_RETURN (c->check_struct (this));
   }
 
   UINT24       startUnicodeValue;      /* First value in this range. */
@@ -334,7 +317,7 @@ struct UVSMapping
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    return_trace (c->check_struct (this));
+    return TRACE_RETURN (c->check_struct (this));
   }
 
   UINT24       unicodeValue;   /* Base Unicode value of the UVS */
@@ -374,9 +357,9 @@ struct VariationSelectorRecord
   inline bool sanitize (hb_sanitize_context_t *c, const void *base) const
   {
     TRACE_SANITIZE (this);
-    return_trace (c->check_struct (this) &&
-                 defaultUVS.sanitize (c, base) &&
-                 nonDefaultUVS.sanitize (c, base));
+    return TRACE_RETURN (c->check_struct (this) &&
+                        defaultUVS.sanitize (c, base) &&
+                        nonDefaultUVS.sanitize (c, base));
   }
 
   UINT24       varSelector;    /* Variation selector. */
@@ -400,12 +383,12 @@ struct CmapSubtableFormat14
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    return_trace (c->check_struct (this) &&
-                 record.sanitize (c, this));
+    return TRACE_RETURN (c->check_struct (this) &&
+                        record.sanitize (c, this));
   }
 
   protected:
-  USHORT       format;         /* Format number is set to 14. */
+  USHORT       format;         /* Format number is set to 0. */
   ULONG                lengthZ;        /* Byte length of this subtable. */
   SortedArrayOf<VariationSelectorRecord, ULONG>
                record;         /* Variation selector records; sorted
@@ -433,23 +416,33 @@ struct CmapSubtable
     }
   }
 
+  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) const
   {
     TRACE_SANITIZE (this);
-    if (!u.format.sanitize (c)) return_trace (false);
+    if (!u.format.sanitize (c)) return TRACE_RETURN (false);
     switch (u.format) {
-    case  0: return_trace (u.format0 .sanitize (c));
-    case  4: return_trace (u.format4 .sanitize (c));
-    case  6: return_trace (u.format6 .sanitize (c));
-    case 10: return_trace (u.format10.sanitize (c));
-    case 12: return_trace (u.format12.sanitize (c));
-    case 13: return_trace (u.format13.sanitize (c));
-    case 14: return_trace (u.format14.sanitize (c));
-    default:return_trace (true);
+    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);
     }
   }
 
-  public:
+  protected:
   union {
   USHORT               format;         /* Format identifier */
   CmapSubtableFormat0  format0;
@@ -480,8 +473,8 @@ struct EncodingRecord
   inline bool sanitize (hb_sanitize_context_t *c, const void *base) const
   {
     TRACE_SANITIZE (this);
-    return_trace (c->check_struct (this) &&
-                 subtable.sanitize (c, base));
+    return TRACE_RETURN (c->check_struct (this) &&
+                        subtable.sanitize (c, base));
   }
 
   USHORT       platformID;     /* Platform ID. */
@@ -516,9 +509,9 @@ struct cmap
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    return_trace (c->check_struct (this) &&
-                 likely (version == 0) &&
-                 encodingRecord.sanitize (c, this));
+    return TRACE_RETURN (c->check_struct (this) &&
+                        likely (version == 0) &&
+                        encodingRecord.sanitize (c, this));
   }
 
   USHORT               version;        /* Table version number (0). */
index 39fc849..2af2f54 100644 (file)
 #include "hb-font-private.hh"
 
 #include "hb-ot-cmap-table.hh"
-#include "hb-ot-glyf-table.hh"
-#include "hb-ot-head-table.hh"
 #include "hb-ot-hhea-table.hh"
 #include "hb-ot-hmtx-table.hh"
-#include "hb-ot-os2-table.hh"
-//#include "hb-ot-post-table.hh"
 
 
 struct hb_ot_face_metrics_accelerator_t
@@ -44,58 +40,24 @@ struct hb_ot_face_metrics_accelerator_t
   unsigned int num_metrics;
   unsigned int num_advances;
   unsigned int default_advance;
-  unsigned short ascender;
-  unsigned short descender;
-  unsigned short line_gap;
-
   const OT::_mtx *table;
   hb_blob_t *blob;
 
   inline void init (hb_face_t *face,
-                   hb_tag_t _hea_tag,
-                   hb_tag_t _mtx_tag,
-                   hb_tag_t os2_tag)
+                   hb_tag_t _hea_tag, hb_tag_t _mtx_tag,
+                   unsigned int default_advance)
   {
-    this->default_advance = face->get_upem ();
-
-    bool got_font_extents = false;
-    if (os2_tag)
-    {
-      hb_blob_t *os2_blob = OT::Sanitizer<OT::os2>::sanitize (face->reference_table (os2_tag));
-      const OT::os2 *os2 = OT::Sanitizer<OT::os2>::lock_instance (os2_blob);
-#define USE_TYPO_METRICS (1u<<7)
-      if (0 != (os2->fsSelection & USE_TYPO_METRICS))
-      {
-       this->ascender = os2->sTypoAscender;
-       this->descender = os2->sTypoDescender;
-       this->line_gap = os2->sTypoLineGap;
-       got_font_extents = (this->ascender | this->descender) != 0;
-      }
-      hb_blob_destroy (os2_blob);
-    }
+    this->default_advance = default_advance;
+    this->num_metrics = face->get_num_glyphs ();
 
     hb_blob_t *_hea_blob = OT::Sanitizer<OT::_hea>::sanitize (face->reference_table (_hea_tag));
     const OT::_hea *_hea = OT::Sanitizer<OT::_hea>::lock_instance (_hea_blob);
     this->num_advances = _hea->numberOfLongMetrics;
-    if (!got_font_extents)
-    {
-      this->ascender = _hea->ascender;
-      this->descender = _hea->descender;
-      this->line_gap = _hea->lineGap;
-    }
     hb_blob_destroy (_hea_blob);
 
     this->blob = OT::Sanitizer<OT::_mtx>::sanitize (face->reference_table (_mtx_tag));
-
-    /* Cap num_metrics() and num_advances() based on table length. */
-    unsigned int len = hb_blob_get_length (this->blob);
-    if (unlikely (this->num_advances * 4 > len))
-      this->num_advances = len / 4;
-    this->num_metrics = this->num_advances + (len - 4 * this->num_advances) / 2;
-
-    /* We MUST set num_metrics to zero if num_advances is zero.
-     * Our get_advance() depends on that. */
-    if (unlikely (!this->num_advances))
+    if (unlikely (!this->num_advances ||
+                 2 * (this->num_advances + this->num_metrics) < hb_blob_get_length (this->blob)))
     {
       this->num_metrics = this->num_advances = 0;
       hb_blob_destroy (this->blob);
@@ -114,8 +76,8 @@ struct hb_ot_face_metrics_accelerator_t
     if (unlikely (glyph >= this->num_metrics))
     {
       /* If this->num_metrics is zero, it means we don't have the metrics table
-       * for this direction: return default advance.  Otherwise, it means that the
-       * glyph index is out of bound: return zero. */
+       * for this direction: return one EM.  Otherwise, it means that the glyph
+       * index is out of bound: return zero. */
       if (this->num_metrics)
        return 0;
       else
@@ -129,99 +91,10 @@ struct hb_ot_face_metrics_accelerator_t
   }
 };
 
-struct hb_ot_face_glyf_accelerator_t
-{
-  bool short_offset;
-  unsigned int num_glyphs;
-  const OT::loca *loca;
-  const OT::glyf *glyf;
-  hb_blob_t *loca_blob;
-  hb_blob_t *glyf_blob;
-  unsigned int glyf_len;
-
-  inline void init (hb_face_t *face)
-  {
-    hb_blob_t *head_blob = OT::Sanitizer<OT::head>::sanitize (face->reference_table (HB_OT_TAG_head));
-    const OT::head *head = OT::Sanitizer<OT::head>::lock_instance (head_blob);
-    if ((unsigned int) head->indexToLocFormat > 1 || head->glyphDataFormat != 0)
-    {
-      /* Unknown format.  Leave num_glyphs=0, that takes care of disabling us. */
-      hb_blob_destroy (head_blob);
-      return;
-    }
-    this->short_offset = 0 == head->indexToLocFormat;
-    hb_blob_destroy (head_blob);
-
-    this->loca_blob = OT::Sanitizer<OT::loca>::sanitize (face->reference_table (HB_OT_TAG_loca));
-    this->loca = OT::Sanitizer<OT::loca>::lock_instance (this->loca_blob);
-    this->glyf_blob = OT::Sanitizer<OT::glyf>::sanitize (face->reference_table (HB_OT_TAG_glyf));
-    this->glyf = OT::Sanitizer<OT::glyf>::lock_instance (this->glyf_blob);
-
-    this->num_glyphs = MAX (1u, hb_blob_get_length (this->loca_blob) / (this->short_offset ? 2 : 4)) - 1;
-    this->glyf_len = hb_blob_get_length (this->glyf_blob);
-  }
-
-  inline void fini (void)
-  {
-    hb_blob_destroy (this->loca_blob);
-    hb_blob_destroy (this->glyf_blob);
-  }
-
-  inline bool get_extents (hb_codepoint_t glyph,
-                          hb_glyph_extents_t *extents) const
-  {
-    if (unlikely (glyph >= this->num_glyphs))
-      return false;
-
-    unsigned int start_offset, end_offset;
-    if (this->short_offset)
-    {
-      start_offset = 2 * this->loca->u.shortsZ[glyph];
-      end_offset   = 2 * this->loca->u.shortsZ[glyph + 1];
-    }
-    else
-    {
-      start_offset = this->loca->u.longsZ[glyph];
-      end_offset   = this->loca->u.longsZ[glyph + 1];
-    }
-
-    if (start_offset > end_offset || end_offset > this->glyf_len)
-      return false;
-
-    if (end_offset - start_offset < OT::glyfGlyphHeader::static_size)
-      return true; /* Empty glyph; zero extents. */
-
-    const OT::glyfGlyphHeader &glyph_header = OT::StructAtOffset<OT::glyfGlyphHeader> (this->glyf, start_offset);
-
-    extents->x_bearing = MIN (glyph_header.xMin, glyph_header.xMax);
-    extents->y_bearing = MAX (glyph_header.yMin, glyph_header.yMax);
-    extents->width     = MAX (glyph_header.xMin, glyph_header.xMax) - extents->x_bearing;
-    extents->height    = MIN (glyph_header.yMin, glyph_header.yMax) - extents->y_bearing;
-
-    return true;
-  }
-};
-
-typedef bool (*hb_cmap_get_glyph_func_t) (const void *obj,
-                                         hb_codepoint_t codepoint,
-                                         hb_codepoint_t *glyph);
-
-template <typename Type>
-static inline bool get_glyph_from (const void *obj,
-                                  hb_codepoint_t codepoint,
-                                  hb_codepoint_t *glyph)
-{
-  const Type *typed_obj = (const Type *) obj;
-  return typed_obj->get_glyph (codepoint, glyph);
-}
-
 struct hb_ot_face_cmap_accelerator_t
 {
-  hb_cmap_get_glyph_func_t get_glyph_func;
-  const void *get_glyph_data;
-  OT::CmapSubtableFormat4::accelerator_t format4_accel;
-
-  const OT::CmapSubtableFormat14 *uvs_table;
+  const OT::CmapSubtable *table;
+  const OT::CmapSubtable *uvs_table;
   hb_blob_t *blob;
 
   inline void init (hb_face_t *face)
@@ -229,7 +102,7 @@ struct hb_ot_face_cmap_accelerator_t
     this->blob = OT::Sanitizer<OT::cmap>::sanitize (face->reference_table (HB_OT_TAG_cmap));
     const OT::cmap *cmap = OT::Sanitizer<OT::cmap>::lock_instance (this->blob);
     const OT::CmapSubtable *subtable = NULL;
-    const OT::CmapSubtableFormat14 *subtable_uvs = NULL;
+    const OT::CmapSubtable *subtable_uvs = NULL;
 
     /* 32-bit subtables. */
     if (!subtable) subtable = cmap->find_subtable (3, 10);
@@ -241,35 +114,16 @@ struct hb_ot_face_cmap_accelerator_t
     if (!subtable) subtable = cmap->find_subtable (0, 2);
     if (!subtable) subtable = cmap->find_subtable (0, 1);
     if (!subtable) subtable = cmap->find_subtable (0, 0);
-    if (!subtable) subtable = cmap->find_subtable (3, 0);
     /* Meh. */
     if (!subtable) subtable = &OT::Null(OT::CmapSubtable);
 
     /* UVS subtable. */
-    if (!subtable_uvs)
-    {
-      const OT::CmapSubtable *st = cmap->find_subtable (0, 5);
-      if (st && st->u.format == 14)
-        subtable_uvs = &st->u.format14;
-    }
+    if (!subtable_uvs) subtable_uvs = cmap->find_subtable (0, 5);
     /* Meh. */
-    if (!subtable_uvs) subtable_uvs = &OT::Null(OT::CmapSubtableFormat14);
+    if (!subtable_uvs) subtable_uvs = &OT::Null(OT::CmapSubtable);
 
+    this->table = subtable;
     this->uvs_table = subtable_uvs;
-
-    this->get_glyph_data = subtable;
-    switch (subtable->u.format) {
-    /* Accelerate format 4 and format 12. */
-    default: this->get_glyph_func = get_glyph_from<OT::CmapSubtable>;          break;
-    case 12: this->get_glyph_func = get_glyph_from<OT::CmapSubtableFormat12>;  break;
-    case  4:
-      {
-        this->format4_accel.init (&subtable->u.format4);
-       this->get_glyph_data = &this->format4_accel;
-        this->get_glyph_func = this->format4_accel.get_glyph_func;
-      }
-      break;
-    }
   }
 
   inline void fini (void)
@@ -277,92 +131,49 @@ struct hb_ot_face_cmap_accelerator_t
     hb_blob_destroy (this->blob);
   }
 
-  inline bool get_nominal_glyph (hb_codepoint_t  unicode,
-                                hb_codepoint_t *glyph) const
-  {
-    return this->get_glyph_func (this->get_glyph_data, unicode, glyph);
-  }
-
-  inline bool get_variation_glyph (hb_codepoint_t  unicode,
-                                  hb_codepoint_t  variation_selector,
-                                  hb_codepoint_t *glyph) const
-  {
-    switch (this->uvs_table->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 get_nominal_glyph (unicode, glyph);
-  }
-};
-
-template <typename T>
-struct hb_lazy_loader_t
-{
-  inline void init (hb_face_t *face_)
-  {
-    face = face_;
-    instance = NULL;
-  }
-
-  inline void fini (void)
-  {
-    if (instance && instance != &OT::Null(T))
-    {
-      instance->fini();
-      free (instance);
-    }
-  }
-
-  inline const T* operator-> (void) const
+  inline bool get_glyph (hb_codepoint_t  unicode,
+                        hb_codepoint_t  variation_selector,
+                        hb_codepoint_t *glyph) const
   {
-  retry:
-    T *p = (T *) hb_atomic_ptr_get (&instance);
-    if (unlikely (!p))
+    if (unlikely (variation_selector))
     {
-      p = (T *) calloc (1, sizeof (T));
-      if (unlikely (!p))
-        return &OT::Null(T);
-      p->init (face);
-      if (unlikely (!hb_atomic_ptr_cmpexch (const_cast<T **>(&instance), NULL, p)))
+      switch (this->uvs_table->get_glyph_variant (unicode,
+                                                 variation_selector,
+                                                 glyph))
       {
-       p->fini ();
-       goto retry;
+       case OT::GLYPH_VARIANT_NOT_FOUND:       return false;
+       case OT::GLYPH_VARIANT_FOUND:           return true;
+       case OT::GLYPH_VARIANT_USE_DEFAULT:     break;
       }
     }
-    return p;
-  }
 
-  private:
-  hb_face_t *face;
-  T *instance;
+    return this->table->get_glyph (unicode, glyph);
+  }
 };
 
+
 struct hb_ot_font_t
 {
   hb_ot_face_cmap_accelerator_t cmap;
   hb_ot_face_metrics_accelerator_t h_metrics;
   hb_ot_face_metrics_accelerator_t v_metrics;
-  hb_lazy_loader_t<hb_ot_face_glyf_accelerator_t> glyf;
 };
 
 
 static hb_ot_font_t *
-_hb_ot_font_create (hb_face_t *face)
+_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));
+  hb_face_t *face = font->face;
 
   if (unlikely (!ot_font))
     return NULL;
 
+  unsigned int upem = face->get_upem ();
+
   ot_font->cmap.init (face);
-  ot_font->h_metrics.init (face, HB_OT_TAG_hhea, HB_OT_TAG_hmtx, HB_OT_TAG_os2);
-  ot_font->v_metrics.init (face, HB_OT_TAG_vhea, HB_OT_TAG_vmtx, HB_TAG_NONE); /* TODO Can we do this lazily? */
-  ot_font->glyf.init (face);
+  ot_font->h_metrics.init (face, HB_OT_TAG_hhea, HB_OT_TAG_hmtx, upem>>1);
+  ot_font->v_metrics.init (face, HB_OT_TAG_vhea, HB_OT_TAG_vmtx, upem); /* TODO Can we do this lazily? */
 
   return ot_font;
 }
@@ -373,54 +184,88 @@ _hb_ot_font_destroy (hb_ot_font_t *ot_font)
   ot_font->cmap.fini ();
   ot_font->h_metrics.fini ();
   ot_font->v_metrics.fini ();
-  ot_font->glyf.fini ();
 
   free (ot_font);
 }
 
 
 static hb_bool_t
-hb_ot_get_nominal_glyph (hb_font_t *font HB_UNUSED,
-                        void *font_data,
-                        hb_codepoint_t unicode,
-                        hb_codepoint_t *glyph,
-                        void *user_data HB_UNUSED)
+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;
-  return ot_font->cmap.get_nominal_glyph (unicode, glyph);
+  return ot_font->cmap.get_glyph (unicode, variation_selector, glyph);
 }
 
-static hb_bool_t
-hb_ot_get_variation_glyph (hb_font_t *font HB_UNUSED,
+static hb_position_t
+hb_ot_get_glyph_h_advance (hb_font_t *font HB_UNUSED,
                           void *font_data,
-                          hb_codepoint_t unicode,
-                          hb_codepoint_t variation_selector,
-                          hb_codepoint_t *glyph,
+                          hb_codepoint_t glyph,
                           void *user_data HB_UNUSED)
 {
   const hb_ot_font_t *ot_font = (const hb_ot_font_t *) font_data;
-  return ot_font->cmap.get_variation_glyph (unicode, variation_selector, glyph);
+  return font->em_scale_x (ot_font->h_metrics.get_advance (glyph));
 }
 
 static hb_position_t
-hb_ot_get_glyph_h_advance (hb_font_t *font HB_UNUSED,
+hb_ot_get_glyph_v_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;
-  return font->em_scale_x (ot_font->h_metrics.get_advance (glyph));
+  return font->em_scale_y (-ot_font->v_metrics.get_advance (glyph));
+}
+
+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_v_advance (hb_font_t *font HB_UNUSED,
+hb_ot_get_glyph_h_kerning (hb_font_t *font,
                           void *font_data,
-                          hb_codepoint_t glyph,
+                          hb_codepoint_t left_glyph,
+                          hb_codepoint_t right_glyph,
                           void *user_data HB_UNUSED)
 {
-  const hb_ot_font_t *ot_font = (const hb_ot_font_t *) font_data;
-  return font->em_scale_y (-(int) ot_font->v_metrics.get_advance (glyph));
+  /* 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)
+{
+  /* OpenType doesn't have vertical-kerning other than GPOS. */
+  return 0;
 }
 
 static hb_bool_t
@@ -430,101 +275,69 @@ hb_ot_get_glyph_extents (hb_font_t *font HB_UNUSED,
                         hb_glyph_extents_t *extents,
                         void *user_data HB_UNUSED)
 {
-  const hb_ot_font_t *ot_font = (const hb_ot_font_t *) font_data;
-  bool ret = ot_font->glyf->get_extents (glyph, extents);
-  extents->x_bearing = font->em_scale_x (extents->x_bearing);
-  extents->y_bearing = font->em_scale_y (extents->y_bearing);
-  extents->width     = font->em_scale_x (extents->width);
-  extents->height    = font->em_scale_y (extents->height);
-  return ret;
+  /* TODO */
+  return false;
 }
 
 static hb_bool_t
-hb_ot_get_font_h_extents (hb_font_t *font HB_UNUSED,
-                         void *font_data,
-                         hb_font_extents_t *metrics,
-                         void *user_data HB_UNUSED)
+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)
 {
-  const hb_ot_font_t *ot_font = (const hb_ot_font_t *) font_data;
-  metrics->ascender = font->em_scale_y (ot_font->h_metrics.ascender);
-  metrics->descender = font->em_scale_y (ot_font->h_metrics.descender);
-  metrics->line_gap = font->em_scale_y (ot_font->h_metrics.line_gap);
-  return true;
+  /* TODO */
+  return false;
 }
 
 static hb_bool_t
-hb_ot_get_font_v_extents (hb_font_t *font HB_UNUSED,
-                         void *font_data,
-                         hb_font_extents_t *metrics,
-                         void *user_data HB_UNUSED)
+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)
 {
-  const hb_ot_font_t *ot_font = (const hb_ot_font_t *) font_data;
-  metrics->ascender = font->em_scale_x (ot_font->v_metrics.ascender);
-  metrics->descender = font->em_scale_x (ot_font->v_metrics.descender);
-  metrics->line_gap = font->em_scale_x (ot_font->v_metrics.line_gap);
-  return true;
+  /* TODO */
+  return false;
 }
 
-static hb_font_funcs_t *static_ot_funcs = NULL;
-
-#ifdef HB_USE_ATEXIT
-static
-void free_static_ot_funcs (void)
+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)
 {
-  hb_font_funcs_destroy (static_ot_funcs);
+  /* TODO */
+  return false;
 }
-#endif
+
 
 static hb_font_funcs_t *
 _hb_ot_get_font_funcs (void)
 {
-retry:
-  hb_font_funcs_t *funcs = (hb_font_funcs_t *) hb_atomic_ptr_get (&static_ot_funcs);
+  static const hb_font_funcs_t ot_ffuncs = {
+    HB_OBJECT_HEADER_STATIC,
 
-  if (unlikely (!funcs))
-  {
-    funcs = hb_font_funcs_create ();
-
-    hb_font_funcs_set_font_h_extents_func (funcs, hb_ot_get_font_h_extents, NULL, NULL);
-    hb_font_funcs_set_font_v_extents_func (funcs, hb_ot_get_font_v_extents, NULL, NULL);
-    hb_font_funcs_set_nominal_glyph_func (funcs, hb_ot_get_nominal_glyph, NULL, NULL);
-    hb_font_funcs_set_variation_glyph_func (funcs, hb_ot_get_variation_glyph, NULL, NULL);
-    hb_font_funcs_set_glyph_h_advance_func (funcs, hb_ot_get_glyph_h_advance, NULL, NULL);
-    hb_font_funcs_set_glyph_v_advance_func (funcs, hb_ot_get_glyph_v_advance, NULL, NULL);
-    //hb_font_funcs_set_glyph_h_origin_func (funcs, hb_ot_get_glyph_h_origin, NULL, NULL);
-    //hb_font_funcs_set_glyph_v_origin_func (funcs, hb_ot_get_glyph_v_origin, NULL, NULL);
-    //hb_font_funcs_set_glyph_h_kerning_func (funcs, hb_ot_get_glyph_h_kerning, NULL, NULL); TODO
-    //hb_font_funcs_set_glyph_v_kerning_func (funcs, hb_ot_get_glyph_v_kerning, NULL, NULL);
-    hb_font_funcs_set_glyph_extents_func (funcs, hb_ot_get_glyph_extents, NULL, NULL);
-    //hb_font_funcs_set_glyph_contour_point_func (funcs, hb_ot_get_glyph_contour_point, NULL, NULL); TODO
-    //hb_font_funcs_set_glyph_name_func (funcs, hb_ot_get_glyph_name, NULL, NULL); TODO
-    //hb_font_funcs_set_glyph_from_name_func (funcs, hb_ot_get_glyph_from_name, NULL, NULL); TODO
-
-    hb_font_funcs_make_immutable (funcs);
-
-    if (!hb_atomic_ptr_cmpexch (&static_ot_funcs, NULL, funcs)) {
-      hb_font_funcs_destroy (funcs);
-      goto retry;
-    }
+    true, /* immutable */
 
-#ifdef HB_USE_ATEXIT
-    atexit (free_static_ot_funcs); /* First person registers atexit() callback. */
-#endif
+    {
+#define HB_FONT_FUNC_IMPLEMENT(name) hb_ot_get_##name,
+      HB_FONT_FUNCS_IMPLEMENT_CALLBACKS
+#undef HB_FONT_FUNC_IMPLEMENT
+    }
   };
 
-  return funcs;
+  return const_cast<hb_font_funcs_t *> (&ot_ffuncs);
 }
 
 
-/**
- * hb_ot_font_set_funcs:
- *
- * Since: 0.9.28
- **/
 void
 hb_ot_font_set_funcs (hb_font_t *font)
 {
-  hb_ot_font_t *ot_font = _hb_ot_font_create (font->face);
+  hb_ot_font_t *ot_font = _hb_ot_font_create (font);
   if (unlikely (!ot_font))
     return;
 
index 80eaa54..7a8c04a 100644 (file)
  * Google Author(s): Behdad Esfahbod, Roozbeh Pournader
  */
 
-#ifndef HB_OT_H_IN
-#error "Include <hb-ot.h> instead."
-#endif
-
 #ifndef HB_OT_FONT_H
 #define HB_OT_FONT_H
 
@@ -36,7 +32,7 @@
 HB_BEGIN_DECLS
 
 
-HB_EXTERN void
+void
 hb_ot_font_set_funcs (hb_font_t *font);
 
 
diff --git a/src/hb-ot-glyf-table.hh b/src/hb-ot-glyf-table.hh
deleted file mode 100644 (file)
index dc7aa84..0000000
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Copyright © 2015  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_GLYF_TABLE_HH
-#define HB_OT_GLYF_TABLE_HH
-
-#include "hb-open-type-private.hh"
-
-
-namespace OT {
-
-
-/*
- * loca -- Index to Location
- */
-
-#define HB_OT_TAG_loca HB_TAG('l','o','c','a')
-
-
-struct loca
-{
-  static const hb_tag_t tableTag = HB_OT_TAG_loca;
-
-  inline bool sanitize (hb_sanitize_context_t *c) const
-  {
-    TRACE_SANITIZE (this);
-    return_trace (true);
-  }
-
-  public:
-  union {
-    USHORT     shortsZ[VAR];           /* Location offset divided by 2. */
-    ULONG      longsZ[VAR];            /* Location offset. */
-  } u;
-  DEFINE_SIZE_ARRAY (0, u.longsZ);
-};
-
-
-/*
- * glyf -- TrueType Glyph Data
- */
-
-#define HB_OT_TAG_glyf HB_TAG('g','l','y','f')
-
-
-struct glyf
-{
-  static const hb_tag_t tableTag = HB_OT_TAG_glyf;
-
-  inline bool sanitize (hb_sanitize_context_t *c) const
-  {
-    TRACE_SANITIZE (this);
-    /* We don't check for anything specific here.  The users of the
-     * struct do all the hard work... */
-    return_trace (true);
-  }
-
-  public:
-  BYTE         dataX[VAR];             /* Glyphs data. */
-
-  DEFINE_SIZE_ARRAY (0, dataX);
-};
-
-struct glyfGlyphHeader
-{
-  SHORT                numberOfContours;       /* If the number of contours is
-                                        * greater than or equal to zero,
-                                        * this is a simple glyph; if negative,
-                                        * this is a composite glyph. */
-  FWORD                xMin;                   /* Minimum x for coordinate data. */
-  FWORD                yMin;                   /* Minimum y for coordinate data. */
-  FWORD                xMax;                   /* Maximum x for coordinate data. */
-  FWORD                yMax;                   /* Maximum y for coordinate data. */
-
-  DEFINE_SIZE_STATIC (10);
-};
-
-} /* namespace OT */
-
-
-#endif /* HB_OT_GLYF_TABLE_HH */
index 9c3e51e..268f133 100644 (file)
@@ -55,15 +55,13 @@ struct head
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    return_trace (c->check_struct (this) &&
-                 version.major == 1 &&
-                 magicNumber == 0x5F0F3CF5u);
+    return TRACE_RETURN (c->check_struct (this) && likely (version.major == 1));
   }
 
   protected:
-  FixedVersion<>version;               /* Version of the head table--currently
+  FixedVersion version;                /* Version of the head table--currently
                                         * 0x00010000u for version 1.0. */
-  FixedVersion<>fontRevision;          /* Set by font manufacturer. */
+  FixedVersion fontRevision;           /* Set by font manufacturer. */
   ULONG                checkSumAdjustment;     /* To compute: set it to 0, sum the
                                         * entire font as ULONG, then store
                                         * 0xB1B0AFBAu - sum. */
@@ -140,10 +138,9 @@ struct head
                                         * 2: Like 1 but also contains neutrals;
                                         * -1: Only strongly right to left;
                                         * -2: Like -1 but also contains neutrals. */
-  public:
   SHORT                indexToLocFormat;       /* 0 for short offsets, 1 for long. */
   SHORT                glyphDataFormat;        /* 0 for current format. */
-
+  public:
   DEFINE_SIZE_STATIC (54);
 };
 
index c8e9536..992fe55 100644 (file)
@@ -52,11 +52,11 @@ struct _hea
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    return_trace (c->check_struct (this) && likely (version.major == 1));
+    return TRACE_RETURN (c->check_struct (this) && likely (version.major == 1));
   }
 
   public:
-  FixedVersion<>version;               /* 0x00010000u for version 1.0. */
+  FixedVersion version;                /* 0x00010000u for version 1.0. */
   FWORD                ascender;               /* Typographic ascent. */
   FWORD                descender;              /* Typographic descent. */
   FWORD                lineGap;                /* Typographic line gap. */
index a9606b3..a0e3855 100644 (file)
@@ -44,8 +44,8 @@ namespace OT {
 
 struct LongMetric
 {
-  UFWORD       advance; /* Advance width/height. */
-  FWORD                lsb; /* Leading (left/top) side bearing. */
+  USHORT       advance; /* Advance width/height. */
+  SHORT                lsb; /* Leading (left/top) side bearing. */
   public:
   DEFINE_SIZE_STATIC (4);
 };
@@ -62,7 +62,7 @@ struct _mtx
     TRACE_SANITIZE (this);
     /* We don't check for anything specific here.  The users of the
      * struct do all the hard work... */
-    return_trace (true);
+    return TRACE_RETURN (true);
   }
 
   public:
@@ -74,7 +74,7 @@ struct _mtx
                                         * be in the array, but that entry is
                                         * required. The last entry applies to
                                         * all subsequent glyphs. */
-  FWORD                leadingBearingX[VAR];   /* Here the advance is assumed
+  SHORT                leadingBearingX[VAR];   /* Here the advance is assumed
                                         * to be the same as the advance
                                         * for the last entry above. The
                                         * number of entries in this array is
index 34fa1b7..3db7f57 100644 (file)
 #include "hb-set-private.hh"
 
 
-#ifndef HB_MAX_NESTING_LEVEL
-#define HB_MAX_NESTING_LEVEL   6
-#endif
-#ifndef HB_MAX_CONTEXT_LENGTH
-#define HB_MAX_CONTEXT_LENGTH  64
-#endif
-
-
 namespace OT {
 
 
@@ -52,6 +44,8 @@ namespace OT {
 
 
 #define NOT_COVERED            ((unsigned int) -1)
+#define MAX_NESTING_LEVEL      8
+#define MAX_CONTEXT_LENGTH     64
 
 
 
@@ -81,7 +75,7 @@ struct Record
   {
     TRACE_SANITIZE (this);
     const sanitize_closure_t closure = {tag, base};
-    return_trace (c->check_struct (this) && offset.sanitize (c, base, &closure));
+    return TRACE_RETURN (c->check_struct (this) && offset.sanitize (c, base, &closure));
   }
 
   Tag          tag;            /* 4-byte Tag identifier */
@@ -137,7 +131,7 @@ struct RecordListOf : RecordArrayOf<Type>
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    return_trace (RecordArrayOf<Type>::sanitize (c, this));
+    return TRACE_RETURN (RecordArrayOf<Type>::sanitize (c, this));
   }
 };
 
@@ -151,7 +145,7 @@ struct RangeRecord
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    return_trace (c->check_struct (this));
+    return TRACE_RETURN (c->check_struct (this));
   }
 
   inline bool intersects (const hb_set_t *glyphs) const {
@@ -217,7 +211,7 @@ struct LangSys
                        const Record<LangSys>::sanitize_closure_t * = NULL) const
   {
     TRACE_SANITIZE (this);
-    return_trace (c->check_struct (this) && featureIndex.sanitize (c));
+    return TRACE_RETURN (c->check_struct (this) && featureIndex.sanitize (c));
   }
 
   Offset<>     lookupOrderZ;   /* = Null (reserved for an offset to a
@@ -257,7 +251,7 @@ struct Script
                        const Record<Script>::sanitize_closure_t * = NULL) const
   {
     TRACE_SANITIZE (this);
-    return_trace (defaultLangSys.sanitize (c, this) && langSys.sanitize (c, this));
+    return TRACE_RETURN (defaultLangSys.sanitize (c, this) && langSys.sanitize (c, this));
   }
 
   protected:
@@ -280,7 +274,7 @@ struct FeatureParamsSize
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    if (unlikely (!c->check_struct (this))) return_trace (false);
+    if (unlikely (!c->check_struct (this))) return TRACE_RETURN (false);
 
     /* This subtable has some "history", if you will.  Some earlier versions of
      * Adobe tools calculated the offset of the FeatureParams sutable from the
@@ -332,19 +326,19 @@ struct FeatureParamsSize
      */
 
     if (!designSize)
-      return_trace (false);
+      return TRACE_RETURN (false);
     else if (subfamilyID == 0 &&
             subfamilyNameID == 0 &&
             rangeStart == 0 &&
             rangeEnd == 0)
-      return_trace (true);
+      return TRACE_RETURN (true);
     else if (designSize < rangeStart ||
             designSize > rangeEnd ||
             subfamilyNameID < 256 ||
             subfamilyNameID > 32767)
-      return_trace (false);
+      return TRACE_RETURN (false);
     else
-      return_trace (true);
+      return TRACE_RETURN (true);
   }
 
   USHORT       designSize;     /* Represents the design size in 720/inch
@@ -394,7 +388,7 @@ struct FeatureParamsStylisticSet
     TRACE_SANITIZE (this);
     /* Right now minorVersion is at zero.  Which means, any table supports
      * the uiNameID field. */
-    return_trace (c->check_struct (this));
+    return TRACE_RETURN (c->check_struct (this));
   }
 
   USHORT       version;        /* (set to 0): This corresponds to a “minor”
@@ -426,8 +420,8 @@ struct FeatureParamsCharacterVariants
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    return_trace (c->check_struct (this) &&
-                 characters.sanitize (c));
+    return TRACE_RETURN (c->check_struct (this) &&
+                        characters.sanitize (c));
   }
 
   USHORT       format;                 /* Format number is set to 0. */
@@ -468,12 +462,12 @@ struct FeatureParams
   {
     TRACE_SANITIZE (this);
     if (tag == HB_TAG ('s','i','z','e'))
-      return_trace (u.size.sanitize (c));
+      return TRACE_RETURN (u.size.sanitize (c));
     if ((tag & 0xFFFF0000u) == HB_TAG ('s','s','\0','\0')) /* ssXX */
-      return_trace (u.stylisticSet.sanitize (c));
+      return TRACE_RETURN (u.stylisticSet.sanitize (c));
     if ((tag & 0xFFFF0000u) == HB_TAG ('c','v','\0','\0')) /* cvXX */
-      return_trace (u.characterVariants.sanitize (c));
-    return_trace (true);
+      return TRACE_RETURN (u.characterVariants.sanitize (c));
+    return TRACE_RETURN (true);
   }
 
   inline const FeatureParamsSize& get_size_params (hb_tag_t tag) const
@@ -511,7 +505,7 @@ struct Feature
   {
     TRACE_SANITIZE (this);
     if (unlikely (!(c->check_struct (this) && lookupIndex.sanitize (c))))
-      return_trace (false);
+      return TRACE_RETURN (false);
 
     /* Some earlier versions of Adobe tools calculated the offset of the
      * FeatureParams subtable from the beginning of the FeatureList table!
@@ -526,10 +520,10 @@ struct Feature
 
     OffsetTo<FeatureParams> orig_offset = featureParams;
     if (unlikely (!featureParams.sanitize (c, this, closure ? closure->tag : HB_TAG_NONE)))
-      return_trace (false);
+      return TRACE_RETURN (false);
 
     if (likely (orig_offset.is_null ()))
-      return_trace (true);
+      return TRACE_RETURN (true);
 
     if (featureParams == 0 && closure &&
        closure->tag == HB_TAG ('s','i','z','e') &&
@@ -544,13 +538,10 @@ struct Feature
       if (new_offset == new_offset_int &&
          c->try_set (&featureParams, new_offset) &&
          !featureParams.sanitize (c, this, closure ? closure->tag : HB_TAG_NONE))
-       return_trace (false);
-
-      if (c->edit_count > 1)
-        c->edit_count--; /* This was a "legitimate" edit; don't contribute to error count. */
+       return TRACE_RETURN (false);
     }
 
-    return_trace (true);
+    return TRACE_RETURN (true);
   }
 
   OffsetTo<FeatureParams>
@@ -582,11 +573,6 @@ struct LookupFlag : USHORT
   DEFINE_SIZE_STATIC (2);
 };
 
-} /* namespace OT */
-/* This has to be outside the namespace. */
-HB_MARK_AS_FLAG_T (OT::LookupFlag::Flags);
-namespace OT {
-
 struct Lookup
 {
   inline unsigned int get_subtable_count (void) const { return subTable.len; }
@@ -627,9 +613,9 @@ struct Lookup
     for (unsigned int i = 0; i < count; i++) {
       typename context_t::return_t r = get_subtable<SubTableType> (i).dispatch (c, lookup_type);
       if (c->stop_sublookup_iteration (r))
-        return_trace (r);
+        return TRACE_RETURN (r);
     }
-    return_trace (c->default_return_value ());
+    return TRACE_RETURN (c->default_return_value ());
   }
 
   inline bool serialize (hb_serialize_context_t *c,
@@ -638,29 +624,29 @@ struct Lookup
                         unsigned int num_subtables)
   {
     TRACE_SERIALIZE (this);
-    if (unlikely (!c->extend_min (*this))) return_trace (false);
+    if (unlikely (!c->extend_min (*this))) return TRACE_RETURN (false);
     lookupType.set (lookup_type);
     lookupFlag.set (lookup_props & 0xFFFFu);
-    if (unlikely (!subTable.serialize (c, num_subtables))) return_trace (false);
+    if (unlikely (!subTable.serialize (c, num_subtables))) return TRACE_RETURN (false);
     if (lookupFlag & LookupFlag::UseMarkFilteringSet)
     {
       USHORT &markFilteringSet = StructAfter<USHORT> (subTable);
       markFilteringSet.set (lookup_props >> 16);
     }
-    return_trace (true);
+    return TRACE_RETURN (true);
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
     /* Real sanitize of the subtables is done by GSUB/GPOS/... */
-    if (!(c->check_struct (this) && subTable.sanitize (c))) return_trace (false);
+    if (!(c->check_struct (this) && subTable.sanitize (c))) return TRACE_RETURN (false);
     if (lookupFlag & LookupFlag::UseMarkFilteringSet)
     {
       const USHORT &markFilteringSet = StructAfter<USHORT> (subTable);
-      if (!markFilteringSet.sanitize (c)) return_trace (false);
+      if (!markFilteringSet.sanitize (c)) return TRACE_RETURN (false);
     }
-    return_trace (true);
+    return TRACE_RETURN (true);
   }
 
   private:
@@ -699,19 +685,19 @@ struct CoverageFormat1
                         unsigned int num_glyphs)
   {
     TRACE_SERIALIZE (this);
-    if (unlikely (!c->extend_min (*this))) return_trace (false);
+    if (unlikely (!c->extend_min (*this))) return TRACE_RETURN (false);
     glyphArray.len.set (num_glyphs);
-    if (unlikely (!c->extend (glyphArray))) return_trace (false);
+    if (unlikely (!c->extend (glyphArray))) return TRACE_RETURN (false);
     for (unsigned int i = 0; i < num_glyphs; i++)
       glyphArray[i] = glyphs[i];
     glyphs.advance (num_glyphs);
-    return_trace (true);
+    return TRACE_RETURN (true);
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    return_trace (glyphArray.sanitize (c));
+    return TRACE_RETURN (glyphArray.sanitize (c));
   }
 
   inline bool intersects_coverage (const hb_set_t *glyphs, unsigned int index) const {
@@ -768,20 +754,16 @@ struct CoverageFormat2
                         unsigned int num_glyphs)
   {
     TRACE_SERIALIZE (this);
-    if (unlikely (!c->extend_min (*this))) return_trace (false);
+    if (unlikely (!c->extend_min (*this))) return TRACE_RETURN (false);
 
-    if (unlikely (!num_glyphs))
-    {
-      rangeRecord.len.set (0);
-      return_trace (true);
-    }
+    if (unlikely (!num_glyphs)) return TRACE_RETURN (true);
 
     unsigned int num_ranges = 1;
     for (unsigned int i = 1; i < num_glyphs; i++)
       if (glyphs[i - 1] + 1 != glyphs[i])
         num_ranges++;
     rangeRecord.len.set (num_ranges);
-    if (unlikely (!c->extend (rangeRecord))) return_trace (false);
+    if (unlikely (!c->extend (rangeRecord))) return TRACE_RETURN (false);
 
     unsigned int range = 0;
     rangeRecord[range].start = glyphs[0];
@@ -796,13 +778,13 @@ struct CoverageFormat2
         rangeRecord[range].end = glyphs[i];
       }
     glyphs.advance (num_glyphs);
-    return_trace (true);
+    return TRACE_RETURN (true);
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    return_trace (rangeRecord.sanitize (c));
+    return TRACE_RETURN (rangeRecord.sanitize (c));
   }
 
   inline bool intersects_coverage (const hb_set_t *glyphs, unsigned int index) const {
@@ -882,27 +864,27 @@ struct Coverage
                         unsigned int num_glyphs)
   {
     TRACE_SERIALIZE (this);
-    if (unlikely (!c->extend_min (*this))) return_trace (false);
+    if (unlikely (!c->extend_min (*this))) return TRACE_RETURN (false);
     unsigned int num_ranges = 1;
     for (unsigned int i = 1; i < num_glyphs; i++)
       if (glyphs[i - 1] + 1 != glyphs[i])
         num_ranges++;
     u.format.set (num_glyphs * 2 < num_ranges * 3 ? 1 : 2);
     switch (u.format) {
-    case 1: return_trace (u.format1.serialize (c, glyphs, num_glyphs));
-    case 2: return_trace (u.format2.serialize (c, glyphs, num_glyphs));
-    default:return_trace (false);
+    case 1: return TRACE_RETURN (u.format1.serialize (c, glyphs, num_glyphs));
+    case 2: return TRACE_RETURN (u.format2.serialize (c, glyphs, num_glyphs));
+    default:return TRACE_RETURN (false);
     }
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    if (!u.format.sanitize (c)) return_trace (false);
+    if (!u.format.sanitize (c)) return TRACE_RETURN (false);
     switch (u.format) {
-    case 1: return_trace (u.format1.sanitize (c));
-    case 2: return_trace (u.format2.sanitize (c));
-    default:return_trace (true);
+    case 1: return TRACE_RETURN (u.format1.sanitize (c));
+    case 2: return TRACE_RETURN (u.format2.sanitize (c));
+    default:return TRACE_RETURN (true);
     }
   }
 
@@ -1011,7 +993,7 @@ struct ClassDefFormat1
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    return_trace (c->check_struct (this) && classValue.sanitize (c));
+    return TRACE_RETURN (c->check_struct (this) && classValue.sanitize (c));
   }
 
   template <typename set_t>
@@ -1068,7 +1050,7 @@ struct ClassDefFormat2
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    return_trace (rangeRecord.sanitize (c));
+    return TRACE_RETURN (rangeRecord.sanitize (c));
   }
 
   template <typename set_t>
@@ -1126,11 +1108,11 @@ struct ClassDef
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    if (!u.format.sanitize (c)) return_trace (false);
+    if (!u.format.sanitize (c)) return TRACE_RETURN (false);
     switch (u.format) {
-    case 1: return_trace (u.format1.sanitize (c));
-    case 2: return_trace (u.format2.sanitize (c));
-    default:return_trace (true);
+    case 1: return TRACE_RETURN (u.format1.sanitize (c));
+    case 2: return TRACE_RETURN (u.format2.sanitize (c));
+    default:return TRACE_RETURN (true);
     }
   }
 
@@ -1174,21 +1156,6 @@ struct Device
   inline hb_position_t get_y_delta (hb_font_t *font) const
   { return get_delta (font->y_ppem, font->y_scale); }
 
-  inline unsigned int get_size (void) const
-  {
-    unsigned int f = deltaFormat;
-    if (unlikely (f < 1 || f > 3 || startSize > endSize)) return 3 * USHORT::static_size;
-    return USHORT::static_size * (4 + ((endSize - startSize) >> (4 - f)));
-  }
-
-  inline bool sanitize (hb_sanitize_context_t *c) const
-  {
-    TRACE_SANITIZE (this);
-    return_trace (c->check_struct (this) && c->check_range (this, this->get_size ()));
-  }
-
-  private:
-
   inline int get_delta (unsigned int ppem, int scale) const
   {
     if (!ppem) return 0;
@@ -1199,6 +1166,8 @@ struct Device
 
     return (int) (pixels * (int64_t) scale / ppem);
   }
+
+
   inline int get_delta_pixels (unsigned int ppem_size) const
   {
     unsigned int f = deltaFormat;
@@ -1222,6 +1191,19 @@ struct Device
     return delta;
   }
 
+  inline unsigned int get_size (void) const
+  {
+    unsigned int f = deltaFormat;
+    if (unlikely (f < 1 || f > 3 || startSize > endSize)) return 3 * USHORT::static_size;
+    return USHORT::static_size * (4 + ((endSize - startSize) >> (4 - f)));
+  }
+
+  inline bool sanitize (hb_sanitize_context_t *c) const
+  {
+    TRACE_SANITIZE (this);
+    return TRACE_RETURN (c->check_struct (this) && c->check_range (this, this->get_size ()));
+  }
+
   protected:
   USHORT       startSize;              /* Smallest size to correct--in ppem */
   USHORT       endSize;                /* Largest size to correct--in ppem */
index 2b4bc5a..7a6c04d 100644 (file)
@@ -74,7 +74,7 @@ struct AttachList
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    return_trace (coverage.sanitize (c, this) && attachPoint.sanitize (c, this));
+    return TRACE_RETURN (coverage.sanitize (c, this) && attachPoint.sanitize (c, this));
   }
 
   protected:
@@ -105,7 +105,7 @@ struct CaretValueFormat1
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    return_trace (c->check_struct (this));
+    return TRACE_RETURN (c->check_struct (this));
   }
 
   protected:
@@ -132,7 +132,7 @@ struct CaretValueFormat2
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    return_trace (c->check_struct (this));
+    return TRACE_RETURN (c->check_struct (this));
   }
 
   protected:
@@ -156,7 +156,7 @@ struct CaretValueFormat3
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    return_trace (c->check_struct (this) && deviceTable.sanitize (c, this));
+    return TRACE_RETURN (c->check_struct (this) && deviceTable.sanitize (c, this));
   }
 
   protected:
@@ -185,12 +185,12 @@ struct CaretValue
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    if (!u.format.sanitize (c)) return_trace (false);
+    if (!u.format.sanitize (c)) return TRACE_RETURN (false);
     switch (u.format) {
-    case 1: return_trace (u.format1.sanitize (c));
-    case 2: return_trace (u.format2.sanitize (c));
-    case 3: return_trace (u.format3.sanitize (c));
-    default:return_trace (true);
+    case 1: return TRACE_RETURN (u.format1.sanitize (c));
+    case 2: return TRACE_RETURN (u.format2.sanitize (c));
+    case 3: return TRACE_RETURN (u.format3.sanitize (c));
+    default:return TRACE_RETURN (true);
     }
   }
 
@@ -227,7 +227,7 @@ struct LigGlyph
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    return_trace (carets.sanitize (c, this));
+    return TRACE_RETURN (carets.sanitize (c, this));
   }
 
   protected:
@@ -262,7 +262,7 @@ struct LigCaretList
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    return_trace (coverage.sanitize (c, this) && ligGlyph.sanitize (c, this));
+    return TRACE_RETURN (coverage.sanitize (c, this) && ligGlyph.sanitize (c, this));
   }
 
   protected:
@@ -285,7 +285,7 @@ struct MarkGlyphSetsFormat1
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    return_trace (coverage.sanitize (c, this));
+    return TRACE_RETURN (coverage.sanitize (c, this));
   }
 
   protected:
@@ -310,10 +310,10 @@ struct MarkGlyphSets
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    if (!u.format.sanitize (c)) return_trace (false);
+    if (!u.format.sanitize (c)) return TRACE_RETURN (false);
     switch (u.format) {
-    case 1: return_trace (u.format1.sanitize (c));
-    default:return_trace (true);
+    case 1: return TRACE_RETURN (u.format1.sanitize (c));
+    default:return TRACE_RETURN (true);
     }
   }
 
@@ -376,13 +376,13 @@ struct GDEF
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    return_trace (version.sanitize (c) &&
-                 likely (version.major == 1) &&
-                 glyphClassDef.sanitize (c, this) &&
-                 attachList.sanitize (c, this) &&
-                 ligCaretList.sanitize (c, this) &&
-                 markAttachClassDef.sanitize (c, this) &&
-                 (version.to_int () < 0x00010002u || markGlyphSetsDef[0].sanitize (c, this)));
+    return TRACE_RETURN (version.sanitize (c) &&
+                        likely (version.major == 1) &&
+                        glyphClassDef.sanitize (c, this) &&
+                        attachList.sanitize (c, this) &&
+                        ligCaretList.sanitize (c, this) &&
+                        markAttachClassDef.sanitize (c, this) &&
+                        (version.to_int () < 0x00010002u || markGlyphSetsDef[0].sanitize (c, this)));
   }
 
 
@@ -409,7 +409,7 @@ struct GDEF
 
 
   protected:
-  FixedVersion<>version;               /* Version of the GDEF table--currently
+  FixedVersion version;                /* Version of the GDEF table--currently
                                         * 0x00010002u */
   OffsetTo<ClassDef>
                glyphClassDef;          /* Offset to class definition table
index bbe390c..d88f787 100644 (file)
@@ -36,17 +36,8 @@ namespace OT {
 
 
 /* buffer **position** var allocations */
-#define attach_chain() var.i16[0] /* glyph to which this attaches to, relative to current glyphs; negative for going back, positive for forward. */
-#define attach_type() var.u8[2] /* attachment type */
-/* Note! if attach_chain() is zero, the value of attach_type() is irrelevant. */
-
-enum attach_type_t {
-  ATTACH_TYPE_NONE     = 0X00,
-
-  /* Each attachment should be either a mark or a cursive; can't be both. */
-  ATTACH_TYPE_MARK     = 0X01,
-  ATTACH_TYPE_CURSIVE  = 0X02,
-};
+#define attach_lookback() var.u16[0] /* number of glyphs to go back to attach this glyph to its base */
+#define cursive_chain() var.i16[1] /* character to which this connects, may be positive or negative */
 
 
 /* Shared Tables: ValueRecord, Anchor Table, and MarkArray */
@@ -190,7 +181,7 @@ struct ValueFormat : USHORT
   inline bool sanitize_value (hb_sanitize_context_t *c, const void *base, const Value *values) const
   {
     TRACE_SANITIZE (this);
-    return_trace (c->check_range (values, get_size ()) && (!has_device () || sanitize_value_devices (c, base, values)));
+    return TRACE_RETURN (c->check_range (values, get_size ()) && (!has_device () || sanitize_value_devices (c, base, values)));
   }
 
   inline bool sanitize_values (hb_sanitize_context_t *c, const void *base, const Value *values, unsigned int count) const
@@ -198,17 +189,17 @@ struct ValueFormat : USHORT
     TRACE_SANITIZE (this);
     unsigned int len = get_len ();
 
-    if (!c->check_array (values, get_size (), count)) return_trace (false);
+    if (!c->check_array (values, get_size (), count)) return TRACE_RETURN (false);
 
-    if (!has_device ()) return_trace (true);
+    if (!has_device ()) return TRACE_RETURN (true);
 
     for (unsigned int i = 0; i < count; i++) {
       if (!sanitize_value_devices (c, base, values))
-        return_trace (false);
+        return TRACE_RETURN (false);
       values += len;
     }
 
-    return_trace (true);
+    return TRACE_RETURN (true);
   }
 
   /* Just sanitize referenced Device tables.  Doesn't check the values themselves. */
@@ -216,15 +207,15 @@ struct ValueFormat : USHORT
   {
     TRACE_SANITIZE (this);
 
-    if (!has_device ()) return_trace (true);
+    if (!has_device ()) return TRACE_RETURN (true);
 
     for (unsigned int i = 0; i < count; i++) {
       if (!sanitize_value_devices (c, base, values))
-        return_trace (false);
+        return TRACE_RETURN (false);
       values += stride;
     }
 
-    return_trace (true);
+    return TRACE_RETURN (true);
   }
 };
 
@@ -241,7 +232,7 @@ struct AnchorFormat1
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    return_trace (c->check_struct (this));
+    return TRACE_RETURN (c->check_struct (this));
   }
 
   protected:
@@ -271,7 +262,7 @@ struct AnchorFormat2
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    return_trace (c->check_struct (this));
+    return TRACE_RETURN (c->check_struct (this));
   }
 
   protected:
@@ -300,7 +291,7 @@ struct AnchorFormat3
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    return_trace (c->check_struct (this) && xDeviceTable.sanitize (c, this) && yDeviceTable.sanitize (c, this));
+    return TRACE_RETURN (c->check_struct (this) && xDeviceTable.sanitize (c, this) && yDeviceTable.sanitize (c, this));
   }
 
   protected:
@@ -336,12 +327,12 @@ struct Anchor
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    if (!u.format.sanitize (c)) return_trace (false);
+    if (!u.format.sanitize (c)) return TRACE_RETURN (false);
     switch (u.format) {
-    case 1: return_trace (u.format1.sanitize (c));
-    case 2: return_trace (u.format2.sanitize (c));
-    case 3: return_trace (u.format3.sanitize (c));
-    default:return_trace (true);
+    case 1: return TRACE_RETURN (u.format1.sanitize (c));
+    case 2: return TRACE_RETURN (u.format2.sanitize (c));
+    case 3: return TRACE_RETURN (u.format3.sanitize (c));
+    default:return TRACE_RETURN (true);
     }
   }
 
@@ -369,13 +360,13 @@ struct AnchorMatrix
   inline bool sanitize (hb_sanitize_context_t *c, unsigned int cols) const
   {
     TRACE_SANITIZE (this);
-    if (!c->check_struct (this)) return_trace (false);
-    if (unlikely (rows > 0 && cols >= ((unsigned int) -1) / rows)) return_trace (false);
+    if (!c->check_struct (this)) return TRACE_RETURN (false);
+    if (unlikely (rows > 0 && cols >= ((unsigned int) -1) / rows)) return TRACE_RETURN (false);
     unsigned int count = rows * cols;
-    if (!c->check_array (matrixZ, matrixZ[0].static_size, count)) return_trace (false);
+    if (!c->check_array (matrixZ, matrixZ[0].static_size, count)) return TRACE_RETURN (false);
     for (unsigned int i = 0; i < count; i++)
-      if (!matrixZ[i].sanitize (c, this)) return_trace (false);
-    return_trace (true);
+      if (!matrixZ[i].sanitize (c, this)) return TRACE_RETURN (false);
+    return TRACE_RETURN (true);
   }
 
   USHORT       rows;                   /* Number of rows */
@@ -395,7 +386,7 @@ struct MarkRecord
   inline bool sanitize (hb_sanitize_context_t *c, const void *base) const
   {
     TRACE_SANITIZE (this);
-    return_trace (c->check_struct (this) && markAnchor.sanitize (c, base));
+    return TRACE_RETURN (c->check_struct (this) && markAnchor.sanitize (c, base));
   }
 
   protected:
@@ -424,7 +415,7 @@ struct MarkArray : ArrayOf<MarkRecord>      /* Array of MarkRecords--in Coverage orde
     const Anchor& glyph_anchor = anchors.get_anchor (glyph_index, mark_class, class_count, &found);
     /* If this subtable doesn't have an anchor for this base and this class,
      * return false such that the subsequent subtables have a chance at it. */
-    if (unlikely (!found)) return_trace (false);
+    if (unlikely (!found)) return TRACE_RETURN (false);
 
     hb_position_t mark_x, mark_y, base_x, base_y;
 
@@ -434,18 +425,16 @@ struct MarkArray : ArrayOf<MarkRecord>    /* Array of MarkRecords--in Coverage orde
     hb_glyph_position_t &o = buffer->cur_pos();
     o.x_offset = base_x - mark_x;
     o.y_offset = base_y - mark_y;
-    o.attach_type() = ATTACH_TYPE_MARK;
-    o.attach_chain() = (int) glyph_pos - (int) buffer->idx;
-    buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_GPOS_ATTACHMENT;
+    o.attach_lookback() = buffer->idx - glyph_pos;
 
     buffer->idx++;
-    return_trace (true);
+    return TRACE_RETURN (true);
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    return_trace (ArrayOf<MarkRecord>::sanitize (c, this));
+    return TRACE_RETURN (ArrayOf<MarkRecord>::sanitize (c, this));
   }
 };
 
@@ -470,21 +459,21 @@ struct SinglePosFormat1
     TRACE_APPLY (this);
     hb_buffer_t *buffer = c->buffer;
     unsigned int index = (this+coverage).get_coverage  (buffer->cur().codepoint);
-    if (likely (index == NOT_COVERED)) return_trace (false);
+    if (likely (index == NOT_COVERED)) return TRACE_RETURN (false);
 
     valueFormat.apply_value (c->font, c->direction, this,
                             values, buffer->cur_pos());
 
     buffer->idx++;
-    return_trace (true);
+    return TRACE_RETURN (true);
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    return_trace (c->check_struct (this) &&
-                 coverage.sanitize (c, this) &&
-                 valueFormat.sanitize_value (c, this, values));
+    return TRACE_RETURN (c->check_struct (this)
+        && coverage.sanitize (c, this)
+       && valueFormat.sanitize_value (c, this, values));
   }
 
   protected:
@@ -519,24 +508,24 @@ struct SinglePosFormat2
     TRACE_APPLY (this);
     hb_buffer_t *buffer = c->buffer;
     unsigned int index = (this+coverage).get_coverage  (buffer->cur().codepoint);
-    if (likely (index == NOT_COVERED)) return_trace (false);
+    if (likely (index == NOT_COVERED)) return TRACE_RETURN (false);
 
-    if (likely (index >= valueCount)) return_trace (false);
+    if (likely (index >= valueCount)) return TRACE_RETURN (false);
 
     valueFormat.apply_value (c->font, c->direction, this,
                             &values[index * valueFormat.get_len ()],
                             buffer->cur_pos());
 
     buffer->idx++;
-    return_trace (true);
+    return TRACE_RETURN (true);
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    return_trace (c->check_struct (this) &&
-                 coverage.sanitize (c, this) &&
-                 valueFormat.sanitize_values (c, this, values, valueCount));
+    return TRACE_RETURN (c->check_struct (this)
+       && coverage.sanitize (c, this)
+       && valueFormat.sanitize_values (c, this, values, valueCount));
   }
 
   protected:
@@ -559,11 +548,11 @@ struct SinglePos
   inline typename context_t::return_t dispatch (context_t *c) const
   {
     TRACE_DISPATCH (this, u.format);
-    if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
+    if (unlikely (!c->may_dispatch (this, &u.format))) TRACE_RETURN (c->default_return_value ());
     switch (u.format) {
-    case 1: return_trace (c->dispatch (u.format1));
-    case 2: return_trace (c->dispatch (u.format2));
-    default:return_trace (c->default_return_value ());
+    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 ());
     }
   }
 
@@ -626,7 +615,7 @@ struct PairSet
 
     /* Hand-coded bsearch. */
     if (unlikely (!count))
-      return_trace (false);
+      return TRACE_RETURN (false);
     hb_codepoint_t x = buffer->info[pos].codepoint;
     int min = 0, max = (int) count - 1;
     while (min <= max)
@@ -647,11 +636,11 @@ struct PairSet
        if (len2)
          pos++;
        buffer->idx = pos;
-       return_trace (true);
+       return TRACE_RETURN (true);
       }
     }
 
-    return_trace (false);
+    return TRACE_RETURN (false);
   }
 
   struct sanitize_closure_t {
@@ -665,12 +654,12 @@ struct PairSet
   {
     TRACE_SANITIZE (this);
     if (!(c->check_struct (this)
-       && c->check_array (arrayZ, USHORT::static_size * closure->stride, len))) return_trace (false);
+       && c->check_array (arrayZ, USHORT::static_size * closure->stride, len))) return TRACE_RETURN (false);
 
     unsigned int count = len;
     const PairValueRecord *record = CastP<PairValueRecord> (arrayZ);
-    return_trace (closure->valueFormats[0].sanitize_values_stride_unsafe (c, closure->base, &record->values[0], count, closure->stride) &&
-                 closure->valueFormats[1].sanitize_values_stride_unsafe (c, closure->base, &record->values[closure->len1], count, closure->stride));
+    return TRACE_RETURN (closure->valueFormats[0].sanitize_values_stride_unsafe (c, closure->base, &record->values[0], count, closure->stride)
+                     && closure->valueFormats[1].sanitize_values_stride_unsafe (c, closure->base, &record->values[closure->len1], count, closure->stride));
   }
 
   protected:
@@ -702,21 +691,19 @@ struct PairPosFormat1
     TRACE_APPLY (this);
     hb_buffer_t *buffer = c->buffer;
     unsigned int index = (this+coverage).get_coverage  (buffer->cur().codepoint);
-    if (likely (index == NOT_COVERED)) return_trace (false);
+    if (likely (index == NOT_COVERED)) return TRACE_RETURN (false);
 
     hb_apply_context_t::skipping_iterator_t &skippy_iter = c->iter_input;
     skippy_iter.reset (buffer->idx, 1);
-    if (!skippy_iter.next ()) return_trace (false);
+    if (!skippy_iter.next ()) return TRACE_RETURN (false);
 
-    return_trace ((this+pairSet[index]).apply (c, &valueFormat1, skippy_iter.idx));
+    return TRACE_RETURN ((this+pairSet[index]).apply (c, &valueFormat1, skippy_iter.idx));
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
 
-    if (!c->check_struct (this)) return_trace (false);
-
     unsigned int len1 = valueFormat1.get_len ();
     unsigned int len2 = valueFormat2.get_len ();
     PairSet::sanitize_closure_t closure = {
@@ -726,7 +713,7 @@ struct PairPosFormat1
       1 + len1 + len2
     };
 
-    return_trace (coverage.sanitize (c, this) && pairSet.sanitize (c, this, &closure));
+    return TRACE_RETURN (c->check_struct (this) && coverage.sanitize (c, this) && pairSet.sanitize (c, this, &closure));
   }
 
   protected:
@@ -752,7 +739,7 @@ struct PairPosFormat2
   inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
   {
     TRACE_COLLECT_GLYPHS (this);
-    (this+coverage).add_coverage (c->input);
+    /* (this+coverage).add_coverage (c->input); // Don't need this. */
 
     unsigned int count1 = class1Count;
     const ClassDef &klass1 = this+classDef1;
@@ -775,11 +762,11 @@ struct PairPosFormat2
     TRACE_APPLY (this);
     hb_buffer_t *buffer = c->buffer;
     unsigned int index = (this+coverage).get_coverage  (buffer->cur().codepoint);
-    if (likely (index == NOT_COVERED)) return_trace (false);
+    if (likely (index == NOT_COVERED)) return TRACE_RETURN (false);
 
     hb_apply_context_t::skipping_iterator_t &skippy_iter = c->iter_input;
     skippy_iter.reset (buffer->idx, 1);
-    if (!skippy_iter.next ()) return_trace (false);
+    if (!skippy_iter.next ()) return TRACE_RETURN (false);
 
     unsigned int len1 = valueFormat1.get_len ();
     unsigned int len2 = valueFormat2.get_len ();
@@ -787,7 +774,7 @@ struct PairPosFormat2
 
     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 (false);
+    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,
@@ -799,7 +786,7 @@ struct PairPosFormat2
     if (len2)
       buffer->idx++;
 
-    return_trace (true);
+    return TRACE_RETURN (true);
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) const
@@ -808,16 +795,16 @@ struct PairPosFormat2
     if (!(c->check_struct (this)
        && coverage.sanitize (c, this)
        && classDef1.sanitize (c, this)
-       && classDef2.sanitize (c, this))) return_trace (false);
+       && classDef2.sanitize (c, this))) return TRACE_RETURN (false);
 
     unsigned int len1 = valueFormat1.get_len ();
     unsigned int len2 = valueFormat2.get_len ();
     unsigned int stride = len1 + len2;
     unsigned int record_size = valueFormat1.get_size () + valueFormat2.get_size ();
     unsigned int count = (unsigned int) class1Count * (unsigned int) class2Count;
-    return_trace (c->check_array (values, record_size, count) &&
-                 valueFormat1.sanitize_values_stride_unsafe (c, this, &values[0], count, stride) &&
-                 valueFormat2.sanitize_values_stride_unsafe (c, this, &values[len1], count, stride));
+    return TRACE_RETURN (c->check_array (values, record_size, count) &&
+                        valueFormat1.sanitize_values_stride_unsafe (c, this, &values[0], count, stride) &&
+                        valueFormat2.sanitize_values_stride_unsafe (c, this, &values[len1], count, stride));
   }
 
   protected:
@@ -856,11 +843,11 @@ struct PairPos
   inline typename context_t::return_t dispatch (context_t *c) const
   {
     TRACE_DISPATCH (this, u.format);
-    if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
+    if (unlikely (!c->may_dispatch (this, &u.format))) TRACE_RETURN (c->default_return_value ());
     switch (u.format) {
-    case 1: return_trace (c->dispatch (u.format1));
-    case 2: return_trace (c->dispatch (u.format2));
-    default:return_trace (c->default_return_value ());
+    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 ());
     }
   }
 
@@ -880,7 +867,7 @@ struct EntryExitRecord
   inline bool sanitize (hb_sanitize_context_t *c, const void *base) const
   {
     TRACE_SANITIZE (this);
-    return_trace (entryAnchor.sanitize (c, base) && exitAnchor.sanitize (c, base));
+    return TRACE_RETURN (entryAnchor.sanitize (c, base) && exitAnchor.sanitize (c, base));
   }
 
   protected:
@@ -896,9 +883,6 @@ struct EntryExitRecord
   DEFINE_SIZE_STATIC (4);
 };
 
-static void
-reverse_cursive_minor_offset (hb_glyph_position_t *pos, unsigned int i, hb_direction_t direction, unsigned int new_parent);
-
 struct CursivePosFormat1
 {
   inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
@@ -917,15 +901,18 @@ struct CursivePosFormat1
     TRACE_APPLY (this);
     hb_buffer_t *buffer = c->buffer;
 
+    /* We don't handle mark glyphs here. */
+    if (unlikely (_hb_glyph_info_is_mark (&buffer->cur()))) return TRACE_RETURN (false);
+
     const EntryExitRecord &this_record = entryExitRecord[(this+coverage).get_coverage  (buffer->cur().codepoint)];
-    if (!this_record.exitAnchor) return_trace (false);
+    if (!this_record.exitAnchor) return TRACE_RETURN (false);
 
     hb_apply_context_t::skipping_iterator_t &skippy_iter = c->iter_input;
     skippy_iter.reset (buffer->idx, 1);
-    if (!skippy_iter.next ()) return_trace (false);
+    if (!skippy_iter.next ()) return TRACE_RETURN (false);
 
     const EntryExitRecord &next_record = entryExitRecord[(this+coverage).get_coverage  (buffer->info[skippy_iter.idx].codepoint)];
-    if (!next_record.entryAnchor) return_trace (false);
+    if (!next_record.entryAnchor) return TRACE_RETURN (false);
 
     unsigned int i = buffer->idx;
     unsigned int j = skippy_iter.idx;
@@ -973,49 +960,28 @@ struct CursivePosFormat1
     }
 
     /* Cross-direction adjustment */
-
-    /* We attach child to parent (think graph theory and rooted trees whereas
-     * the root stays on baseline and each node aligns itself against its
-     * parent.
-     *
-     * Optimize things for the case of RightToLeft, as that's most common in
-     * Arabinc. */
-    unsigned int child  = i;
-    unsigned int parent = j;
-    hb_position_t x_offset = entry_x - exit_x;
-    hb_position_t y_offset = entry_y - exit_y;
-    if  (!(c->lookup_props & LookupFlag::RightToLeft))
-    {
-      unsigned int k = child;
-      child = parent;
-      parent = k;
-      x_offset = -x_offset;
-      y_offset = -y_offset;
+    if  (c->lookup_props & LookupFlag::RightToLeft) {
+      pos[i].cursive_chain() = j - i;
+      if (likely (HB_DIRECTION_IS_HORIZONTAL (c->direction)))
+       pos[i].y_offset = entry_y - exit_y;
+      else
+       pos[i].x_offset = entry_x - exit_x;
+    } else {
+      pos[j].cursive_chain() = i - j;
+      if (likely (HB_DIRECTION_IS_HORIZONTAL (c->direction)))
+       pos[j].y_offset = exit_y - entry_y;
+      else
+       pos[j].x_offset = exit_x - entry_x;
     }
 
-    /* If child was already connected to someone else, walk through its old
-     * chain and reverse the link direction, such that the whole tree of its
-     * previous connection now attaches to new parent.  Watch out for case
-     * where new parent is on the path from old chain...
-     */
-    reverse_cursive_minor_offset (pos, child, c->direction, parent);
-
-    pos[child].attach_type() = ATTACH_TYPE_CURSIVE;
-    pos[child].attach_chain() = (int) parent - (int) child;
-    buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_GPOS_ATTACHMENT;
-    if (likely (HB_DIRECTION_IS_HORIZONTAL (c->direction)))
-      pos[child].y_offset = y_offset;
-    else
-      pos[child].x_offset = x_offset;
-
     buffer->idx = j;
-    return_trace (true);
+    return TRACE_RETURN (true);
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    return_trace (coverage.sanitize (c, this) && entryExitRecord.sanitize (c, this));
+    return TRACE_RETURN (coverage.sanitize (c, this) && entryExitRecord.sanitize (c, this));
   }
 
   protected:
@@ -1036,10 +1002,10 @@ struct CursivePos
   inline typename context_t::return_t dispatch (context_t *c) const
   {
     TRACE_DISPATCH (this, u.format);
-    if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
+    if (unlikely (!c->may_dispatch (this, &u.format))) TRACE_RETURN (c->default_return_value ());
     switch (u.format) {
-    case 1: return_trace (c->dispatch (u.format1));
-    default:return_trace (c->default_return_value ());
+    case 1: return TRACE_RETURN (c->dispatch (u.format1));
+    default:return TRACE_RETURN (c->default_return_value ());
     }
   }
 
@@ -1075,36 +1041,33 @@ struct MarkBasePosFormat1
     TRACE_APPLY (this);
     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 (false);
+    if (likely (mark_index == NOT_COVERED)) return TRACE_RETURN (false);
 
-    /* Now we search backwards for a non-mark glyph */
+    /* now we search backwards for a non-mark glyph */
     hb_apply_context_t::skipping_iterator_t &skippy_iter = c->iter_input;
     skippy_iter.reset (buffer->idx, 1);
     skippy_iter.set_lookup_props (LookupFlag::IgnoreMarks);
     do {
-      if (!skippy_iter.prev ()) return_trace (false);
+      if (!skippy_iter.prev ()) return TRACE_RETURN (false);
       /* We only want to attach to the first of a MultipleSubst sequence.  Reject others. */
       if (0 == _hb_glyph_info_get_lig_comp (&buffer->info[skippy_iter.idx])) break;
       skippy_iter.reject ();
     } while (1);
 
     /* 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 (false); }
+    if (!_hb_glyph_info_is_base_glyph (&buffer->info[skippy_iter.idx])) { /*return TRACE_RETURN (false);*/ }
 
     unsigned int base_index = (this+baseCoverage).get_coverage  (buffer->info[skippy_iter.idx].codepoint);
-    if (base_index == NOT_COVERED) return_trace (false);
+    if (base_index == NOT_COVERED) return TRACE_RETURN (false);
 
-    return_trace ((this+markArray).apply (c, mark_index, base_index, this+baseArray, classCount, skippy_iter.idx));
+    return TRACE_RETURN ((this+markArray).apply (c, mark_index, base_index, this+baseArray, classCount, skippy_iter.idx));
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    return_trace (c->check_struct (this) &&
-                 markCoverage.sanitize (c, this) &&
-                 baseCoverage.sanitize (c, this) &&
-                 markArray.sanitize (c, this) &&
-                 baseArray.sanitize (c, this, (unsigned int) classCount));
+    return TRACE_RETURN (c->check_struct (this) && markCoverage.sanitize (c, this) && baseCoverage.sanitize (c, this) &&
+                        markArray.sanitize (c, this) && baseArray.sanitize (c, this, (unsigned int) classCount));
   }
 
   protected:
@@ -1132,10 +1095,10 @@ struct MarkBasePos
   inline typename context_t::return_t dispatch (context_t *c) const
   {
     TRACE_DISPATCH (this, u.format);
-    if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
+    if (unlikely (!c->may_dispatch (this, &u.format))) TRACE_RETURN (c->default_return_value ());
     switch (u.format) {
-    case 1: return_trace (c->dispatch (u.format1));
-    default:return_trace (c->default_return_value ());
+    case 1: return TRACE_RETURN (c->dispatch (u.format1));
+    default:return TRACE_RETURN (c->default_return_value ());
     }
   }
 
@@ -1176,27 +1139,27 @@ struct MarkLigPosFormat1
     TRACE_APPLY (this);
     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 (false);
+    if (likely (mark_index == NOT_COVERED)) return TRACE_RETURN (false);
 
-    /* Now we search backwards for a non-mark glyph */
+    /* now we search backwards for a non-mark glyph */
     hb_apply_context_t::skipping_iterator_t &skippy_iter = c->iter_input;
     skippy_iter.reset (buffer->idx, 1);
     skippy_iter.set_lookup_props (LookupFlag::IgnoreMarks);
-    if (!skippy_iter.prev ()) return_trace (false);
+    if (!skippy_iter.prev ()) 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 (false); }
+    if (!_hb_glyph_info_is_ligature (&buffer->info[skippy_iter.idx])) { /*return TRACE_RETURN (false);*/ }
 
     unsigned int j = skippy_iter.idx;
     unsigned int lig_index = (this+ligatureCoverage).get_coverage  (buffer->info[j].codepoint);
-    if (lig_index == NOT_COVERED) return_trace (false);
+    if (lig_index == NOT_COVERED) return TRACE_RETURN (false);
 
     const LigatureArray& lig_array = this+ligatureArray;
     const LigatureAttach& lig_attach = lig_array[lig_index];
 
     /* Find component to attach to */
     unsigned int comp_count = lig_attach.rows;
-    if (unlikely (!comp_count)) return_trace (false);
+    if (unlikely (!comp_count)) return TRACE_RETURN (false);
 
     /* 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
@@ -1211,17 +1174,14 @@ struct MarkLigPosFormat1
     else
       comp_index = comp_count - 1;
 
-    return_trace ((this+markArray).apply (c, mark_index, comp_index, lig_attach, classCount, j));
+    return TRACE_RETURN ((this+markArray).apply (c, mark_index, comp_index, lig_attach, classCount, j));
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    return_trace (c->check_struct (this) &&
-                 markCoverage.sanitize (c, this) &&
-                 ligatureCoverage.sanitize (c, this) &&
-                 markArray.sanitize (c, this) &&
-                 ligatureArray.sanitize (c, this, (unsigned int) classCount));
+    return TRACE_RETURN (c->check_struct (this) && markCoverage.sanitize (c, this) && ligatureCoverage.sanitize (c, this) &&
+                        markArray.sanitize (c, this) && ligatureArray.sanitize (c, this, (unsigned int) classCount));
   }
 
   protected:
@@ -1250,10 +1210,10 @@ struct MarkLigPos
   inline typename context_t::return_t dispatch (context_t *c) const
   {
     TRACE_DISPATCH (this, u.format);
-    if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
+    if (unlikely (!c->may_dispatch (this, &u.format))) TRACE_RETURN (c->default_return_value ());
     switch (u.format) {
-    case 1: return_trace (c->dispatch (u.format1));
-    default:return_trace (c->default_return_value ());
+    case 1: return TRACE_RETURN (c->dispatch (u.format1));
+    default:return TRACE_RETURN (c->default_return_value ());
     }
   }
 
@@ -1289,15 +1249,15 @@ struct MarkMarkPosFormat1
     TRACE_APPLY (this);
     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 (false);
+    if (likely (mark1_index == NOT_COVERED)) return TRACE_RETURN (false);
 
     /* now we search backwards for a suitable mark glyph until a non-mark glyph */
     hb_apply_context_t::skipping_iterator_t &skippy_iter = c->iter_input;
     skippy_iter.reset (buffer->idx, 1);
     skippy_iter.set_lookup_props (c->lookup_props & ~LookupFlag::IgnoreFlags);
-    if (!skippy_iter.prev ()) return_trace (false);
+    if (!skippy_iter.prev ()) return TRACE_RETURN (false);
 
-    if (!_hb_glyph_info_is_mark (&buffer->info[skippy_iter.idx])) { return_trace (false); }
+    if (!_hb_glyph_info_is_mark (&buffer->info[skippy_iter.idx])) { return TRACE_RETURN (false); }
 
     unsigned int j = skippy_iter.idx;
 
@@ -1319,23 +1279,21 @@ struct MarkMarkPosFormat1
     }
 
     /* Didn't match. */
-    return_trace (false);
+    return TRACE_RETURN (false);
 
     good:
     unsigned int mark2_index = (this+mark2Coverage).get_coverage  (buffer->info[j].codepoint);
-    if (mark2_index == NOT_COVERED) return_trace (false);
+    if (mark2_index == NOT_COVERED) return TRACE_RETURN (false);
 
-    return_trace ((this+mark1Array).apply (c, mark1_index, mark2_index, this+mark2Array, classCount, j));
+    return TRACE_RETURN ((this+mark1Array).apply (c, mark1_index, mark2_index, this+mark2Array, classCount, j));
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    return_trace (c->check_struct (this) &&
-                 mark1Coverage.sanitize (c, this) &&
-                 mark2Coverage.sanitize (c, this) &&
-                 mark1Array.sanitize (c, this) &&
-                 mark2Array.sanitize (c, this, (unsigned int) classCount));
+    return TRACE_RETURN (c->check_struct (this) && mark1Coverage.sanitize (c, this) &&
+                        mark2Coverage.sanitize (c, this) && mark1Array.sanitize (c, this)
+                        && mark2Array.sanitize (c, this, (unsigned int) classCount));
   }
 
   protected:
@@ -1365,10 +1323,10 @@ struct MarkMarkPos
   inline typename context_t::return_t dispatch (context_t *c) const
   {
     TRACE_DISPATCH (this, u.format);
-    if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
+    if (unlikely (!c->may_dispatch (this, &u.format))) TRACE_RETURN (c->default_return_value ());
     switch (u.format) {
-    case 1: return_trace (c->dispatch (u.format1));
-    default:return_trace (c->default_return_value ());
+    case 1: return TRACE_RETURN (c->dispatch (u.format1));
+    default:return TRACE_RETURN (c->default_return_value ());
     }
   }
 
@@ -1416,18 +1374,19 @@ struct PosLookupSubTable
   inline typename context_t::return_t dispatch (context_t *c, unsigned int lookup_type) const
   {
     TRACE_DISPATCH (this, lookup_type);
-    if (unlikely (!c->may_dispatch (this, &u.sub_format))) return_trace (c->no_dispatch_return_value ());
+    /* The sub_format passed to may_dispatch is unnecessary but harmless. */
+    if (unlikely (!c->may_dispatch (this, &u.sub_format))) TRACE_RETURN (c->default_return_value ());
     switch (lookup_type) {
-    case Single:               return_trace (u.single.dispatch (c));
-    case Pair:                 return_trace (u.pair.dispatch (c));
-    case Cursive:              return_trace (u.cursive.dispatch (c));
-    case MarkBase:             return_trace (u.markBase.dispatch (c));
-    case MarkLig:              return_trace (u.markLig.dispatch (c));
-    case MarkMark:             return_trace (u.markMark.dispatch (c));
-    case Context:              return_trace (u.context.dispatch (c));
-    case ChainContext:         return_trace (u.chainContext.dispatch (c));
-    case Extension:            return_trace (u.extension.dispatch (c));
-    default:                   return_trace (c->default_return_value ());
+    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 ());
     }
   }
 
@@ -1462,13 +1421,13 @@ struct PosLookup : Lookup
   inline bool apply (hb_apply_context_t *c) const
   {
     TRACE_APPLY (this);
-    return_trace (dispatch (c));
+    return TRACE_RETURN (dispatch (c));
   }
 
   inline hb_collect_glyphs_context_t::return_t collect_glyphs (hb_collect_glyphs_context_t *c) const
   {
     TRACE_COLLECT_GLYPHS (this);
-    return_trace (dispatch (c));
+    return TRACE_RETURN (dispatch (c));
   }
 
   template <typename set_t>
@@ -1490,8 +1449,9 @@ struct PosLookup : Lookup
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    if (unlikely (!Lookup::sanitize (c))) return_trace (false);
-    return_trace (dispatch (c));
+    if (unlikely (!Lookup::sanitize (c))) return TRACE_RETURN (false);
+    const OffsetArrayOf<PosLookupSubTable> &list = get_subtables<PosLookupSubTable> ();
+    return TRACE_RETURN (dispatch (c));
   }
 };
 
@@ -1509,15 +1469,14 @@ struct GPOS : GSUBGPOS
   { return CastR<PosLookup> (GSUBGPOS::get_lookup (i)); }
 
   static inline void position_start (hb_font_t *font, hb_buffer_t *buffer);
-  static inline void position_finish_advances (hb_font_t *font, hb_buffer_t *buffer);
-  static inline void position_finish_offsets (hb_font_t *font, hb_buffer_t *buffer);
+  static inline void position_finish (hb_font_t *font, hb_buffer_t *buffer);
 
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    if (unlikely (!GSUBGPOS::sanitize (c))) return_trace (false);
+    if (unlikely (!GSUBGPOS::sanitize (c))) return TRACE_RETURN (false);
     const OffsetTo<PosLookupList> &list = CastR<OffsetTo<PosLookupList> > (lookupList);
-    return_trace (list.sanitize (c, this));
+    return TRACE_RETURN (list.sanitize (c, this));
   }
   public:
   DEFINE_SIZE_STATIC (10);
@@ -1525,89 +1484,59 @@ struct GPOS : GSUBGPOS
 
 
 static void
-reverse_cursive_minor_offset (hb_glyph_position_t *pos, unsigned int i, hb_direction_t direction, unsigned int new_parent)
+fix_cursive_minor_offset (hb_glyph_position_t *pos, unsigned int i, hb_direction_t direction)
 {
-  int chain = pos[i].attach_chain(), type = pos[i].attach_type();
-  if (likely (!chain || 0 == (type & ATTACH_TYPE_CURSIVE)))
+  unsigned int j = pos[i].cursive_chain();
+  if (likely (!j))
     return;
 
-  pos[i].attach_chain() = 0;
-
-  unsigned int j = (int) i + chain;
+  j += i;
 
-  /* Stop if we see new parent in the chain. */
-  if (j == new_parent)
-    return;
+  pos[i].cursive_chain() = 0;
 
-  reverse_cursive_minor_offset (pos, j, direction, new_parent);
+  fix_cursive_minor_offset (pos, j, direction);
 
   if (HB_DIRECTION_IS_HORIZONTAL (direction))
-    pos[j].y_offset = -pos[i].y_offset;
+    pos[i].y_offset += pos[j].y_offset;
   else
-    pos[j].x_offset = -pos[i].x_offset;
-
-  pos[j].attach_chain() = -chain;
-  pos[j].attach_type() = type;
+    pos[i].x_offset += pos[j].x_offset;
 }
+
 static void
-propagate_attachment_offsets (hb_glyph_position_t *pos, unsigned int i, hb_direction_t direction)
+fix_mark_attachment (hb_glyph_position_t *pos, unsigned int i, hb_direction_t direction)
 {
-  /* Adjusts offsets of attached glyphs (both cursive and mark) to accumulate
-   * offset of glyph they are attached to. */
-  int chain = pos[i].attach_chain(), type = pos[i].attach_type();
-  if (likely (!chain))
+  if (likely (!(pos[i].attach_lookback())))
     return;
 
-  unsigned int j = (int) i + chain;
-
-  pos[i].attach_chain() = 0;
+  unsigned int j = i - pos[i].attach_lookback();
 
-  propagate_attachment_offsets (pos, j, direction);
+  pos[i].x_offset += pos[j].x_offset;
+  pos[i].y_offset += pos[j].y_offset;
 
-  assert (!!(type & ATTACH_TYPE_MARK) ^ !!(type & ATTACH_TYPE_CURSIVE));
-
-  if (type & ATTACH_TYPE_CURSIVE)
-  {
-    if (HB_DIRECTION_IS_HORIZONTAL (direction))
-      pos[i].y_offset += pos[j].y_offset;
-    else
-      pos[i].x_offset += pos[j].x_offset;
-  }
-  else /*if (type & ATTACH_TYPE_MARK)*/
-  {
-    pos[i].x_offset += pos[j].x_offset;
-    pos[i].y_offset += pos[j].y_offset;
-
-    assert (j < i);
-    if (HB_DIRECTION_IS_FORWARD (direction))
-      for (unsigned int k = j; k < i; k++) {
-       pos[i].x_offset -= pos[k].x_advance;
-       pos[i].y_offset -= pos[k].y_advance;
-      }
-    else
-      for (unsigned int k = j + 1; k < i + 1; k++) {
-       pos[i].x_offset += pos[k].x_advance;
-       pos[i].y_offset += pos[k].y_advance;
-      }
-  }
+  if (HB_DIRECTION_IS_FORWARD (direction))
+    for (unsigned int k = j; k < i; k++) {
+      pos[i].x_offset -= pos[k].x_advance;
+      pos[i].y_offset -= pos[k].y_advance;
+    }
+  else
+    for (unsigned int k = j + 1; k < i + 1; k++) {
+      pos[i].x_offset += pos[k].x_advance;
+      pos[i].y_offset += pos[k].y_advance;
+    }
 }
 
 void
 GPOS::position_start (hb_font_t *font HB_UNUSED, hb_buffer_t *buffer)
 {
+  buffer->clear_positions ();
+
   unsigned int count = buffer->len;
   for (unsigned int i = 0; i < count; i++)
-    buffer->pos[i].attach_chain() = buffer->pos[i].attach_type() = 0;
+    buffer->pos[i].attach_lookback() = buffer->pos[i].cursive_chain() = 0;
 }
 
 void
-GPOS::position_finish_advances (hb_font_t *font HB_UNUSED, hb_buffer_t *buffer)
-{
-  //_hb_buffer_assert_gsubgpos_vars (buffer);
-}
-
-void
-GPOS::position_finish_offsets (hb_font_t *font HB_UNUSED, hb_buffer_t *buffer)
+GPOS::position_finish (hb_font_t *font HB_UNUSED, hb_buffer_t *buffer)
 {
   _hb_buffer_assert_gsubgpos_vars (buffer);
 
@@ -1615,10 +1544,13 @@ GPOS::position_finish_offsets (hb_font_t *font HB_UNUSED, hb_buffer_t *buffer)
   hb_glyph_position_t *pos = hb_buffer_get_glyph_positions (buffer, &len);
   hb_direction_t direction = buffer->props.direction;
 
+  /* Handle cursive connections */
+  for (unsigned int i = 0; i < len; i++)
+    fix_cursive_minor_offset (pos, i, direction);
+
   /* Handle attachments */
-  if (buffer->scratch_flags & HB_BUFFER_SCRATCH_FLAG_HAS_GPOS_ATTACHMENT)
-    for (unsigned int i = 0; i < len; i++)
-      propagate_attachment_offsets (pos, i, direction);
+  for (unsigned int i = 0; i < len; i++)
+    fix_mark_attachment (pos, i, direction);
 }
 
 
@@ -1637,18 +1569,15 @@ template <typename context_t>
   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_lookup_index = c->lookup_index;
-  c->set_lookup_index (lookup_index);
-  c->set_lookup_props (l.get_props ());
+  c->set_lookup (l);
   bool ret = l.dispatch (c);
-  c->set_lookup_index (saved_lookup_index);
   c->set_lookup_props (saved_lookup_props);
   return ret;
 }
 
 
-#undef attach_chain
-#undef attach_type
+#undef attach_lookback
+#undef cursive_chain
 
 
 } /* namespace OT */
index 7de56cf..ebe4c9e 100644 (file)
@@ -67,7 +67,7 @@ struct SingleSubstFormat1
   inline bool would_apply (hb_would_apply_context_t *c) const
   {
     TRACE_WOULD_APPLY (this);
-    return_trace (c->len == 1 && (this+coverage).get_coverage (c->glyphs[0]) != NOT_COVERED);
+    return TRACE_RETURN (c->len == 1 && (this+coverage).get_coverage (c->glyphs[0]) != NOT_COVERED);
   }
 
   inline bool apply (hb_apply_context_t *c) const
@@ -75,14 +75,14 @@ struct SingleSubstFormat1
     TRACE_APPLY (this);
     hb_codepoint_t glyph_id = c->buffer->cur().codepoint;
     unsigned int index = (this+coverage).get_coverage (glyph_id);
-    if (likely (index == NOT_COVERED)) return_trace (false);
+    if (likely (index == NOT_COVERED)) return TRACE_RETURN (false);
 
     /* According to the Adobe Annotated OpenType Suite, result is always
      * limited to 16bit. */
     glyph_id = (glyph_id + deltaGlyphID) & 0xFFFFu;
     c->replace_glyph (glyph_id);
 
-    return_trace (true);
+    return TRACE_RETURN (true);
   }
 
   inline bool serialize (hb_serialize_context_t *c,
@@ -91,16 +91,16 @@ struct SingleSubstFormat1
                         int delta)
   {
     TRACE_SERIALIZE (this);
-    if (unlikely (!c->extend_min (*this))) return_trace (false);
-    if (unlikely (!coverage.serialize (c, this).serialize (c, glyphs, num_glyphs))) return_trace (false);
+    if (unlikely (!c->extend_min (*this))) return TRACE_RETURN (false);
+    if (unlikely (!coverage.serialize (c, this).serialize (c, glyphs, num_glyphs))) return TRACE_RETURN (false);
     deltaGlyphID.set (delta); /* TODO(serilaize) overflow? */
-    return_trace (true);
+    return TRACE_RETURN (true);
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    return_trace (coverage.sanitize (c, this) && deltaGlyphID.sanitize (c));
+    return TRACE_RETURN (coverage.sanitize (c, this) && deltaGlyphID.sanitize (c));
   }
 
   protected:
@@ -144,7 +144,7 @@ struct SingleSubstFormat2
   inline bool would_apply (hb_would_apply_context_t *c) const
   {
     TRACE_WOULD_APPLY (this);
-    return_trace (c->len == 1 && (this+coverage).get_coverage (c->glyphs[0]) != NOT_COVERED);
+    return TRACE_RETURN (c->len == 1 && (this+coverage).get_coverage (c->glyphs[0]) != NOT_COVERED);
   }
 
   inline bool apply (hb_apply_context_t *c) const
@@ -152,14 +152,14 @@ struct SingleSubstFormat2
     TRACE_APPLY (this);
     hb_codepoint_t glyph_id = c->buffer->cur().codepoint;
     unsigned int index = (this+coverage).get_coverage (glyph_id);
-    if (likely (index == NOT_COVERED)) return_trace (false);
+    if (likely (index == NOT_COVERED)) return TRACE_RETURN (false);
 
-    if (unlikely (index >= substitute.len)) return_trace (false);
+    if (unlikely (index >= substitute.len)) return TRACE_RETURN (false);
 
     glyph_id = substitute[index];
     c->replace_glyph (glyph_id);
 
-    return_trace (true);
+    return TRACE_RETURN (true);
   }
 
   inline bool serialize (hb_serialize_context_t *c,
@@ -168,16 +168,16 @@ struct SingleSubstFormat2
                         unsigned int num_glyphs)
   {
     TRACE_SERIALIZE (this);
-    if (unlikely (!c->extend_min (*this))) return_trace (false);
-    if (unlikely (!substitute.serialize (c, substitutes, num_glyphs))) return_trace (false);
-    if (unlikely (!coverage.serialize (c, this).serialize (c, glyphs, num_glyphs))) return_trace (false);
-    return_trace (true);
+    if (unlikely (!c->extend_min (*this))) return TRACE_RETURN (false);
+    if (unlikely (!substitute.serialize (c, substitutes, num_glyphs))) return TRACE_RETURN (false);
+    if (unlikely (!coverage.serialize (c, this).serialize (c, glyphs, num_glyphs))) return TRACE_RETURN (false);
+    return TRACE_RETURN (true);
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    return_trace (coverage.sanitize (c, this) && substitute.sanitize (c));
+    return TRACE_RETURN (coverage.sanitize (c, this) && substitute.sanitize (c));
   }
 
   protected:
@@ -200,7 +200,7 @@ struct SingleSubst
                         unsigned int num_glyphs)
   {
     TRACE_SERIALIZE (this);
-    if (unlikely (!c->extend_min (u.format))) return_trace (false);
+    if (unlikely (!c->extend_min (u.format))) return TRACE_RETURN (false);
     unsigned int format = 2;
     int delta = 0;
     if (num_glyphs) {
@@ -215,9 +215,9 @@ struct SingleSubst
     }
     u.format.set (format);
     switch (u.format) {
-    case 1: return_trace (u.format1.serialize (c, glyphs, num_glyphs, delta));
-    case 2: return_trace (u.format2.serialize (c, glyphs, substitutes, num_glyphs));
-    default:return_trace (false);
+    case 1: return TRACE_RETURN (u.format1.serialize (c, glyphs, num_glyphs, delta));
+    case 2: return TRACE_RETURN (u.format2.serialize (c, glyphs, substitutes, num_glyphs));
+    default:return TRACE_RETURN (false);
     }
   }
 
@@ -225,11 +225,11 @@ struct SingleSubst
   inline typename context_t::return_t dispatch (context_t *c) const
   {
     TRACE_DISPATCH (this, u.format);
-    if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
+    if (unlikely (!c->may_dispatch (this, &u.format))) TRACE_RETURN (c->default_return_value ());
     switch (u.format) {
-    case 1: return_trace (c->dispatch (u.format1));
-    case 2: return_trace (c->dispatch (u.format2));
-    default:return_trace (c->default_return_value ());
+    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 ());
     }
   }
 
@@ -273,14 +273,14 @@ struct Sequence
      * 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 (false);
+    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 (true);
+      return TRACE_RETURN (true);
     }
 
     unsigned int klass = _hb_glyph_info_is_ligature (&c->buffer->cur()) ?
@@ -292,7 +292,7 @@ struct Sequence
     }
     c->buffer->skip_glyph ();
 
-    return_trace (true);
+    return TRACE_RETURN (true);
   }
 
   inline bool serialize (hb_serialize_context_t *c,
@@ -300,15 +300,15 @@ struct Sequence
                         unsigned int num_glyphs)
   {
     TRACE_SERIALIZE (this);
-    if (unlikely (!c->extend_min (*this))) return_trace (false);
-    if (unlikely (!substitute.serialize (c, glyphs, num_glyphs))) return_trace (false);
-    return_trace (true);
+    if (unlikely (!c->extend_min (*this))) return TRACE_RETURN (false);
+    if (unlikely (!substitute.serialize (c, glyphs, num_glyphs))) return TRACE_RETURN (false);
+    return TRACE_RETURN (true);
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    return_trace (substitute.sanitize (c));
+    return TRACE_RETURN (substitute.sanitize (c));
   }
 
   protected:
@@ -347,7 +347,7 @@ struct MultipleSubstFormat1
   inline bool would_apply (hb_would_apply_context_t *c) const
   {
     TRACE_WOULD_APPLY (this);
-    return_trace (c->len == 1 && (this+coverage).get_coverage (c->glyphs[0]) != NOT_COVERED);
+    return TRACE_RETURN (c->len == 1 && (this+coverage).get_coverage (c->glyphs[0]) != NOT_COVERED);
   }
 
   inline bool apply (hb_apply_context_t *c) const
@@ -355,9 +355,9 @@ struct MultipleSubstFormat1
     TRACE_APPLY (this);
 
     unsigned int index = (this+coverage).get_coverage (c->buffer->cur().codepoint);
-    if (likely (index == NOT_COVERED)) return_trace (false);
+    if (likely (index == NOT_COVERED)) return TRACE_RETURN (false);
 
-    return_trace ((this+sequence[index]).apply (c));
+    return TRACE_RETURN ((this+sequence[index]).apply (c));
   }
 
   inline bool serialize (hb_serialize_context_t *c,
@@ -367,21 +367,21 @@ struct MultipleSubstFormat1
                         Supplier<GlyphID> &substitute_glyphs_list)
   {
     TRACE_SERIALIZE (this);
-    if (unlikely (!c->extend_min (*this))) return_trace (false);
-    if (unlikely (!sequence.serialize (c, num_glyphs))) return_trace (false);
+    if (unlikely (!c->extend_min (*this))) return TRACE_RETURN (false);
+    if (unlikely (!sequence.serialize (c, num_glyphs))) return TRACE_RETURN (false);
     for (unsigned int i = 0; i < num_glyphs; i++)
       if (unlikely (!sequence[i].serialize (c, this).serialize (c,
                                                                substitute_glyphs_list,
-                                                               substitute_len_list[i]))) return_trace (false);
+                                                               substitute_len_list[i]))) return TRACE_RETURN (false);
     substitute_len_list.advance (num_glyphs);
-    if (unlikely (!coverage.serialize (c, this).serialize (c, glyphs, num_glyphs))) return_trace (false);
-    return_trace (true);
+    if (unlikely (!coverage.serialize (c, this).serialize (c, glyphs, num_glyphs))) return TRACE_RETURN (false);
+    return TRACE_RETURN (true);
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    return_trace (coverage.sanitize (c, this) && sequence.sanitize (c, this));
+    return TRACE_RETURN (coverage.sanitize (c, this) && sequence.sanitize (c, this));
   }
 
   protected:
@@ -405,12 +405,12 @@ struct MultipleSubst
                         Supplier<GlyphID> &substitute_glyphs_list)
   {
     TRACE_SERIALIZE (this);
-    if (unlikely (!c->extend_min (u.format))) return_trace (false);
+    if (unlikely (!c->extend_min (u.format))) return TRACE_RETURN (false);
     unsigned int format = 1;
     u.format.set (format);
     switch (u.format) {
-    case 1: return_trace (u.format1.serialize (c, glyphs, substitute_len_list, num_glyphs, substitute_glyphs_list));
-    default:return_trace (false);
+    case 1: return TRACE_RETURN (u.format1.serialize (c, glyphs, substitute_len_list, num_glyphs, substitute_glyphs_list));
+    default:return TRACE_RETURN (false);
     }
   }
 
@@ -418,10 +418,10 @@ struct MultipleSubst
   inline typename context_t::return_t dispatch (context_t *c) const
   {
     TRACE_DISPATCH (this, u.format);
-    if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
+    if (unlikely (!c->may_dispatch (this, &u.format))) TRACE_RETURN (c->default_return_value ());
     switch (u.format) {
-    case 1: return_trace (c->dispatch (u.format1));
-    default:return_trace (c->default_return_value ());
+    case 1: return TRACE_RETURN (c->dispatch (u.format1));
+    default:return TRACE_RETURN (c->default_return_value ());
     }
   }
 
@@ -473,7 +473,7 @@ struct AlternateSubstFormat1
   inline bool would_apply (hb_would_apply_context_t *c) const
   {
     TRACE_WOULD_APPLY (this);
-    return_trace (c->len == 1 && (this+coverage).get_coverage (c->glyphs[0]) != NOT_COVERED);
+    return TRACE_RETURN (c->len == 1 && (this+coverage).get_coverage (c->glyphs[0]) != NOT_COVERED);
   }
 
   inline bool apply (hb_apply_context_t *c) const
@@ -482,11 +482,11 @@ struct AlternateSubstFormat1
     hb_codepoint_t glyph_id = c->buffer->cur().codepoint;
 
     unsigned int index = (this+coverage).get_coverage (glyph_id);
-    if (likely (index == NOT_COVERED)) return_trace (false);
+    if (likely (index == NOT_COVERED)) return TRACE_RETURN (false);
 
     const AlternateSet &alt_set = this+alternateSet[index];
 
-    if (unlikely (!alt_set.len)) return_trace (false);
+    if (unlikely (!alt_set.len)) return TRACE_RETURN (false);
 
     hb_mask_t glyph_mask = c->buffer->cur().mask;
     hb_mask_t lookup_mask = c->lookup_mask;
@@ -495,13 +495,13 @@ struct AlternateSubstFormat1
     unsigned int shift = _hb_ctz (lookup_mask);
     unsigned int alt_index = ((lookup_mask & glyph_mask) >> shift);
 
-    if (unlikely (alt_index > alt_set.len || alt_index == 0)) return_trace (false);
+    if (unlikely (alt_index > alt_set.len || alt_index == 0)) return TRACE_RETURN (false);
 
     glyph_id = alt_set[alt_index - 1];
 
     c->replace_glyph (glyph_id);
 
-    return_trace (true);
+    return TRACE_RETURN (true);
   }
 
   inline bool serialize (hb_serialize_context_t *c,
@@ -511,21 +511,21 @@ struct AlternateSubstFormat1
                         Supplier<GlyphID> &alternate_glyphs_list)
   {
     TRACE_SERIALIZE (this);
-    if (unlikely (!c->extend_min (*this))) return_trace (false);
-    if (unlikely (!alternateSet.serialize (c, num_glyphs))) return_trace (false);
+    if (unlikely (!c->extend_min (*this))) return TRACE_RETURN (false);
+    if (unlikely (!alternateSet.serialize (c, num_glyphs))) return TRACE_RETURN (false);
     for (unsigned int i = 0; i < num_glyphs; i++)
       if (unlikely (!alternateSet[i].serialize (c, this).serialize (c,
                                                                    alternate_glyphs_list,
-                                                                   alternate_len_list[i]))) return_trace (false);
+                                                                   alternate_len_list[i]))) return TRACE_RETURN (false);
     alternate_len_list.advance (num_glyphs);
-    if (unlikely (!coverage.serialize (c, this).serialize (c, glyphs, num_glyphs))) return_trace (false);
-    return_trace (true);
+    if (unlikely (!coverage.serialize (c, this).serialize (c, glyphs, num_glyphs))) return TRACE_RETURN (false);
+    return TRACE_RETURN (true);
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    return_trace (coverage.sanitize (c, this) && alternateSet.sanitize (c, this));
+    return TRACE_RETURN (coverage.sanitize (c, this) && alternateSet.sanitize (c, this));
   }
 
   protected:
@@ -549,12 +549,12 @@ struct AlternateSubst
                         Supplier<GlyphID> &alternate_glyphs_list)
   {
     TRACE_SERIALIZE (this);
-    if (unlikely (!c->extend_min (u.format))) return_trace (false);
+    if (unlikely (!c->extend_min (u.format))) return TRACE_RETURN (false);
     unsigned int format = 1;
     u.format.set (format);
     switch (u.format) {
-    case 1: return_trace (u.format1.serialize (c, glyphs, alternate_len_list, num_glyphs, alternate_glyphs_list));
-    default:return_trace (false);
+    case 1: return TRACE_RETURN (u.format1.serialize (c, glyphs, alternate_len_list, num_glyphs, alternate_glyphs_list));
+    default:return TRACE_RETURN (false);
     }
   }
 
@@ -562,10 +562,10 @@ struct AlternateSubst
   inline typename context_t::return_t dispatch (context_t *c) const
   {
     TRACE_DISPATCH (this, u.format);
-    if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
+    if (unlikely (!c->may_dispatch (this, &u.format))) TRACE_RETURN (c->default_return_value ());
     switch (u.format) {
-    case 1: return_trace (c->dispatch (u.format1));
-    default:return_trace (c->default_return_value ());
+    case 1: return TRACE_RETURN (c->dispatch (u.format1));
+    default:return TRACE_RETURN (c->default_return_value ());
     }
   }
 
@@ -602,13 +602,13 @@ struct Ligature
   {
     TRACE_WOULD_APPLY (this);
     if (c->len != component.len)
-      return_trace (false);
+      return TRACE_RETURN (false);
 
     for (unsigned int i = 1; i < c->len; i++)
       if (likely (c->glyphs[i] != component[i]))
-       return_trace (false);
+       return TRACE_RETURN (false);
 
-    return_trace (true);
+    return TRACE_RETURN (true);
   }
 
   inline bool apply (hb_apply_context_t *c) const
@@ -616,21 +616,21 @@ struct Ligature
     TRACE_APPLY (this);
     unsigned int count = component.len;
 
-    if (unlikely (!count)) return_trace (false);
+    if (unlikely (!count)) return TRACE_RETURN (false);
 
     /* Special-case to make it in-place and not consider this
      * as a "ligated" substitution. */
     if (unlikely (count == 1))
     {
       c->replace_glyph (ligGlyph);
-      return_trace (true);
+      return TRACE_RETURN (true);
     }
 
     bool is_mark_ligature = false;
     unsigned int total_component_count = 0;
 
     unsigned int match_length = 0;
-    unsigned int match_positions[HB_MAX_CONTEXT_LENGTH];
+    unsigned int match_positions[MAX_CONTEXT_LENGTH];
 
     if (likely (!match_input (c, count,
                              &component[1],
@@ -640,7 +640,7 @@ struct Ligature
                              match_positions,
                              &is_mark_ligature,
                              &total_component_count)))
-      return_trace (false);
+      return TRACE_RETURN (false);
 
     ligate_input (c,
                  count,
@@ -650,7 +650,7 @@ struct Ligature
                  is_mark_ligature,
                  total_component_count);
 
-    return_trace (true);
+    return TRACE_RETURN (true);
   }
 
   inline bool serialize (hb_serialize_context_t *c,
@@ -659,17 +659,17 @@ struct Ligature
                         unsigned int num_components /* Including first component */)
   {
     TRACE_SERIALIZE (this);
-    if (unlikely (!c->extend_min (*this))) return_trace (false);
+    if (unlikely (!c->extend_min (*this))) return TRACE_RETURN (false);
     ligGlyph = ligature;
-    if (unlikely (!component.serialize (c, components, num_components))) return_trace (false);
-    return_trace (true);
+    if (unlikely (!component.serialize (c, components, num_components))) return TRACE_RETURN (false);
+    return TRACE_RETURN (true);
   }
 
   public:
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    return_trace (ligGlyph.sanitize (c) && component.sanitize (c));
+    return TRACE_RETURN (ligGlyph.sanitize (c) && component.sanitize (c));
   }
 
   protected:
@@ -708,9 +708,9 @@ struct LigatureSet
     {
       const Ligature &lig = this+ligature[i];
       if (lig.would_apply (c))
-        return_trace (true);
+        return TRACE_RETURN (true);
     }
-    return_trace (false);
+    return TRACE_RETURN (false);
   }
 
   inline bool apply (hb_apply_context_t *c) const
@@ -720,10 +720,10 @@ struct LigatureSet
     for (unsigned int i = 0; i < num_ligs; i++)
     {
       const Ligature &lig = this+ligature[i];
-      if (lig.apply (c)) return_trace (true);
+      if (lig.apply (c)) return TRACE_RETURN (true);
     }
 
-    return_trace (false);
+    return TRACE_RETURN (false);
   }
 
   inline bool serialize (hb_serialize_context_t *c,
@@ -733,22 +733,22 @@ struct LigatureSet
                         Supplier<GlyphID> &component_list /* Starting from second for each ligature */)
   {
     TRACE_SERIALIZE (this);
-    if (unlikely (!c->extend_min (*this))) return_trace (false);
-    if (unlikely (!ligature.serialize (c, num_ligatures))) return_trace (false);
+    if (unlikely (!c->extend_min (*this))) return TRACE_RETURN (false);
+    if (unlikely (!ligature.serialize (c, num_ligatures))) return TRACE_RETURN (false);
     for (unsigned int i = 0; i < num_ligatures; i++)
       if (unlikely (!ligature[i].serialize (c, this).serialize (c,
                                                                ligatures[i],
                                                                component_list,
-                                                               component_count_list[i]))) return_trace (false);
+                                                               component_count_list[i]))) return TRACE_RETURN (false);
     ligatures.advance (num_ligatures);
     component_count_list.advance (num_ligatures);
-    return_trace (true);
+    return TRACE_RETURN (true);
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    return_trace (ligature.sanitize (c, this));
+    return TRACE_RETURN (ligature.sanitize (c, this));
   }
 
   protected:
@@ -790,10 +790,10 @@ struct LigatureSubstFormat1
   {
     TRACE_WOULD_APPLY (this);
     unsigned int index = (this+coverage).get_coverage (c->glyphs[0]);
-    if (likely (index == NOT_COVERED)) return_trace (false);
+    if (likely (index == NOT_COVERED)) return TRACE_RETURN (false);
 
     const LigatureSet &lig_set = this+ligatureSet[index];
-    return_trace (lig_set.would_apply (c));
+    return TRACE_RETURN (lig_set.would_apply (c));
   }
 
   inline bool apply (hb_apply_context_t *c) const
@@ -802,10 +802,10 @@ struct LigatureSubstFormat1
     hb_codepoint_t glyph_id = c->buffer->cur().codepoint;
 
     unsigned int index = (this+coverage).get_coverage (glyph_id);
-    if (likely (index == NOT_COVERED)) return_trace (false);
+    if (likely (index == NOT_COVERED)) return TRACE_RETURN (false);
 
     const LigatureSet &lig_set = this+ligatureSet[index];
-    return_trace (lig_set.apply (c));
+    return TRACE_RETURN (lig_set.apply (c));
   }
 
   inline bool serialize (hb_serialize_context_t *c,
@@ -817,23 +817,23 @@ struct LigatureSubstFormat1
                         Supplier<GlyphID> &component_list /* Starting from second for each ligature */)
   {
     TRACE_SERIALIZE (this);
-    if (unlikely (!c->extend_min (*this))) return_trace (false);
-    if (unlikely (!ligatureSet.serialize (c, num_first_glyphs))) return_trace (false);
+    if (unlikely (!c->extend_min (*this))) return TRACE_RETURN (false);
+    if (unlikely (!ligatureSet.serialize (c, num_first_glyphs))) return TRACE_RETURN (false);
     for (unsigned int i = 0; i < num_first_glyphs; i++)
       if (unlikely (!ligatureSet[i].serialize (c, this).serialize (c,
                                                                   ligatures_list,
                                                                   component_count_list,
                                                                   ligature_per_first_glyph_count_list[i],
-                                                                  component_list))) return_trace (false);
+                                                                  component_list))) return TRACE_RETURN (false);
     ligature_per_first_glyph_count_list.advance (num_first_glyphs);
-    if (unlikely (!coverage.serialize (c, this).serialize (c, first_glyphs, num_first_glyphs))) return_trace (false);
-    return_trace (true);
+    if (unlikely (!coverage.serialize (c, this).serialize (c, first_glyphs, num_first_glyphs))) return TRACE_RETURN (false);
+    return TRACE_RETURN (true);
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    return_trace (coverage.sanitize (c, this) && ligatureSet.sanitize (c, this));
+    return TRACE_RETURN (coverage.sanitize (c, this) && ligatureSet.sanitize (c, this));
   }
 
   protected:
@@ -859,18 +859,13 @@ struct LigatureSubst
                         Supplier<GlyphID> &component_list /* Starting from second for each ligature */)
   {
     TRACE_SERIALIZE (this);
-    if (unlikely (!c->extend_min (u.format))) return_trace (false);
+    if (unlikely (!c->extend_min (u.format))) return TRACE_RETURN (false);
     unsigned int format = 1;
     u.format.set (format);
     switch (u.format) {
-    case 1: return_trace (u.format1.serialize (c,
-                                              first_glyphs,
-                                              ligature_per_first_glyph_count_list,
-                                              num_first_glyphs,
-                                              ligatures_list,
-                                              component_count_list,
-                                              component_list));
-    default:return_trace (false);
+    case 1: return TRACE_RETURN (u.format1.serialize (c, first_glyphs, ligature_per_first_glyph_count_list, num_first_glyphs,
+                                                     ligatures_list, component_count_list, component_list));
+    default:return TRACE_RETURN (false);
     }
   }
 
@@ -878,10 +873,10 @@ struct LigatureSubst
   inline typename context_t::return_t dispatch (context_t *c) const
   {
     TRACE_DISPATCH (this, u.format);
-    if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
+    if (unlikely (!c->may_dispatch (this, &u.format))) TRACE_RETURN (c->default_return_value ());
     switch (u.format) {
-    case 1: return_trace (c->dispatch (u.format1));
-    default:return_trace (c->default_return_value ());
+    case 1: return TRACE_RETURN (c->dispatch (u.format1));
+    default:return TRACE_RETURN (c->default_return_value ());
     }
   }
 
@@ -964,17 +959,17 @@ struct ReverseChainSingleSubstFormat1
   inline bool would_apply (hb_would_apply_context_t *c) const
   {
     TRACE_WOULD_APPLY (this);
-    return_trace (c->len == 1 && (this+coverage).get_coverage (c->glyphs[0]) != NOT_COVERED);
+    return TRACE_RETURN (c->len == 1 && (this+coverage).get_coverage (c->glyphs[0]) != NOT_COVERED);
   }
 
   inline bool apply (hb_apply_context_t *c) const
   {
     TRACE_APPLY (this);
-    if (unlikely (c->nesting_level_left != HB_MAX_NESTING_LEVEL))
-      return_trace (false); /* No chaining to this type */
+    if (unlikely (c->nesting_level_left != MAX_NESTING_LEVEL))
+      return TRACE_RETURN (false); /* No chaining to this type */
 
     unsigned int index = (this+coverage).get_coverage (c->buffer->cur().codepoint);
-    if (likely (index == NOT_COVERED)) return_trace (false);
+    if (likely (index == NOT_COVERED)) return TRACE_RETURN (false);
 
     const OffsetArrayOf<Coverage> &lookahead = StructAfter<OffsetArrayOf<Coverage> > (backtrack);
     const ArrayOf<GlyphID> &substitute = StructAfter<ArrayOf<GlyphID> > (lookahead);
@@ -991,22 +986,22 @@ struct ReverseChainSingleSubstFormat1
       /* 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 (true);
+      return TRACE_RETURN (true);
     }
 
-    return_trace (false);
+    return TRACE_RETURN (false);
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
     if (!(coverage.sanitize (c, this) && backtrack.sanitize (c, this)))
-      return_trace (false);
+      return TRACE_RETURN (false);
     const OffsetArrayOf<Coverage> &lookahead = StructAfter<OffsetArrayOf<Coverage> > (backtrack);
     if (!lookahead.sanitize (c, this))
-      return_trace (false);
+      return TRACE_RETURN (false);
     const ArrayOf<GlyphID> &substitute = StructAfter<ArrayOf<GlyphID> > (lookahead);
-    return_trace (substitute.sanitize (c));
+    return TRACE_RETURN (substitute.sanitize (c));
   }
 
   protected:
@@ -1035,10 +1030,10 @@ struct ReverseChainSingleSubst
   inline typename context_t::return_t dispatch (context_t *c) const
   {
     TRACE_DISPATCH (this, u.format);
-    if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
+    if (unlikely (!c->may_dispatch (this, &u.format))) TRACE_RETURN (c->default_return_value ());
     switch (u.format) {
-    case 1: return_trace (c->dispatch (u.format1));
-    default:return_trace (c->default_return_value ());
+    case 1: return TRACE_RETURN (c->dispatch (u.format1));
+    default:return TRACE_RETURN (c->default_return_value ());
     }
   }
 
@@ -1074,17 +1069,18 @@ struct SubstLookupSubTable
   inline typename context_t::return_t dispatch (context_t *c, unsigned int lookup_type) const
   {
     TRACE_DISPATCH (this, lookup_type);
-    if (unlikely (!c->may_dispatch (this, &u.sub_format))) return_trace (c->no_dispatch_return_value ());
+    /* The sub_format passed to may_dispatch is unnecessary but harmless. */
+    if (unlikely (!c->may_dispatch (this, &u.sub_format))) TRACE_RETURN (c->default_return_value ());
     switch (lookup_type) {
-    case Single:               return_trace (u.single.dispatch (c));
-    case Multiple:             return_trace (u.multiple.dispatch (c));
-    case Alternate:            return_trace (u.alternate.dispatch (c));
-    case Ligature:             return_trace (u.ligature.dispatch (c));
-    case Context:              return_trace (u.context.dispatch (c));
-    case ChainContext:         return_trace (u.chainContext.dispatch (c));
-    case Extension:            return_trace (u.extension.dispatch (c));
-    case ReverseChainSingle:   return_trace (u.reverseChainContextSingle.dispatch (c));
-    default:                   return_trace (c->default_return_value ());
+    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 ());
     }
   }
 
@@ -1124,21 +1120,21 @@ struct SubstLookup : Lookup
   inline bool apply (hb_apply_context_t *c) const
   {
     TRACE_APPLY (this);
-    return_trace (dispatch (c));
+    return TRACE_RETURN (dispatch (c));
   }
 
   inline hb_closure_context_t::return_t closure (hb_closure_context_t *c) const
   {
     TRACE_CLOSURE (this);
     c->set_recurse_func (dispatch_recurse_func<hb_closure_context_t>);
-    return_trace (dispatch (c));
+    return TRACE_RETURN (dispatch (c));
   }
 
   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 (dispatch_recurse_func<hb_collect_glyphs_context_t>);
-    return_trace (dispatch (c));
+    return TRACE_RETURN (dispatch (c));
   }
 
   template <typename set_t>
@@ -1152,9 +1148,9 @@ struct SubstLookup : Lookup
                           const hb_ot_layout_lookup_accelerator_t *accel) const
   {
     TRACE_WOULD_APPLY (this);
-    if (unlikely (!c->len))  return_trace (false);
-    if (!accel->may_have (c->glyphs[0]))  return_trace (false);
-      return_trace (dispatch (c));
+    if (unlikely (!c->len))  return TRACE_RETURN (false);
+    if (!accel->may_have (c->glyphs[0]))  return TRACE_RETURN (false);
+      return TRACE_RETURN (dispatch (c));
   }
 
   static bool apply_recurse_func (hb_apply_context_t *c, unsigned int lookup_index);
@@ -1170,8 +1166,8 @@ struct SubstLookup : Lookup
                                unsigned int num_glyphs)
   {
     TRACE_SERIALIZE (this);
-    if (unlikely (!Lookup::serialize (c, SubstLookupSubTable::Single, lookup_props, 1))) return_trace (false);
-    return_trace (serialize_subtable (c, 0).u.single.serialize (c, glyphs, substitutes, num_glyphs));
+    if (unlikely (!Lookup::serialize (c, SubstLookupSubTable::Single, lookup_props, 1))) return TRACE_RETURN (false);
+    return TRACE_RETURN (serialize_subtable (c, 0).u.single.serialize (c, glyphs, substitutes, num_glyphs));
   }
 
   inline bool serialize_multiple (hb_serialize_context_t *c,
@@ -1182,12 +1178,9 @@ struct SubstLookup : Lookup
                                  Supplier<GlyphID> &substitute_glyphs_list)
   {
     TRACE_SERIALIZE (this);
-    if (unlikely (!Lookup::serialize (c, SubstLookupSubTable::Multiple, lookup_props, 1))) return_trace (false);
-    return_trace (serialize_subtable (c, 0).u.multiple.serialize (c,
-                                                                 glyphs,
-                                                                 substitute_len_list,
-                                                                 num_glyphs,
-                                                                 substitute_glyphs_list));
+    if (unlikely (!Lookup::serialize (c, SubstLookupSubTable::Multiple, lookup_props, 1))) return TRACE_RETURN (false);
+    return TRACE_RETURN (serialize_subtable (c, 0).u.multiple.serialize (c, glyphs, substitute_len_list, num_glyphs,
+                                                                        substitute_glyphs_list));
   }
 
   inline bool serialize_alternate (hb_serialize_context_t *c,
@@ -1198,12 +1191,9 @@ struct SubstLookup : Lookup
                                   Supplier<GlyphID> &alternate_glyphs_list)
   {
     TRACE_SERIALIZE (this);
-    if (unlikely (!Lookup::serialize (c, SubstLookupSubTable::Alternate, lookup_props, 1))) return_trace (false);
-    return_trace (serialize_subtable (c, 0).u.alternate.serialize (c,
-                                                                  glyphs,
-                                                                  alternate_len_list,
-                                                                  num_glyphs,
-                                                                  alternate_glyphs_list));
+    if (unlikely (!Lookup::serialize (c, SubstLookupSubTable::Alternate, lookup_props, 1))) return TRACE_RETURN (false);
+    return TRACE_RETURN (serialize_subtable (c, 0).u.alternate.serialize (c, glyphs, alternate_len_list, num_glyphs,
+                                                                         alternate_glyphs_list));
   }
 
   inline bool serialize_ligature (hb_serialize_context_t *c,
@@ -1216,14 +1206,9 @@ struct SubstLookup : Lookup
                                  Supplier<GlyphID> &component_list /* Starting from second for each ligature */)
   {
     TRACE_SERIALIZE (this);
-    if (unlikely (!Lookup::serialize (c, SubstLookupSubTable::Ligature, lookup_props, 1))) return_trace (false);
-    return_trace (serialize_subtable (c, 0).u.ligature.serialize (c,
-                                                                 first_glyphs,
-                                                                 ligature_per_first_glyph_count_list,
-                                                                 num_first_glyphs,
-                                                                 ligatures_list,
-                                                                 component_count_list,
-                                                                 component_list));
+    if (unlikely (!Lookup::serialize (c, SubstLookupSubTable::Ligature, lookup_props, 1))) return TRACE_RETURN (false);
+    return TRACE_RETURN (serialize_subtable (c, 0).u.ligature.serialize (c, first_glyphs, ligature_per_first_glyph_count_list, num_first_glyphs,
+                                                                        ligatures_list, component_count_list, component_list));
   }
 
   template <typename context_t>
@@ -1236,8 +1221,9 @@ struct SubstLookup : Lookup
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    if (unlikely (!Lookup::sanitize (c))) return_trace (false);
-    if (unlikely (!dispatch (c))) return_trace (false);
+    if (unlikely (!Lookup::sanitize (c))) return TRACE_RETURN (false);
+    const OffsetArrayOf<SubstLookupSubTable> &list = get_subtables<SubstLookupSubTable> ();
+    if (unlikely (!dispatch (c))) return TRACE_RETURN (false);
 
     if (unlikely (get_type () == SubstLookupSubTable::Extension))
     {
@@ -1248,9 +1234,9 @@ struct SubstLookup : Lookup
       unsigned int count = get_subtable_count ();
       for (unsigned int i = 1; i < count; i++)
         if (get_subtable (i).u.extension.get_type () != type)
-         return_trace (false);
+         return TRACE_RETURN (false);
     }
-    return_trace (true);
+    return TRACE_RETURN (true);
   }
 };
 
@@ -1268,13 +1254,14 @@ struct GSUB : GSUBGPOS
   { return CastR<SubstLookup> (GSUBGPOS::get_lookup (i)); }
 
   static inline void substitute_start (hb_font_t *font, hb_buffer_t *buffer);
+  static inline void substitute_finish (hb_font_t *font, hb_buffer_t *buffer);
 
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    if (unlikely (!GSUBGPOS::sanitize (c))) return_trace (false);
+    if (unlikely (!GSUBGPOS::sanitize (c))) return TRACE_RETURN (false);
     const OffsetTo<SubstLookupList> &list = CastR<OffsetTo<SubstLookupList> > (lookupList);
-    return_trace (list.sanitize (c, this));
+    return TRACE_RETURN (list.sanitize (c, this));
   }
   public:
   DEFINE_SIZE_STATIC (10);
@@ -1288,32 +1275,19 @@ GSUB::substitute_start (hb_font_t *font, hb_buffer_t *buffer)
 
   const GDEF &gdef = *hb_ot_layout_from_face (font->face)->gdef;
   unsigned int count = buffer->len;
-  hb_glyph_info_t *info = buffer->info;
   for (unsigned int i = 0; i < count; i++)
   {
-    unsigned int props = gdef.get_glyph_props (info[i].codepoint);
-    if (!props)
-    {
-      /* 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. */
-      props = (_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], props);
-    _hb_glyph_info_clear_lig_props (&info[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;
   }
 }
 
+void
+GSUB::substitute_finish (hb_font_t *font HB_UNUSED, hb_buffer_t *buffer HB_UNUSED)
+{
+}
+
 
 /* Out-of-class implementation for methods recursing */
 
@@ -1338,11 +1312,8 @@ template <typename context_t>
   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_lookup_index = c->lookup_index;
-  c->set_lookup_index (lookup_index);
-  c->set_lookup_props (l.get_props ());
+  c->set_lookup (l);
   bool ret = l.dispatch (c);
-  c->set_lookup_index (saved_lookup_index);
   c->set_lookup_props (saved_lookup_props);
   return ret;
 }
index 56c5015..cbc6840 100644 (file)
@@ -46,11 +46,14 @@ namespace OT {
        (&c->debug_depth, c->get_name (), this, HB_FUNC, \
         "");
 
-struct hb_closure_context_t :
-       hb_dispatch_context_t<hb_closure_context_t, hb_void_t, HB_DEBUG_CLOSURE>
+struct hb_closure_context_t
 {
   inline const char *get_name (void) { return "CLOSURE"; }
+  static const unsigned int max_debug_depth = HB_DEBUG_CLOSURE;
+  typedef hb_void_t return_t;
   typedef return_t (*recurse_func_t) (hb_closure_context_t *c, unsigned int lookup_index);
+  template <typename T, typename F>
+  inline bool may_dispatch (const T *obj, const F *format) { return true; }
   template <typename T>
   inline return_t dispatch (const T &obj) { obj.closure (this); return HB_VOID; }
   static return_t default_return_value (void) { return HB_VOID; }
@@ -74,7 +77,7 @@ struct hb_closure_context_t :
 
   hb_closure_context_t (hb_face_t *face_,
                        hb_set_t *glyphs_,
-                       unsigned int nesting_level_left_ = HB_MAX_NESTING_LEVEL) :
+                       unsigned int nesting_level_left_ = MAX_NESTING_LEVEL) :
                          face (face_),
                          glyphs (glyphs_),
                          recurse_func (NULL),
@@ -95,10 +98,13 @@ struct hb_closure_context_t :
        (&c->debug_depth, c->get_name (), this, HB_FUNC, \
         "%d glyphs", c->len);
 
-struct hb_would_apply_context_t :
-       hb_dispatch_context_t<hb_would_apply_context_t, bool, HB_DEBUG_WOULD_APPLY>
+struct hb_would_apply_context_t
 {
   inline const char *get_name (void) { return "WOULD_APPLY"; }
+  static const unsigned int max_debug_depth = HB_DEBUG_WOULD_APPLY;
+  typedef bool return_t;
+  template <typename T, typename F>
+  inline bool may_dispatch (const T *obj, const F *format) { return true; }
   template <typename T>
   inline return_t dispatch (const T &obj) { return obj.would_apply (this); }
   static return_t default_return_value (void) { return false; }
@@ -132,11 +138,14 @@ struct hb_would_apply_context_t :
        (&c->debug_depth, c->get_name (), this, HB_FUNC, \
         "");
 
-struct hb_collect_glyphs_context_t :
-       hb_dispatch_context_t<hb_collect_glyphs_context_t, hb_void_t, HB_DEBUG_COLLECT_GLYPHS>
+struct hb_collect_glyphs_context_t
 {
   inline const char *get_name (void) { return "COLLECT_GLYPHS"; }
+  static const unsigned int max_debug_depth = HB_DEBUG_COLLECT_GLYPHS;
+  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, typename F>
+  inline bool may_dispatch (const T *obj, const F *format) { return true; }
   template <typename T>
   inline return_t dispatch (const T &obj) { obj.collect_glyphs (this); return HB_VOID; }
   static return_t default_return_value (void) { return HB_VOID; }
@@ -196,7 +205,7 @@ struct hb_collect_glyphs_context_t :
                               hb_set_t  *glyphs_input,  /* OUT. May be NULL */
                               hb_set_t  *glyphs_after,  /* OUT. May be NULL */
                               hb_set_t  *glyphs_output, /* OUT. May be NULL */
-                              unsigned int nesting_level_left_ = HB_MAX_NESTING_LEVEL) :
+                              unsigned int nesting_level_left_ = MAX_NESTING_LEVEL) :
                              face (face_),
                              before (glyphs_before ? glyphs_before : hb_set_get_empty ()),
                              input  (glyphs_input  ? glyphs_input  : hb_set_get_empty ()),
@@ -223,14 +232,14 @@ struct hb_collect_glyphs_context_t :
 #define HB_DEBUG_GET_COVERAGE (HB_DEBUG+0)
 #endif
 
-/* XXX Can we remove this? */
-
 template <typename set_t>
-struct hb_add_coverage_context_t :
-       hb_dispatch_context_t<hb_add_coverage_context_t<set_t>, const Coverage &, HB_DEBUG_GET_COVERAGE>
+struct hb_add_coverage_context_t
 {
   inline const char *get_name (void) { return "GET_COVERAGE"; }
+  static const unsigned int max_debug_depth = HB_DEBUG_GET_COVERAGE;
   typedef const Coverage &return_t;
+  template <typename T, typename F>
+  inline bool may_dispatch (const T *obj, const F *format) { return true; }
   template <typename T>
   inline return_t dispatch (const T &obj) { return obj.get_coverage (); }
   static return_t default_return_value (void) { return Null(Coverage); }
@@ -257,11 +266,9 @@ struct hb_add_coverage_context_t :
 #define TRACE_APPLY(this) \
        hb_auto_trace_t<HB_DEBUG_APPLY, bool> trace \
        (&c->debug_depth, c->get_name (), this, HB_FUNC, \
-        "idx %d gid %u lookup %d", \
-        c->buffer->idx, c->buffer->cur().codepoint, (int) c->lookup_index);
+        "idx %d codepoint %u", c->buffer->idx, c->buffer->cur().codepoint);
 
-struct hb_apply_context_t :
-       hb_dispatch_context_t<hb_apply_context_t, bool, HB_DEBUG_APPLY>
+struct hb_apply_context_t
 {
   struct matcher_t
   {
@@ -319,9 +326,10 @@ struct hb_apply_context_t :
       if (!c->check_glyph_property (&info, lookup_props))
        return SKIP_YES;
 
-      if (unlikely (_hb_glyph_info_is_default_ignorable_and_not_fvs (&info) &&
+      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))))
+                   (ignore_zwj || !_hb_glyph_info_is_zwj (&info)) &&
+                   !_hb_glyph_info_ligated (&info)))
        return SKIP_MAYBE;
 
       return SKIP_NO;
@@ -355,11 +363,11 @@ struct hb_apply_context_t :
     {
       matcher.set_lookup_props (lookup_props);
     }
-    inline void set_match_func (matcher_t::match_func_t match_func_,
-                               const void *match_data_,
+    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_);
+      matcher.set_match_func (match_func, match_data);
       match_glyph_data = glyph_data;
     }
 
@@ -441,7 +449,11 @@ struct hb_apply_context_t :
 
 
   inline const char *get_name (void) { return "APPLY"; }
+  static const unsigned int max_debug_depth = HB_DEBUG_APPLY;
+  typedef bool return_t;
   typedef return_t (*recurse_func_t) (hb_apply_context_t *c, unsigned int lookup_index);
+  template <typename T, typename F>
+  inline bool may_dispatch (const T *obj, const F *format) { return true; }
   template <typename T>
   inline return_t dispatch (const T &obj) { return obj.apply (this); }
   static return_t default_return_value (void) { return false; }
@@ -470,7 +482,6 @@ struct hb_apply_context_t :
   const GDEF &gdef;
   bool has_glyph_classes;
   skipping_iterator_t iter_input, iter_context;
-  unsigned int lookup_index;
   unsigned int debug_depth;
 
 
@@ -483,19 +494,18 @@ struct hb_apply_context_t :
                        lookup_mask (1),
                        auto_zwj (true),
                        recurse_func (NULL),
-                       nesting_level_left (HB_MAX_NESTING_LEVEL),
+                       nesting_level_left (MAX_NESTING_LEVEL),
                        lookup_props (0),
                        gdef (*hb_ot_layout_from_face (face)->gdef),
                        has_glyph_classes (gdef.has_glyph_classes ()),
                        iter_input (),
                        iter_context (),
-                       lookup_index ((unsigned int) -1),
                        debug_depth (0) {}
 
   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_index (unsigned int lookup_index_) { lookup_index = lookup_index_; }
+  inline void set_lookup (const Lookup &l) { set_lookup_props (l.get_props ()); }
   inline void set_lookup_props (unsigned int lookup_props_)
   {
     lookup_props = lookup_props_;
@@ -506,39 +516,39 @@ struct hb_apply_context_t :
   inline bool
   match_properties_mark (hb_codepoint_t  glyph,
                         unsigned int    glyph_props,
-                        unsigned int    match_props) const
+                        unsigned int    lookup_props) const
   {
     /* If using mark filtering sets, the high short of
-     * match_props has the set index.
+     * lookup_props has the set index.
      */
-    if (match_props & LookupFlag::UseMarkFilteringSet)
-      return gdef.mark_set_covers (match_props >> 16, glyph);
+    if (lookup_props & LookupFlag::UseMarkFilteringSet)
+      return gdef.mark_set_covers (lookup_props >> 16, glyph);
 
-    /* The second byte of match_props has the meaning
+    /* The second byte of lookup_props has the meaning
      * "ignore marks of attachment type different than
      * the attachment type specified."
      */
-    if (match_props & LookupFlag::MarkAttachmentType)
-      return (match_props & LookupFlag::MarkAttachmentType) == (glyph_props & LookupFlag::MarkAttachmentType);
+    if (lookup_props & LookupFlag::MarkAttachmentType)
+      return (lookup_props & LookupFlag::MarkAttachmentType) == (glyph_props & LookupFlag::MarkAttachmentType);
 
     return true;
   }
 
   inline bool
   check_glyph_property (const hb_glyph_info_t *info,
-                       unsigned int  match_props) const
+                       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
-     * match_props includes LookupFlags::IgnoreLigatures
+     * lookup_props includes LookupFlags::IgnoreLigatures
      */
-    if (glyph_props & match_props & LookupFlag::IgnoreFlags)
+    if (glyph_props & lookup_props & LookupFlag::IgnoreFlags)
       return false;
 
     if (unlikely (glyph_props & HB_OT_LAYOUT_GLYPH_PROPS_MARK))
-      return match_properties_mark (glyph, glyph_props, match_props);
+      return match_properties_mark (glyph, glyph_props, lookup_props);
 
     return true;
   }
@@ -704,13 +714,13 @@ static inline bool match_input (hb_apply_context_t *c,
                                match_func_t match_func,
                                const void *match_data,
                                unsigned int *end_offset,
-                               unsigned int match_positions[HB_MAX_CONTEXT_LENGTH],
+                               unsigned int match_positions[MAX_CONTEXT_LENGTH],
                                bool *p_is_mark_ligature = NULL,
                                unsigned int *p_total_component_count = NULL)
 {
   TRACE_APPLY (NULL);
 
-  if (unlikely (count > HB_MAX_CONTEXT_LENGTH)) return_trace (false);
+  if (unlikely (count > MAX_CONTEXT_LENGTH)) TRACE_RETURN (false);
 
   hb_buffer_t *buffer = c->buffer;
 
@@ -747,7 +757,7 @@ static inline bool match_input (hb_apply_context_t *c,
   match_positions[0] = buffer->idx;
   for (unsigned int i = 1; i < count; i++)
   {
-    if (!skippy_iter.next ()) return_trace (false);
+    if (!skippy_iter.next ()) return TRACE_RETURN (false);
 
     match_positions[i] = skippy_iter.idx;
 
@@ -759,13 +769,13 @@ static inline bool match_input (hb_apply_context_t *c,
        * all subsequent components should be attached to the same ligature
        * component, otherwise we shouldn't ligate them. */
       if (first_lig_id != this_lig_id || first_lig_comp != this_lig_comp)
-       return_trace (false);
+       return TRACE_RETURN (false);
     } else {
       /* If first component was NOT attached to a previous ligature component,
        * all subsequent components should also NOT be attached to any ligature
        * component, unless they are attached to the first component itself! */
       if (this_lig_id && this_lig_comp && (this_lig_id != first_lig_id))
-       return_trace (false);
+       return TRACE_RETURN (false);
     }
 
     is_mark_ligature = is_mark_ligature && _hb_glyph_info_is_mark (&buffer->info[skippy_iter.idx]);
@@ -780,11 +790,11 @@ static inline bool match_input (hb_apply_context_t *c,
   if (p_total_component_count)
     *p_total_component_count = total_component_count;
 
-  return_trace (true);
+  return TRACE_RETURN (true);
 }
-static inline bool ligate_input (hb_apply_context_t *c,
+static inline void ligate_input (hb_apply_context_t *c,
                                 unsigned int count, /* Including the first glyph */
-                                unsigned int match_positions[HB_MAX_CONTEXT_LENGTH], /* Including the first glyph */
+                                unsigned int match_positions[MAX_CONTEXT_LENGTH], /* Including the first glyph */
                                 unsigned int match_length,
                                 hb_codepoint_t lig_glyph,
                                 bool is_mark_ligature,
@@ -836,21 +846,19 @@ static inline bool ligate_input (hb_apply_context_t *c,
     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++)
   {
-    while (buffer->idx < match_positions[i] && !buffer->in_error)
+    while (buffer->idx < match_positions[i])
     {
       if (!is_mark_ligature) {
-        unsigned int this_comp = _hb_glyph_info_get_lig_comp (&buffer->cur());
-       if (this_comp == 0)
-         this_comp = last_num_components;
        unsigned int new_lig_comp = components_so_far - last_num_components +
-                                   MIN (this_comp, last_num_components);
-         _hb_glyph_info_set_lig_props_for_mark (&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);
       }
       buffer->next_glyph ();
     }
@@ -867,17 +875,14 @@ static inline bool ligate_input (hb_apply_context_t *c,
     /* Re-adjust components for any marks following. */
     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 this_comp = _hb_glyph_info_get_lig_comp (&buffer->info[i]);
-       if (!this_comp)
-         break;
        unsigned int new_lig_comp = components_so_far - last_num_components +
-                                   MIN (this_comp, last_num_components);
+                                   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;
     }
   }
-  return_trace (true);
+  TRACE_RETURN (true);
 }
 
 static inline bool match_backtrack (hb_apply_context_t *c,
@@ -894,9 +899,9 @@ static inline bool match_backtrack (hb_apply_context_t *c,
 
   for (unsigned int i = 0; i < count; i++)
     if (!skippy_iter.prev ())
-      return_trace (false);
+      return TRACE_RETURN (false);
 
-  return_trace (true);
+  return TRACE_RETURN (true);
 }
 
 static inline bool match_lookahead (hb_apply_context_t *c,
@@ -914,9 +919,9 @@ static inline bool match_lookahead (hb_apply_context_t *c,
 
   for (unsigned int i = 0; i < count; i++)
     if (!skippy_iter.next ())
-      return_trace (false);
+      return TRACE_RETURN (false);
 
-  return_trace (true);
+  return TRACE_RETURN (true);
 }
 
 
@@ -926,7 +931,7 @@ struct LookupRecord
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    return_trace (c->check_struct (this));
+    return TRACE_RETURN (c->check_struct (this));
   }
 
   USHORT       sequenceIndex;          /* Index into current glyph
@@ -949,7 +954,7 @@ static inline void recurse_lookups (context_t *c,
 
 static inline bool apply_lookup (hb_apply_context_t *c,
                                 unsigned int count, /* Including the first glyph */
-                                unsigned int match_positions[HB_MAX_CONTEXT_LENGTH], /* Including the first glyph */
+                                unsigned int match_positions[MAX_CONTEXT_LENGTH], /* Including the first glyph */
                                 unsigned int lookupCount,
                                 const LookupRecord lookupRecord[], /* Array of LookupRecords--in design order */
                                 unsigned int match_length)
@@ -971,17 +976,12 @@ static inline bool apply_lookup (hb_apply_context_t *c,
       match_positions[j] += delta;
   }
 
-  for (unsigned int i = 0; i < lookupCount && !buffer->in_error; i++)
+  for (unsigned int i = 0; i < lookupCount; i++)
   {
     unsigned int idx = lookupRecord[i].sequenceIndex;
     if (idx >= count)
       continue;
 
-    /* Don't recurse to ourself at same position.
-     * Note that this test is too naive, it doesn't catch longer loops. */
-    if (idx == 0 && lookupRecord[i].lookupListIndex == c->lookup_index)
-      continue;
-
     buffer->move_to (match_positions[idx]);
 
     unsigned int orig_len = buffer->backtrack_len () + buffer->lookahead_len ();
@@ -999,13 +999,13 @@ static inline bool apply_lookup (hb_apply_context_t *c,
     /* 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 (MIN((int) match_positions[idx] + 1, (int) new_len), int (end) + delta);
+    end = MAX ((int) match_positions[idx] + 1, int (end) + delta);
 
     unsigned int next = idx + 1; /* next now is the position after the recursed lookup. */
 
     if (delta > 0)
     {
-      if (unlikely (delta + count > HB_MAX_CONTEXT_LENGTH))
+      if (unlikely (delta + count > MAX_CONTEXT_LENGTH))
        break;
     }
     else
@@ -1032,7 +1032,7 @@ static inline bool apply_lookup (hb_apply_context_t *c,
 
   buffer->move_to (end);
 
-  return_trace (true);
+  return TRACE_RETURN (true);
 }
 
 
@@ -1104,7 +1104,7 @@ static inline bool context_apply_lookup (hb_apply_context_t *c,
                                         ContextApplyLookupContext &lookup_context)
 {
   unsigned int match_length = 0;
-  unsigned int match_positions[HB_MAX_CONTEXT_LENGTH];
+  unsigned int match_positions[MAX_CONTEXT_LENGTH];
   return match_input (c,
                      inputCount, input,
                      lookup_context.funcs.match, lookup_context.match_data,
@@ -1141,14 +1141,14 @@ struct Rule
   {
     TRACE_WOULD_APPLY (this);
     const LookupRecord *lookupRecord = &StructAtOffset<LookupRecord> (inputZ, inputZ[0].static_size * (inputCount ? inputCount - 1 : 0));
-    return_trace (context_would_apply_lookup (c, inputCount, inputZ, lookupCount, lookupRecord, lookup_context));
+    return TRACE_RETURN (context_would_apply_lookup (c, inputCount, inputZ, lookupCount, lookupRecord, lookup_context));
   }
 
   inline bool apply (hb_apply_context_t *c, ContextApplyLookupContext &lookup_context) const
   {
     TRACE_APPLY (this);
     const LookupRecord *lookupRecord = &StructAtOffset<LookupRecord> (inputZ, inputZ[0].static_size * (inputCount ? inputCount - 1 : 0));
-    return_trace (context_apply_lookup (c, inputCount, inputZ, lookupCount, lookupRecord, lookup_context));
+    return TRACE_RETURN (context_apply_lookup (c, inputCount, inputZ, lookupCount, lookupRecord, lookup_context));
   }
 
   public:
@@ -1200,9 +1200,9 @@ struct RuleSet
     for (unsigned int i = 0; i < num_rules; i++)
     {
       if ((this+rule[i]).would_apply (c, lookup_context))
-        return_trace (true);
+        return TRACE_RETURN (true);
     }
-    return_trace (false);
+    return TRACE_RETURN (false);
   }
 
   inline bool apply (hb_apply_context_t *c, ContextApplyLookupContext &lookup_context) const
@@ -1212,15 +1212,15 @@ struct RuleSet
     for (unsigned int i = 0; i < num_rules; i++)
     {
       if ((this+rule[i]).apply (c, lookup_context))
-        return_trace (true);
+        return TRACE_RETURN (true);
     }
-    return_trace (false);
+    return TRACE_RETURN (false);
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    return_trace (rule.sanitize (c, this));
+    return TRACE_RETURN (rule.sanitize (c, this));
   }
 
   protected:
@@ -1277,7 +1277,7 @@ struct ContextFormat1
       {match_glyph},
       NULL
     };
-    return_trace (rule_set.would_apply (c, lookup_context));
+    return TRACE_RETURN (rule_set.would_apply (c, lookup_context));
   }
 
   inline const Coverage &get_coverage (void) const
@@ -1290,20 +1290,20 @@ struct ContextFormat1
     TRACE_APPLY (this);
     unsigned int index = (this+coverage).get_coverage (c->buffer->cur().codepoint);
     if (likely (index == NOT_COVERED))
-      return_trace (false);
+      return TRACE_RETURN (false);
 
     const RuleSet &rule_set = this+ruleSet[index];
     struct ContextApplyLookupContext lookup_context = {
       {match_glyph},
       NULL
     };
-    return_trace (rule_set.apply (c, lookup_context));
+    return TRACE_RETURN (rule_set.apply (c, lookup_context));
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    return_trace (coverage.sanitize (c, this) && ruleSet.sanitize (c, this));
+    return TRACE_RETURN (coverage.sanitize (c, this) && ruleSet.sanitize (c, this));
   }
 
   protected:
@@ -1369,7 +1369,7 @@ struct ContextFormat2
       {match_class},
       &class_def
     };
-    return_trace (rule_set.would_apply (c, lookup_context));
+    return TRACE_RETURN (rule_set.would_apply (c, lookup_context));
   }
 
   inline const Coverage &get_coverage (void) const
@@ -1381,7 +1381,7 @@ struct ContextFormat2
   {
     TRACE_APPLY (this);
     unsigned int index = (this+coverage).get_coverage (c->buffer->cur().codepoint);
-    if (likely (index == NOT_COVERED)) return_trace (false);
+    if (likely (index == NOT_COVERED)) return TRACE_RETURN (false);
 
     const ClassDef &class_def = this+classDef;
     index = class_def.get_class (c->buffer->cur().codepoint);
@@ -1390,13 +1390,13 @@ struct ContextFormat2
       {match_class},
       &class_def
     };
-    return_trace (rule_set.apply (c, lookup_context));
+    return TRACE_RETURN (rule_set.apply (c, lookup_context));
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    return_trace (coverage.sanitize (c, this) && classDef.sanitize (c, this) && ruleSet.sanitize (c, this));
+    return TRACE_RETURN (coverage.sanitize (c, this) && classDef.sanitize (c, this) && ruleSet.sanitize (c, this));
   }
 
   protected:
@@ -1460,7 +1460,7 @@ struct ContextFormat3
       {match_coverage},
       this
     };
-    return_trace (context_would_apply_lookup (c, glyphCount, (const USHORT *) (coverageZ + 1), lookupCount, lookupRecord, lookup_context));
+    return TRACE_RETURN (context_would_apply_lookup (c, glyphCount, (const USHORT *) (coverageZ + 1), lookupCount, lookupRecord, lookup_context));
   }
 
   inline const Coverage &get_coverage (void) const
@@ -1472,27 +1472,27 @@ struct ContextFormat3
   {
     TRACE_APPLY (this);
     unsigned int index = (this+coverageZ[0]).get_coverage (c->buffer->cur().codepoint);
-    if (likely (index == NOT_COVERED)) return_trace (false);
+    if (likely (index == NOT_COVERED)) return TRACE_RETURN (false);
 
     const LookupRecord *lookupRecord = &StructAtOffset<LookupRecord> (coverageZ, coverageZ[0].static_size * glyphCount);
     struct ContextApplyLookupContext lookup_context = {
       {match_coverage},
       this
     };
-    return_trace (context_apply_lookup (c, glyphCount, (const USHORT *) (coverageZ + 1), lookupCount, lookupRecord, lookup_context));
+    return TRACE_RETURN (context_apply_lookup (c, glyphCount, (const USHORT *) (coverageZ + 1), lookupCount, lookupRecord, lookup_context));
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    if (!c->check_struct (this)) return_trace (false);
+    if (!c->check_struct (this)) return TRACE_RETURN (false);
     unsigned int count = glyphCount;
-    if (!count) return_trace (false); /* We want to access coverageZ[0] freely. */
-    if (!c->check_array (coverageZ, coverageZ[0].static_size, count)) return_trace (false);
+    if (!count) return TRACE_RETURN (false); /* We want to access coverageZ[0] freely. */
+    if (!c->check_array (coverageZ, coverageZ[0].static_size, count)) return TRACE_RETURN (false);
     for (unsigned int i = 0; i < count; i++)
-      if (!coverageZ[i].sanitize (c, this)) return_trace (false);
+      if (!coverageZ[i].sanitize (c, this)) return TRACE_RETURN (false);
     const LookupRecord *lookupRecord = &StructAtOffset<LookupRecord> (coverageZ, coverageZ[0].static_size * count);
-    return_trace (c->check_array (lookupRecord, lookupRecord[0].static_size, lookupCount));
+    return TRACE_RETURN (c->check_array (lookupRecord, lookupRecord[0].static_size, lookupCount));
   }
 
   protected:
@@ -1515,12 +1515,12 @@ struct Context
   inline typename context_t::return_t dispatch (context_t *c) const
   {
     TRACE_DISPATCH (this, u.format);
-    if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
+    if (unlikely (!c->may_dispatch (this, &u.format))) TRACE_RETURN (c->default_return_value ());
     switch (u.format) {
-    case 1: return_trace (c->dispatch (u.format1));
-    case 2: return_trace (c->dispatch (u.format2));
-    case 3: return_trace (c->dispatch (u.format3));
-    default:return_trace (c->default_return_value ());
+    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 ());
     }
   }
 
@@ -1631,7 +1631,7 @@ static inline bool chain_context_apply_lookup (hb_apply_context_t *c,
                                               ChainContextApplyLookupContext &lookup_context)
 {
   unsigned int match_length = 0;
-  unsigned int match_positions[HB_MAX_CONTEXT_LENGTH];
+  unsigned int match_positions[MAX_CONTEXT_LENGTH];
   return match_input (c,
                      inputCount, input,
                      lookup_context.funcs.match, lookup_context.match_data[1],
@@ -1685,11 +1685,11 @@ struct ChainRule
     const HeadlessArrayOf<USHORT> &input = StructAfter<HeadlessArrayOf<USHORT> > (backtrack);
     const ArrayOf<USHORT> &lookahead = StructAfter<ArrayOf<USHORT> > (input);
     const ArrayOf<LookupRecord> &lookup = StructAfter<ArrayOf<LookupRecord> > (lookahead);
-    return_trace (chain_context_would_apply_lookup (c,
-                                                   backtrack.len, backtrack.array,
-                                                   input.len, input.array,
-                                                   lookahead.len, lookahead.array, lookup.len,
-                                                   lookup.array, lookup_context));
+    return TRACE_RETURN (chain_context_would_apply_lookup (c,
+                                                          backtrack.len, backtrack.array,
+                                                          input.len, input.array,
+                                                          lookahead.len, lookahead.array, lookup.len,
+                                                          lookup.array, lookup_context));
   }
 
   inline bool apply (hb_apply_context_t *c, ChainContextApplyLookupContext &lookup_context) const
@@ -1698,23 +1698,23 @@ struct ChainRule
     const HeadlessArrayOf<USHORT> &input = StructAfter<HeadlessArrayOf<USHORT> > (backtrack);
     const ArrayOf<USHORT> &lookahead = StructAfter<ArrayOf<USHORT> > (input);
     const ArrayOf<LookupRecord> &lookup = StructAfter<ArrayOf<LookupRecord> > (lookahead);
-    return_trace (chain_context_apply_lookup (c,
-                                             backtrack.len, backtrack.array,
-                                             input.len, input.array,
-                                             lookahead.len, lookahead.array, lookup.len,
-                                             lookup.array, lookup_context));
+    return TRACE_RETURN (chain_context_apply_lookup (c,
+                                                    backtrack.len, backtrack.array,
+                                                    input.len, input.array,
+                                                    lookahead.len, lookahead.array, lookup.len,
+                                                    lookup.array, lookup_context));
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    if (!backtrack.sanitize (c)) return_trace (false);
+    if (!backtrack.sanitize (c)) return TRACE_RETURN (false);
     const HeadlessArrayOf<USHORT> &input = StructAfter<HeadlessArrayOf<USHORT> > (backtrack);
-    if (!input.sanitize (c)) return_trace (false);
+    if (!input.sanitize (c)) return TRACE_RETURN (false);
     const ArrayOf<USHORT> &lookahead = StructAfter<ArrayOf<USHORT> > (input);
-    if (!lookahead.sanitize (c)) return_trace (false);
+    if (!lookahead.sanitize (c)) return TRACE_RETURN (false);
     const ArrayOf<LookupRecord> &lookup = StructAfter<ArrayOf<LookupRecord> > (lookahead);
-    return_trace (lookup.sanitize (c));
+    return TRACE_RETURN (lookup.sanitize (c));
   }
 
   protected:
@@ -1759,9 +1759,9 @@ struct ChainRuleSet
     unsigned int num_rules = rule.len;
     for (unsigned int i = 0; i < num_rules; i++)
       if ((this+rule[i]).would_apply (c, lookup_context))
-        return_trace (true);
+        return TRACE_RETURN (true);
 
-    return_trace (false);
+    return TRACE_RETURN (false);
   }
 
   inline bool apply (hb_apply_context_t *c, ChainContextApplyLookupContext &lookup_context) const
@@ -1770,15 +1770,15 @@ struct ChainRuleSet
     unsigned int num_rules = rule.len;
     for (unsigned int i = 0; i < num_rules; i++)
       if ((this+rule[i]).apply (c, lookup_context))
-        return_trace (true);
+        return TRACE_RETURN (true);
 
-    return_trace (false);
+    return TRACE_RETURN (false);
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    return_trace (rule.sanitize (c, this));
+    return TRACE_RETURN (rule.sanitize (c, this));
   }
 
   protected:
@@ -1833,7 +1833,7 @@ struct ChainContextFormat1
       {match_glyph},
       {NULL, NULL, NULL}
     };
-    return_trace (rule_set.would_apply (c, lookup_context));
+    return TRACE_RETURN (rule_set.would_apply (c, lookup_context));
   }
 
   inline const Coverage &get_coverage (void) const
@@ -1845,20 +1845,20 @@ struct ChainContextFormat1
   {
     TRACE_APPLY (this);
     unsigned int index = (this+coverage).get_coverage (c->buffer->cur().codepoint);
-    if (likely (index == NOT_COVERED)) return_trace (false);
+    if (likely (index == NOT_COVERED)) return TRACE_RETURN (false);
 
     const ChainRuleSet &rule_set = this+ruleSet[index];
     struct ChainContextApplyLookupContext lookup_context = {
       {match_glyph},
       {NULL, NULL, NULL}
     };
-    return_trace (rule_set.apply (c, lookup_context));
+    return TRACE_RETURN (rule_set.apply (c, lookup_context));
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    return_trace (coverage.sanitize (c, this) && ruleSet.sanitize (c, this));
+    return TRACE_RETURN (coverage.sanitize (c, this) && ruleSet.sanitize (c, this));
   }
 
   protected:
@@ -1937,7 +1937,7 @@ struct ChainContextFormat2
        &input_class_def,
        &lookahead_class_def}
     };
-    return_trace (rule_set.would_apply (c, lookup_context));
+    return TRACE_RETURN (rule_set.would_apply (c, lookup_context));
   }
 
   inline const Coverage &get_coverage (void) const
@@ -1949,7 +1949,7 @@ struct ChainContextFormat2
   {
     TRACE_APPLY (this);
     unsigned int index = (this+coverage).get_coverage (c->buffer->cur().codepoint);
-    if (likely (index == NOT_COVERED)) return_trace (false);
+    if (likely (index == NOT_COVERED)) return TRACE_RETURN (false);
 
     const ClassDef &backtrack_class_def = this+backtrackClassDef;
     const ClassDef &input_class_def = this+inputClassDef;
@@ -1963,17 +1963,15 @@ struct ChainContextFormat2
        &input_class_def,
        &lookahead_class_def}
     };
-    return_trace (rule_set.apply (c, lookup_context));
+    return TRACE_RETURN (rule_set.apply (c, lookup_context));
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    return_trace (coverage.sanitize (c, this) &&
-                 backtrackClassDef.sanitize (c, this) &&
-                 inputClassDef.sanitize (c, this) &&
-                 lookaheadClassDef.sanitize (c, this) &&
-                 ruleSet.sanitize (c, this));
+    return TRACE_RETURN (coverage.sanitize (c, this) && backtrackClassDef.sanitize (c, this) &&
+                        inputClassDef.sanitize (c, this) && lookaheadClassDef.sanitize (c, this) &&
+                        ruleSet.sanitize (c, this));
   }
 
   protected:
@@ -2056,11 +2054,11 @@ struct ChainContextFormat3
       {match_coverage},
       {this, this, this}
     };
-    return_trace (chain_context_would_apply_lookup (c,
-                                                   backtrack.len, (const USHORT *) backtrack.array,
-                                                   input.len, (const USHORT *) input.array + 1,
-                                                   lookahead.len, (const USHORT *) lookahead.array,
-                                                   lookup.len, lookup.array, lookup_context));
+    return TRACE_RETURN (chain_context_would_apply_lookup (c,
+                                                          backtrack.len, (const USHORT *) backtrack.array,
+                                                          input.len, (const USHORT *) input.array + 1,
+                                                          lookahead.len, (const USHORT *) lookahead.array,
+                                                          lookup.len, lookup.array, lookup_context));
   }
 
   inline const Coverage &get_coverage (void) const
@@ -2075,7 +2073,7 @@ struct ChainContextFormat3
     const OffsetArrayOf<Coverage> &input = StructAfter<OffsetArrayOf<Coverage> > (backtrack);
 
     unsigned int index = (this+input[0]).get_coverage (c->buffer->cur().codepoint);
-    if (likely (index == NOT_COVERED)) return_trace (false);
+    if (likely (index == NOT_COVERED)) return TRACE_RETURN (false);
 
     const OffsetArrayOf<Coverage> &lookahead = StructAfter<OffsetArrayOf<Coverage> > (input);
     const ArrayOf<LookupRecord> &lookup = StructAfter<ArrayOf<LookupRecord> > (lookahead);
@@ -2083,24 +2081,24 @@ struct ChainContextFormat3
       {match_coverage},
       {this, this, this}
     };
-    return_trace (chain_context_apply_lookup (c,
-                                             backtrack.len, (const USHORT *) backtrack.array,
-                                             input.len, (const USHORT *) input.array + 1,
-                                             lookahead.len, (const USHORT *) lookahead.array,
-                                             lookup.len, lookup.array, lookup_context));
+    return TRACE_RETURN (chain_context_apply_lookup (c,
+                                                    backtrack.len, (const USHORT *) backtrack.array,
+                                                    input.len, (const USHORT *) input.array + 1,
+                                                    lookahead.len, (const USHORT *) lookahead.array,
+                                                    lookup.len, lookup.array, lookup_context));
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    if (!backtrack.sanitize (c, this)) return_trace (false);
+    if (!backtrack.sanitize (c, this)) return TRACE_RETURN (false);
     const OffsetArrayOf<Coverage> &input = StructAfter<OffsetArrayOf<Coverage> > (backtrack);
-    if (!input.sanitize (c, this)) return_trace (false);
-    if (!input.len) return_trace (false); /* To be consistent with Context. */
+    if (!input.sanitize (c, this)) return TRACE_RETURN (false);
+    if (!input.len) return TRACE_RETURN (false); /* To be consistent with Context. */
     const OffsetArrayOf<Coverage> &lookahead = StructAfter<OffsetArrayOf<Coverage> > (input);
-    if (!lookahead.sanitize (c, this)) return_trace (false);
+    if (!lookahead.sanitize (c, this)) return TRACE_RETURN (false);
     const ArrayOf<LookupRecord> &lookup = StructAfter<ArrayOf<LookupRecord> > (lookahead);
-    return_trace (lookup.sanitize (c));
+    return TRACE_RETURN (lookup.sanitize (c));
   }
 
   protected:
@@ -2130,12 +2128,12 @@ struct ChainContext
   inline typename context_t::return_t dispatch (context_t *c) const
   {
     TRACE_DISPATCH (this, u.format);
-    if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
+    if (unlikely (!c->may_dispatch (this, &u.format))) TRACE_RETURN (c->default_return_value ());
     switch (u.format) {
-    case 1: return_trace (c->dispatch (u.format1));
-    case 2: return_trace (c->dispatch (u.format2));
-    case 3: return_trace (c->dispatch (u.format3));
-    default:return_trace (c->default_return_value ());
+    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 ());
     }
   }
 
@@ -2166,15 +2164,15 @@ struct ExtensionFormat1
   inline typename context_t::return_t dispatch (context_t *c) const
   {
     TRACE_DISPATCH (this, format);
-    if (unlikely (!c->may_dispatch (this, this))) return_trace (c->no_dispatch_return_value ());
-    return_trace (get_subtable<typename T::LookupSubTable> ().dispatch (c, get_type ()));
+    if (unlikely (!c->may_dispatch (this, this))) TRACE_RETURN (c->default_return_value ());
+    return get_subtable<typename T::LookupSubTable> ().dispatch (c, get_type ());
   }
 
   /* This is called from may_dispatch() above with hb_sanitize_context_t. */
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    return_trace (c->check_struct (this) && extensionOffset != 0);
+    return TRACE_RETURN (c->check_struct (this) && extensionOffset != 0);
   }
 
   protected:
@@ -2211,10 +2209,10 @@ struct Extension
   inline typename context_t::return_t dispatch (context_t *c) const
   {
     TRACE_DISPATCH (this, u.format);
-    if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
+    if (unlikely (!c->may_dispatch (this, &u.format))) TRACE_RETURN (c->default_return_value ());
     switch (u.format) {
-    case 1: return_trace (u.format1.dispatch (c));
-    default:return_trace (c->default_return_value ());
+    case 1: return TRACE_RETURN (u.format1.dispatch (c));
+    default:return TRACE_RETURN (c->default_return_value ());
     }
   }
 
@@ -2269,15 +2267,14 @@ struct GSUBGPOS
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    return_trace (version.sanitize (c) &&
-                 likely (version.major == 1) &&
-                 scriptList.sanitize (c, this) &&
-                 featureList.sanitize (c, this) &&
-                 lookupList.sanitize (c, this));
+    return TRACE_RETURN (version.sanitize (c) && likely (version.major == 1) &&
+                        scriptList.sanitize (c, this) &&
+                        featureList.sanitize (c, this) &&
+                        lookupList.sanitize (c, this));
   }
 
   protected:
-  FixedVersion<>version;       /* Version of the GSUB/GPOS table--initially set
+  FixedVersion version;        /* Version of the GSUB/GPOS table--initially set
                                 * to 0x00010000u */
   OffsetTo<ScriptList>
                scriptList;     /* ScriptList table */
index c306849..739dfd9 100644 (file)
@@ -57,17 +57,17 @@ struct JstfPriority
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    return_trace (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));
+    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:
@@ -127,7 +127,7 @@ struct JstfLangSys : OffsetListOf<JstfPriority>
                        const Record<JstfLangSys>::sanitize_closure_t * = NULL) const
   {
     TRACE_SANITIZE (this);
-    return_trace (OffsetListOf<JstfPriority>::sanitize (c));
+    return TRACE_RETURN (OffsetListOf<JstfPriority>::sanitize (c));
   }
 };
 
@@ -168,9 +168,9 @@ struct JstfScript
                        const Record<JstfScript>::sanitize_closure_t * = NULL) const
   {
     TRACE_SANITIZE (this);
-    return_trace (extenderGlyphs.sanitize (c, this) &&
-                 defaultLangSys.sanitize (c, this) &&
-                 langSys.sanitize (c, this));
+    return TRACE_RETURN (extenderGlyphs.sanitize (c, this) &&
+                        defaultLangSys.sanitize (c, this) &&
+                        langSys.sanitize (c, this));
   }
 
   protected:
@@ -212,13 +212,12 @@ struct JSTF
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    return_trace (version.sanitize (c) &&
-                 likely (version.major == 1) &&
-                 scriptList.sanitize (c, 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
+  FixedVersion version;        /* Version of the JSTF table--initially set
                                 * to 0x00010000u */
   RecordArrayOf<JstfScript>
                scriptList;     /* Array of JstfScripts--listed
index 778b2c4..47fecd2 100644 (file)
 #include "hb-set-private.hh"
 
 
-/* Private API corresponding to hb-ot-layout.h: */
-
-HB_INTERNAL hb_bool_t
-hb_ot_layout_table_find_feature (hb_face_t    *face,
-                                hb_tag_t      table_tag,
-                                hb_tag_t      feature_tag,
-                                unsigned int *feature_index);
-
-
 /*
  * GDEF
  */
 
-enum hb_ot_layout_glyph_props_flags_t
+typedef enum
 {
   /* The following three match LookupFlags::Ignore* numbers. */
   HB_OT_LAYOUT_GLYPH_PROPS_BASE_GLYPH  = 0x02u,
@@ -64,8 +55,7 @@ enum hb_ot_layout_glyph_props_flags_t
   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_MARK_AS_FLAG_T (hb_ot_layout_glyph_props_flags_t);
+} hb_ot_layout_glyph_class_mask_t;
 
 
 /*
@@ -99,20 +89,21 @@ hb_ot_layout_substitute_lookup (OT::hb_apply_context_t *c,
                                const hb_ot_layout_lookup_accelerator_t &accel);
 
 
-/* Should be called before all the position_lookup's are done. */
+/* Should be called after all the substitute_lookup's are done */
 HB_INTERNAL void
-hb_ot_layout_position_start (hb_font_t    *font,
-                            hb_buffer_t  *buffer);
+hb_ot_layout_substitute_finish (hb_font_t    *font,
+                               hb_buffer_t  *buffer);
+
 
-/* Should be called after all the position_lookup's are done, to finish advances. */
+/* Should be called before all the position_lookup's are done.  Resets positions to zero. */
 HB_INTERNAL void
-hb_ot_layout_position_finish_advances (hb_font_t    *font,
-                                      hb_buffer_t  *buffer);
+hb_ot_layout_position_start (hb_font_t    *font,
+                            hb_buffer_t  *buffer);
 
-/* Should be called after hb_ot_layout_position_finish_advances, to finish offsets. */
+/* Should be called after all the position_lookup's are done */
 HB_INTERNAL void
-hb_ot_layout_position_finish_offsets (hb_font_t    *font,
-                                     hb_buffer_t  *buffer);
+hb_ot_layout_position_finish (hb_font_t    *font,
+                             hb_buffer_t  *buffer);
 
 
 
@@ -180,224 +171,82 @@ _hb_ot_layout_destroy (hb_ot_layout_t *layout);
  */
 
 /* buffer var allocations, used during the entire shaping process */
-#define unicode_props()                var2.u16[0]
+#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 */
 
-
-/* loop over syllables */
-
-#define foreach_syllable(buffer, start, end) \
-  for (unsigned int \
-       _count = buffer->len, \
-       start = 0, end = _count ? _next_syllable (buffer, 0) : 0; \
-       start < _count; \
-       start = end, end = _next_syllable (buffer, start))
-
-static inline unsigned int
-_next_syllable (hb_buffer_t *buffer, unsigned int start)
-{
-  hb_glyph_info_t *info = buffer->info;
-  unsigned int count = buffer->len;
-
-  unsigned int syllable = info[start].syllable();
-  while (++start < count && syllable == info[start].syllable())
-    ;
-
-  return start;
-}
-
-
 /* unicode_props */
 
-/* Design:
- * unicode_props() is a two-byte number.  The low byte includes:
- * - General_Category: 5 bits.
- * - A bit each for:
- *   * Is it Default_Ignorable(); we have a modified Default_Ignorable().
- *   * Whether it's one of the three Mongolian Free Variation Selectors.
- *   * One free bit right now.
- *
- * The high-byte has different meanings, switched by the Gen-Cat:
- * - For Mn,Mc,Me: the modified Combining_Class.
- * - For Cf: whether it's ZWJ, ZWNJ, or something else.
- * - For Ws: index of which space character this is, if space fallback
- *   is needed, ie. we don't set this by default, only if asked to.
- */
-
-enum hb_unicode_props_flags_t {
-  UPROPS_MASK_GEN_CAT  = 0x001Fu,
-  UPROPS_MASK_IGNORABLE        = 0x0020u,
-  UPROPS_MASK_FVS      = 0x0040u, /* MONGOLIAN FREE VARIATION SELECTOR 1..3 */
-
-  /* If GEN_CAT=FORMAT, top byte masks: */
-  UPROPS_MASK_Cf_ZWJ   = 0x0100u,
-  UPROPS_MASK_Cf_ZWNJ  = 0x0200u
+enum {
+  MASK0_ZWJ       = 0x20u,
+  MASK0_ZWNJ      = 0x40u,
+  MASK0_IGNORABLE = 0x80u,
+  MASK0_GEN_CAT   = 0x1Fu
 };
-HB_MARK_AS_FLAG_T (hb_unicode_props_flags_t);
 
 static inline void
-_hb_glyph_info_set_unicode_props (hb_glyph_info_t *info, hb_buffer_t *buffer)
+_hb_glyph_info_set_unicode_props (hb_glyph_info_t *info, hb_unicode_funcs_t *unicode)
 {
-  hb_unicode_funcs_t *unicode = buffer->unicode;
-  unsigned int u = info->codepoint;
-  unsigned int gen_cat = (unsigned int) unicode->general_category (u);
-  unsigned int props = gen_cat;
-
-  if (u >= 0x80)
-  {
-    buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_NON_ASCII;
-    if (unlikely (unicode->is_default_ignorable (u)))
-    {
-      buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_DEFAULT_IGNORABLES;
-      props |=  UPROPS_MASK_IGNORABLE;
-      if (u == 0x200Cu) props |= UPROPS_MASK_Cf_ZWNJ;
-      if (u == 0x200Du) props |= UPROPS_MASK_Cf_ZWJ;
-      /* Mongolian Free Variation Selectors need to be remembered
-       * because although we need to hide them like default-ignorables,
-       * they need to non-ignorable during shaping.  This is similar to
-       * what we do for joiners in Indic-like shapers, but since the
-       * FVSes are GC=Mn, we have use a separate bit to remember them.
-       * Fixes:
-       * https://github.com/behdad/harfbuzz/issues/234
-       */
-      if (unlikely (hb_in_range (u, 0x180Bu, 0x180Du))) props |= UPROPS_MASK_FVS;
-    }
-    else if (unlikely (HB_UNICODE_GENERAL_CATEGORY_IS_NON_ENCLOSING_MARK_OR_MODIFIER_SYMBOL (gen_cat)))
-    {
-      /* The above check is just an optimization to let in only things we need further
-       * processing on. */
-
-      /* Only Mn and Mc can have non-zero ccc:
-       * http://www.unicode.org/policies/stability_policy.html#Property_Value
-       * """
-       * Canonical_Combining_Class, General_Category
-       * All characters other than those with General_Category property values
-       * Spacing_Mark (Mc) and Nonspacing_Mark (Mn) have the Canonical_Combining_Class
-       * property value 0.
-       * 1.1.5+
-       * """
-       *
-       * Also, all Mn's that are Default_Ignorable, have ccc=0, hence
-       * the "else if".
-       */
-      props |= unicode->modified_combining_class (info->codepoint)<<8;
-
-      /* Recategorize emoji skin-tone modifiers as Unicode mark, so they
-       * behave correctly in non-native directionality.  They originally
-       * are MODIFIER_SYMBOL.  Fixes:
-       * https://github.com/behdad/harfbuzz/issues/169
-       */
-      if (unlikely (hb_in_range (u, 0x1F3FBu, 0x1F3FFu)))
-      {
-       props = gen_cat = HB_UNICODE_GENERAL_CATEGORY_ENCLOSING_MARK;
-      }
-    }
-  }
-
-  info->unicode_props() = props;
+  /* 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)
 {
-  /* Clears top-byte. */
-  info->unicode_props() = (unsigned int) gen_cat | (info->unicode_props() & (0xFF & ~UPROPS_MASK_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_props() & UPROPS_MASK_GEN_CAT);
+  return (hb_unicode_general_category_t) (info->unicode_props0() & MASK0_GEN_CAT);
 }
 
-static inline bool
-_hb_glyph_info_is_unicode_mark (const hb_glyph_info_t *info)
-{
-  return HB_UNICODE_GENERAL_CATEGORY_IS_MARK (info->unicode_props() & UPROPS_MASK_GEN_CAT);
-}
 static inline void
 _hb_glyph_info_set_modified_combining_class (hb_glyph_info_t *info,
                                             unsigned int modified_class)
 {
-  if (unlikely (!_hb_glyph_info_is_unicode_mark (info)))
-    return;
-  info->unicode_props() = (modified_class<<8) | (info->unicode_props() & 0xFF);
+  info->unicode_props1() = modified_class;
 }
+
 static inline unsigned int
 _hb_glyph_info_get_modified_combining_class (const hb_glyph_info_t *info)
 {
-  return _hb_glyph_info_is_unicode_mark (info) ? info->unicode_props()>>8 : 0;
-}
-
-static inline bool
-_hb_glyph_info_is_unicode_space (const hb_glyph_info_t *info)
-{
-  return _hb_glyph_info_get_general_category (info) ==
-        HB_UNICODE_GENERAL_CATEGORY_SPACE_SEPARATOR;
+  return info->unicode_props1();
 }
-static inline void
-_hb_glyph_info_set_unicode_space_fallback_type (hb_glyph_info_t *info, hb_unicode_funcs_t::space_t s)
-{
-  if (unlikely (!_hb_glyph_info_is_unicode_space (info)))
-    return;
-  info->unicode_props() = (((unsigned int) s)<<8) | (info->unicode_props() & 0xFF);
-}
-static inline hb_unicode_funcs_t::space_t
-_hb_glyph_info_get_unicode_space_fallback_type (const hb_glyph_info_t *info)
-{
-  return _hb_glyph_info_is_unicode_space (info) ?
-        (hb_unicode_funcs_t::space_t) (info->unicode_props()>>8) :
-        hb_unicode_funcs_t::NOT_SPACE;
-}
-
-static inline bool _hb_glyph_info_ligated (const hb_glyph_info_t *info);
 
 static inline hb_bool_t
 _hb_glyph_info_is_default_ignorable (const hb_glyph_info_t *info)
 {
-  return (info->unicode_props() & UPROPS_MASK_IGNORABLE) &&
-        !_hb_glyph_info_ligated (info);
-}
-static inline hb_bool_t
-_hb_glyph_info_is_default_ignorable_and_not_fvs (const hb_glyph_info_t *info)
-{
-  return ((info->unicode_props() & (UPROPS_MASK_IGNORABLE|UPROPS_MASK_FVS))
-         == UPROPS_MASK_IGNORABLE) &&
-        !_hb_glyph_info_ligated (info);
+  return !!(info->unicode_props0() & MASK0_IGNORABLE);
 }
 
-static inline bool
-_hb_glyph_info_is_unicode_format (const hb_glyph_info_t *info)
-{
-  return _hb_glyph_info_get_general_category (info) ==
-        HB_UNICODE_GENERAL_CATEGORY_FORMAT;
-}
 static inline hb_bool_t
 _hb_glyph_info_is_zwnj (const hb_glyph_info_t *info)
 {
-  return _hb_glyph_info_is_unicode_format (info) && (info->unicode_props() & UPROPS_MASK_Cf_ZWNJ);
+  return !!(info->unicode_props0() & MASK0_ZWNJ);
 }
+
 static inline hb_bool_t
 _hb_glyph_info_is_zwj (const hb_glyph_info_t *info)
 {
-  return _hb_glyph_info_is_unicode_format (info) && (info->unicode_props() & UPROPS_MASK_Cf_ZWJ);
-}
-static inline hb_bool_t
-_hb_glyph_info_is_joiner (const hb_glyph_info_t *info)
-{
-  return _hb_glyph_info_is_unicode_format (info) && (info->unicode_props() & (UPROPS_MASK_Cf_ZWNJ|UPROPS_MASK_Cf_ZWJ));
+  return !!(info->unicode_props0() & MASK0_ZWJ);
 }
+
 static inline void
 _hb_glyph_info_flip_joiners (hb_glyph_info_t *info)
 {
-  if (!_hb_glyph_info_is_unicode_format (info))
-    return;
-  info->unicode_props() ^= UPROPS_MASK_Cf_ZWNJ | UPROPS_MASK_Cf_ZWJ;
+  info->unicode_props0() ^= MASK0_ZWNJ | MASK0_ZWJ;
 }
 
 /* lig_props: aka lig_id / lig_comp
@@ -557,31 +406,28 @@ _hb_glyph_info_clear_ligated_and_multiplied (hb_glyph_info_t *info)
                           HB_OT_LAYOUT_GLYPH_PROPS_MULTIPLIED);
 }
 
-static inline void
-_hb_glyph_info_clear_substituted (hb_glyph_info_t *info)
-{
-  info->glyph_props() &= ~(HB_OT_LAYOUT_GLYPH_PROPS_SUBSTITUTED);
-}
-
 
 /* Allocation / deallocation. */
 
 static inline void
 _hb_buffer_allocate_unicode_vars (hb_buffer_t *buffer)
 {
-  HB_BUFFER_ALLOCATE_VAR (buffer, unicode_props);
+  HB_BUFFER_ALLOCATE_VAR (buffer, unicode_props0);
+  HB_BUFFER_ALLOCATE_VAR (buffer, unicode_props1);
 }
 
 static inline void
 _hb_buffer_deallocate_unicode_vars (hb_buffer_t *buffer)
 {
-  HB_BUFFER_DEALLOCATE_VAR (buffer, unicode_props);
+  HB_BUFFER_DEALLOCATE_VAR (buffer, unicode_props0);
+  HB_BUFFER_DEALLOCATE_VAR (buffer, unicode_props1);
 }
 
 static inline void
 _hb_buffer_assert_unicode_vars (hb_buffer_t *buffer)
 {
-  HB_BUFFER_ASSERT_VAR (buffer, unicode_props);
+  HB_BUFFER_ASSERT_VAR (buffer, unicode_props0);
+  HB_BUFFER_ASSERT_VAR (buffer, unicode_props1);
 }
 
 static inline void
index 29749bc..b1e69e8 100644 (file)
@@ -28,7 +28,6 @@
  * Google Author(s): Behdad Esfahbod
  */
 
-#include "hb-open-type-private.hh"
 #include "hb-ot-layout-private.hh"
 
 #include "hb-ot-layout-gdef-table.hh"
@@ -60,41 +59,6 @@ _hb_ot_layout_create (hb_face_t *face)
   layout->gpos_blob = OT::Sanitizer<OT::GPOS>::sanitize (face->reference_table (HB_OT_TAG_GPOS));
   layout->gpos = OT::Sanitizer<OT::GPOS>::lock_instance (layout->gpos_blob);
 
-  {
-    /*
-     * The ugly business of blacklisting individual fonts' tables happen here!
-     * See this thread for why we finally had to bend in and do this:
-     * https://lists.freedesktop.org/archives/harfbuzz/2016-February/005489.html
-     */
-    unsigned int gdef_len = hb_blob_get_length (layout->gdef_blob);
-    unsigned int gsub_len = hb_blob_get_length (layout->gsub_blob);
-    unsigned int gpos_len = hb_blob_get_length (layout->gpos_blob);
-    if (0
-      /* sha1sum:c5ee92f0bca4bfb7d06c4d03e8cf9f9cf75d2e8a Windows 7? timesi.ttf */
-      || (442 == gdef_len && 42038 == gpos_len && 2874 == gsub_len)
-      /* sha1sum:37fc8c16a0894ab7b749e35579856c73c840867b Windows 7? timesbi.ttf */
-      || (430 == gdef_len && 40662 == gpos_len && 2874 == gsub_len)
-      /* sha1sum:19fc45110ea6cd3cdd0a5faca256a3797a069a80 Windows 7 timesi.ttf */
-      || (442 == gdef_len && 39116 == gpos_len && 2874 == gsub_len)
-      /* sha1sum:6d2d3c9ed5b7de87bc84eae0df95ee5232ecde26 Windows 7 timesbi.ttf */
-      || (430 == gdef_len && 39374 == gpos_len && 2874 == gsub_len)
-      /* sha1sum:8583225a8b49667c077b3525333f84af08c6bcd8 OS X 10.11.3 Times New Roman Italic.ttf */
-      || (490 == gdef_len && 41638 == gpos_len && 3046 == gsub_len)
-      /* sha1sum:ec0f5a8751845355b7c3271d11f9918a966cb8c9 OS X 10.11.3 Times New Roman Bold Italic.ttf */
-      || (478 == gdef_len && 41902 == gpos_len && 3046 == gsub_len)
-    )
-    {
-      /* In certain versions of Times New Roman Italic and Bold Italic,
-       * ASCII double quotation mark U+0022, mapped to glyph 5, has wrong
-       * glyph class 3 (mark) in GDEF.  Nuke the GDEF to avoid zero-width
-       * double-quote.  See:
-       * https://lists.freedesktop.org/archives/harfbuzz/2016-February/005489.html
-       */
-     if (3 == layout->gdef->get_glyph_class (5))
-       layout->gdef = &OT::Null(OT::GDEF);
-    }
-  }
-
   layout->gsub_lookup_count = layout->gsub->get_lookup_count ();
   layout->gpos_lookup_count = layout->gpos->get_lookup_count ();
 
@@ -164,11 +128,6 @@ hb_ot_layout_has_glyph_classes (hb_face_t *face)
   return _get_gdef (face).has_glyph_classes ();
 }
 
-/**
- * hb_ot_layout_get_glyph_class:
- *
- * Since: 0.9.7
- **/
 hb_ot_layout_glyph_class_t
 hb_ot_layout_get_glyph_class (hb_face_t      *face,
                              hb_codepoint_t  glyph)
@@ -176,11 +135,6 @@ hb_ot_layout_get_glyph_class (hb_face_t      *face,
   return (hb_ot_layout_glyph_class_t) _get_gdef (face).get_glyph_class (glyph);
 }
 
-/**
- * hb_ot_layout_get_glyphs_in_class:
- *
- * Since: 0.9.7
- **/
 void
 hb_ot_layout_get_glyphs_in_class (hb_face_t                  *face,
                                  hb_ot_layout_glyph_class_t  klass,
@@ -331,28 +285,6 @@ hb_ot_layout_table_get_feature_tags (hb_face_t    *face,
   return g.get_feature_tags (start_offset, feature_count, feature_tags);
 }
 
-hb_bool_t
-hb_ot_layout_table_find_feature (hb_face_t    *face,
-                                hb_tag_t      table_tag,
-                                hb_tag_t      feature_tag,
-                                unsigned int *feature_index)
-{
-  ASSERT_STATIC (OT::Index::NOT_FOUND_INDEX == HB_OT_LAYOUT_NO_FEATURE_INDEX);
-  const OT::GSUBGPOS &g = get_gsubgpos_table (face, table_tag);
-
-  unsigned int num_features = g.get_feature_count ();
-  for (unsigned int i = 0; i < num_features; i++)
-  {
-    if (feature_tag == g.get_feature_tag (i)) {
-      if (feature_index) *feature_index = i;
-      return true;
-    }
-  }
-
-  if (feature_index) *feature_index = HB_OT_LAYOUT_NO_FEATURE_INDEX;
-  return false;
-}
-
 
 unsigned int
 hb_ot_layout_script_get_language_tags (hb_face_t    *face,
@@ -403,11 +335,6 @@ hb_ot_layout_language_get_required_feature_index (hb_face_t    *face,
                                                     NULL);
 }
 
-/**
- * hb_ot_layout_language_get_required_feature:
- *
- * Since: 0.9.30
- **/
 hb_bool_t
 hb_ot_layout_language_get_required_feature (hb_face_t    *face,
                                            hb_tag_t      table_tag,
@@ -492,11 +419,6 @@ hb_ot_layout_language_find_feature (hb_face_t    *face,
   return false;
 }
 
-/**
- * hb_ot_layout_feature_get_lookups:
- *
- * Since: 0.9.7
- **/
 unsigned int
 hb_ot_layout_feature_get_lookups (hb_face_t    *face,
                                  hb_tag_t      table_tag,
@@ -511,11 +433,6 @@ hb_ot_layout_feature_get_lookups (hb_face_t    *face,
   return f.get_lookup_indexes (start_offset, lookup_count, lookup_indexes);
 }
 
-/**
- * hb_ot_layout_table_get_lookup_count:
- *
- * Since: 0.9.22
- **/
 unsigned int
 hb_ot_layout_table_get_lookup_count (hb_face_t    *face,
                                     hb_tag_t      table_tag)
@@ -673,11 +590,6 @@ _hb_ot_layout_collect_lookups_languages (hb_face_t      *face,
   }
 }
 
-/**
- * hb_ot_layout_collect_lookups:
- *
- * Since: 0.9.8
- **/
 void
 hb_ot_layout_collect_lookups (hb_face_t      *face,
                              hb_tag_t        table_tag,
@@ -719,11 +631,6 @@ hb_ot_layout_collect_lookups (hb_face_t      *face,
   }
 }
 
-/**
- * hb_ot_layout_lookup_collect_glyphs:
- *
- * Since: 0.9.7
- **/
 void
 hb_ot_layout_lookup_collect_glyphs (hb_face_t    *face,
                                    hb_tag_t      table_tag,
@@ -769,11 +676,6 @@ hb_ot_layout_has_substitution (hb_face_t *face)
   return &_get_gsub (face) != &OT::Null(OT::GSUB);
 }
 
-/**
- * hb_ot_layout_lookup_would_substitute:
- *
- * Since: 0.9.7
- **/
 hb_bool_t
 hb_ot_layout_lookup_would_substitute (hb_face_t            *face,
                                      unsigned int          lookup_index,
@@ -793,7 +695,7 @@ hb_ot_layout_lookup_would_substitute_fast (hb_face_t            *face,
                                           hb_bool_t             zero_context)
 {
   if (unlikely (lookup_index >= hb_ot_layout_from_face (face)->gsub_lookup_count)) return false;
-  OT::hb_would_apply_context_t c (face, glyphs, glyphs_length, (bool) zero_context);
+  OT::hb_would_apply_context_t c (face, glyphs, glyphs_length, zero_context);
 
   const OT::SubstLookup& l = hb_ot_layout_from_face (face)->gsub->get_lookup (lookup_index);
 
@@ -806,11 +708,12 @@ hb_ot_layout_substitute_start (hb_font_t *font, hb_buffer_t *buffer)
   OT::GSUB::substitute_start (font, buffer);
 }
 
-/**
- * hb_ot_layout_lookup_substitute_closure:
- *
- * Since: 0.9.7
- **/
+void
+hb_ot_layout_substitute_finish (hb_font_t *font, hb_buffer_t *buffer)
+{
+  OT::GSUB::substitute_finish (font, buffer);
+}
+
 void
 hb_ot_layout_lookup_substitute_closure (hb_face_t    *face,
                                        unsigned int  lookup_index,
@@ -840,22 +743,11 @@ hb_ot_layout_position_start (hb_font_t *font, hb_buffer_t *buffer)
 }
 
 void
-hb_ot_layout_position_finish_advances (hb_font_t *font, hb_buffer_t *buffer)
-{
-  OT::GPOS::position_finish_advances (font, buffer);
-}
-
-void
-hb_ot_layout_position_finish_offsets (hb_font_t *font, hb_buffer_t *buffer)
+hb_ot_layout_position_finish (hb_font_t *font, hb_buffer_t *buffer)
 {
-  OT::GPOS::position_finish_offsets (font, buffer);
+  OT::GPOS::position_finish (font, buffer);
 }
 
-/**
- * hb_ot_layout_get_size_params:
- *
- * Since: 0.9.10
- **/
 hb_bool_t
 hb_ot_layout_get_size_params (hb_face_t    *face,
                              unsigned int *design_size,       /* OUT.  May be NULL */
@@ -937,79 +829,20 @@ struct GPOSProxy
 };
 
 
-struct hb_get_subtables_context_t :
-       OT::hb_dispatch_context_t<hb_get_subtables_context_t, hb_void_t, HB_DEBUG_APPLY>
-{
-  template <typename Type>
-  static inline bool apply_to (const void *obj, OT::hb_apply_context_t *c)
-  {
-    const Type *typed_obj = (const Type *) obj;
-    return typed_obj->apply (c);
-  }
-
-  typedef bool (*hb_apply_func_t) (const void *obj, OT::hb_apply_context_t *c);
-
-  struct hb_applicable_t
-  {
-    inline void init (const void *obj_, hb_apply_func_t apply_func_)
-    {
-      obj = obj_;
-      apply_func = apply_func_;
-    }
-
-    inline bool apply (OT::hb_apply_context_t *c) const { return apply_func (obj, c); }
-
-    private:
-    const void *obj;
-    hb_apply_func_t apply_func;
-  };
-
-  typedef hb_auto_array_t<hb_applicable_t> array_t;
-
-  /* Dispatch interface. */
-  inline const char *get_name (void) { return "GET_SUBTABLES"; }
-  template <typename T>
-  inline return_t dispatch (const T &obj)
-  {
-    hb_applicable_t *entry = array.push();
-    if (likely (entry))
-      entry->init (&obj, apply_to<T>);
-    return HB_VOID;
-  }
-  static return_t default_return_value (void) { return HB_VOID; }
-  bool stop_sublookup_iteration (return_t r HB_UNUSED) const { return false; }
-
-  hb_get_subtables_context_t (array_t &array_) :
-                             array (array_),
-                             debug_depth (0) {}
-
-  array_t &array;
-  unsigned int debug_depth;
-};
-
+template <typename Obj>
 static inline bool
 apply_forward (OT::hb_apply_context_t *c,
-              const hb_ot_layout_lookup_accelerator_t &accel,
-              const hb_get_subtables_context_t::array_t &subtables)
+              const Obj &obj,
+              const hb_ot_layout_lookup_accelerator_t &accel)
 {
   bool ret = false;
   hb_buffer_t *buffer = c->buffer;
-  while (buffer->idx < buffer->len && !buffer->in_error)
+  while (buffer->idx < buffer->len)
   {
-    bool applied = false;
     if (accel.may_have (buffer->cur().codepoint) &&
        (buffer->cur().mask & c->lookup_mask) &&
-       c->check_glyph_property (&buffer->cur(), c->lookup_props))
-     {
-       for (unsigned int i = 0; i < subtables.len; i++)
-         if (subtables[i].apply (c))
-        {
-          applied = true;
-          break;
-        }
-     }
-
-    if (applied)
+       c->check_glyph_property (&buffer->cur(), c->lookup_props) &&
+       obj.apply (c))
       ret = true;
     else
       buffer->next_glyph ();
@@ -1017,10 +850,11 @@ apply_forward (OT::hb_apply_context_t *c,
   return ret;
 }
 
+template <typename Obj>
 static inline bool
 apply_backward (OT::hb_apply_context_t *c,
-              const hb_ot_layout_lookup_accelerator_t &accel,
-              const hb_get_subtables_context_t::array_t &subtables)
+               const Obj &obj,
+               const hb_ot_layout_lookup_accelerator_t &accel)
 {
   bool ret = false;
   hb_buffer_t *buffer = c->buffer;
@@ -1028,15 +862,9 @@ apply_backward (OT::hb_apply_context_t *c,
   {
     if (accel.may_have (buffer->cur().codepoint) &&
        (buffer->cur().mask & c->lookup_mask) &&
-       c->check_glyph_property (&buffer->cur(), c->lookup_props))
-    {
-     for (unsigned int i = 0; i < subtables.len; i++)
-       if (subtables[i].apply (c))
-       {
-        ret = true;
-        break;
-       }
-    }
+       c->check_glyph_property (&buffer->cur(), c->lookup_props) &&
+       obj.apply (c))
+      ret = true;
     /* The reverse lookup doesn't "advance" cursor (for good reason). */
     buffer->idx--;
 
@@ -1045,6 +873,29 @@ apply_backward (OT::hb_apply_context_t *c,
   return ret;
 }
 
+struct hb_apply_forward_context_t
+{
+  inline const char *get_name (void) { return "APPLY_FORWARD"; }
+  static const unsigned int max_debug_depth = HB_DEBUG_APPLY;
+  typedef bool return_t;
+  template <typename T, typename F>
+  inline bool may_dispatch (const T *obj, const F *format) { return true; }
+  template <typename T>
+  inline return_t dispatch (const T &obj) { return apply_forward (c, obj, accel); }
+  static return_t default_return_value (void) { return false; }
+  bool stop_sublookup_iteration (return_t r HB_UNUSED) const { return true; }
+
+  hb_apply_forward_context_t (OT::hb_apply_context_t *c_,
+                             const hb_ot_layout_lookup_accelerator_t &accel_) :
+                               c (c_),
+                               accel (accel_),
+                               debug_depth (0) {}
+
+  OT::hb_apply_context_t *c;
+  const hb_ot_layout_lookup_accelerator_t &accel;
+  unsigned int debug_depth;
+};
+
 template <typename Proxy>
 static inline void
 apply_string (OT::hb_apply_context_t *c,
@@ -1056,11 +907,7 @@ apply_string (OT::hb_apply_context_t *c,
   if (unlikely (!buffer->len || !c->lookup_mask))
     return;
 
-  c->set_lookup_props (lookup.get_props ());
-
-  hb_get_subtables_context_t::array_t subtables;
-  hb_get_subtables_context_t c_get_subtables (subtables);
-  lookup.dispatch (&c_get_subtables);
+  c->set_lookup (lookup);
 
   if (likely (!lookup.is_reverse ()))
   {
@@ -1070,7 +917,13 @@ apply_string (OT::hb_apply_context_t *c,
     buffer->idx = 0;
 
     bool ret;
-    ret = apply_forward (c, accel, subtables);
+    if (lookup.get_subtable_count () == 1)
+    {
+      hb_apply_forward_context_t c_forward (c, accel);
+      ret = lookup.dispatch (&c_forward);
+    }
+    else
+      ret = apply_forward (c, lookup, accel);
     if (ret)
     {
       if (!Proxy::inplace)
@@ -1086,7 +939,7 @@ apply_string (OT::hb_apply_context_t *c,
       buffer->remove_output ();
     buffer->idx = buffer->len - 1;
 
-    apply_backward (c, accel, subtables);
+    apply_backward (c, lookup, accel);
   }
 }
 
@@ -1106,14 +959,11 @@ inline void hb_ot_map_t::apply (const Proxy &proxy,
     for (; i < stage->last_lookup; i++)
     {
       unsigned int lookup_index = lookups[table_index][i].index;
-      if (!buffer->message (font, "start lookup %d", lookup_index)) continue;
-      c.set_lookup_index (lookup_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]);
-      (void) buffer->message (font, "end lookup %d", lookup_index);
     }
 
     if (stage->pause_func)
index eb23d45..949678a 100644 (file)
@@ -48,7 +48,7 @@ HB_BEGIN_DECLS
  * GDEF
  */
 
-HB_EXTERN hb_bool_t
+hb_bool_t
 hb_ot_layout_has_glyph_classes (hb_face_t *face);
 
 typedef enum {
@@ -59,11 +59,11 @@ typedef enum {
   HB_OT_LAYOUT_GLYPH_CLASS_COMPONENT   = 4
 } hb_ot_layout_glyph_class_t;
 
-HB_EXTERN hb_ot_layout_glyph_class_t
+hb_ot_layout_glyph_class_t
 hb_ot_layout_get_glyph_class (hb_face_t      *face,
                              hb_codepoint_t  glyph);
 
-HB_EXTERN void
+void
 hb_ot_layout_get_glyphs_in_class (hb_face_t                  *face,
                                  hb_ot_layout_glyph_class_t  klass,
                                  hb_set_t                   *glyphs /* OUT */);
@@ -71,7 +71,7 @@ hb_ot_layout_get_glyphs_in_class (hb_face_t                  *face,
 
 /* Not that useful.  Provides list of attach points for a glyph that a
  * client may want to cache */
-HB_EXTERN unsigned int
+unsigned int
 hb_ot_layout_get_attach_points (hb_face_t      *face,
                                hb_codepoint_t  glyph,
                                unsigned int    start_offset,
@@ -79,7 +79,7 @@ hb_ot_layout_get_attach_points (hb_face_t      *face,
                                unsigned int   *point_array /* OUT */);
 
 /* Ligature caret positions */
-HB_EXTERN unsigned int
+unsigned int
 hb_ot_layout_get_ligature_carets (hb_font_t      *font,
                                  hb_direction_t  direction,
                                  hb_codepoint_t  glyph,
@@ -96,35 +96,35 @@ hb_ot_layout_get_ligature_carets (hb_font_t      *font,
 #define HB_OT_LAYOUT_NO_FEATURE_INDEX          0xFFFFu
 #define HB_OT_LAYOUT_DEFAULT_LANGUAGE_INDEX    0xFFFFu
 
-HB_EXTERN unsigned int
+unsigned int
 hb_ot_layout_table_get_script_tags (hb_face_t    *face,
                                    hb_tag_t      table_tag,
                                    unsigned int  start_offset,
                                    unsigned int *script_count /* IN/OUT */,
                                    hb_tag_t     *script_tags /* OUT */);
 
-HB_EXTERN hb_bool_t
+hb_bool_t
 hb_ot_layout_table_find_script (hb_face_t    *face,
                                hb_tag_t      table_tag,
                                hb_tag_t      script_tag,
                                unsigned int *script_index);
 
 /* Like find_script, but takes zero-terminated array of scripts to test */
-HB_EXTERN hb_bool_t
+hb_bool_t
 hb_ot_layout_table_choose_script (hb_face_t      *face,
                                  hb_tag_t        table_tag,
                                  const hb_tag_t *script_tags,
                                  unsigned int   *script_index,
                                  hb_tag_t       *chosen_script);
 
-HB_EXTERN unsigned int
+unsigned int
 hb_ot_layout_table_get_feature_tags (hb_face_t    *face,
                                     hb_tag_t      table_tag,
                                     unsigned int  start_offset,
                                     unsigned int *feature_count /* IN/OUT */,
                                     hb_tag_t     *feature_tags /* OUT */);
 
-HB_EXTERN unsigned int
+unsigned int
 hb_ot_layout_script_get_language_tags (hb_face_t    *face,
                                       hb_tag_t      table_tag,
                                       unsigned int  script_index,
@@ -132,21 +132,21 @@ hb_ot_layout_script_get_language_tags (hb_face_t    *face,
                                       unsigned int *language_count /* IN/OUT */,
                                       hb_tag_t     *language_tags /* OUT */);
 
-HB_EXTERN hb_bool_t
+hb_bool_t
 hb_ot_layout_script_find_language (hb_face_t    *face,
                                   hb_tag_t      table_tag,
                                   unsigned int  script_index,
                                   hb_tag_t      language_tag,
                                   unsigned int *language_index);
 
-HB_EXTERN hb_bool_t
+hb_bool_t
 hb_ot_layout_language_get_required_feature_index (hb_face_t    *face,
                                                  hb_tag_t      table_tag,
                                                  unsigned int  script_index,
                                                  unsigned int  language_index,
                                                  unsigned int *feature_index);
 
-HB_EXTERN hb_bool_t
+hb_bool_t
 hb_ot_layout_language_get_required_feature (hb_face_t    *face,
                                            hb_tag_t      table_tag,
                                            unsigned int  script_index,
@@ -154,7 +154,7 @@ hb_ot_layout_language_get_required_feature (hb_face_t    *face,
                                            unsigned int *feature_index,
                                            hb_tag_t     *feature_tag);
 
-HB_EXTERN unsigned int
+unsigned int
 hb_ot_layout_language_get_feature_indexes (hb_face_t    *face,
                                           hb_tag_t      table_tag,
                                           unsigned int  script_index,
@@ -163,7 +163,7 @@ hb_ot_layout_language_get_feature_indexes (hb_face_t    *face,
                                           unsigned int *feature_count /* IN/OUT */,
                                           unsigned int *feature_indexes /* OUT */);
 
-HB_EXTERN unsigned int
+unsigned int
 hb_ot_layout_language_get_feature_tags (hb_face_t    *face,
                                        hb_tag_t      table_tag,
                                        unsigned int  script_index,
@@ -172,7 +172,7 @@ hb_ot_layout_language_get_feature_tags (hb_face_t    *face,
                                        unsigned int *feature_count /* IN/OUT */,
                                        hb_tag_t     *feature_tags /* OUT */);
 
-HB_EXTERN hb_bool_t
+hb_bool_t
 hb_ot_layout_language_find_feature (hb_face_t    *face,
                                    hb_tag_t      table_tag,
                                    unsigned int  script_index,
@@ -180,7 +180,7 @@ hb_ot_layout_language_find_feature (hb_face_t    *face,
                                    hb_tag_t      feature_tag,
                                    unsigned int *feature_index);
 
-HB_EXTERN unsigned int
+unsigned int
 hb_ot_layout_feature_get_lookups (hb_face_t    *face,
                                  hb_tag_t      table_tag,
                                  unsigned int  feature_index,
@@ -188,12 +188,12 @@ hb_ot_layout_feature_get_lookups (hb_face_t    *face,
                                  unsigned int *lookup_count /* IN/OUT */,
                                  unsigned int *lookup_indexes /* OUT */);
 
-HB_EXTERN unsigned int
+unsigned int
 hb_ot_layout_table_get_lookup_count (hb_face_t    *face,
                                     hb_tag_t      table_tag);
 
 
-HB_EXTERN void
+void
 hb_ot_layout_collect_lookups (hb_face_t      *face,
                              hb_tag_t        table_tag,
                              const hb_tag_t *scripts,
@@ -201,7 +201,7 @@ hb_ot_layout_collect_lookups (hb_face_t      *face,
                              const hb_tag_t *features,
                              hb_set_t       *lookup_indexes /* OUT */);
 
-HB_EXTERN void
+void
 hb_ot_layout_lookup_collect_glyphs (hb_face_t    *face,
                                    hb_tag_t      table_tag,
                                    unsigned int  lookup_index,
@@ -228,7 +228,7 @@ typedef hb_bool_t
                                       const hb_ot_layout_glyph_sequence_t *sequence,
                                       void         *user_data);
 
-HB_EXTERN void
+void
 Xhb_ot_layout_lookup_enumerate_sequences (hb_face_t    *face,
                                         hb_tag_t      table_tag,
                                         unsigned int  lookup_index,
@@ -241,17 +241,17 @@ Xhb_ot_layout_lookup_enumerate_sequences (hb_face_t    *face,
  * GSUB
  */
 
-HB_EXTERN hb_bool_t
+hb_bool_t
 hb_ot_layout_has_substitution (hb_face_t *face);
 
-HB_EXTERN hb_bool_t
+hb_bool_t
 hb_ot_layout_lookup_would_substitute (hb_face_t            *face,
                                      unsigned int          lookup_index,
                                      const hb_codepoint_t *glyphs,
                                      unsigned int          glyphs_length,
                                      hb_bool_t             zero_context);
 
-HB_EXTERN void
+void
 hb_ot_layout_lookup_substitute_closure (hb_face_t    *face,
                                        unsigned int  lookup_index,
                                        hb_set_t     *glyphs
@@ -259,7 +259,7 @@ hb_ot_layout_lookup_substitute_closure (hb_face_t    *face,
 
 #ifdef HB_NOT_IMPLEMENTED
 /* Note: You better have GDEF when using this API, or marks won't do much. */
-HB_EXTERN hb_bool_t
+hb_bool_t
 Xhb_ot_layout_lookup_substitute (hb_font_t            *font,
                                unsigned int          lookup_index,
                                const hb_ot_layout_glyph_sequence_t *sequence,
@@ -274,12 +274,12 @@ Xhb_ot_layout_lookup_substitute (hb_font_t            *font,
  * GPOS
  */
 
-HB_EXTERN hb_bool_t
+hb_bool_t
 hb_ot_layout_has_positioning (hb_face_t *face);
 
 #ifdef HB_NOT_IMPLEMENTED
 /* Note: You better have GDEF when using this API, or marks won't do much. */
-HB_EXTERN hb_bool_t
+hb_bool_t
 Xhb_ot_layout_lookup_position (hb_font_t            *font,
                              unsigned int          lookup_index,
                              const hb_ot_layout_glyph_sequence_t *sequence,
@@ -288,7 +288,7 @@ Xhb_ot_layout_lookup_position (hb_font_t            *font,
 
 /* Optical 'size' feature info.  Returns true if found.
  * http://www.microsoft.com/typography/otspec/features_pt.htm#size */
-HB_EXTERN hb_bool_t
+hb_bool_t
 hb_ot_layout_get_size_params (hb_face_t    *face,
                              unsigned int *design_size,       /* OUT.  May be NULL */
                              unsigned int *subfamily_id,      /* OUT.  May be NULL */
index 8692caa..86b7e9f 100644 (file)
@@ -154,14 +154,27 @@ struct hb_ot_map_t
 
 enum hb_ot_map_feature_flags_t {
   F_NONE               = 0x0000u,
-  F_GLOBAL             = 0x0001u, /* Feature applies to all characters; results in no mask allocated for it. */
-  F_HAS_FALLBACK       = 0x0002u, /* Has fallback implementation, so include mask bit even if feature not found. */
-  F_MANUAL_ZWJ         = 0x0004u, /* Don't skip over ZWJ when matching. */
-  F_GLOBAL_SEARCH      = 0x0008u  /* If feature not found in LangSys, look for it in global feature list and pick one. */
+  F_GLOBAL             = 0x0001u,
+  F_HAS_FALLBACK       = 0x0002u,
+  F_MANUAL_ZWJ         = 0x0004u
 };
-HB_MARK_AS_FLAG_T (hb_ot_map_feature_flags_t);
 /* 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
@@ -203,8 +216,7 @@ struct hb_ot_map_builder_t
     unsigned int stage[2]; /* GSUB/GPOS */
 
     static int cmp (const feature_info_t *a, const feature_info_t *b)
-    { return (a->tag != b->tag) ?  (a->tag < b->tag ? -1 : 1) :
-            (a->seq < b->seq ? -1 : a->seq > b->seq ? 1 : 0); }
+    { return (a->tag != b->tag) ?  (a->tag < b->tag ? -1 : 1) : (a->seq < b->seq ? -1 : 1); }
   };
 
   struct stage_info_t {
index 7822cef..4985eb2 100644 (file)
@@ -89,7 +89,7 @@ hb_ot_map_builder_t::hb_ot_map_builder_t (hb_face_t *face_,
 
   for (unsigned int table_index = 0; table_index < 2; table_index++) {
     hb_tag_t table_tag = table_tags[table_index];
-    found_script[table_index] = (bool) hb_ot_layout_table_choose_script (face, table_tag, script_tags, &script_index[table_index], &chosen_script[table_index]);
+    found_script[table_index] = hb_ot_layout_table_choose_script (face, table_tag, script_tags, &script_index[table_index], &chosen_script[table_index]);
     hb_ot_layout_script_find_language (face, table_tag, script_index[table_index], language_tag, &language_index[table_index]);
   }
 }
@@ -204,8 +204,11 @@ hb_ot_map_builder_t::compile (hb_ot_map_t &m)
     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],
@@ -213,16 +216,6 @@ hb_ot_map_builder_t::compile (hb_ot_map_t &m)
                                                   info->tag,
                                                   &feature_index[table_index]);
     }
-    if (!found && (info->flags & F_GLOBAL_SEARCH))
-    {
-      for (unsigned int table_index = 0; table_index < 2; table_index++)
-      {
-       found |= hb_ot_layout_table_find_feature (face,
-                                                 table_tags[table_index],
-                                                 info->tag,
-                                                 &feature_index[table_index]);
-      }
-    }
     if (!found && !(info->flags & F_HAS_FALLBACK))
       continue;
 
index 943e390..0d9a0fa 100644 (file)
@@ -51,14 +51,13 @@ struct maxp
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    return_trace (c->check_struct (this) &&
-                 likely (version.major == 1 ||
-                         (version.major == 0 && version.minor == 0x5000u)));
+    return TRACE_RETURN (c->check_struct (this) &&
+                        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),
+  FixedVersion version;                /* Version of the maxp table (0.5 or 1.0),
                                         * 0x00005000u or 0x00010000u. */
   USHORT       numGlyphs;              /* The number of glyphs in the font. */
   public:
index 870f123..21450c6 100644 (file)
@@ -60,7 +60,7 @@ struct NameRecord
   {
     TRACE_SANITIZE (this);
     /* We can check from base all the way up to the end of string... */
-    return_trace (c->check_struct (this) && c->check_range ((char *) base, (unsigned int) length + offset));
+    return TRACE_RETURN (c->check_struct (this) && c->check_range ((char *) base, (unsigned int) length + offset));
   }
 
   USHORT       platformID;     /* Platform ID. */
@@ -107,17 +107,17 @@ struct name
     char *string_pool = (char *) this + stringOffset;
     unsigned int _count = count;
     for (unsigned int i = 0; i < _count; i++)
-      if (!nameRecord[i].sanitize (c, string_pool)) return_trace (false);
-    return_trace (true);
+      if (!nameRecord[i].sanitize (c, string_pool)) return TRACE_RETURN (false);
+    return TRACE_RETURN (true);
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    return_trace (c->check_struct (this) &&
-                 likely (format == 0 || format == 1) &&
-                 c->check_array (nameRecord, nameRecord[0].static_size, count) &&
-                 sanitize_records (c));
+    return TRACE_RETURN (c->check_struct (this) &&
+                        likely (format == 0 || format == 1) &&
+                        c->check_array (nameRecord, nameRecord[0].static_size, count) &&
+                        sanitize_records (c));
   }
 
   /* We only implement format 0 for now. */
diff --git a/src/hb-ot-os2-table.hh b/src/hb-ot-os2-table.hh
deleted file mode 100644 (file)
index 4709cd6..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * 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_OS2_TABLE_HH
-#define HB_OT_OS2_TABLE_HH
-
-#include "hb-open-type-private.hh"
-
-
-namespace OT {
-
-/*
- * OS/2 and Windows Metrics
- * http://www.microsoft.com/typography/otspec/os2.htm
- */
-
-#define HB_OT_TAG_os2 HB_TAG('O','S','/','2')
-
-struct os2
-{
-  static const hb_tag_t tableTag = HB_OT_TAG_os2;
-
-  inline bool sanitize (hb_sanitize_context_t *c) const
-  {
-    TRACE_SANITIZE (this);
-    return_trace (c->check_struct (this));
-  }
-
-  public:
-  USHORT       version;
-
-  /* Version 0 */
-  SHORT                xAvgCharWidth;
-  USHORT       usWeightClass;
-  USHORT       usWidthClass;
-  USHORT       fsType;
-  SHORT                ySubscriptXSize;
-  SHORT                ySubscriptYSize;
-  SHORT                ySubscriptXOffset;
-  SHORT                ySubscriptYOffset;
-  SHORT                ySuperscriptXSize;
-  SHORT                ySuperscriptYSize;
-  SHORT                ySuperscriptXOffset;
-  SHORT                ySuperscriptYOffset;
-  SHORT                yStrikeoutSize;
-  SHORT                yStrikeoutPosition;
-  SHORT                sFamilyClass;
-  BYTE         panose[10];
-  ULONG                ulUnicodeRange[4];
-  Tag          achVendID;
-  USHORT       fsSelection;
-  USHORT       usFirstCharIndex;
-  USHORT       usLastCharIndex;
-  SHORT                sTypoAscender;
-  SHORT                sTypoDescender;
-  SHORT                sTypoLineGap;
-  USHORT       usWinAscent;
-  USHORT       usWinDescent;
-
-  /* Version 1 */
-  //ULONG ulCodePageRange1;
-  //ULONG ulCodePageRange2;
-
-  /* Version 2 */
-  //SHORT sxHeight;
-  //SHORT sCapHeight;
-  //USHORT  usDefaultChar;
-  //USHORT  usBreakChar;
-  //USHORT  usMaxContext;
-
-  /* Version 5 */
-  //USHORT  usLowerOpticalPointSize;
-  //USHORT  usUpperOpticalPointSize;
-
-  public:
-  DEFINE_SIZE_STATIC (78);
-};
-
-} /* namespace OT */
-
-
-#endif /* HB_OT_OS2_TABLE_HH */
diff --git a/src/hb-ot-post-table.hh b/src/hb-ot-post-table.hh
deleted file mode 100644 (file)
index 82ab388..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * Copyright © 2016  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_POST_TABLE_HH
-#define HB_OT_POST_TABLE_HH
-
-#include "hb-open-type-private.hh"
-
-
-namespace OT {
-
-
-/*
- * post -- PostScript
- */
-
-#define HB_OT_TAG_post HB_TAG('p','o','s','t')
-
-
-struct postV2Tail
-{
-  inline bool sanitize (hb_sanitize_context_t *c) const
-  {
-    TRACE_SANITIZE (this);
-    return_trace (numberOfGlyphs.sanitize (c) &&
-                 c->check_array (glyphNameIndex, sizeof (USHORT), numberOfGlyphs));
-  }
-
-  USHORT       numberOfGlyphs;         /* Number of glyphs (this should be the
-                                        * same as numGlyphs in 'maxp' table). */
-  USHORT       glyphNameIndex[VAR];    /* This is not an offset, but is the
-                                        * ordinal number of the glyph in 'post'
-                                        * string tables. */
-  BYTE         namesX[VAR];            /* Glyph names with length bytes [variable]
-                                        * (a Pascal string). */
-
-  DEFINE_SIZE_ARRAY2 (2, glyphNameIndex, namesX);
-};
-
-struct post
-{
-  static const hb_tag_t tableTag = HB_OT_TAG_post;
-
-  inline bool sanitize (hb_sanitize_context_t *c) const
-  {
-    TRACE_SANITIZE (this);
-    if (unlikely (!c->check_struct (this)))
-      return_trace (false);
-    if (version.to_int () == 0x00020000)
-    {
-      const postV2Tail &v2 = StructAfter<postV2Tail>(*this);
-      return_trace (v2.sanitize (c));
-    }
-    return_trace (true);
-  }
-
-  public:
-  FixedVersion<>version;               /* 0x00010000 for version 1.0
-                                        * 0x00020000 for version 2.0
-                                        * 0x00025000 for version 2.5 (deprecated)
-                                        * 0x00030000 for version 3.0 */
-  Fixed                italicAngle;            /* Italic angle in counter-clockwise degrees
-                                        * from the vertical. Zero for upright text,
-                                        * negative for text that leans to the right
-                                        * (forward). */
-  FWORD                underlinePosition;      /* This is the suggested distance of the top
-                                        * of the underline from the baseline
-                                        * (negative values indicate below baseline).
-                                        * The PostScript definition of this FontInfo
-                                        * dictionary key (the y coordinate of the
-                                        * center of the stroke) is not used for
-                                        * historical reasons. The value of the
-                                        * PostScript key may be calculated by
-                                        * subtracting half the underlineThickness
-                                        * from the value of this field. */
-  FWORD                underlineThickness;     /* Suggested values for the underline
-                                          thickness. */
-  ULONG                isFixedPitch;           /* Set to 0 if the font is proportionally
-                                        * spaced, non-zero if the font is not
-                                        * proportionally spaced (i.e. monospaced). */
-  ULONG                minMemType42;           /* Minimum memory usage when an OpenType font
-                                        * is downloaded. */
-  ULONG                maxMemType42;           /* Maximum memory usage when an OpenType font
-                                        * is downloaded. */
-  ULONG                minMemType1;            /* Minimum memory usage when an OpenType font
-                                        * is downloaded as a Type 1 font. */
-  ULONG                maxMemType1;            /* Maximum memory usage when an OpenType font
-                                        * is downloaded as a Type 1 font. */
-/*postV2Tail   v2[VAR];*/
-  DEFINE_SIZE_STATIC (32);
-};
-
-} /* namespace OT */
-
-
-#endif /* HB_OT_POST_TABLE_HH */
index d97d285..a77f24e 100644 (file)
@@ -75,9 +75,9 @@ arabic_fallback_synthesize_lookup_single (const hb_ot_shape_plan_t *plan HB_UNUS
   if (!num_glyphs)
     return NULL;
 
-  /* Bubble-sort or something equally good!
+  /* Bubble-sort!
    * May not be good-enough for presidential candidate interviews, but good-enough for us... */
-  hb_stable_sort (&glyphs[0], num_glyphs, OT::GlyphID::cmp, &substitutes[0]);
+  hb_bubble_sort (&glyphs[0], num_glyphs, OT::GlyphID::cmp, &substitutes[0]);
 
   OT::Supplier<OT::GlyphID> glyphs_supplier      (glyphs, num_glyphs);
   OT::Supplier<OT::GlyphID> substitutes_supplier (substitutes, num_glyphs);
@@ -126,7 +126,7 @@ arabic_fallback_synthesize_lookup_ligature (const hb_ot_shape_plan_t *plan HB_UN
     first_glyphs_indirection[num_first_glyphs] = first_glyph_idx;
     num_first_glyphs++;
   }
-  hb_stable_sort (&first_glyphs[0], num_first_glyphs, OT::GlyphID::cmp, &first_glyphs_indirection[0]);
+  hb_bubble_sort (&first_glyphs[0], num_first_glyphs, OT::GlyphID::cmp, &first_glyphs_indirection[0]);
 
   /* Now that the first-glyphs are sorted, walk again, populate ligatures. */
   for (unsigned int i = 0; i < num_first_glyphs; i++)
diff --git a/src/hb-ot-shape-complex-arabic-private.hh b/src/hb-ot-shape-complex-arabic-private.hh
deleted file mode 100644 (file)
index fcedc7d..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright © 2015  Mozilla Foundation.
- * Copyright © 2015  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.
- *
- * Mozilla Author(s): Jonathan Kew
- * Google Author(s): Behdad Esfahbod
- */
-
-#ifndef HB_OT_SHAPE_COMPLEX_ARABIC_PRIVATE_HH
-#define HB_OT_SHAPE_COMPLEX_ARABIC_PRIVATE_HH
-
-#include "hb-private.hh"
-
-#include "hb-ot-shape-complex-private.hh"
-
-
-struct arabic_shape_plan_t;
-
-HB_INTERNAL void *
-data_create_arabic (const hb_ot_shape_plan_t *plan);
-
-HB_INTERNAL void
-data_destroy_arabic (void *data);
-
-HB_INTERNAL void
-setup_masks_arabic_plan (const arabic_shape_plan_t *arabic_plan,
-                        hb_buffer_t               *buffer,
-                        hb_script_t                script);
-
-#endif /* HB_OT_SHAPE_COMPLEX_ARABIC_PRIVATE_HH */
index 80d5044..1710049 100644 (file)
@@ -6,10 +6,10 @@
  *
  * on files with these headers:
  *
- * # ArabicShaping-8.0.0.txt
- * # Date: 2015-02-17, 23:33:00 GMT [RP]
- * # Blocks-8.0.0.txt
- * # Date: 2014-11-10, 23:04: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.
  */
 
@@ -76,9 +76,9 @@ static const uint8_t joining_table[] =
 
   /* Arabic Extended-A */
 
-  /* 08A0 */ D,D,D,D,D,D,D,D,D,D,R,R,R,U,R,D,D,R,R,D,D,
+  /* 08A0 */ D,D,D,D,D,D,D,D,D,D,R,R,R,U,R,D,D,R,R,
 
-#define joining_offset_0x1806u 693
+#define joining_offset_0x1806u 691
 
   /* Mongolian */
 
@@ -89,40 +89,40 @@ static const uint8_t joining_table[] =
   /* 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 858
+#define joining_offset_0x200cu 856
 
   /* General Punctuation */
 
   /* 2000 */                         U,C,
 
-#define joining_offset_0x2066u 860
+#define joining_offset_0x2066u 858
 
   /* General Punctuation */
 
   /* 2060 */             U,U,U,U,
 
-#define joining_offset_0xa840u 864
+#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 916
+#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 964
+#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: 1012; occupancy: 57% */
+}; /* Table items: 1010; occupancy: 57% */
 
 
 static unsigned int
@@ -131,7 +131,7 @@ joining_type (hb_codepoint_t u)
   switch (u >> 12)
   {
     case 0x0u:
-      if (hb_in_range (u, 0x0600u, 0x08B4u)) return joining_table[u - 0x0600u + joining_offset_0x0600u];
+      if (hb_in_range (u, 0x0600u, 0x08B2u)) return joining_table[u - 0x0600u + joining_offset_0x0600u];
       break;
 
     case 0x1u:
index e70c48f..8edd3ba 100644 (file)
                OT_UARRAY(Name##Substitute, OT_LIST(ToGlyphs)) \
        ) \
        OT_COVERAGE1(Name##Coverage, OT_LIST(FromGlyphs)) \
-       /* ASSERT_STATIC_EXPR_ZERO (len(FromGlyphs) == len(ToGlyphs)) */
+       /* ASSERT_STATIC_EXPR len(FromGlyphs) == len(ToGlyphs) */
 
 #define OT_SUBLOOKUP_LIGATURE_SUBST_FORMAT1(Name, FirstGlyphs, LigatureSetOffsets) \
        OT_SUBLOOKUP(Name, 1, \
                OT_UARRAY(Name##LigatureSetOffsetsArray, OT_LIST(LigatureSetOffsets)) \
        ) \
        OT_COVERAGE1(Name##Coverage, OT_LIST(FirstGlyphs)) \
-       /* ASSERT_STATIC_EXPR_ZERO (len(FirstGlyphs) == len(LigatureSetOffsets)) */
+       /* ASSERT_STATIC_EXPR len(FirstGlyphs) == len(LigatureSetOffsets) */
 
 #define OT_LIGATURE_SET(Name, LigatureSetOffsets) \
        OT_UARRAY(Name, OT_LIST(LigatureSetOffsets))
index 4da8990..ae90864 100644 (file)
  * Google Author(s): Behdad Esfahbod
  */
 
-#include "hb-ot-shape-complex-arabic-private.hh"
+#include "hb-ot-shape-complex-private.hh"
 #include "hb-ot-shape-private.hh"
 
 
-#ifndef HB_DEBUG_ARABIC
-#define HB_DEBUG_ARABIC (HB_DEBUG+0)
-#endif
-
-
 /* buffer var allocations */
 #define arabic_shaping_action() complex_var_u8_0() /* arabic shaping action */
 
-#define HB_BUFFER_SCRATCH_FLAG_ARABIC_HAS_STCH HB_BUFFER_SCRATCH_FLAG_COMPLEX0
-
-/* See:
- * https://github.com/behdad/harfbuzz/commit/6e6f82b6f3dde0fc6c3c7d991d9ec6cfff57823d#commitcomment-14248516 */
-#define HB_ARABIC_GENERAL_CATEGORY_IS_WORD(gen_cat) \
-       (FLAG_SAFE (gen_cat) & \
-        (FLAG (HB_UNICODE_GENERAL_CATEGORY_UNASSIGNED) | \
-         FLAG (HB_UNICODE_GENERAL_CATEGORY_PRIVATE_USE) | \
-         /*FLAG (HB_UNICODE_GENERAL_CATEGORY_LOWERCASE_LETTER) |*/ \
-         FLAG (HB_UNICODE_GENERAL_CATEGORY_MODIFIER_LETTER) | \
-         FLAG (HB_UNICODE_GENERAL_CATEGORY_OTHER_LETTER) | \
-         /*FLAG (HB_UNICODE_GENERAL_CATEGORY_TITLECASE_LETTER) |*/ \
-         /*FLAG (HB_UNICODE_GENERAL_CATEGORY_UPPERCASE_LETTER) |*/ \
-         FLAG (HB_UNICODE_GENERAL_CATEGORY_SPACING_MARK) | \
-         FLAG (HB_UNICODE_GENERAL_CATEGORY_ENCLOSING_MARK) | \
-         FLAG (HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK) | \
-         FLAG (HB_UNICODE_GENERAL_CATEGORY_DECIMAL_NUMBER) | \
-         FLAG (HB_UNICODE_GENERAL_CATEGORY_LETTER_NUMBER) | \
-         FLAG (HB_UNICODE_GENERAL_CATEGORY_OTHER_NUMBER) | \
-         FLAG (HB_UNICODE_GENERAL_CATEGORY_CURRENCY_SYMBOL) | \
-         FLAG (HB_UNICODE_GENERAL_CATEGORY_MODIFIER_SYMBOL) | \
-         FLAG (HB_UNICODE_GENERAL_CATEGORY_MATH_SYMBOL) | \
-         FLAG (HB_UNICODE_GENERAL_CATEGORY_OTHER_SYMBOL)))
-
-
-/*
- * Joining types:
- */
 
 /*
  * Bits used in the joining tables
  */
-enum hb_arabic_joining_type_t {
+enum {
   JOINING_TYPE_U               = 0,
   JOINING_TYPE_L               = 1,
   JOINING_TYPE_R               = 2,
@@ -82,6 +49,10 @@ enum hb_arabic_joining_type_t {
   JOINING_TYPE_X = 8  /* means: use general-category to choose between U or T. */
 };
 
+/*
+ * Joining types:
+ */
+
 #include "hb-ot-shape-complex-arabic-table.hh"
 
 static unsigned int get_joining_type (hb_codepoint_t u, hb_unicode_general_category_t gen_cat)
@@ -90,7 +61,7 @@ static unsigned int get_joining_type (hb_codepoint_t u, hb_unicode_general_categ
   if (likely (j_type != JOINING_TYPE_X))
     return j_type;
 
-  return (FLAG_SAFE(gen_cat) &
+  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))
@@ -113,7 +84,7 @@ static const hb_tag_t arabic_features[] =
 
 
 /* Same order as the feature array */
-enum arabic_action_t {
+enum {
   ISOL,
   FINA,
   FIN2,
@@ -124,11 +95,7 @@ enum arabic_action_t {
 
   NONE,
 
-  ARABIC_NUM_FEATURES = NONE,
-
-  /* We abuse the same byte for other things... */
-  STCH_FIXED,
-  STCH_REPEATING,
+  ARABIC_NUM_FEATURES = NONE
 };
 
 static const struct arabic_state_table_entry {
@@ -173,11 +140,6 @@ arabic_fallback_shape (const hb_ot_shape_plan_t *plan,
                       hb_buffer_t *buffer);
 
 static void
-record_stch (const hb_ot_shape_plan_t *plan,
-            hb_font_t *font,
-            hb_buffer_t *buffer);
-
-static void
 collect_features_arabic (hb_ot_shape_planner_t *plan)
 {
   hb_ot_map_builder_t *map = &plan->map;
@@ -203,9 +165,6 @@ collect_features_arabic (hb_ot_shape_planner_t *plan)
 
   map->add_gsub_pause (nuke_joiners);
 
-  map->add_global_bool_feature (HB_TAG('s','t','c','h'));
-  map->add_gsub_pause (record_stch);
-
   map->add_global_bool_feature (HB_TAG('c','c','m','p'));
   map->add_global_bool_feature (HB_TAG('l','o','c','l'));
 
@@ -223,6 +182,7 @@ collect_features_arabic (hb_ot_shape_planner_t *plan)
     map->add_gsub_pause (arabic_fallback_shape);
 
   map->add_global_bool_feature (HB_TAG('c','a','l','t'));
+  map->add_gsub_pause (NULL);
 
   /* The spec includes 'cswh'.  Earlier versions of Windows
    * used to enable this by default, but testing suggests
@@ -232,7 +192,6 @@ collect_features_arabic (hb_ot_shape_planner_t *plan)
    * Note that IranNastaliq uses this feature extensively
    * to fixup broken glyph sequences.  Oh well...
    * Test case: U+0643,U+0640,U+0631. */
-  //map->add_gsub_pause (NULL);
   //map->add_global_bool_feature (HB_TAG('c','s','w','h'));
   map->add_global_bool_feature (HB_TAG('m','s','e','t'));
 }
@@ -249,13 +208,11 @@ struct arabic_shape_plan_t
    * mask_array[NONE] == 0. */
   hb_mask_t mask_array[ARABIC_NUM_FEATURES + 1];
 
+  bool do_fallback;
   arabic_fallback_plan_t *fallback_plan;
-
-  unsigned int do_fallback : 1;
-  unsigned int has_stch : 1;
 };
 
-void *
+static void *
 data_create_arabic (const hb_ot_shape_plan_t *plan)
 {
   arabic_shape_plan_t *arabic_plan = (arabic_shape_plan_t *) calloc (1, sizeof (arabic_shape_plan_t));
@@ -263,7 +220,6 @@ data_create_arabic (const hb_ot_shape_plan_t *plan)
     return NULL;
 
   arabic_plan->do_fallback = plan->props.script == HB_SCRIPT_ARABIC;
-  arabic_plan->has_stch = !!plan->map.get_1_mask (HB_TAG ('s','t','c','h'));
   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 = arabic_plan->do_fallback &&
@@ -274,7 +230,7 @@ data_create_arabic (const hb_ot_shape_plan_t *plan)
   return arabic_plan;
 }
 
-void
+static void
 data_destroy_arabic (void *data)
 {
   arabic_shape_plan_t *arabic_plan = (arabic_shape_plan_t *) data;
@@ -349,30 +305,25 @@ mongolian_variation_selectors (hb_buffer_t *buffer)
       info[i].arabic_shaping_action() = info[i - 1].arabic_shaping_action();
 }
 
-void
-setup_masks_arabic_plan (const arabic_shape_plan_t *arabic_plan,
-                        hb_buffer_t               *buffer,
-                        hb_script_t                script)
+static void
+setup_masks_arabic (const hb_ot_shape_plan_t *plan,
+                   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);
-  if (script == HB_SCRIPT_MONGOLIAN)
+  if (plan->props.script == HB_SCRIPT_MONGOLIAN)
     mongolian_variation_selectors (buffer);
 
   unsigned int count = buffer->len;
   hb_glyph_info_t *info = buffer->info;
   for (unsigned int i = 0; i < count; i++)
     info[i].mask |= arabic_plan->mask_array[info[i].arabic_shaping_action()];
-}
 
-static void
-setup_masks_arabic (const hb_ot_shape_plan_t *plan,
-                   hb_buffer_t              *buffer,
-                   hb_font_t                *font HB_UNUSED)
-{
-  const arabic_shape_plan_t *arabic_plan = (const arabic_shape_plan_t *) plan->data;
-  setup_masks_arabic_plan (arabic_plan, buffer, plan->props.script);
+  HB_BUFFER_DEALLOCATE_VAR (buffer, arabic_shaping_action);
 }
 
 
@@ -413,197 +364,6 @@ retry:
   arabic_fallback_plan_shape (fallback_plan, font, buffer);
 }
 
-/*
- * Stretch feature: "stch".
- * See example here:
- * https://www.microsoft.com/typography/OpenTypeDev/syriac/intro.htm
- * We implement this in a generic way, such that the Arabic subtending
- * marks can use it as well.
- */
-
-static void
-record_stch (const hb_ot_shape_plan_t *plan,
-            hb_font_t *font,
-            hb_buffer_t *buffer)
-{
-  const arabic_shape_plan_t *arabic_plan = (const arabic_shape_plan_t *) plan->data;
-  if (!arabic_plan->has_stch)
-    return;
-
-  /* 'stch' feature was just applied.  Look for anything that multiplied,
-   * and record it for stch treatment later.  Note that rtlm, frac, etc
-   * are applied before stch, but we assume that they didn't result in
-   * anything multiplying into 5 pieces, so it's safe-ish... */
-
-  unsigned int count = buffer->len;
-  hb_glyph_info_t *info = buffer->info;
-  for (unsigned int i = 0; i < count; i++)
-    if (unlikely (_hb_glyph_info_multiplied (&info[i])))
-    {
-      unsigned int comp = _hb_glyph_info_get_lig_comp (&info[i]);
-      info[i].arabic_shaping_action() = comp % 2 ? STCH_REPEATING : STCH_FIXED;
-      buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_ARABIC_HAS_STCH;
-    }
-}
-
-static void
-apply_stch (const hb_ot_shape_plan_t *plan,
-           hb_buffer_t              *buffer,
-           hb_font_t                *font)
-{
-  if (likely (!(buffer->scratch_flags & HB_BUFFER_SCRATCH_FLAG_ARABIC_HAS_STCH)))
-    return;
-
-  /* The Arabic shaper currently always processes in RTL mode, so we should
-   * stretch / position the stretched pieces to the left / preceding glyphs. */
-
-  /* We do a two pass implementation:
-   * First pass calculates the exact number of extra glyphs we need,
-   * We then enlarge buffer to have that much room,
-   * Second pass applies the stretch, copying things to the end of buffer.
-   */
-
-  int sign = font->x_scale < 0 ? -1 : +1;
-  unsigned int extra_glyphs_needed = 0; // Set during MEASURE, used during CUT
-  typedef enum { MEASURE, CUT } step_t;
-
-  for (step_t step = MEASURE; step <= CUT; step = (step_t) (step + 1))
-  {
-    unsigned int count = buffer->len;
-    hb_glyph_info_t *info = buffer->info;
-    hb_glyph_position_t *pos = buffer->pos;
-    unsigned int new_len = count + extra_glyphs_needed; // write head during CUT
-    unsigned int j = new_len;
-    for (unsigned int i = count; i; i--)
-    {
-      if (!hb_in_range<unsigned> (info[i - 1].arabic_shaping_action(), STCH_FIXED, STCH_REPEATING))
-      {
-        if (step == CUT)
-       {
-         --j;
-         info[j] = info[i - 1];
-         pos[j] = pos[i - 1];
-       }
-        continue;
-      }
-
-      /* Yay, justification! */
-
-      hb_position_t w_total = 0; // Total to be filled
-      hb_position_t w_fixed = 0; // Sum of fixed tiles
-      hb_position_t w_repeating = 0; // Sum of repeating tiles
-      int n_fixed = 0;
-      int n_repeating = 0;
-
-      unsigned int end = i;
-      while (i &&
-            hb_in_range<unsigned> (info[i - 1].arabic_shaping_action(), STCH_FIXED, STCH_REPEATING))
-      {
-       i--;
-       hb_position_t width = font->get_glyph_h_advance (info[i].codepoint);
-       if (info[i].arabic_shaping_action() == STCH_FIXED)
-       {
-         w_fixed += width;
-         n_fixed++;
-       }
-       else
-       {
-         w_repeating += width;
-         n_repeating++;
-       }
-      }
-      unsigned int start = i;
-      unsigned int context = i;
-      while (context &&
-            !hb_in_range<unsigned> (info[context - 1].arabic_shaping_action(), STCH_FIXED, STCH_REPEATING) &&
-            (_hb_glyph_info_is_default_ignorable (&info[context - 1]) ||
-             HB_ARABIC_GENERAL_CATEGORY_IS_WORD (_hb_glyph_info_get_general_category (&info[context - 1]))))
-      {
-       context--;
-       w_total += pos[context].x_advance;
-      }
-      i++; // Don't touch i again.
-
-      DEBUG_MSG (ARABIC, NULL, "%s stretch at (%d,%d,%d)",
-                step == MEASURE ? "measuring" : "cutting", context, start, end);
-      DEBUG_MSG (ARABIC, NULL, "rest of word:    count=%d width %d", start - context, w_total);
-      DEBUG_MSG (ARABIC, NULL, "fixed tiles:     count=%d width=%d", n_fixed, w_fixed);
-      DEBUG_MSG (ARABIC, NULL, "repeating tiles: count=%d width=%d", n_repeating, w_repeating);
-
-      /* Number of additional times to repeat each repeating tile. */
-      int n_copies = 0;
-
-      hb_position_t w_remaining = w_total - w_fixed;
-      if (sign * w_remaining > sign * w_repeating && sign * w_repeating > 0)
-       n_copies = (sign * w_remaining) / (sign * w_repeating) - 1;
-
-      /* See if we can improve the fit by adding an extra repeat and squeezing them together a bit. */
-      hb_position_t extra_repeat_overlap = 0;
-      hb_position_t shortfall = sign * w_remaining - sign * w_repeating * (n_copies + 1);
-      if (shortfall > 0)
-      {
-        ++n_copies;
-        hb_position_t excess = (n_copies + 1) * sign * w_repeating - sign * w_remaining;
-        if (excess > 0)
-          extra_repeat_overlap = excess / (n_copies * n_repeating);
-      }
-
-      if (step == MEASURE)
-      {
-       extra_glyphs_needed += n_copies * n_repeating;
-       DEBUG_MSG (ARABIC, NULL, "will add extra %d copies of repeating tiles", n_copies);
-      }
-      else
-      {
-       hb_position_t x_offset = 0;
-       for (unsigned int k = end; k > start; k--)
-       {
-         hb_position_t width = font->get_glyph_h_advance (info[k - 1].codepoint);
-
-         unsigned int repeat = 1;
-         if (info[k - 1].arabic_shaping_action() == STCH_REPEATING)
-           repeat += n_copies;
-
-         DEBUG_MSG (ARABIC, NULL, "appending %d copies of glyph %d; j=%d",
-                    repeat, info[k - 1].codepoint, j);
-         for (unsigned int n = 0; n < repeat; n++)
-         {
-           x_offset -= width;
-           if (n > 0)
-             x_offset += extra_repeat_overlap;
-           pos[k - 1].x_offset = x_offset;
-           /* Append copy. */
-           --j;
-           info[j] = info[k - 1];
-           pos[j] = pos[k - 1];
-         }
-       }
-      }
-    }
-
-    if (step == MEASURE)
-    {
-      if (unlikely (!buffer->ensure (count + extra_glyphs_needed)))
-        break;
-    }
-    else
-    {
-      assert (j == 0);
-      buffer->len = new_len;
-    }
-  }
-}
-
-
-static void
-postprocess_glyphs_arabic (const hb_ot_shape_plan_t *plan,
-                          hb_buffer_t              *buffer,
-                          hb_font_t                *font)
-{
-  apply_stch (plan, buffer, font);
-
-  HB_BUFFER_DEALLOCATE_VAR (buffer, arabic_shaping_action);
-}
 
 const hb_ot_complex_shaper_t _hb_ot_complex_shaper_arabic =
 {
@@ -612,8 +372,7 @@ const hb_ot_complex_shaper_t _hb_ot_complex_shaper_arabic =
   NULL, /* override_features */
   data_create_arabic,
   data_destroy_arabic,
-  NULL, /* preprocess_text */
-  postprocess_glyphs_arabic,
+  NULL, /* preprocess_text_arabic */
   HB_OT_SHAPE_NORMALIZATION_MODE_DEFAULT,
   NULL, /* decompose */
   NULL, /* compose */
index be60e56..f7f097e 100644 (file)
@@ -35,11 +35,10 @@ const hb_ot_complex_shaper_t _hb_ot_complex_shaper_default =
   NULL, /* data_create */
   NULL, /* data_destroy */
   NULL, /* preprocess_text */
-  NULL, /* postprocess_glyphs */
   HB_OT_SHAPE_NORMALIZATION_MODE_DEFAULT,
   NULL, /* decompose */
   NULL, /* compose */
   NULL, /* setup_masks */
-  HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_LATE,
+  HB_OT_SHAPE_ZERO_WIDTH_MARKS_DEFAULT,
   true, /* fallback_position */
 };
index 5f4d98b..6ac18b0 100644 (file)
@@ -188,7 +188,7 @@ preprocess_text_hangul (const hb_ot_shape_plan_t *plan,
                                    */
   unsigned int count = buffer->len;
 
-  for (buffer->idx = 0; buffer->idx < count && !buffer->in_error;)
+  for (buffer->idx = 0; buffer->idx < count;)
   {
     hb_codepoint_t u = buffer->cur().codepoint;
 
@@ -205,12 +205,17 @@ preprocess_text_hangul (const hb_ot_shape_plan_t *plan,
        buffer->next_glyph ();
        if (!is_zero_width_char (font, u))
        {
-         buffer->merge_out_clusters (start, end + 1);
          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
       {
@@ -291,8 +296,7 @@ preprocess_text_hangul (const hb_ot_shape_plan_t *plan,
        }
        else
          end = start + 2;
-       if (buffer->cluster_level == HB_BUFFER_CLUSTER_LEVEL_MONOTONE_GRAPHEMES)
-         buffer->merge_out_clusters (start, end);
+       buffer->merge_out_clusters (start, end);
        continue;
       }
     }
@@ -364,8 +368,7 @@ preprocess_text_hangul (const hb_ot_shape_plan_t *plan,
          info[i++].hangul_shaping_feature() = VJMO;
          if (i < end)
            info[i++].hangul_shaping_feature() = TJMO;
-         if (buffer->cluster_level == HB_BUFFER_CLUSTER_LEVEL_MONOTONE_GRAPHEMES)
-           buffer->merge_out_clusters (start, end);
+         buffer->merge_out_clusters (start, end);
          continue;
        }
       }
@@ -411,14 +414,13 @@ const hb_ot_complex_shaper_t _hb_ot_complex_shaper_hangul =
   "hangul",
   collect_features_hangul,
   override_features_hangul,
-  data_create_hangul,
-  data_destroy_hangul,
+  data_create_hangul, /* data_create */
+  data_destroy_hangul, /* data_destroy */
   preprocess_text_hangul,
-  NULL, /* postprocess_glyphs */
   HB_OT_SHAPE_NORMALIZATION_MODE_NONE,
   NULL, /* decompose */
   NULL, /* compose */
-  setup_masks_hangul,
+  setup_masks_hangul, /* setup_masks */
   HB_OT_SHAPE_ZERO_WIDTH_MARKS_NONE,
   false, /* fallback_position */
 };
index 3215900..c7b7a5e 100644 (file)
@@ -68,7 +68,7 @@ compose_hebrew (const hb_ot_shape_normalize_context_t *c,
     0xFB4Au /* TAV */
   };
 
-  bool found = (bool) c->unicode->compose (a, b, ab);
+  bool found = c->unicode->compose (a, b, ab);
 
   if (!found && !c->plan->has_mark)
   {
@@ -163,7 +163,6 @@ const hb_ot_complex_shaper_t _hb_ot_complex_shaper_hebrew =
   NULL, /* data_create */
   NULL, /* data_destroy */
   NULL, /* preprocess_text */
-  NULL, /* postprocess_glyphs */
   HB_OT_SHAPE_NORMALIZATION_MODE_DEFAULT,
   NULL, /* decompose */
   compose_hebrew,
index 326b364..d8dfc65 100644 (file)
@@ -109,31 +109,27 @@ enum indic_syllabic_category_t {
 
   INDIC_SYLLABIC_CATEGORY_AVAGRAHA                     = OT_Symbol,
   INDIC_SYLLABIC_CATEGORY_BINDU                                = OT_SM,
-  INDIC_SYLLABIC_CATEGORY_BRAHMI_JOINING_NUMBER                = OT_PLACEHOLDER, /* Don't care. */
+  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_KILLER             = OT_M, /* U+17CD only. */
   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_PREFIXED           = OT_X, /* Don't care. */
   INDIC_SYLLABIC_CATEGORY_CONSONANT_SUBJOINED          = OT_CM,
   INDIC_SYLLABIC_CATEGORY_CONSONANT_SUCCEEDING_REPHA   = OT_N,
-  INDIC_SYLLABIC_CATEGORY_CONSONANT_WITH_STACKER       = OT_Repha, /* TODO */
   INDIC_SYLLABIC_CATEGORY_GEMINATION_MARK              = OT_SM,
-  INDIC_SYLLABIC_CATEGORY_INVISIBLE_STACKER            = OT_Coeng,
+  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, /* Don't care. */
-  INDIC_SYLLABIC_CATEGORY_PURE_KILLER                  = OT_M, /* Is like a vowel matra. */
+  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_SYLLABLE_MODIFIER            = OT_M, /* Misc Khmer signs. */
   INDIC_SYLLABIC_CATEGORY_TONE_LETTER                  = OT_X,
   INDIC_SYLLABIC_CATEGORY_TONE_MARK                    = OT_N,
   INDIC_SYLLABIC_CATEGORY_VIRAMA                       = OT_H,
@@ -165,24 +161,20 @@ enum indic_matra_category_t {
   INDIC_MATRA_CATEGORY_VISUAL_ORDER_LEFT               = POS_PRE_M
 };
 
+/* Note: We use ASSERT_STATIC_EXPR_ZERO() instead of ASSERT_STATIC_EXPR() and the comma operation
+ * because gcc fails to optimize the latter and fills the table in at runtime. */
 #define INDIC_COMBINE_CATEGORIES(S,M) \
-  ( \
-    ASSERT_STATIC_EXPR_ZERO (S < 255 && M < 255) + \
-    ( S | \
-     ( \
-      ( \
-       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 \
-       ? M : INDIC_MATRA_CATEGORY_NOT_APPLICABLE \
-      ) << 8 \
-     ) \
-    ) \
-   )
+  (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))
 
 HB_INTERNAL INDIC_TABLE_ELEMENT_TYPE
 hb_indic_get_categories (hb_codepoint_t u);
index 90abb55..2e159a1 100644 (file)
@@ -6,67 +6,63 @@
  *
  * on files with these headers:
  *
- * # IndicSyllabicCategory-8.0.0.txt
- * # Date: 2015-05-12, 10:00:00 GMT [RP, KW, LI]
- * # IndicPositionalCategory-8.0.0.txt
- * # Date: 2015-05-12, 10:00:00 GMT [RP, KW, LI]
- * # Blocks-8.0.0.txt
- * # Date: 2014-11-10, 23:04:00 GMT [KW]
+ * # IndicSyllabicCategory-7.0.0.txt
+ * # Date: 2014-06-03, 07:00:00 GMT [KW, LI, AG, RP]
+ * # IndicMatraCategory-7.0.0.txt
+ * # Date: 2014-06-03, 07:00:00 GMT [KW, LI, AG, RP]
+ * # Blocks-7.0.0.txt
+ * # Date: 2014-04-03, 23:23:00 GMT [RP, KW]
  */
 
 #include "hb-ot-shape-complex-indic-private.hh"
 
 
 #define ISC_A  INDIC_SYLLABIC_CATEGORY_AVAGRAHA                /*  13 chars; Avagraha */
-#define ISC_Bi INDIC_SYLLABIC_CATEGORY_BINDU                   /*  60 chars; Bindu */
+#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       /*  52 chars; Cantillation_Mark */
-#define ISC_C  INDIC_SYLLABIC_CATEGORY_CONSONANT               /* 1805 chars; Consonant */
+#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         /*  62 chars; Consonant_Final */
+#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_CK INDIC_SYLLABIC_CATEGORY_CONSONANT_KILLER        /*   2 chars; Consonant_Killer */
-#define ISC_CM INDIC_SYLLABIC_CATEGORY_CONSONANT_MEDIAL        /*  22 chars; Consonant_Medial */
-#define ISC_CP INDIC_SYLLABIC_CATEGORY_CONSONANT_PLACEHOLDER   /*  13 chars; Consonant_Placeholder */
+#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_CPrf       INDIC_SYLLABIC_CATEGORY_CONSONANT_PREFIXED      /*   2 chars; Consonant_Prefixed */
 #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_CWS        INDIC_SYLLABIC_CATEGORY_CONSONANT_WITH_STACKER  /*   4 chars; Consonant_With_Stacker */
 #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_ZWNJ       INDIC_SYLLABIC_CATEGORY_NON_JOINER              /*   1 chars; Non_Joiner */
-#define ISC_N  INDIC_SYLLABIC_CATEGORY_NUKTA                   /*  23 chars; Nukta */
-#define ISC_Nd INDIC_SYLLABIC_CATEGORY_NUMBER                  /* 420 chars; Number */
+#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_PK INDIC_SYLLABIC_CATEGORY_PURE_KILLER             /*  16 chars; Pure_Killer */
-#define ISC_RS INDIC_SYLLABIC_CATEGORY_REGISTER_SHIFTER        /*   2 chars; Register_Shifter */
-#define ISC_SM INDIC_SYLLABIC_CATEGORY_SYLLABLE_MODIFIER       /*  20 chars; Syllable_Modifier */
+#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               /*  42 chars; Tone_Mark */
+#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         /* 572 chars; Vowel_Dependent */
-#define ISC_VI INDIC_SYLLABIC_CATEGORY_VOWEL_INDEPENDENT       /* 404 chars; Vowel_Independent */
+#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                     /* 256 chars; Bottom */
+#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_L  INDIC_MATRA_CATEGORY_LEFT                       /*  55 chars; Left */
+#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                 /*  10 chars; Overstruck */
-#define IMC_R  INDIC_MATRA_CATEGORY_RIGHT                      /* 249 chars; Right */
-#define IMC_T  INDIC_MATRA_CATEGORY_TOP                        /* 324 chars; Top */
+#define IMC_O  INDIC_MATRA_CATEGORY_OVERSTRUCK                 /*   2 chars; Overstruck */
+#define IMC_R  INDIC_MATRA_CATEGORY_RIGHT                      /* 163 chars; Right */
+#define IMC_T  INDIC_MATRA_CATEGORY_TOP                        /* 169 chars; Top */
 #define IMC_TB INDIC_MATRA_CATEGORY_TOP_AND_BOTTOM             /*  10 chars; Top_And_Bottom */
 #define IMC_TBR        INDIC_MATRA_CATEGORY_TOP_AND_BOTTOM_AND_RIGHT   /*   1 chars; Top_And_Bottom_And_Right */
 #define IMC_TL INDIC_MATRA_CATEGORY_TOP_AND_LEFT               /*   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          /*  19 chars; Visual_Order_Left */
+#define IMC_VOL        INDIC_MATRA_CATEGORY_VISUAL_ORDER_LEFT          /*  15 chars; Visual_Order_Left */
 
 #define _(S,M) INDIC_COMBINE_CATEGORIES (ISC_##S, IMC_##M)
 
@@ -83,33 +79,29 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
   /* 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_0x00b0u 24
+#define indic_offset_0x00d0u 24
 
 
   /* Latin-1 Supplement */
 
-  /* 00B0 */  _(x,x),  _(x,x), _(SM,x), _(SM,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 00B8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 00C0 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 00C8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* 00D0 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x), _(CP,x),
 
-#define indic_offset_0x0900u 64
+#define indic_offset_0x0900u 32
 
 
   /* Devanagari */
 
-  /* 0900 */ _(Bi,T), _(Bi,T), _(Bi,T), _(Vs,R), _(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),
   /* 0910 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),  _(C,x),  _(C,x),  _(C,x),
   /* 0918 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 0920 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 0928 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 0930 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 0938 */  _(C,x),  _(C,x),  _(M,T),  _(M,R),  _(N,B),  _(A,x),  _(M,R),  _(M,L),
+  /* 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), _(Ca,T), _(Ca,B),  _(x,T),  _(x,T),  _(M,T),  _(M,B),  _(M,B),
+  /* 0950 */  _(x,x), _(TM,x), _(TM,x),  _(x,x),  _(x,x),  _(M,T),  _(M,B),  _(M,B),
   /* 0958 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 0960 */ _(VI,x), _(VI,x),  _(M,B),  _(M,B),  _(x,x),  _(x,x), _(Nd,x), _(Nd,x),
   /* 0968 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
@@ -118,14 +110,14 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
 
   /* Bengali */
 
-  /* 0980 */  _(x,x), _(Bi,T), _(Bi,R), _(Vs,R),  _(x,x), _(VI,x), _(VI,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),
   /* 0990 */ _(VI,x),  _(x,x),  _(x,x), _(VI,x), _(VI,x),  _(C,x),  _(C,x),  _(C,x),
   /* 0998 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 09A0 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 09A8 */  _(C,x),  _(x,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 09B0 */  _(C,x),  _(x,x),  _(C,x),  _(x,x),  _(x,x),  _(x,x),  _(C,x),  _(C,x),
-  /* 09B8 */  _(C,x),  _(C,x),  _(x,x),  _(x,x),  _(N,B),  _(A,x),  _(M,R),  _(M,L),
+  /* 09B8 */  _(C,x),  _(C,x),  _(x,x),  _(x,x),  _(N,x),  _(A,x),  _(M,R),  _(M,L),
   /* 09C0 */  _(M,R),  _(M,B),  _(M,B),  _(M,B),  _(M,B),  _(x,x),  _(x,x),  _(M,L),
   /* 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),
@@ -137,33 +129,33 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
 
   /* Gurmukhi */
 
-  /* 0A00 */  _(x,x), _(Bi,T), _(Bi,T), _(Vs,R),  _(x,x), _(VI,x), _(VI,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),
   /* 0A10 */ _(VI,x),  _(x,x),  _(x,x), _(VI,x), _(VI,x),  _(C,x),  _(C,x),  _(C,x),
   /* 0A18 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 0A20 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 0A28 */  _(C,x),  _(x,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 0A30 */  _(C,x),  _(x,x),  _(C,x),  _(C,x),  _(x,x),  _(C,x),  _(C,x),  _(x,x),
-  /* 0A38 */  _(C,x),  _(C,x),  _(x,x),  _(x,x),  _(N,B),  _(x,x),  _(M,R),  _(M,L),
+  /* 0A38 */  _(C,x),  _(C,x),  _(x,x),  _(x,x),  _(N,x),  _(x,x),  _(M,R),  _(M,L),
   /* 0A40 */  _(M,R),  _(M,B),  _(M,B),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(M,T),
   /* 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), _(Nd,x), _(Nd,x),
   /* 0A68 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
-  /* 0A70 */ _(Bi,T), _(GM,T), _(CP,x), _(CP,x),  _(x,x), _(CM,B),  _(x,x),  _(x,x),
+  /* 0A70 */ _(Bi,x), _(GM,T), _(CP,x), _(CP,x),  _(x,x), _(CM,x),  _(x,x),  _(x,x),
   /* 0A78 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
 
   /* Gujarati */
 
-  /* 0A80 */  _(x,x), _(Bi,T), _(Bi,T), _(Vs,R),  _(x,x), _(VI,x), _(VI,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),
   /* 0A90 */ _(VI,x), _(VI,x),  _(x,x), _(VI,x), _(VI,x),  _(C,x),  _(C,x),  _(C,x),
   /* 0A98 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 0AA0 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 0AA8 */  _(C,x),  _(x,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 0AB0 */  _(C,x),  _(x,x),  _(C,x),  _(C,x),  _(x,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 0AB8 */  _(C,x),  _(C,x),  _(x,x),  _(x,x),  _(N,B),  _(A,x),  _(M,R),  _(M,L),
+  /* 0AB8 */  _(C,x),  _(C,x),  _(x,x),  _(x,x),  _(N,x),  _(A,x),  _(M,R),  _(M,L),
   /* 0AC0 */  _(M,R),  _(M,B),  _(M,B),  _(M,B),  _(M,B),  _(M,T),  _(x,x),  _(M,T),
   /* 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),
@@ -171,18 +163,18 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
   /* 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),  _(C,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 */  _(x,x), _(Bi,T), _(Bi,R), _(Vs,R),  _(x,x), _(VI,x), _(VI,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),
   /* 0B10 */ _(VI,x),  _(x,x),  _(x,x), _(VI,x), _(VI,x),  _(C,x),  _(C,x),  _(C,x),
   /* 0B18 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 0B20 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 0B28 */  _(C,x),  _(x,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 0B30 */  _(C,x),  _(x,x),  _(C,x),  _(C,x),  _(x,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 0B38 */  _(C,x),  _(C,x),  _(x,x),  _(x,x),  _(N,B),  _(A,x),  _(M,R),  _(M,T),
+  /* 0B38 */  _(C,x),  _(C,x),  _(x,x),  _(x,x),  _(N,x),  _(A,x),  _(M,R),  _(M,T),
   /* 0B40 */  _(M,R),  _(M,B),  _(M,B),  _(M,B),  _(M,B),  _(x,x),  _(x,x),  _(M,L),
   /* 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),
@@ -194,7 +186,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
 
   /* Tamil */
 
-  /* 0B80 */  _(x,x),  _(x,x), _(Bi,T), _(ML,x),  _(x,x), _(VI,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),
   /* 0B90 */ _(VI,x),  _(x,x), _(VI,x), _(VI,x), _(VI,x),  _(C,x),  _(x,x),  _(x,x),
   /* 0B98 */  _(x,x),  _(C,x),  _(C,x),  _(x,x),  _(C,x),  _(x,x),  _(C,x),  _(C,x),
@@ -202,7 +194,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
   /* 0BA8 */  _(C,x),  _(C,x),  _(C,x),  _(x,x),  _(x,x),  _(x,x),  _(C,x),  _(C,x),
   /* 0BB0 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 0BB8 */  _(C,x),  _(C,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(M,R),  _(M,R),
-  /* 0BC0 */  _(M,T),  _(M,R),  _(M,R),  _(x,x),  _(x,x),  _(x,x),  _(M,L),  _(M,L),
+  /* 0BC0 */  _(M,T),  _(M,B),  _(M,B),  _(x,x),  _(x,x),  _(x,x),  _(M,L),  _(M,L),
   /* 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),
@@ -213,7 +205,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
 
   /* Telugu */
 
-  /* 0C00 */ _(Bi,T), _(Bi,R), _(Bi,R), _(Vs,R),  _(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),
@@ -224,7 +216,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
   /* 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),  _(C,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(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), _(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),
@@ -232,26 +224,26 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
 
   /* Kannada */
 
-  /* 0C80 */  _(x,x), _(Bi,T), _(Bi,R), _(Vs,R),  _(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),
   /* 0CA0 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 0CA8 */  _(C,x),  _(x,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 0CB0 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(x,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 0CB8 */  _(C,x),  _(C,x),  _(x,x),  _(x,x),  _(N,B),  _(A,x),  _(M,R),  _(M,T),
+  /* 0CB8 */  _(C,x),  _(C,x),  _(x,x),  _(x,x),  _(N,x),  _(A,x),  _(M,R),  _(M,T),
   /* 0CC0 */ _(M,TR),  _(M,R),  _(M,R),  _(M,R),  _(M,R),  _(x,x),  _(M,T), _(M,TR),
   /* 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), _(Nd,x), _(Nd,x),
   /* 0CE8 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
-  /* 0CF0 */  _(x,x),_(CWS,x),_(CWS,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 */  _(x,x), _(Bi,T), _(Bi,R), _(Vs,R),  _(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),
@@ -262,7 +254,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
   /* 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),_(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), _(VI,x),
+  /* 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), _(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),
@@ -270,7 +262,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
 
   /* Sinhala */
 
-  /* 0D80 */  _(x,x),  _(x,x), _(Bi,R), _(Vs,R),  _(x,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),
   /* 0D90 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),  _(x,x),
   /* 0D98 */  _(x,x),  _(x,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
@@ -286,7 +278,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
   /* 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),
 
-#define indic_offset_0x1000u 1336
+#define indic_offset_0x1000u 1304
 
 
   /* Myanmar */
@@ -297,22 +289,22 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
   /* 1018 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,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,T), _(TM,B),
-  /* 1038 */ _(Vs,R), _(IS,x), _(PK,T), _(CM,R), _(CM,x), _(CM,B), _(CM,B),  _(C,x),
+  /* 1030 */  _(M,B),  _(M,L),  _(M,T),  _(M,T),  _(M,T),  _(M,T), _(Bi,x), _(TM,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,B), _(CM,B),
-  /* 1060 */ _(CM,B),  _(C,x),  _(M,R), _(TM,R), _(TM,R),  _(C,x),  _(C,x),  _(M,R),
-  /* 1068 */  _(M,R), _(TM,R), _(TM,R), _(TM,R), _(TM,R), _(TM,R),  _(C,x),  _(C,x),
+  /* 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),
+  /* 1068 */  _(M,R), _(TM,x), _(TM,x), _(TM,x), _(TM,x), _(TM,x),  _(C,x),  _(C,x),
   /* 1070 */  _(C,x),  _(M,T),  _(M,T),  _(M,T),  _(M,T),  _(C,x),  _(C,x),  _(C,x),
   /* 1078 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 1080 */  _(C,x),  _(C,x), _(CM,B),  _(M,R),  _(M,L),  _(M,T),  _(M,T), _(TM,R),
-  /* 1088 */ _(TM,R), _(TM,R), _(TM,R), _(TM,R), _(TM,R), _(TM,B),  _(C,x), _(TM,R),
+  /* 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 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
-  /* 1098 */ _(Nd,x), _(Nd,x), _(TM,R), _(TM,R),  _(M,R),  _(M,T),  _(x,x),  _(x,x),
+  /* 1098 */ _(Nd,x), _(Nd,x), _(TM,x), _(TM,x),  _(M,R),  _(M,T),  _(x,x),  _(x,x),
 
-#define indic_offset_0x1700u 1496
+#define indic_offset_0x1700u 1464
 
 
   /* Tagalog */
@@ -353,14 +345,14 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
   /* 17A8 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,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,T), _(Vs,R),
-  /* 17C8 */  _(M,R), _(RS,T), _(RS,T), _(SM,T),_(CSR,T), _(CK,T), _(SM,T), _(SM,T),
-  /* 17D0 */ _(SM,T), _(PK,T), _(IS,x), _(SM,T),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 17D8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(A,x),  _(x,T),  _(x,x),  _(x,x),
+  /* 17C0 */ _(M,LR),  _(M,L),  _(M,L),  _(M,L), _(M,LR), _(M,LR), _(Bi,x), _(Vs,x),
+  /* 17C8 */  _(M,R), _(RS,T), _(RS,T), _(RS,T),_(CSR,T),  _(M,T),  _(M,T),  _(M,T),
+  /* 17D0 */  _(M,T), _(PK,T), _(IS,x),  _(M,T),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
+  /* 17D8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(A,x),  _(x,x),  _(x,x),  _(x,x),
   /* 17E0 */ _(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_0x1900u 1736
+#define indic_offset_0x1900u 1704
 
 
   /* Limbu */
@@ -370,9 +362,9 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
   /* 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),  _(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,R), _(CS,R), _(CS,R),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 1930 */ _(CF,R), _(CF,R), _(Bi,B), _(CF,R), _(CF,R), _(CF,R), _(CF,R), _(CF,R),
-  /* 1938 */ _(CF,R), _(CF,B),  _(M,T), _(SM,B),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
+  /* 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), _(Nd,x), _(Nd,x),
   /* 1948 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
 
@@ -393,10 +385,10 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
   /* 1998 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 19A0 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 19A8 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 19B0 */  _(M,R),  _(M,R),  _(M,R),  _(M,R),  _(M,R),_(M,VOL),_(M,VOL),_(M,VOL),
-  /* 19B8 */  _(M,R),  _(M,R),_(M,VOL),  _(M,R),  _(M,R),  _(M,R),  _(M,R),  _(M,R),
+  /* 19B0 */  _(M,R),  _(M,R),  _(M,R),  _(M,R),  _(M,R),  _(M,L),  _(M,L),  _(M,L),
+  /* 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,R), _(TM,R),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
+  /* 19C8 */ _(TM,x), _(TM,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* 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),
@@ -419,47 +411,47 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
   /* 1A38 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 1A40 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 1A48 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x), _(VI,x), _(VI,x), _(VI,x),
-  /* 1A50 */ _(VI,x), _(VI,x), _(VI,x),  _(C,x),  _(C,x), _(CM,L), _(CM,B), _(CF,R),
-  /* 1A58 */ _(CF,T), _(CF,T), _(CF,T), _(CF,B), _(CF,B), _(CF,B), _(CF,B),  _(x,x),
+  /* 1A50 */ _(VI,x), _(VI,x), _(VI,x),  _(C,x),  _(C,x), _(CM,L), _(CM,x), _(CF,x),
+  /* 1A58 */ _(CF,x), _(CF,x), _(CF,x), _(CF,x), _(CF,x), _(CF,x), _(CF,x),  _(x,x),
   /* 1A60 */ _(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,T), _(TM,T), _(TM,T),
-  /* 1A78 */ _(TM,T), _(TM,T), _(SM,T), _(SM,T), _(SM,T),  _(x,x),  _(x,x), _(SM,B),
+  /* 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 */ _(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_0x1b00u 2152
+#define indic_offset_0x1b00u 2120
 
 
   /* Balinese */
 
-  /* 1B00 */ _(Bi,T), _(Bi,T), _(Bi,T),_(CSR,T), _(Vs,R), _(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),
   /* 1B20 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 1B28 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 1B30 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(N,T),  _(M,R),  _(M,T),  _(M,T),
+  /* 1B30 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(N,x),  _(M,R),  _(M,T),  _(M,T),
   /* 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 */ _(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,T),  _(x,B),  _(x,T),  _(x,T),  _(x,T),
-  /* 1B70 */  _(x,T),  _(x,T),  _(x,T),  _(x,T),  _(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 */ _(Bi,T),_(CSR,T), _(Vs,R), _(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,R), _(CS,B), _(CS,B),  _(M,T),  _(M,B),  _(M,L),  _(M,R),
-  /* 1BA8 */  _(M,T),  _(M,T), _(PK,R), _(IS,x), _(CS,B), _(CS,B),  _(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), _(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),
 
@@ -469,9 +461,9 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
   /* 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,T),  _(M,R),
+  /* 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,T), _(CF,T), _(PK,R), _(PK,R),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
+  /* 1BF0 */ _(CF,x), _(CF,x), _(PK,R), _(PK,R),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* 1BF8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
 
   /* Lepcha */
@@ -480,49 +472,39 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
   /* 1C08 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 1C10 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,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,R), _(CS,R),  _(M,R),  _(M,L),
-  /* 1C28 */  _(M,L), _(M,TL),  _(M,R),  _(M,R),  _(M,B), _(CF,T), _(CF,T), _(CF,T),
-  /* 1C30 */ _(CF,T), _(CF,T), _(CF,T), _(CF,T), _(Bi,L), _(Bi,L), _(SM,T),  _(N,B),
+  /* 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,L), _(Bi,L),  _(x,x),  _(N,x),
   /* 1C38 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* 1C40 */ _(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_0x1cd0u 2488
+#define indic_offset_0x1cd0u 2456
 
 
   /* Vedic Extensions */
 
-  /* 1CD0 */ _(Ca,T), _(Ca,T), _(Ca,T),  _(x,x), _(Ca,O), _(Ca,B), _(Ca,B), _(Ca,B),
-  /* 1CD8 */ _(Ca,B), _(Ca,B), _(Ca,T), _(Ca,T), _(Ca,B), _(Ca,B), _(Ca,B), _(Ca,B),
-  /* 1CE0 */ _(Ca,T), _(Ca,R),  _(x,O),  _(x,O),  _(x,O),  _(x,O),  _(x,O),  _(x,O),
-  /* 1CE8 */  _(x,O),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,B),  _(x,x),  _(x,x),
-  /* 1CF0 */  _(x,x),  _(x,x), _(Vs,x), _(Vs,x), _(Ca,T),  _(x,x),  _(x,x),  _(x,x),
-  /* 1CF8 */ _(Ca,x), _(Ca,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
+  /* 1CD0 */ _(TM,x), _(TM,x), _(TM,x),  _(x,x), _(TM,x), _(TM,x), _(TM,x), _(TM,x),
+  /* 1CD8 */ _(TM,x), _(TM,x), _(TM,x), _(TM,x), _(TM,x), _(TM,x), _(TM,x), _(TM,x),
+  /* 1CE0 */ _(TM,x), _(TM,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
+  /* 1CE8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
+  /* 1CF0 */  _(x,x),  _(x,x), _(Vs,x), _(Vs,x), _(TM,x),  _(x,x),  _(x,x),  _(x,x),
 
-#define indic_offset_0x2008u 2536
+#define indic_offset_0x2008u 2496
 
 
   /* General Punctuation */
 
   /* 2008 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),_(ZWNJ,x),_(ZWJ,x),  _(x,x),  _(x,x),
-  /* 2010 */ _(CP,x), _(CP,x), _(CP,x), _(CP,x), _(CP,x),  _(x,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_0x2070u 2552
-
-
-  /* Superscripts and Subscripts */
-
-  /* 2070 */  _(x,x),  _(x,x),  _(x,x),  _(x,x), _(SM,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 2078 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 2080 */  _(x,x),  _(x,x), _(SM,x), _(SM,x), _(SM,x),  _(x,x),  _(x,x),  _(x,x),
-
-#define indic_offset_0xa800u 2576
+#define indic_offset_0xa800u 2512
 
 
   /* Syloti Nagri */
 
   /* A800 */ _(VI,x), _(VI,x),  _(x,x), _(VI,x), _(VI,x), _(VI,x), _(PK,T),  _(C,x),
-  /* A808 */  _(C,x),  _(C,x),  _(C,x), _(Bi,T),  _(C,x),  _(C,x),  _(C,x),  _(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),
@@ -543,13 +525,13 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
 
   /* Saurashtra */
 
-  /* A880 */ _(Bi,R), _(Vs,R), _(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),
   /* A890 */ _(VI,x), _(VI,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* A898 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* A8A0 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* A8A8 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* A8B0 */  _(C,x),  _(C,x),  _(C,x),  _(C,x), _(CF,R),  _(M,R),  _(M,R),  _(M,R),
+  /* A8B0 */  _(C,x),  _(C,x),  _(C,x),  _(C,x), _(CF,x),  _(M,R),  _(M,R),  _(M,R),
   /* 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),
@@ -558,9 +540,9 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
 
   /* Devanagari Extended */
 
-  /* A8E0 */ _(Ca,T), _(Ca,T), _(Ca,T), _(Ca,T), _(Ca,T), _(Ca,T), _(Ca,T), _(Ca,T),
-  /* A8E8 */ _(Ca,T), _(Ca,T), _(Ca,T), _(Ca,T), _(Ca,T), _(Ca,T), _(Ca,T), _(Ca,T),
-  /* A8F0 */ _(Ca,T), _(Ca,T),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
+  /* A8E0 */ _(Ca,x), _(Ca,x), _(Ca,x), _(Ca,x), _(Ca,x), _(Ca,x), _(Ca,x), _(Ca,x),
+  /* A8E8 */ _(Ca,x), _(Ca,x), _(Ca,x), _(Ca,x), _(Ca,x), _(Ca,x), _(Ca,x), _(Ca,x),
+  /* A8F0 */ _(Ca,x), _(Ca,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* A8F8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
 
   /* Kayah Li */
@@ -570,15 +552,15 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
   /* 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,B), _(TM,B), _(TM,B),  _(x,x),  _(x,x),
+  /* A928 */ _(Vo,x), _(Vo,x), _(Vo,x), _(TM,x), _(TM,x), _(TM,x),  _(x,x),  _(x,x),
 
   /* 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,T),
-  /* A950 */ _(CF,T), _(CF,T), _(CF,R), _(PK,R),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
+  /* A948 */  _(M,B),  _(M,B),  _(M,T),  _(M,B),  _(M,B),  _(M,B),  _(M,B), _(CF,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),
   /* 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),
@@ -587,14 +569,14 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
 
   /* Javanese */
 
-  /* A980 */ _(Bi,T), _(Bi,T),_(CSR,T), _(Vs,R), _(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),
   /* A9A0 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* A9A8 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* A9B0 */  _(C,x),  _(C,x),  _(C,x),  _(N,T),  _(M,R),  _(M,R),  _(M,T),  _(M,T),
-  /* A9B8 */  _(M,B),  _(M,B),  _(M,L),  _(M,L),  _(M,T), _(CS,R), _(CM,R), _(CM,R),
+  /* A9B0 */  _(C,x),  _(C,x),  _(C,x),  _(N,x),  _(M,R),  _(M,R),  _(M,T),  _(M,T),
+  /* 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 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
@@ -602,7 +584,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
 
   /* Myanmar Extended-B */
 
-  /* A9E0 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(M,T),  _(x,x),  _(C,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),
@@ -615,10 +597,10 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
   /* AA18 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* AA20 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* AA28 */  _(C,x),  _(M,T),  _(M,T),  _(M,T),  _(M,T),  _(M,B),  _(M,T),  _(M,L),
-  /* AA30 */  _(M,L),  _(M,T),  _(M,B), _(CM,R), _(CM,L), _(CM,B), _(CM,B),  _(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,T), _(CF,x), _(CF,x), _(CF,x), _(CF,x),
-  /* AA48 */ _(CF,x), _(CF,x), _(CF,x), _(CF,x), _(CF,T), _(CF,R),  _(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 */ _(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),
 
@@ -627,7 +609,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
   /* 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,R), _(TM,T), _(TM,R),  _(C,x),  _(C,x),
+  /* AA78 */  _(x,x),  _(x,x),  _(C,x), _(TM,x), _(TM,x), _(TM,x),  _(C,x),  _(C,x),
 
   /* Tai Viet */
 
@@ -638,8 +620,8 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
   /* AAA0 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* AAA8 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* AAB0 */  _(M,T),  _(M,R),  _(M,T),  _(M,T),  _(M,B),_(M,VOL),_(M,VOL),  _(M,T),
-  /* AAB8 */  _(M,T),_(M,VOL),  _(M,R),_(M,VOL),_(M,VOL),  _(M,R),  _(M,T), _(TM,T),
-  /* AAC0 */ _(TL,x), _(TM,T), _(TL,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
+  /* AAB8 */  _(M,T),_(M,VOL),  _(M,R),_(M,VOL),_(M,VOL),  _(M,R),  _(M,T), _(TM,x),
+  /* AAC0 */ _(TL,x), _(TM,x), _(TL,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
   /* AAC8 */  _(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),
@@ -648,9 +630,9 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
 
   /* 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,R), _(IS,x),  _(x,x),
+  /* AAF0 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x), _(Vs,x), _(IS,x),  _(x,x),
 
-#define indic_offset_0xabc0u 3336
+#define indic_offset_0xabc0u 3272
 
 
   /* Meetei Mayek */
@@ -660,31 +642,31 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
   /* 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,R), _(PK,B),  _(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_0x10a00u 3400
+#define indic_offset_0x10a00u 3336
 
 
   /* 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),  _(M,B), _(Bi,B), _(Vs,T),
+  /* 10A08 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(M,B),  _(x,x), _(Bi,x), _(Vs,x),
   /* 10A10 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(x,x),  _(C,x),  _(C,x),  _(C,x),
   /* 10A18 */  _(x,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,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 */  _(N,T),  _(N,B),  _(N,B),  _(x,x),  _(x,x),  _(x,x),  _(x,x), _(IS,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_0x11000u 3472
+#define indic_offset_0x11000u 3408
 
 
   /* Brahmi */
 
-  /* 11000 */ _(Bi,R), _(Bi,T), _(Vs,R),_(CWS,x),_(CWS,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),
   /* 11010 */ _(VI,x), _(VI,x), _(VI,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 11018 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
@@ -703,21 +685,21 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
 
   /* Kaithi */
 
-  /* 11080 */ _(Bi,T), _(Bi,T), _(Vs,R), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,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),
   /* 11090 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 11098 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 110A0 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,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,B),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
+  /* 110B8 */  _(M,R),  _(V,B),  _(N,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
 
-#define indic_offset_0x11100u 3664
+#define indic_offset_0x11100u 3600
 
 
   /* Chakma */
 
-  /* 11100 */ _(Bi,T), _(Bi,T), _(Vs,T), _(VI,x), _(VI,x), _(VI,x), _(VI,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),
   /* 11110 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 11118 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
@@ -734,12 +716,12 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
   /* 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,B),  _(x,x),  _(x,x),  _(x,x),  _(x,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 */ _(Bi,T), _(Bi,T), _(Vs,R), _(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),
   /* 11190 */ _(VI,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 11198 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
@@ -747,8 +729,8 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
   /* 111A8 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 111B0 */  _(C,x),  _(C,x),  _(C,x),  _(M,R),  _(M,L),  _(M,R),  _(M,B),  _(M,B),
   /* 111B8 */  _(M,B),  _(M,B),  _(M,B),  _(M,B),  _(M,T),  _(M,T),  _(M,T), _(M,TR),
-  /* 111C0 */  _(V,R),  _(A,x),_(CPrf,x),_(CPrf,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 111C8 */  _(x,x),  _(x,x),  _(N,x),  _(M,T),  _(M,B),  _(x,x),  _(x,x),  _(x,x),
+  /* 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 */ _(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),
 
@@ -767,19 +749,10 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
   /* 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,T),  _(V,R),  _(N,T), _(GM,T),
-
-#define indic_offset_0x11280u 3976
+  /* 11230 */  _(M,T),  _(M,T), _(M,TR), _(M,TR), _(Bi,x),  _(V,R),  _(N,x), _(GM,T),
 
+#define indic_offset_0x112b0u 3912
 
-  /* Multani */
-
-  /* 11280 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x),  _(C,x),  _(C,x),  _(C,x),  _(x,x),
-  /* 11288 */  _(C,x),  _(x,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(x,x),  _(C,x),
-  /* 11290 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 11298 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(x,x),  _(C,x),
-  /* 112A0 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 112A8 */  _(C,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
 
   /* Khudawadi */
 
@@ -788,15 +761,15 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
   /* 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,T),
+  /* 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,B), _(PK,B),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
+  /* 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 */ _(Bi,x), _(Bi,T), _(Bi,R), _(Vs,R),  _(x,x), _(VI,x), _(VI,x), _(VI,x),
+  /* 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),
@@ -808,11 +781,11 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
   /* 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,T), _(Ca,T),
-  /* 11368 */ _(Ca,T), _(Ca,T), _(Ca,T), _(Ca,T), _(Ca,T),  _(x,x),  _(x,x),  _(x,x),
-  /* 11370 */ _(Ca,T), _(Ca,T), _(Ca,T), _(Ca,T), _(Ca,T),  _(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 4224
+#define indic_offset_0x11480u 4112
 
 
   /* Tirhuta */
@@ -824,13 +797,13 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
   /* 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,T),
-  /* 114C0 */ _(Bi,T), _(Vs,R),  _(V,B),  _(N,B),  _(A,x),  _(x,x),  _(x,x),  _(x,x),
+  /* 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 4320
+#define indic_offset_0x11580u 4208
 
 
   /* Siddham */
@@ -842,15 +815,11 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
   /* 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,T), _(Bi,T), _(Vs,R),  _(V,B),
-  /* 115C0 */  _(N,B),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 115C8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 115D0 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 115D8 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x),  _(M,B),  _(M,B),  _(x,x),  _(x,x),
-  /* 115E0 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 115E8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 115F0 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 115F8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(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 */
 
@@ -861,8 +830,8 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
   /* 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,T), _(Vs,R),  _(V,B),
-  /* 11640 */  _(M,T),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
+  /* 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),
@@ -878,30 +847,13 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
   /* 11690 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 11698 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 116A0 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 116A8 */  _(C,x),  _(C,x),  _(C,x), _(Bi,T), _(Vs,R),  _(M,T),  _(M,L),  _(M,R),
-  /* 116B0 */  _(M,B),  _(M,B),  _(M,T),  _(M,T),  _(M,T),  _(M,T),  _(V,R),  _(N,B),
+  /* 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 */ _(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),
-  /* 116D0 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 116D8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 116E0 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 116E8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 116F0 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 116F8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-
-  /* Ahom */
-
-  /* 11700 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 11708 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 11710 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 11718 */  _(C,x),  _(C,x),  _(x,x),  _(x,x),  _(x,x), _(CM,B), _(CM,x), _(CM,T),
-  /* 11720 */  _(M,R),  _(M,R),  _(M,T),  _(M,T),  _(M,B),  _(M,B),  _(M,L),  _(M,T),
-  /* 11728 */  _(M,B),  _(M,T),  _(M,T), _(PK,T),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 11730 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
-  /* 11738 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-
-}; /* Table items: 4768; occupancy: 72% */
+
+}; /* Table items: 4488; occupancy: 73% */
 
 INDIC_TABLE_ELEMENT_TYPE
 hb_indic_get_categories (hb_codepoint_t u)
@@ -910,7 +862,7 @@ hb_indic_get_categories (hb_codepoint_t u)
   {
     case 0x0u:
       if (hb_in_range (u, 0x0028u, 0x003Fu)) return indic_table[u - 0x0028u + indic_offset_0x0028u];
-      if (hb_in_range (u, 0x00B0u, 0x00D7u)) return indic_table[u - 0x00B0u + indic_offset_0x00b0u];
+      if (hb_in_range (u, 0x00D0u, 0x00D7u)) return indic_table[u - 0x00D0u + indic_offset_0x00d0u];
       if (hb_in_range (u, 0x0900u, 0x0DF7u)) return indic_table[u - 0x0900u + indic_offset_0x0900u];
       if (unlikely (u == 0x00A0u)) return _(CP,x);
       break;
@@ -920,12 +872,11 @@ hb_indic_get_categories (hb_codepoint_t u)
       if (hb_in_range (u, 0x1700u, 0x17EFu)) return indic_table[u - 0x1700u + indic_offset_0x1700u];
       if (hb_in_range (u, 0x1900u, 0x1A9Fu)) return indic_table[u - 0x1900u + indic_offset_0x1900u];
       if (hb_in_range (u, 0x1B00u, 0x1C4Fu)) return indic_table[u - 0x1B00u + indic_offset_0x1b00u];
-      if (hb_in_range (u, 0x1CD0u, 0x1CFFu)) return indic_table[u - 0x1CD0u + indic_offset_0x1cd0u];
+      if (hb_in_range (u, 0x1CD0u, 0x1CF7u)) return indic_table[u - 0x1CD0u + indic_offset_0x1cd0u];
       break;
 
     case 0x2u:
       if (hb_in_range (u, 0x2008u, 0x2017u)) return indic_table[u - 0x2008u + indic_offset_0x2008u];
-      if (hb_in_range (u, 0x2070u, 0x2087u)) return indic_table[u - 0x2070u + indic_offset_0x2070u];
       if (unlikely (u == 0x25CCu)) return _(CP,x);
       break;
 
@@ -941,9 +892,10 @@ hb_indic_get_categories (hb_codepoint_t u)
     case 0x11u:
       if (hb_in_range (u, 0x11000u, 0x110BFu)) return indic_table[u - 0x11000u + indic_offset_0x11000u];
       if (hb_in_range (u, 0x11100u, 0x11237u)) return indic_table[u - 0x11100u + indic_offset_0x11100u];
-      if (hb_in_range (u, 0x11280u, 0x11377u)) return indic_table[u - 0x11280u + indic_offset_0x11280u];
+      if (hb_in_range (u, 0x112B0u, 0x11377u)) return indic_table[u - 0x112B0u + indic_offset_0x112b0u];
       if (hb_in_range (u, 0x11480u, 0x114DFu)) return indic_table[u - 0x11480u + indic_offset_0x11480u];
-      if (hb_in_range (u, 0x11580u, 0x1173Fu)) return indic_table[u - 0x11580u + indic_offset_0x11580u];
+      if (hb_in_range (u, 0x11580u, 0x115C7u)) return indic_table[u - 0x11580u + indic_offset_0x11580u];
+      if (hb_in_range (u, 0x11600u, 0x116CFu)) return indic_table[u - 0x11600u + indic_offset_0x11600u];
       break;
 
     default:
@@ -962,14 +914,11 @@ hb_indic_get_categories (hb_codepoint_t u)
 #undef ISC_CD
 #undef ISC_CF
 #undef ISC_CHL
-#undef ISC_CK
 #undef ISC_CM
 #undef ISC_CP
 #undef ISC_CPR
-#undef ISC_CPrf
 #undef ISC_CS
 #undef ISC_CSR
-#undef ISC_CWS
 #undef ISC_GM
 #undef ISC_IS
 #undef ISC_ZWJ
@@ -981,7 +930,6 @@ hb_indic_get_categories (hb_codepoint_t u)
 #undef ISC_x
 #undef ISC_PK
 #undef ISC_RS
-#undef ISC_SM
 #undef ISC_TL
 #undef ISC_TM
 #undef ISC_V
index 1e151a7..7723600 100644 (file)
@@ -142,7 +142,7 @@ 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_SAFE (info.indic_category()) & flags);
+  return !!(FLAG (info.indic_category()) & flags);
 }
 
 static inline bool
@@ -176,8 +176,24 @@ set_indic_properties (hb_glyph_info_t &info)
    * 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. */
-  if (unlikely (hb_in_range (u, 0x0953u, 0x0954u)))
+  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,
@@ -200,12 +216,15 @@ set_indic_properties (hb_glyph_info_t &info)
     cat = OT_Symbol;
     ASSERT_STATIC ((int) INDIC_SYLLABIC_CATEGORY_AVAGRAHA == OT_Symbol);
   }
-  else if (unlikely (u == 0x17DDu)) /* https://github.com/roozbehp/unicode-data/issues/2 */
+  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;
@@ -218,7 +237,7 @@ set_indic_properties (hb_glyph_info_t &info)
    * Re-assign position.
    */
 
-  if ((FLAG_SAFE (cat) & CONSONANT_FLAGS))
+  if ((FLAG (cat) & CONSONANT_FLAGS))
   {
     pos = POS_BASE_C;
     if (is_ra (u))
@@ -228,7 +247,7 @@ set_indic_properties (hb_glyph_info_t &info)
   {
     pos = matra_position (u, pos);
   }
-  else if ((FLAG_SAFE (cat) & (FLAG (OT_SM) | FLAG (OT_VD) | FLAG (OT_A) | FLAG (OT_Symbol))))
+  else if ((FLAG (cat) & (FLAG (OT_SM) | FLAG (OT_VD) | FLAG (OT_A) | FLAG (OT_Symbol))))
   {
     pos = POS_SMVD;
   }
@@ -493,12 +512,12 @@ struct indic_shape_plan_t
     hb_codepoint_t glyph = virama_glyph;
     if (unlikely (virama_glyph == (hb_codepoint_t) -1))
     {
-      if (!config->virama || !font->get_nominal_glyph (config->virama, &glyph))
+      if (!config->virama || !font->get_glyph (config->virama, 0, &glyph))
        glyph = 0;
       /* Technically speaking, the spec says we should apply 'locl' to virama too.
        * Maybe one day... */
 
-      /* Our get_nominal_glyph() function needs a font, so we can't get the virama glyph
+      /* Our get_glyph() function needs a font, so we can't get the virama glyph
        * during shape planning...  Instead, overwrite it here.  It's safe.  Don't worry! */
       (const_cast<indic_shape_plan_t *> (this))->virama_glyph = glyph;
     }
@@ -538,15 +557,8 @@ data_create_indic (const hb_ot_shape_plan_t *plan)
   indic_plan->virama_glyph = (hb_codepoint_t) -1;
 
   /* 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.
-   * The new-spec for all dual-spec scripts says zero-context matching happens.
-   *
-   * However, testing with Malayalam shows that old and new spec both allow
-   * context.  Testing with Bengali new-spec however shows that it doesn't.
-   * So, the heuristic here is the way it is.  It should *only* be changed,
-   * as we discover more cases of what Windows does.  DON'T TOUCH OTHERWISE.
-   */
-  bool zero_context = !indic_plan->is_old_spec && plan->props.script != HB_SCRIPT_MALAYALAM;
+   * 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);
@@ -742,6 +754,10 @@ initial_reordering_consonant_syllable (const hb_ot_shape_plan_t *plan,
 
     switch (indic_plan->config->base_pos)
     {
+      default:
+        assert (false);
+       /* fallthrough */
+
       case BASE_POS_LAST:
       {
        /* -> starting from the end of the syllable, move backwards */
@@ -947,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++)
     {
-      if ((FLAG_SAFE (info[i].indic_category()) & (JOINER_FLAGS | FLAG (OT_N) | FLAG (OT_RS) | MEDIAL_FLAGS | 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 &&
@@ -996,7 +1012,7 @@ initial_reordering_consonant_syllable (const hb_ot_shape_plan_t *plan,
       info[i].syllable() = i - start;
 
     /* Sit tight, rock 'n roll! */
-    hb_stable_sort (info + start, end - start, compare_indic_order);
+    hb_bubble_sort (info + start, end - start, compare_indic_order);
     /* Find base again */
     base = end;
     for (unsigned int i = start; i < end; i++)
@@ -1009,11 +1025,7 @@ initial_reordering_consonant_syllable (const hb_ot_shape_plan_t *plan,
      * 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.
-     *
-     * We could use buffer->sort() for this, if there was no special
-     * reordering of pre-base stuff happening later...
-     */
+     * 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
@@ -1149,6 +1161,17 @@ initial_reordering_consonant_syllable (const hb_ot_shape_plan_t *plan,
     }
 }
 
+
+static void
+initial_reordering_vowel_syllable (const hb_ot_shape_plan_t *plan,
+                                  hb_face_t *face,
+                                  hb_buffer_t *buffer,
+                                  unsigned int start, unsigned int end)
+{
+  /* We made the vowels look like consonants.  So let's call the consonant logic! */
+  initial_reordering_consonant_syllable (plan, face, buffer, start, end);
+}
+
 static void
 initial_reordering_standalone_cluster (const hb_ot_shape_plan_t *plan,
                                       hb_face_t *face,
@@ -1171,27 +1194,50 @@ initial_reordering_standalone_cluster (const hb_ot_shape_plan_t *plan,
 }
 
 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 standalone_cluster. */
+  initial_reordering_standalone_cluster (plan, face, buffer, start, end);
+}
+
+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,
+                                     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 vowel_syllable: /* We made the vowels look like consonants.  So let's call the consonant logic! */
-    case consonant_syllable:
-     initial_reordering_consonant_syllable (plan, face, buffer, start, end);
-     break;
-
-    case broken_cluster: /* We already inserted dotted-circles, so just call the standalone_cluster. */
-    case standalone_cluster:
-     initial_reordering_standalone_cluster (plan, face, buffer, start, end);
-     break;
-
-    case symbol_cluster:
-    case non_indic_cluster:
-      break;
+  switch (syllable_type) {
+  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;
   }
 }
 
@@ -1215,7 +1261,7 @@ insert_dotted_circles (const hb_ot_shape_plan_t *plan HB_UNUSED,
 
 
   hb_codepoint_t dottedcircle_glyph;
-  if (!font->get_nominal_glyph (0x25CCu, &dottedcircle_glyph))
+  if (!font->get_glyph (0x25CCu, 0, &dottedcircle_glyph))
     return;
 
   hb_glyph_info_t dottedcircle = {0};
@@ -1227,7 +1273,7 @@ insert_dotted_circles (const hb_ot_shape_plan_t *plan HB_UNUSED,
 
   buffer->idx = 0;
   unsigned int last_syllable = 0;
-  while (buffer->idx < buffer->len && !buffer->in_error)
+  while (buffer->idx < buffer->len)
   {
     unsigned int syllable = buffer->cur().syllable();
     syllable_type_t syllable_type = (syllable_type_t) (syllable & 0x0F);
@@ -1235,19 +1281,19 @@ insert_dotted_circles (const hb_ot_shape_plan_t *plan HB_UNUSED,
     {
       last_syllable = syllable;
 
-      hb_glyph_info_t ginfo = dottedcircle;
-      ginfo.cluster = buffer->cur().cluster;
-      ginfo.mask = buffer->cur().mask;
-      ginfo.syllable() = buffer->cur().syllable();
+      hb_glyph_info_t info = dottedcircle;
+      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 && !buffer->in_error &&
+      while (buffer->idx < buffer->len &&
             last_syllable == buffer->cur().syllable() &&
             buffer->cur().indic_category() == OT_Repha)
         buffer->next_glyph ();
 
-      buffer->output_info (ginfo);
+      buffer->output_info (info);
     }
     else
       buffer->next_glyph ();
@@ -1264,8 +1310,18 @@ initial_reordering (const hb_ot_shape_plan_t *plan,
   update_consonant_positions (plan, font, buffer);
   insert_dotted_circles (plan, font, buffer);
 
-  foreach_syllable (buffer, start, end)
-    initial_reordering_syllable (plan, font->face, buffer, start, end);
+  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
@@ -1332,25 +1388,6 @@ final_reordering_syllable (const hb_ot_shape_plan_t *plan,
            break;
          }
       }
-      /* For Malayalam, skip over unformed below- (but NOT post-) forms. */
-      if (buffer->props.script == HB_SCRIPT_MALAYALAM)
-      {
-       for (unsigned int i = base + 1; i < end; i++)
-       {
-         while (i < end && is_joiner (info[i]))
-           i++;
-         if (i == end || !is_halant_or_coeng (info[i]))
-           break;
-         i++; /* Skip halant. */
-         while (i < end && is_joiner (info[i]))
-           i++;
-         if (i < end && is_consonant (info[i]) && info[i].indic_position() == POS_BELOW_C)
-         {
-           base = i;
-           info[base].indic_position() = POS_BASE_C;
-         }
-       }
-      }
 
       if (start < base && info[base].indic_position() > POS_BASE_C)
         base--;
@@ -1411,17 +1448,12 @@ final_reordering_syllable (const hb_ot_shape_plan_t *plan,
        if (info[i - 1].indic_position () == POS_PRE_M)
        {
          unsigned int old_pos = i - 1;
-         if (old_pos < base && base <= new_pos) /* Shouldn't actually happen. */
-           base--;
-
          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;
-
-         /* Note: this merge_clusters() is intentionally *after* the reordering.
-          * Indic matra reordering is special and tricky... */
+         if (old_pos < base && base <= new_pos) /* Shouldn't actually happen. */
+           base--;
          buffer->merge_clusters (new_pos, MIN (end, base + 1));
-
          new_pos--;
        }
     } else {
@@ -1518,7 +1550,7 @@ final_reordering_syllable (const hb_ot_shape_plan_t *plan,
     {
       new_reph_pos = base;
       while (new_reph_pos < end &&
-            !( FLAG_SAFE (info[new_reph_pos + 1].indic_position()) & (FLAG (POS_POST_C) | FLAG (POS_AFTER_POST) | FLAG (POS_SMVD))))
+            !( FLAG (info[new_reph_pos + 1].indic_position()) & (FLAG (POS_POST_C) | FLAG (POS_AFTER_POST) | FLAG (POS_SMVD))))
        new_reph_pos++;
       if (new_reph_pos < end)
         goto reph_move;
@@ -1574,12 +1606,12 @@ final_reordering_syllable (const hb_ot_shape_plan_t *plan,
 
     reph_move:
     {
-      /* Move */
       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;
-
       if (start < base && base <= new_reph_pos)
        base--;
     }
@@ -1634,8 +1666,8 @@ final_reordering_syllable (const hb_ot_shape_plan_t *plan,
            if (new_pos > start && info[new_pos - 1].indic_category() == OT_M)
            {
              unsigned int old_pos = i;
-             for (unsigned int j = base + 1; j < old_pos; j++)
-               if (info[j].indic_category() == OT_M)
+             for (unsigned int i = base + 1; i < old_pos; i++)
+               if (info[i].indic_category() == OT_M)
                {
                  new_pos--;
                  break;
@@ -1652,12 +1684,10 @@ final_reordering_syllable (const hb_ot_shape_plan_t *plan,
 
          {
            unsigned int old_pos = i;
-
            buffer->merge_clusters (new_pos, old_pos + 1);
            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++;
          }
@@ -1671,7 +1701,7 @@ final_reordering_syllable (const hb_ot_shape_plan_t *plan,
   /* Apply 'init' to the Left Matra if it's a word start. */
   if (info[start].indic_position () == POS_PRE_M &&
       (!start ||
-       !(FLAG_SAFE (_hb_glyph_info_get_general_category (&info[start - 1])) &
+       !(FLAG (_hb_glyph_info_get_general_category (&info[start - 1])) &
         FLAG_RANGE (HB_UNICODE_GENERAL_CATEGORY_FORMAT, HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK))))
     info[start].mask |= indic_plan->mask_array[INIT];
 
@@ -1707,8 +1737,16 @@ final_reordering (const hb_ot_shape_plan_t *plan,
   unsigned int count = buffer->len;
   if (unlikely (!count)) return;
 
-  foreach_syllable (buffer, start, end)
-    final_reordering_syllable (plan, buffer, start, end);
+  hb_glyph_info_t *info = buffer->info;
+  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()) {
+      final_reordering_syllable (plan, buffer, last, i);
+      last = i;
+      last_syllable = info[last].syllable();
+    }
+  final_reordering_syllable (plan, buffer, last, count);
 
   HB_BUFFER_DEALLOCATE_VAR (buffer, indic_category);
   HB_BUFFER_DEALLOCATE_VAR (buffer, indic_position);
@@ -1799,7 +1837,7 @@ decompose_indic (const hb_ot_shape_normalize_context_t *c,
     hb_codepoint_t glyph;
 
     if (hb_options ().uniscribe_bug_compatible ||
-       (c->font->get_nominal_glyph (ab, &glyph) &&
+       (c->font->get_glyph (ab, 0, &glyph) &&
         indic_plan->pstf.would_substitute (&glyph, 1, c->font->face)))
     {
       /* Ok, safe to use Uniscribe-style decomposition. */
@@ -1809,7 +1847,7 @@ decompose_indic (const hb_ot_shape_normalize_context_t *c,
     }
   }
 
-  return (bool) c->unicode->decompose (ab, a, b);
+  return c->unicode->decompose (ab, a, b);
 }
 
 static bool
@@ -1825,7 +1863,7 @@ compose_indic (const hb_ot_shape_normalize_context_t *c,
   /* Composition-exclusion exceptions that we want to recompose. */
   if (a == 0x09AFu && b == 0x09BCu) { *ab = 0x09DFu; return true; }
 
-  return (bool) c->unicode->compose (a, b, ab);
+  return c->unicode->compose (a, b, ab);
 }
 
 
@@ -1837,7 +1875,6 @@ const hb_ot_complex_shaper_t _hb_ot_complex_shaper_indic =
   data_create_indic,
   data_destroy_indic,
   NULL, /* preprocess_text */
-  NULL, /* postprocess_glyphs */
   HB_OT_SHAPE_NORMALIZATION_MODE_COMPOSED_DIACRITICS_NO_SHORT_CIRCUIT,
   decompose_indic,
   compose_indic,
index 545765d..d016380 100644 (file)
@@ -154,7 +154,7 @@ 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_SAFE (info.myanmar_category()) & flags);
+  return !!(FLAG (info.myanmar_category()) & flags);
 }
 
 static inline bool
@@ -199,10 +199,6 @@ set_myanmar_properties (hb_glyph_info_t &info)
       cat = (indic_category_t) OT_A;
       break;
 
-    case 0x1039u:
-      cat = (indic_category_t) OT_H;
-      break;
-
     case 0x103Au:
       cat = (indic_category_t) OT_As;
       break;
@@ -308,7 +304,9 @@ compare_myanmar_order (const hb_glyph_info_t *pa, const hb_glyph_info_t *pb)
  * http://www.microsoft.com/typography/OpenTypeDev/myanmar/intro.htm */
 
 static void
-initial_reordering_consonant_syllable (hb_buffer_t *buffer,
+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;
@@ -395,10 +393,42 @@ initial_reordering_consonant_syllable (hb_buffer_t *buffer,
     }
   }
 
+  buffer->merge_clusters (start, end);
   /* Sit tight, rock 'n roll! */
-  buffer->sort (start, end, compare_myanmar_order);
+  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,
@@ -407,15 +437,10 @@ initial_reordering_syllable (const hb_ot_shape_plan_t *plan,
 {
   syllable_type_t syllable_type = (syllable_type_t) (buffer->info[start].syllable() & 0x0F);
   switch (syllable_type) {
-
-    case broken_cluster: /* We already inserted dotted-circles, so just call the consonant_syllable. */
-    case consonant_syllable:
-      initial_reordering_consonant_syllable  (buffer, start, end);
-      break;
-
-    case punctuation_cluster:
-    case non_myanmar_cluster:
-      break;
+  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;
   }
 }
 
@@ -439,7 +464,7 @@ insert_dotted_circles (const hb_ot_shape_plan_t *plan HB_UNUSED,
 
 
   hb_codepoint_t dottedcircle_glyph;
-  if (!font->get_nominal_glyph (0x25CCu, &dottedcircle_glyph))
+  if (!font->get_glyph (0x25CCu, 0, &dottedcircle_glyph))
     return;
 
   hb_glyph_info_t dottedcircle = {0};
@@ -451,7 +476,7 @@ insert_dotted_circles (const hb_ot_shape_plan_t *plan HB_UNUSED,
 
   buffer->idx = 0;
   unsigned int last_syllable = 0;
-  while (buffer->idx < buffer->len && !buffer->in_error)
+  while (buffer->idx < buffer->len)
   {
     unsigned int syllable = buffer->cur().syllable();
     syllable_type_t syllable_type = (syllable_type_t) (syllable & 0x0F);
@@ -459,12 +484,12 @@ insert_dotted_circles (const hb_ot_shape_plan_t *plan HB_UNUSED,
     {
       last_syllable = syllable;
 
-      hb_glyph_info_t ginfo = dottedcircle;
-      ginfo.cluster = buffer->cur().cluster;
-      ginfo.mask = buffer->cur().mask;
-      ginfo.syllable() = buffer->cur().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 (ginfo);
+      buffer->output_info (info);
     }
     else
       buffer->next_glyph ();
@@ -480,8 +505,18 @@ initial_reordering (const hb_ot_shape_plan_t *plan,
 {
   insert_dotted_circles (plan, font, buffer);
 
-  foreach_syllable (buffer, start, end)
-    initial_reordering_syllable (plan, font->face, buffer, start, end);
+  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
@@ -511,7 +546,6 @@ const hb_ot_complex_shaper_t _hb_ot_complex_shaper_myanmar_old =
   NULL, /* data_create */
   NULL, /* data_destroy */
   NULL, /* preprocess_text */
-  NULL, /* postprocess_glyphs */
   HB_OT_SHAPE_NORMALIZATION_MODE_DEFAULT,
   NULL, /* decompose */
   NULL, /* compose */
@@ -528,7 +562,6 @@ const hb_ot_complex_shaper_t _hb_ot_complex_shaper_myanmar =
   NULL, /* data_create */
   NULL, /* data_destroy */
   NULL, /* preprocess_text */
-  NULL, /* postprocess_glyphs */
   HB_OT_SHAPE_NORMALIZATION_MODE_COMPOSED_DIACRITICS_NO_SHORT_CIRCUIT,
   NULL, /* decompose */
   NULL, /* compose */
index b3372bd..e268933 100644 (file)
 
 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_BY_GDEF_LATE,
+
+  HB_OT_SHAPE_ZERO_WIDTH_MARKS_DEFAULT = HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_UNICODE_LATE
 };
 
 
@@ -55,9 +59,9 @@ enum hb_ot_shape_zero_width_marks_type_t {
   HB_COMPLEX_SHAPER_IMPLEMENT (myanmar_old) \
   HB_COMPLEX_SHAPER_IMPLEMENT (indic) \
   HB_COMPLEX_SHAPER_IMPLEMENT (myanmar) \
+  HB_COMPLEX_SHAPER_IMPLEMENT (sea) \
   HB_COMPLEX_SHAPER_IMPLEMENT (thai) \
   HB_COMPLEX_SHAPER_IMPLEMENT (tibetan) \
-  HB_COMPLEX_SHAPER_IMPLEMENT (use) \
   /* ^--- Add new shapers here */
 
 
@@ -106,15 +110,6 @@ struct hb_ot_complex_shaper_t
                           hb_buffer_t              *buffer,
                           hb_font_t                *font);
 
-  /* postprocess_glyphs()
-   * Called during shape().
-   * Shapers can use to modify glyphs after shaping ends.
-   * May be NULL.
-   */
-  void (*postprocess_glyphs) (const hb_ot_shape_plan_t *plan,
-                             hb_buffer_t              *buffer,
-                             hb_font_t                *font);
-
 
   hb_ot_shape_normalization_mode_t normalization_preference;
 
@@ -184,12 +179,9 @@ hb_ot_shape_complex_categorize (const hb_ot_shape_planner_t *planner)
     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).
-       * But note that Arabic shaping is applicable only to horizontal layout; for
-       * vertical text, just use the generic shaper instead. */
-      if ((planner->map.chosen_script[0] != HB_OT_TAG_DEFAULT_SCRIPT ||
-          planner->props.script == HB_SCRIPT_ARABIC) &&
-         HB_DIRECTION_IS_HORIZONTAL(planner->props.direction))
+       * This is because we do fallback shaping for Arabic script (and not others). */
+      if (planner->map.chosen_script[0] != HB_OT_TAG_DEFAULT_SCRIPT ||
+         planner->props.script == HB_SCRIPT_ARABIC)
        return &_hb_ot_complex_shaper_arabic;
       else
        return &_hb_ot_complex_shaper_default;
@@ -222,9 +214,61 @@ hb_ot_shape_complex_categorize (const hb_ot_shape_planner_t *planner)
 
     /* ^--- Add new shapers here */
 
+
 #if 0
+    /* Note:
+     *
+     * These disabled scripts are listed in ucd/IndicSyllabicCategory.txt, but according
+     * to Martin Hosken and Jonathan Kew do not require complex shaping.
+     *
+     * TODO We should automate figuring out which scripts do not need complex shaping
+     *
+     * TODO We currently keep data for these scripts in our indic table.  Need to fix the
+     * generator to not do that.
+     */
+
+
+    /* Simple? */
+
+    /* Unicode-3.2 additions */
+    case HB_SCRIPT_BUHID:
+    case HB_SCRIPT_HANUNOO:
+
+    /* Unicode-5.1 additions */
+    case HB_SCRIPT_SAURASHTRA:
+
+    /* Unicode-6.0 additions */
+    case HB_SCRIPT_BATAK:
+    case HB_SCRIPT_BRAHMI:
+
+
+    /* Simple */
+
+    /* Unicode-1.1 additions */
+    /* These have their own shaper now. */
+    case HB_SCRIPT_LAO:
+    case HB_SCRIPT_THAI:
+
+    /* Unicode-3.2 additions */
+    case HB_SCRIPT_TAGALOG:
+    case HB_SCRIPT_TAGBANWA:
+
+    /* Unicode-4.0 additions */
+    case HB_SCRIPT_LIMBU:
+    case HB_SCRIPT_TAI_LE:
+
     /* Unicode-4.1 additions */
+    case HB_SCRIPT_KHAROSHTHI:
     case HB_SCRIPT_NEW_TAI_LUE:
+    case HB_SCRIPT_SYLOTI_NAGRI:
+
+    /* Unicode-5.1 additions */
+    case HB_SCRIPT_KAYAH_LI:
+
+    /* Unicode-5.2 additions */
+    case HB_SCRIPT_TAI_VIET:
+
+
 #endif
 
     /* Unicode-1.1 additions */
@@ -241,11 +285,28 @@ hb_ot_shape_complex_categorize (const hb_ot_shape_planner_t *planner)
     /* Unicode-3.0 additions */
     case HB_SCRIPT_SINHALA:
 
+    /* Unicode-5.0 additions */
+    case HB_SCRIPT_BALINESE:
+
+    /* Unicode-5.1 additions */
+    case HB_SCRIPT_LEPCHA:
+    case HB_SCRIPT_REJANG:
+    case HB_SCRIPT_SUNDANESE:
+
     /* Unicode-5.2 additions */
     case HB_SCRIPT_JAVANESE:
+    case HB_SCRIPT_KAITHI:
+    case HB_SCRIPT_MEETEI_MAYEK:
+
+    /* Unicode-6.0 additions */
+
+    /* Unicode-6.1 additions */
+    case HB_SCRIPT_CHAKMA:
+    case HB_SCRIPT_SHARADA:
+    case HB_SCRIPT_TAKRI:
 
       /* If the designer designed the font for the 'DFLT' script,
-       * use the default shaper.  Otherwise, use the specific shaper.
+       * 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'))
@@ -277,82 +338,23 @@ hb_ot_shape_complex_categorize (const hb_ot_shape_planner_t *planner)
       else
        return &_hb_ot_complex_shaper_default;
 
-
-    /* Unicode-2.0 additions */
-    //case HB_SCRIPT_TIBETAN:
-
-    /* Unicode-3.0 additions */
-    //case HB_SCRIPT_MONGOLIAN:
-    //case HB_SCRIPT_SINHALA:
-
-    /* Unicode-3.2 additions */
-    case HB_SCRIPT_BUHID:
-    case HB_SCRIPT_HANUNOO:
-    case HB_SCRIPT_TAGALOG:
-    case HB_SCRIPT_TAGBANWA:
-
-    /* Unicode-4.0 additions */
-    case HB_SCRIPT_LIMBU:
-    case HB_SCRIPT_TAI_LE:
-
     /* Unicode-4.1 additions */
     case HB_SCRIPT_BUGINESE:
-    case HB_SCRIPT_KHAROSHTHI:
-    case HB_SCRIPT_SYLOTI_NAGRI:
-    case HB_SCRIPT_TIFINAGH:
-
-    /* Unicode-5.0 additions */
-    case HB_SCRIPT_BALINESE:
-    //case HB_SCRIPT_NKO:
-    //case HB_SCRIPT_PHAGS_PA:
 
     /* Unicode-5.1 additions */
     case HB_SCRIPT_CHAM:
-    case HB_SCRIPT_KAYAH_LI:
-    case HB_SCRIPT_LEPCHA:
-    case HB_SCRIPT_REJANG:
-    case HB_SCRIPT_SAURASHTRA:
-    case HB_SCRIPT_SUNDANESE:
 
     /* Unicode-5.2 additions */
-    case HB_SCRIPT_EGYPTIAN_HIEROGLYPHS:
-    //case HB_SCRIPT_JAVANESE:
-    case HB_SCRIPT_KAITHI:
-    case HB_SCRIPT_MEETEI_MAYEK:
     case HB_SCRIPT_TAI_THAM:
-    case HB_SCRIPT_TAI_VIET:
-
-    /* Unicode-6.0 additions */
-    case HB_SCRIPT_BATAK:
-    case HB_SCRIPT_BRAHMI:
-    //case HB_SCRIPT_MANDAIC:
-
-    /* Unicode-6.1 additions */
-    case HB_SCRIPT_CHAKMA:
-    case HB_SCRIPT_SHARADA:
-    case HB_SCRIPT_TAKRI:
-
-    /* Unicode-7.0 additions */
-    case HB_SCRIPT_DUPLOYAN:
-    case HB_SCRIPT_GRANTHA:
-    case HB_SCRIPT_KHOJKI:
-    case HB_SCRIPT_KHUDAWADI:
-    case HB_SCRIPT_MAHAJANI:
-    //case HB_SCRIPT_MANICHAEAN:
-    case HB_SCRIPT_MODI:
-    case HB_SCRIPT_PAHAWH_HMONG:
-    //case HB_SCRIPT_PSALTER_PAHLAVI:
-    case HB_SCRIPT_SIDDHAM:
-    case HB_SCRIPT_TIRHUTA:
 
       /* If the designer designed the font for the 'DFLT' script,
-       * use the default shaper.  Otherwise, use the specific shaper.
+       * 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_use;
+       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..15b862f
--- /dev/null
@@ -0,0 +1,224 @@
+
+#line 1 "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"
+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 "hb-ot-shape-complex-sea-machine.rl"
+
+
+
+#line 67 "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"
+       {
+       cs = sea_syllable_machine_start;
+       ts = 0;
+       te = 0;
+       act = 0;
+       }
+
+#line 88 "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"
+       {
+       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"
+       }
+
+       _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 "hb-ot-shape-complex-sea-machine.rl"
+       {te = p+1;{ found_syllable (non_sea_cluster); }}
+       break;
+       case 7:
+#line 61 "hb-ot-shape-complex-sea-machine.rl"
+       {te = p;p--;{ found_syllable (consonant_syllable); }}
+       break;
+       case 8:
+#line 62 "hb-ot-shape-complex-sea-machine.rl"
+       {te = p;p--;{ found_syllable (broken_cluster); }}
+       break;
+       case 9:
+#line 63 "hb-ot-shape-complex-sea-machine.rl"
+       {te = p;p--;{ found_syllable (non_sea_cluster); }}
+       break;
+       case 1:
+#line 61 "hb-ot-shape-complex-sea-machine.rl"
+       {{p = ((te))-1;}{ found_syllable (consonant_syllable); }}
+       break;
+       case 3:
+#line 62 "hb-ot-shape-complex-sea-machine.rl"
+       {{p = ((te))-1;}{ found_syllable (broken_cluster); }}
+       break;
+#line 194 "hb-ot-shape-complex-sea-machine.hh"
+       }
+
+_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"
+       }
+
+       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 "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 4322b0d..feb7fc7 100644 (file)
@@ -139,6 +139,7 @@ thai_pua_shape (hb_codepoint_t u, thai_action_t action, hb_font_t *font)
   };
 
   switch (action) {
+    default: assert (false); /* Fallthrough */
     case NOP: return u;
     case SD:  pua_mappings = SD_mappings; break;
     case SDL: pua_mappings = SDL_mappings; break;
@@ -314,7 +315,7 @@ preprocess_text_thai (const hb_ot_shape_plan_t *plan,
 
   buffer->clear_output ();
   unsigned int count = buffer->len;
-  for (buffer->idx = 0; buffer->idx < count && !buffer->in_error;)
+  for (buffer->idx = 0; buffer->idx < count;)
   {
     hb_codepoint_t u = buffer->cur().codepoint;
     if (likely (!IS_SARA_AM (u))) {
@@ -329,7 +330,7 @@ preprocess_text_thai (const hb_ot_shape_plan_t *plan,
     if (unlikely (buffer->in_error))
       return;
 
-    /* Make Nikhahit be recognized as a ccc=0 mark when zeroing widths. */
+    /* Make Nikhahit be recognized as a mark when zeroing widths. */
     unsigned int end = buffer->out_len;
     _hb_glyph_info_set_general_category (&buffer->out_info[end - 2], HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK);
 
@@ -352,7 +353,7 @@ preprocess_text_thai (const hb_ot_shape_plan_t *plan,
     {
       /* Since we decomposed, and NIKHAHIT is combining, merge clusters with the
        * previous cluster. */
-      if (start && buffer->cluster_level == HB_BUFFER_CLUSTER_LEVEL_MONOTONE_GRAPHEMES)
+      if (start)
        buffer->merge_out_clusters (start - 1, end);
     }
   }
@@ -371,11 +372,10 @@ const hb_ot_complex_shaper_t _hb_ot_complex_shaper_thai =
   NULL, /* data_create */
   NULL, /* data_destroy */
   preprocess_text_thai,
-  NULL, /* postprocess_glyphs */
   HB_OT_SHAPE_NORMALIZATION_MODE_DEFAULT,
   NULL, /* decompose */
   NULL, /* compose */
   NULL, /* setup_masks */
-  HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_LATE,
+  HB_OT_SHAPE_ZERO_WIDTH_MARKS_DEFAULT,
   false,/* fallback_position */
 };
index a77b531..01465a4 100644 (file)
@@ -52,11 +52,10 @@ const hb_ot_complex_shaper_t _hb_ot_complex_shaper_tibetan =
   NULL, /* data_create */
   NULL, /* data_destroy */
   NULL, /* preprocess_text */
-  NULL, /* postprocess_glyphs */
   HB_OT_SHAPE_NORMALIZATION_MODE_DEFAULT,
   NULL, /* decompose */
   NULL, /* compose */
   NULL, /* setup_masks */
-  HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_LATE,
+  HB_OT_SHAPE_ZERO_WIDTH_MARKS_DEFAULT,
   true, /* fallback_position */
 };
diff --git a/src/hb-ot-shape-complex-use-machine.hh b/src/hb-ot-shape-complex-use-machine.hh
deleted file mode 100644 (file)
index ced9d97..0000000
+++ /dev/null
@@ -1,548 +0,0 @@
-
-#line 1 "hb-ot-shape-complex-use-machine.rl"
-/*
- * Copyright © 2015  Mozilla Foundation.
- * Copyright © 2015  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.
- *
- * Mozilla Author(s): Jonathan Kew
- * Google Author(s): Behdad Esfahbod
- */
-
-#ifndef HB_OT_SHAPE_COMPLEX_USE_MACHINE_HH
-#define HB_OT_SHAPE_COMPLEX_USE_MACHINE_HH
-
-#include "hb-private.hh"
-
-
-#line 38 "hb-ot-shape-complex-use-machine.hh"
-static const unsigned char _use_syllable_machine_trans_keys[] = {
-       0u, 0u, 4u, 4u, 1u, 1u, 0u, 39u, 21u, 21u, 8u, 39u, 8u, 39u, 1u, 1u, 
-       8u, 39u, 8u, 39u, 8u, 39u, 8u, 26u, 8u, 26u, 8u, 26u, 8u, 39u, 8u, 39u, 
-       8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 
-       8u, 39u, 8u, 39u, 8u, 39u, 1u, 1u, 8u, 39u, 8u, 39u, 8u, 26u, 8u, 26u, 
-       8u, 26u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 
-       8u, 39u, 12u, 21u, 12u, 13u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 26u, 
-       8u, 26u, 8u, 26u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 
-       8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 1u, 39u, 8u, 39u, 21u, 42u, 41u, 42u, 
-       42u, 42u, 0
-};
-
-static const char _use_syllable_machine_key_spans[] = {
-       0, 1, 1, 40, 1, 32, 32, 1, 
-       32, 32, 32, 19, 19, 19, 32, 32, 
-       32, 32, 32, 32, 32, 32, 32, 32, 
-       32, 32, 32, 1, 32, 32, 19, 19, 
-       19, 32, 32, 32, 32, 32, 32, 32, 
-       32, 10, 2, 32, 32, 32, 32, 19, 
-       19, 19, 32, 32, 32, 32, 32, 32, 
-       32, 32, 32, 32, 39, 32, 22, 2, 
-       1
-};
-
-static const short _use_syllable_machine_index_offsets[] = {
-       0, 0, 2, 4, 45, 47, 80, 113, 
-       115, 148, 181, 214, 234, 254, 274, 307, 
-       340, 373, 406, 439, 472, 505, 538, 571, 
-       604, 637, 670, 703, 705, 738, 771, 791, 
-       811, 831, 864, 897, 930, 963, 996, 1029, 
-       1062, 1095, 1106, 1109, 1142, 1175, 1208, 1241, 
-       1261, 1281, 1301, 1334, 1367, 1400, 1433, 1466, 
-       1499, 1532, 1565, 1598, 1631, 1671, 1704, 1727, 
-       1730
-};
-
-static const char _use_syllable_machine_indicies[] = {
-       1, 0, 3, 2, 4, 5, 6, 
-       4, 1, 5, 8, 8, 7, 8, 8, 
-       3, 9, 8, 8, 8, 4, 4, 10, 
-       11, 8, 8, 12, 13, 14, 15, 16, 
-       17, 18, 12, 19, 20, 21, 22, 23, 
-       24, 8, 25, 26, 27, 8, 29, 28, 
-       31, 30, 30, 32, 33, 30, 30, 30, 
-       30, 30, 30, 30, 30, 34, 35, 36, 
-       37, 38, 39, 40, 41, 35, 42, 34, 
-       43, 44, 45, 46, 30, 47, 48, 49, 
-       30, 31, 30, 30, 32, 33, 30, 30, 
-       30, 30, 30, 30, 30, 30, 50, 35, 
-       36, 37, 38, 39, 40, 41, 35, 42, 
-       43, 43, 44, 45, 46, 30, 47, 48, 
-       49, 30, 32, 51, 31, 30, 30, 32, 
-       33, 30, 30, 30, 30, 30, 30, 30, 
-       30, 30, 35, 36, 37, 38, 39, 40, 
-       41, 35, 42, 43, 43, 44, 45, 46, 
-       30, 47, 48, 49, 30, 31, 30, 30, 
-       30, 30, 30, 30, 30, 30, 30, 30, 
-       30, 30, 30, 35, 36, 37, 38, 39, 
-       30, 30, 30, 30, 30, 30, 44, 45, 
-       46, 30, 47, 48, 49, 30, 31, 30, 
-       30, 30, 30, 30, 30, 30, 30, 30, 
-       30, 30, 30, 30, 30, 36, 37, 38, 
-       39, 30, 30, 30, 30, 30, 30, 30, 
-       30, 30, 30, 47, 48, 49, 30, 31, 
-       30, 30, 30, 30, 30, 30, 30, 30, 
-       30, 30, 30, 30, 30, 30, 30, 37, 
-       38, 39, 30, 31, 30, 30, 30, 30, 
-       30, 30, 30, 30, 30, 30, 30, 30, 
-       30, 30, 30, 30, 38, 39, 30, 31, 
-       30, 30, 30, 30, 30, 30, 30, 30, 
-       30, 30, 30, 30, 30, 30, 30, 30, 
-       30, 39, 30, 31, 30, 30, 30, 30, 
-       30, 30, 30, 30, 30, 30, 30, 30, 
-       30, 30, 30, 37, 38, 39, 30, 30, 
-       30, 30, 30, 30, 30, 30, 30, 30, 
-       47, 48, 49, 30, 31, 30, 30, 30, 
-       30, 30, 30, 30, 30, 30, 30, 30, 
-       30, 30, 30, 30, 37, 38, 39, 30, 
-       30, 30, 30, 30, 30, 30, 30, 30, 
-       30, 30, 48, 49, 30, 31, 30, 30, 
-       30, 30, 30, 30, 30, 30, 30, 30, 
-       30, 30, 30, 30, 30, 37, 38, 39, 
-       30, 30, 30, 30, 30, 30, 30, 30, 
-       30, 30, 30, 30, 49, 30, 31, 30, 
-       30, 30, 30, 30, 30, 30, 30, 30, 
-       30, 30, 30, 30, 30, 36, 37, 38, 
-       39, 30, 30, 30, 30, 30, 30, 44, 
-       45, 46, 30, 47, 48, 49, 30, 31, 
-       30, 30, 30, 30, 30, 30, 30, 30, 
-       30, 30, 30, 30, 30, 30, 36, 37, 
-       38, 39, 30, 30, 30, 30, 30, 30, 
-       30, 45, 46, 30, 47, 48, 49, 30, 
-       31, 30, 30, 30, 30, 30, 30, 30, 
-       30, 30, 30, 30, 30, 30, 30, 36, 
-       37, 38, 39, 30, 30, 30, 30, 30, 
-       30, 30, 30, 46, 30, 47, 48, 49, 
-       30, 31, 30, 30, 30, 30, 30, 30, 
-       30, 30, 30, 30, 30, 30, 30, 35, 
-       36, 37, 38, 39, 30, 41, 35, 30, 
-       30, 30, 44, 45, 46, 30, 47, 48, 
-       49, 30, 31, 30, 30, 30, 30, 30, 
-       30, 30, 30, 30, 30, 30, 30, 30, 
-       35, 36, 37, 38, 39, 30, 30, 35, 
-       30, 30, 30, 44, 45, 46, 30, 47, 
-       48, 49, 30, 31, 30, 30, 30, 30, 
-       30, 30, 30, 30, 30, 30, 30, 30, 
-       30, 35, 36, 37, 38, 39, 40, 41, 
-       35, 30, 30, 30, 44, 45, 46, 30, 
-       47, 48, 49, 30, 31, 30, 30, 32, 
-       33, 30, 30, 30, 30, 30, 30, 30, 
-       30, 30, 35, 36, 37, 38, 39, 40, 
-       41, 35, 42, 30, 43, 44, 45, 46, 
-       30, 47, 48, 49, 30, 31, 30, 30, 
-       32, 33, 30, 30, 30, 30, 30, 30, 
-       30, 30, 30, 35, 36, 37, 38, 39, 
-       40, 41, 35, 42, 34, 43, 44, 45, 
-       46, 30, 47, 48, 49, 30, 53, 52, 
-       52, 54, 55, 52, 52, 52, 52, 52, 
-       52, 52, 52, 56, 52, 57, 58, 59, 
-       60, 61, 62, 57, 63, 56, 64, 52, 
-       52, 52, 52, 65, 66, 67, 52, 53, 
-       52, 52, 54, 55, 52, 52, 52, 52, 
-       52, 52, 52, 52, 68, 52, 57, 58, 
-       59, 60, 61, 62, 57, 63, 64, 64, 
-       52, 52, 52, 52, 65, 66, 67, 52, 
-       54, 51, 53, 52, 52, 54, 55, 52, 
-       52, 52, 52, 52, 52, 52, 52, 52, 
-       52, 57, 58, 59, 60, 61, 62, 57, 
-       63, 64, 64, 52, 52, 52, 52, 65, 
-       66, 67, 52, 53, 52, 52, 52, 52, 
-       52, 52, 52, 52, 52, 52, 52, 52, 
-       52, 52, 57, 58, 59, 60, 52, 52, 
-       52, 52, 52, 52, 52, 52, 52, 52, 
-       65, 66, 67, 52, 53, 52, 52, 52, 
-       52, 52, 52, 52, 52, 52, 52, 52, 
-       52, 52, 52, 52, 58, 59, 60, 52, 
-       53, 52, 52, 52, 52, 52, 52, 52, 
-       52, 52, 52, 52, 52, 52, 52, 52, 
-       52, 59, 60, 52, 53, 52, 52, 52, 
-       52, 52, 52, 52, 52, 52, 52, 52, 
-       52, 52, 52, 52, 52, 52, 60, 52, 
-       53, 52, 52, 52, 52, 52, 52, 52, 
-       52, 52, 52, 52, 52, 52, 52, 52, 
-       58, 59, 60, 52, 52, 52, 52, 52, 
-       52, 52, 52, 52, 52, 65, 66, 67, 
-       52, 53, 52, 52, 52, 52, 52, 52, 
-       52, 52, 52, 52, 52, 52, 52, 52, 
-       52, 58, 59, 60, 52, 52, 52, 52, 
-       52, 52, 52, 52, 52, 52, 52, 66, 
-       67, 52, 53, 52, 52, 52, 52, 52, 
-       52, 52, 52, 52, 52, 52, 52, 52, 
-       52, 52, 58, 59, 60, 52, 52, 52, 
-       52, 52, 52, 52, 52, 52, 52, 52, 
-       52, 67, 52, 53, 52, 52, 52, 52, 
-       52, 52, 52, 52, 52, 52, 52, 52, 
-       52, 52, 57, 58, 59, 60, 52, 62, 
-       57, 52, 52, 52, 52, 52, 52, 52, 
-       65, 66, 67, 52, 53, 52, 52, 52, 
-       52, 52, 52, 52, 52, 52, 52, 52, 
-       52, 52, 52, 57, 58, 59, 60, 52, 
-       52, 57, 52, 52, 52, 52, 52, 52, 
-       52, 65, 66, 67, 52, 53, 52, 52, 
-       52, 52, 52, 52, 52, 52, 52, 52, 
-       52, 52, 52, 52, 57, 58, 59, 60, 
-       61, 62, 57, 52, 52, 52, 52, 52, 
-       52, 52, 65, 66, 67, 52, 53, 52, 
-       52, 54, 55, 52, 52, 52, 52, 52, 
-       52, 52, 52, 52, 52, 57, 58, 59, 
-       60, 61, 62, 57, 63, 52, 64, 52, 
-       52, 52, 52, 65, 66, 67, 52, 53, 
-       52, 52, 54, 55, 52, 52, 52, 52, 
-       52, 52, 52, 52, 52, 52, 57, 58, 
-       59, 60, 61, 62, 57, 63, 56, 64, 
-       52, 52, 52, 52, 65, 66, 67, 52, 
-       70, 71, 69, 69, 69, 69, 69, 69, 
-       69, 72, 69, 70, 71, 69, 7, 73, 
-       73, 3, 9, 73, 73, 73, 73, 73, 
-       73, 73, 73, 74, 12, 13, 14, 15, 
-       16, 17, 18, 12, 19, 21, 21, 22, 
-       23, 24, 73, 25, 26, 27, 73, 7, 
-       73, 73, 3, 9, 73, 73, 73, 73, 
-       73, 73, 73, 73, 73, 12, 13, 14, 
-       15, 16, 17, 18, 12, 19, 21, 21, 
-       22, 23, 24, 73, 25, 26, 27, 73, 
-       7, 73, 73, 73, 73, 73, 73, 73, 
-       73, 73, 73, 73, 73, 73, 12, 13, 
-       14, 15, 16, 73, 73, 73, 73, 73, 
-       73, 22, 23, 24, 73, 25, 26, 27, 
-       73, 7, 73, 73, 73, 73, 73, 73, 
-       73, 73, 73, 73, 73, 73, 73, 73, 
-       13, 14, 15, 16, 73, 73, 73, 73, 
-       73, 73, 73, 73, 73, 73, 25, 26, 
-       27, 73, 7, 73, 73, 73, 73, 73, 
-       73, 73, 73, 73, 73, 73, 73, 73, 
-       73, 73, 14, 15, 16, 73, 7, 73, 
-       73, 73, 73, 73, 73, 73, 73, 73, 
-       73, 73, 73, 73, 73, 73, 73, 15, 
-       16, 73, 7, 73, 73, 73, 73, 73, 
-       73, 73, 73, 73, 73, 73, 73, 73, 
-       73, 73, 73, 73, 16, 73, 7, 73, 
-       73, 73, 73, 73, 73, 73, 73, 73, 
-       73, 73, 73, 73, 73, 73, 14, 15, 
-       16, 73, 73, 73, 73, 73, 73, 73, 
-       73, 73, 73, 25, 26, 27, 73, 7, 
-       73, 73, 73, 73, 73, 73, 73, 73, 
-       73, 73, 73, 73, 73, 73, 73, 14, 
-       15, 16, 73, 73, 73, 73, 73, 73, 
-       73, 73, 73, 73, 73, 26, 27, 73, 
-       7, 73, 73, 73, 73, 73, 73, 73, 
-       73, 73, 73, 73, 73, 73, 73, 73, 
-       14, 15, 16, 73, 73, 73, 73, 73, 
-       73, 73, 73, 73, 73, 73, 73, 27, 
-       73, 7, 73, 73, 73, 73, 73, 73, 
-       73, 73, 73, 73, 73, 73, 73, 73, 
-       13, 14, 15, 16, 73, 73, 73, 73, 
-       73, 73, 22, 23, 24, 73, 25, 26, 
-       27, 73, 7, 73, 73, 73, 73, 73, 
-       73, 73, 73, 73, 73, 73, 73, 73, 
-       73, 13, 14, 15, 16, 73, 73, 73, 
-       73, 73, 73, 73, 23, 24, 73, 25, 
-       26, 27, 73, 7, 73, 73, 73, 73, 
-       73, 73, 73, 73, 73, 73, 73, 73, 
-       73, 73, 13, 14, 15, 16, 73, 73, 
-       73, 73, 73, 73, 73, 73, 24, 73, 
-       25, 26, 27, 73, 7, 73, 73, 73, 
-       73, 73, 73, 73, 73, 73, 73, 73, 
-       73, 73, 12, 13, 14, 15, 16, 73, 
-       18, 12, 73, 73, 73, 22, 23, 24, 
-       73, 25, 26, 27, 73, 7, 73, 73, 
-       73, 73, 73, 73, 73, 73, 73, 73, 
-       73, 73, 73, 12, 13, 14, 15, 16, 
-       73, 73, 12, 73, 73, 73, 22, 23, 
-       24, 73, 25, 26, 27, 73, 7, 73, 
-       73, 73, 73, 73, 73, 73, 73, 73, 
-       73, 73, 73, 73, 12, 13, 14, 15, 
-       16, 17, 18, 12, 73, 73, 73, 22, 
-       23, 24, 73, 25, 26, 27, 73, 7, 
-       73, 73, 3, 9, 73, 73, 73, 73, 
-       73, 73, 73, 73, 73, 12, 13, 14, 
-       15, 16, 17, 18, 12, 19, 73, 21, 
-       22, 23, 24, 73, 25, 26, 27, 73, 
-       5, 6, 73, 73, 5, 73, 73, 7, 
-       73, 73, 3, 9, 73, 73, 73, 73, 
-       73, 73, 73, 73, 73, 12, 13, 14, 
-       15, 16, 17, 18, 12, 19, 20, 21, 
-       22, 23, 24, 73, 25, 26, 27, 73, 
-       7, 73, 73, 3, 9, 73, 73, 73, 
-       73, 73, 73, 73, 73, 73, 12, 13, 
-       14, 15, 16, 17, 18, 12, 19, 20, 
-       21, 22, 23, 24, 73, 25, 26, 27, 
-       73, 76, 75, 75, 75, 75, 75, 75, 
-       75, 75, 75, 75, 75, 75, 75, 75, 
-       75, 75, 75, 75, 75, 76, 77, 75, 
-       76, 77, 75, 77, 75, 0
-};
-
-static const char _use_syllable_machine_trans_targs[] = {
-       3, 41, 3, 43, 4, 5, 25, 3, 
-       0, 2, 60, 62, 45, 46, 47, 48, 
-       49, 56, 57, 58, 61, 59, 53, 54, 
-       55, 50, 51, 52, 3, 3, 3, 3, 
-       6, 7, 24, 9, 10, 11, 12, 13, 
-       20, 21, 22, 23, 17, 18, 19, 14, 
-       15, 16, 8, 3, 3, 3, 26, 27, 
-       40, 29, 30, 31, 32, 36, 37, 38, 
-       39, 33, 34, 35, 28, 3, 3, 1, 
-       42, 3, 44, 3, 63, 64
-};
-
-static const char _use_syllable_machine_trans_actions[] = {
-       1, 2, 3, 4, 0, 0, 0, 7, 
-       0, 0, 4, 0, 0, 0, 0, 0, 
-       0, 0, 0, 0, 4, 4, 0, 0, 
-       0, 0, 0, 0, 8, 9, 10, 11, 
-       0, 0, 0, 0, 0, 0, 0, 0, 
-       0, 0, 0, 0, 0, 0, 0, 0, 
-       0, 0, 0, 12, 13, 14, 0, 0, 
-       0, 0, 0, 0, 0, 0, 0, 0, 
-       0, 0, 0, 0, 0, 15, 16, 0, 
-       2, 17, 4, 18, 0, 0
-};
-
-static const char _use_syllable_machine_to_state_actions[] = {
-       0, 0, 0, 5, 0, 0, 0, 0, 
-       0, 0, 0, 0, 0, 0, 0, 0, 
-       0, 0, 0, 0, 0, 0, 0, 0, 
-       0, 0, 0, 0, 0, 0, 0, 0, 
-       0, 0, 0, 0, 0, 0, 0, 0, 
-       0, 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 _use_syllable_machine_from_state_actions[] = {
-       0, 0, 0, 6, 0, 0, 0, 0, 
-       0, 0, 0, 0, 0, 0, 0, 0, 
-       0, 0, 0, 0, 0, 0, 0, 0, 
-       0, 0, 0, 0, 0, 0, 0, 0, 
-       0, 0, 0, 0, 0, 0, 0, 0, 
-       0, 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 _use_syllable_machine_eof_trans[] = {
-       0, 1, 3, 0, 29, 31, 31, 52, 
-       31, 31, 31, 31, 31, 31, 31, 31, 
-       31, 31, 31, 31, 31, 31, 31, 31, 
-       31, 53, 53, 52, 53, 53, 53, 53, 
-       53, 53, 53, 53, 53, 53, 53, 53, 
-       53, 70, 70, 74, 74, 74, 74, 74, 
-       74, 74, 74, 74, 74, 74, 74, 74, 
-       74, 74, 74, 74, 74, 74, 76, 76, 
-       76
-};
-
-static const int use_syllable_machine_start = 3;
-static const int use_syllable_machine_first_final = 3;
-static const int use_syllable_machine_error = 0;
-
-static const int use_syllable_machine_en_main = 3;
-
-
-#line 38 "hb-ot-shape-complex-use-machine.rl"
-
-
-
-#line 145 "hb-ot-shape-complex-use-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 388 "hb-ot-shape-complex-use-machine.hh"
-       {
-       cs = use_syllable_machine_start;
-       ts = 0;
-       te = 0;
-       act = 0;
-       }
-
-#line 166 "hb-ot-shape-complex-use-machine.rl"
-
-
-  p = 0;
-  pe = eof = buffer->len;
-
-  unsigned int last = 0;
-  unsigned int syllable_serial = 1;
-  
-#line 405 "hb-ot-shape-complex-use-machine.hh"
-       {
-       int _slen;
-       int _trans;
-       const unsigned char *_keys;
-       const char *_inds;
-       if ( p == pe )
-               goto _test_eof;
-       if ( cs == 0 )
-               goto _out;
-_resume:
-       switch ( _use_syllable_machine_from_state_actions[cs] ) {
-       case 6:
-#line 1 "NONE"
-       {ts = p;}
-       break;
-#line 421 "hb-ot-shape-complex-use-machine.hh"
-       }
-
-       _keys = _use_syllable_machine_trans_keys + (cs<<1);
-       _inds = _use_syllable_machine_indicies + _use_syllable_machine_index_offsets[cs];
-
-       _slen = _use_syllable_machine_key_spans[cs];
-       _trans = _inds[ _slen > 0 && _keys[0] <=( info[p].use_category()) &&
-               ( info[p].use_category()) <= _keys[1] ?
-               ( info[p].use_category()) - _keys[0] : _slen ];
-
-_eof_trans:
-       cs = _use_syllable_machine_trans_targs[_trans];
-
-       if ( _use_syllable_machine_trans_actions[_trans] == 0 )
-               goto _again;
-
-       switch ( _use_syllable_machine_trans_actions[_trans] ) {
-       case 2:
-#line 1 "NONE"
-       {te = p+1;}
-       break;
-       case 9:
-#line 134 "hb-ot-shape-complex-use-machine.rl"
-       {te = p+1;{ found_syllable (independent_cluster); }}
-       break;
-       case 11:
-#line 136 "hb-ot-shape-complex-use-machine.rl"
-       {te = p+1;{ found_syllable (consonant_cluster); }}
-       break;
-       case 14:
-#line 137 "hb-ot-shape-complex-use-machine.rl"
-       {te = p+1;{ found_syllable (vowel_cluster); }}
-       break;
-       case 16:
-#line 138 "hb-ot-shape-complex-use-machine.rl"
-       {te = p+1;{ found_syllable (number_joiner_terminated_cluster); }}
-       break;
-       case 7:
-#line 141 "hb-ot-shape-complex-use-machine.rl"
-       {te = p+1;{ found_syllable (broken_cluster); }}
-       break;
-       case 8:
-#line 134 "hb-ot-shape-complex-use-machine.rl"
-       {te = p;p--;{ found_syllable (independent_cluster); }}
-       break;
-       case 12:
-#line 135 "hb-ot-shape-complex-use-machine.rl"
-       {te = p;p--;{ found_syllable (virama_terminated_cluster); }}
-       break;
-       case 10:
-#line 136 "hb-ot-shape-complex-use-machine.rl"
-       {te = p;p--;{ found_syllable (consonant_cluster); }}
-       break;
-       case 13:
-#line 137 "hb-ot-shape-complex-use-machine.rl"
-       {te = p;p--;{ found_syllable (vowel_cluster); }}
-       break;
-       case 15:
-#line 139 "hb-ot-shape-complex-use-machine.rl"
-       {te = p;p--;{ found_syllable (numeral_cluster); }}
-       break;
-       case 18:
-#line 140 "hb-ot-shape-complex-use-machine.rl"
-       {te = p;p--;{ found_syllable (symbol_cluster); }}
-       break;
-       case 17:
-#line 141 "hb-ot-shape-complex-use-machine.rl"
-       {te = p;p--;{ found_syllable (broken_cluster); }}
-       break;
-       case 1:
-#line 139 "hb-ot-shape-complex-use-machine.rl"
-       {{p = ((te))-1;}{ found_syllable (numeral_cluster); }}
-       break;
-       case 3:
-#line 1 "NONE"
-       {       switch( act ) {
-       case 0:
-       {{cs = 0; goto _again;}}
-       break;
-       case 8:
-       {{p = ((te))-1;} found_syllable (broken_cluster); }
-       break;
-       }
-       }
-       break;
-       case 4:
-#line 1 "NONE"
-       {te = p+1;}
-#line 141 "hb-ot-shape-complex-use-machine.rl"
-       {act = 8;}
-       break;
-#line 513 "hb-ot-shape-complex-use-machine.hh"
-       }
-
-_again:
-       switch ( _use_syllable_machine_to_state_actions[cs] ) {
-       case 5:
-#line 1 "NONE"
-       {ts = 0;}
-#line 1 "NONE"
-       {act = 0;}
-       break;
-#line 524 "hb-ot-shape-complex-use-machine.hh"
-       }
-
-       if ( cs == 0 )
-               goto _out;
-       if ( ++p != pe )
-               goto _resume;
-       _test_eof: {}
-       if ( p == eof )
-       {
-       if ( _use_syllable_machine_eof_trans[cs] > 0 ) {
-               _trans = _use_syllable_machine_eof_trans[cs] - 1;
-               goto _eof_trans;
-       }
-       }
-
-       _out: {}
-       }
-
-#line 175 "hb-ot-shape-complex-use-machine.rl"
-
-}
-
-#undef found_syllable
-
-#endif /* HB_OT_SHAPE_COMPLEX_USE_MACHINE_HH */
diff --git a/src/hb-ot-shape-complex-use-machine.rl b/src/hb-ot-shape-complex-use-machine.rl
deleted file mode 100644 (file)
index b8242ba..0000000
+++ /dev/null
@@ -1,180 +0,0 @@
-/*
- * Copyright © 2015  Mozilla Foundation.
- * Copyright © 2015  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.
- *
- * Mozilla Author(s): Jonathan Kew
- * Google Author(s): Behdad Esfahbod
- */
-
-#ifndef HB_OT_SHAPE_COMPLEX_USE_MACHINE_HH
-#define HB_OT_SHAPE_COMPLEX_USE_MACHINE_HH
-
-#include "hb-private.hh"
-
-%%{
-  machine use_syllable_machine;
-  alphtype unsigned char;
-  write data;
-}%%
-
-%%{
-
-# Same order as enum use_category_t.  Not sure how to avoid duplication.
-
-O      = 0; # OTHER
-
-B      = 1; # BASE
-IV     = 2; # BASE_VOWEL
-IND    = 3; # BASE_IND
-N      = 4; # BASE_NUM
-GB     = 5; # BASE_OTHER
-CGJ    = 6; # CGJ
-#F     = 7; # CONS_FINAL
-FM     = 8; # CONS_FINAL_MOD
-#M     = 9; # CONS_MED
-#CM    = 10; # CONS_MOD
-SUB    = 11; # CONS_SUB
-H      = 12; # HALANT
-
-HN     = 13; # HALANT_NUM
-ZWNJ   = 14; # Zero width non-joiner
-ZWJ    = 15; # Zero width joiner
-WJ     = 16; # Word joiner
-Rsv    = 17; # Reserved characters
-R      = 18; # REPHA
-S      = 19; # SYM
-#SM    = 20; # SYM_MOD
-VS     = 21; # VARIATION_SELECTOR
-#V     = 36; # VOWEL
-#VM    = 40; # VOWEL_MOD
-
-FAbv   = 24; # CONS_FINAL_ABOVE
-FBlw   = 25; # CONS_FINAL_BELOW
-FPst   = 26; # CONS_FINAL_POST
-MAbv   = 27; # CONS_MED_ABOVE
-MBlw   = 28; # CONS_MED_BELOW
-MPst   = 29; # CONS_MED_POST
-MPre   = 30; # CONS_MED_PRE
-CMAbv  = 31; # CONS_MOD_ABOVE
-CMBlw  = 32; # CONS_MOD_BELOW
-VAbv   = 33; # VOWEL_ABOVE / VOWEL_ABOVE_BELOW / VOWEL_ABOVE_BELOW_POST / VOWEL_ABOVE_POST
-VBlw   = 34; # VOWEL_BELOW / VOWEL_BELOW_POST
-VPst   = 35; # VOWEL_POST      UIPC = Right
-VPre   = 22; # VOWEL_PRE / VOWEL_PRE_ABOVE / VOWEL_PRE_ABOVE_POST / VOWEL_PRE_POST
-VMAbv  = 37; # VOWEL_MOD_ABOVE
-VMBlw  = 38; # VOWEL_MOD_BELOW
-VMPst  = 39; # VOWEL_MOD_POST
-VMPre  = 23; # VOWEL_MOD_PRE
-SMAbv  = 41; # SYM_MOD_ABOVE
-SMBlw  = 42; # SYM_MOD_BELOW
-
-
-consonant_modifiers = CMAbv* CMBlw* ((H B | SUB) VS? CMAbv? CMBlw*)*;
-medial_consonants = MPre? MAbv? MBlw? MPst?;
-dependent_vowels = VPre* VAbv* VBlw* VPst*;
-vowel_modifiers = VMPre* VMAbv* VMBlw* VMPst*;
-final_consonants = FAbv* FBlw* FPst* FM?;
-
-virama_terminated_cluster =
-       R? (B | GB | IV) VS?
-       consonant_modifiers
-       H
-;
-consonant_cluster =
-       R? (B | GB) VS?
-       consonant_modifiers
-       medial_consonants
-       dependent_vowels
-       vowel_modifiers
-       final_consonants
-;
-vowel_cluster =
-       R? (IV) VS?
-       consonant_modifiers
-       medial_consonants
-       vowel_modifiers
-       final_consonants
-;
-
-broken_cluster =
-       R?
-       consonant_modifiers
-       medial_consonants
-       dependent_vowels
-       vowel_modifiers
-       final_consonants
-;
-
-number_joiner_terminated_cluster = N VS? (HN N VS?)* H;
-numeral_cluster = N VS? (HN N VS?)*;
-symbol_cluster = S VS? SMAbv* SMBlw*;
-independent_cluster = (IND | O | Rsv | WJ) VS?;
-
-main := |*
-       independent_cluster                     => { found_syllable (independent_cluster); };
-       virama_terminated_cluster               => { found_syllable (virama_terminated_cluster); };
-       consonant_cluster                       => { found_syllable (consonant_cluster); };
-       vowel_cluster                           => { found_syllable (vowel_cluster); };
-       number_joiner_terminated_cluster        => { found_syllable (number_joiner_terminated_cluster); };
-       numeral_cluster                         => { found_syllable (numeral_cluster); };
-       symbol_cluster                          => { found_syllable (symbol_cluster); };
-       broken_cluster                          => { found_syllable (broken_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].use_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_USE_MACHINE_HH */
diff --git a/src/hb-ot-shape-complex-use-private.hh b/src/hb-ot-shape-complex-use-private.hh
deleted file mode 100644 (file)
index a143736..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Copyright © 2015  Mozilla Foundation.
- * Copyright © 2015  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.
- *
- * Mozilla Author(s): Jonathan Kew
- * Google Author(s): Behdad Esfahbod
- */
-
-#ifndef HB_OT_SHAPE_COMPLEX_USE_PRIVATE_HH
-#define HB_OT_SHAPE_COMPLEX_USE_PRIVATE_HH
-
-#include "hb-private.hh"
-
-
-#include "hb-ot-shape-complex-private.hh"
-
-
-#define USE_TABLE_ELEMENT_TYPE uint8_t
-
-/* Cateories used in the Universal Shaping Engine spec:
- * https://www.microsoft.com/typography/OpenTypeDev/USE/intro.htm
- */
-/* Note: This enum is duplicated in the -machine.rl source file.
- * Not sure how to avoid duplication. */
-enum use_category_t {
-  USE_O                = 0,    /* OTHER */
-
-  USE_B                = 1,    /* BASE */
-  USE_IV       = 2,    /* BASE_VOWEL */
-  USE_IND      = 3,    /* BASE_IND */
-  USE_N                = 4,    /* BASE_NUM */
-  USE_GB       = 5,    /* BASE_OTHER */
-  USE_CGJ      = 6,    /* CGJ */
-//  USE_F              = 7,    /* CONS_FINAL */
-  USE_FM       = 8,    /* CONS_FINAL_MOD */
-//  USE_M              = 9,    /* CONS_MED */
-//  USE_CM     = 10,   /* CONS_MOD */
-  USE_SUB      = 11,   /* CONS_SUB */
-  USE_H                = 12,   /* HALANT */
-
-  USE_HN       = 13,   /* HALANT_NUM */
-  USE_ZWNJ     = 14,   /* Zero width non-joiner */
-  USE_ZWJ      = 15,   /* Zero width joiner */
-  USE_WJ       = 16,   /* Word joiner */
-  USE_Rsv      = 17,   /* Reserved characters */
-  USE_R                = 18,   /* REPHA */
-  USE_S                = 19,   /* SYM */
-//  USE_SM     = 20,   /* SYM_MOD */
-  USE_VS       = 21,   /* VARIATION_SELECTOR */
-//  USE_V      = 36,   /* VOWEL */
-//  USE_VM     = 40,   /* VOWEL_MOD */
-
-  USE_FAbv     = 24,   /* CONS_FINAL_ABOVE */
-  USE_FBlw     = 25,   /* CONS_FINAL_BELOW */
-  USE_FPst     = 26,   /* CONS_FINAL_POST */
-  USE_MAbv     = 27,   /* CONS_MED_ABOVE */
-  USE_MBlw     = 28,   /* CONS_MED_BELOW */
-  USE_MPst     = 29,   /* CONS_MED_POST */
-  USE_MPre     = 30,   /* CONS_MED_PRE */
-  USE_CMAbv    = 31,   /* CONS_MOD_ABOVE */
-  USE_CMBlw    = 32,   /* CONS_MOD_BELOW */
-  USE_VAbv     = 33,   /* VOWEL_ABOVE / VOWEL_ABOVE_BELOW / VOWEL_ABOVE_BELOW_POST / VOWEL_ABOVE_POST */
-  USE_VBlw     = 34,   /* VOWEL_BELOW / VOWEL_BELOW_POST */
-  USE_VPst     = 35,   /* VOWEL_POST   UIPC = Right */
-  USE_VPre     = 22,   /* VOWEL_PRE / VOWEL_PRE_ABOVE / VOWEL_PRE_ABOVE_POST / VOWEL_PRE_POST */
-  USE_VMAbv    = 37,   /* VOWEL_MOD_ABOVE */
-  USE_VMBlw    = 38,   /* VOWEL_MOD_BELOW */
-  USE_VMPst    = 39,   /* VOWEL_MOD_POST */
-  USE_VMPre    = 23,   /* VOWEL_MOD_PRE */
-  USE_SMAbv    = 41,   /* SYM_MOD_ABOVE */
-  USE_SMBlw    = 42    /* SYM_MOD_BELOW */
-};
-
-HB_INTERNAL USE_TABLE_ELEMENT_TYPE
-hb_use_get_categories (hb_codepoint_t u);
-
-#endif /* HB_OT_SHAPE_COMPLEX_USE_PRIVATE_HH */
diff --git a/src/hb-ot-shape-complex-use-table.cc b/src/hb-ot-shape-complex-use-table.cc
deleted file mode 100644 (file)
index 6cd1c5d..0000000
+++ /dev/null
@@ -1,696 +0,0 @@
-/* == Start of generated table == */
-/*
- * The following table is generated by running:
- *
- *   ./gen-use-table.py IndicSyllabicCategory.txt IndicPositionalCategory.txt UnicodeData.txt Blocks.txt
- *
- * on files with these headers:
- *
- * # IndicSyllabicCategory-8.0.0.txt
- * # Date: 2015-05-12, 10:00:00 GMT [RP, KW, LI]
- * # IndicPositionalCategory-8.0.0.txt
- * # Date: 2015-05-12, 10:00:00 GMT [RP, KW, LI]
- * # Blocks-8.0.0.txt
- * # Date: 2014-11-10, 23:04:00 GMT [KW]
- * UnicodeData.txt does not have a header.
- */
-
-#include "hb-ot-shape-complex-use-private.hh"
-
-#define B      USE_B   /* BASE */
-#define CGJ    USE_CGJ /* CGJ */
-#define FM     USE_FM  /* CONS_FINAL_MOD */
-#define GB     USE_GB  /* BASE_OTHER */
-#define H      USE_H   /* HALANT */
-#define HN     USE_HN  /* HALANT_NUM */
-#define IND    USE_IND /* BASE_IND */
-#define IV     USE_IV  /* BASE_VOWEL */
-#define N      USE_N   /* BASE_NUM */
-#define O      USE_O   /* OTHER */
-#define R      USE_R   /* REPHA */
-#define Rsv    USE_Rsv /* Reserved */
-#define S      USE_S   /* SYM */
-#define SUB    USE_SUB /* CONS_SUB */
-#define VS     USE_VS  /* VARIATION_SELECTOR */
-#define WJ     USE_WJ  /* Word_Joiner */
-#define ZWJ    USE_ZWJ /* ZWJ */
-#define ZWNJ   USE_ZWNJ        /* ZWNJ */
-#define CMBlw  USE_CMBlw
-#define CMAbv  USE_CMAbv
-#define FBlw   USE_FBlw
-#define FPst   USE_FPst
-#define FAbv   USE_FAbv
-#define MPre   USE_MPre
-#define MBlw   USE_MBlw
-#define MPst   USE_MPst
-#define MAbv   USE_MAbv
-#define SMBlw  USE_SMBlw
-#define SMAbv  USE_SMAbv
-#define VPre   USE_VPre
-#define VBlw   USE_VBlw
-#define VPst   USE_VPst
-#define VAbv   USE_VAbv
-#define VMPre  USE_VMPre
-#define VMBlw  USE_VMBlw
-#define VMPst  USE_VMPst
-#define VMAbv  USE_VMAbv
-
-static const USE_TABLE_ELEMENT_TYPE use_table[] = {
-
-
-#define use_offset_0x0028u 0
-
-
-  /* Basic Latin */
-                                                                         O,     O,     O,     O,     O,    GB,     O,     O,
-  /* 0030 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,     O,     O,     O,
-
-#define use_offset_0x00a0u 24
-
-
-  /* Latin-1 Supplement */
-
-  /* 00A0 */    GB,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
-  /* 00B0 */     O,     O,    FM,    FM,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
-  /* 00C0 */     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
-  /* 00D0 */     O,     O,     O,     O,     O,     O,     O,    GB,
-
-#define use_offset_0x0900u 80
-
-
-  /* Devanagari */
-
-  /* 0900 */ VMAbv, VMAbv, VMAbv, VMPst,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,
-  /* 0910 */    IV,    IV,    IV,    IV,    IV,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 0920 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 0930 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,  VAbv,  VPst, CMBlw,     B,  VPst,  VPre,
-  /* 0940 */  VPst,  VBlw,  VBlw,  VBlw,  VBlw,  VAbv,  VAbv,  VAbv,  VAbv,  VPst,  VPst,  VPst,  VPst,     H,  VPre,  VPst,
-  /* 0950 */     O, VMAbv, VMBlw,     O,     O,  VAbv,  VBlw,  VBlw,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 0960 */    IV,    IV,  VBlw,  VBlw,     O,     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 0970 */     O,     O,    IV,    IV,    IV,    IV,    IV,    IV,     B,     B,     B,     B,     B,     B,     B,     B,
-
-  /* Bengali */
-
-  /* 0980 */     O, VMAbv, VMPst, VMPst,     O,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,     O,     O,    IV,
-  /* 0990 */    IV,     O,     O,    IV,    IV,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 09A0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     B,     B,     B,     B,     B,     B,
-  /* 09B0 */     B,     O,     B,     O,     O,     O,     B,     B,     B,     B,     O,     O, CMBlw,     B,  VPst,  VPre,
-  /* 09C0 */  VPst,  VBlw,  VBlw,  VBlw,  VBlw,     O,     O,  VPre,  VPre,     O,     O,  VPre,  VPre,     H,   IND,     O,
-  /* 09D0 */     O,     O,     O,     O,     O,     O,     O,  VPst,     O,     O,     O,     O,     B,     B,     O,     B,
-  /* 09E0 */    IV,    IV,  VBlw,  VBlw,     O,     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 09F0 */     B,     B,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
-
-  /* Gurmukhi */
-
-  /* 0A00 */     O, VMAbv, VMAbv, VMPst,     O,    IV,    IV,    IV,    IV,    IV,    IV,     O,     O,     O,     O,    IV,
-  /* 0A10 */    IV,     O,     O,    IV,    IV,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 0A20 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     B,     B,     B,     B,     B,     B,
-  /* 0A30 */     B,     O,     B,     B,     O,     B,     B,     O,     B,     B,     O,     O, CMBlw,     O,  VPst,  VPre,
-  /* 0A40 */  VPst,  VBlw,  VBlw,     O,     O,     O,     O,  VAbv,  VAbv,     O,     O,  VAbv,  VAbv,     H,     O,     O,
-  /* 0A50 */     O,     O,     O,     O,     O,     O,     O,     O,     O,     B,     B,     B,     B,     O,     B,     O,
-  /* 0A60 */     O,     O,     O,     O,     O,     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 0A70 */ VMAbv, CMAbv,    GB,    GB,     O,  MBlw,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
-
-  /* Gujarati */
-
-  /* 0A80 */     O, VMAbv, VMAbv, VMPst,     O,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,     O,    IV,
-  /* 0A90 */    IV,    IV,     O,    IV,    IV,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 0AA0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     B,     B,     B,     B,     B,     B,
-  /* 0AB0 */     B,     O,     B,     B,     O,     B,     B,     B,     B,     B,     O,     O, CMBlw,     B,  VPst,  VPre,
-  /* 0AC0 */  VPst,  VBlw,  VBlw,  VBlw,  VBlw,  VAbv,     O,  VAbv,  VAbv,  VAbv,     O,  VPst,  VPst,     H,     O,     O,
-  /* 0AD0 */     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
-  /* 0AE0 */    IV,    IV,  VBlw,  VBlw,     O,     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 0AF0 */     O,     O,     O,     O,     O,     O,     O,     O,     O,     B,     O,     O,     O,     O,     O,     O,
-
-  /* Oriya */
-
-  /* 0B00 */     O, VMAbv, VMPst, VMPst,     O,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,     O,     O,    IV,
-  /* 0B10 */    IV,     O,     O,    IV,    IV,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 0B20 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     B,     B,     B,     B,     B,     B,
-  /* 0B30 */     B,     O,     B,     B,     O,     B,     B,     B,     B,     B,     O,     O, CMBlw,     B,  VPst,  VAbv,
-  /* 0B40 */  VPst,  VBlw,  VBlw,  VBlw,  VBlw,     O,     O,  VPre,  VPre,     O,     O,  VPre,  VPre,     H,     O,     O,
-  /* 0B50 */     O,     O,     O,     O,     O,     O,  VAbv,  VAbv,     O,     O,     O,     O,     B,     B,     O,     B,
-  /* 0B60 */    IV,    IV,  VBlw,  VBlw,     O,     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 0B70 */     O,     B,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
-
-  /* Tamil */
-
-  /* 0B80 */     O,     O, VMAbv,   IND,     O,    IV,    IV,    IV,    IV,    IV,    IV,     O,     O,     O,    IV,    IV,
-  /* 0B90 */    IV,     O,    IV,    IV,    IV,     B,     O,     O,     O,     B,     B,     O,     B,     O,     B,     B,
-  /* 0BA0 */     O,     O,     O,     B,     B,     O,     O,     O,     B,     B,     B,     O,     O,     O,     B,     B,
-  /* 0BB0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,     O,  VPst,  VPst,
-  /* 0BC0 */  VAbv,  VPst,  VPst,     O,     O,     O,  VPre,  VPre,  VPre,     O,  VPre,  VPre,  VPre,     H,     O,     O,
-  /* 0BD0 */     O,     O,     O,     O,     O,     O,     O,  VPst,     O,     O,     O,     O,     O,     O,     O,     O,
-  /* 0BE0 */     O,     O,     O,     O,     O,     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 0BF0 */     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
-
-  /* Telugu */
-
-  /* 0C00 */ VMAbv, VMPst, VMPst, VMPst,     O,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,     O,    IV,    IV,
-  /* 0C10 */    IV,     O,    IV,    IV,    IV,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 0C20 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     B,     B,     B,     B,     B,     B,
-  /* 0C30 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,     B,  VAbv,  VAbv,
-  /* 0C40 */  VAbv,  VPst,  VPst,  VPst,  VPst,     O,  VAbv,  VAbv,  VAbv,     O,  VAbv,  VAbv,  VAbv,     H,     O,     O,
-  /* 0C50 */     O,     O,     O,     O,     O,  VAbv,  VBlw,     O,     B,     B,     B,     O,     O,     O,     O,     O,
-  /* 0C60 */    IV,    IV,  VBlw,  VBlw,     O,     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 0C70 */     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
-
-  /* Kannada */
-
-  /* 0C80 */     O, VMAbv, VMPst, VMPst,     O,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,     O,    IV,    IV,
-  /* 0C90 */    IV,     O,    IV,    IV,    IV,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 0CA0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     B,     B,     B,     B,     B,     B,
-  /* 0CB0 */     B,     B,     B,     B,     O,     B,     B,     B,     B,     B,     O,     O, CMBlw,     B,  VPst,  VAbv,
-  /* 0CC0 */  VAbv,  VPst,  VPst,  VPst,  VPst,     O,  VAbv,  VAbv,  VAbv,     O,  VAbv,  VAbv,  VAbv,     H,     O,     O,
-  /* 0CD0 */     O,     O,     O,     O,     O,  VPst,  VPst,     O,     O,     O,     O,     O,     O,     O,     B,     O,
-  /* 0CE0 */    IV,    IV,  VBlw,  VBlw,     O,     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 0CF0 */     O,     R,     R,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
-
-  /* Malayalam */
-
-  /* 0D00 */     O, VMAbv, VMPst, VMPst,     O,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,     O,    IV,    IV,
-  /* 0D10 */    IV,     O,    IV,    IV,    IV,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 0D20 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 0D30 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     B,  VPst,  VPst,
-  /* 0D40 */  VPst,  VPst,  VPst,  VBlw,  VBlw,     O,  VPre,  VPre,  VPre,     O,  VPre,  VPre,  VPre,     H,     R,     O,
-  /* 0D50 */     O,     O,     O,     O,     O,     O,     O,  VPst,     O,     O,     O,     O,     O,     O,     O,    IV,
-  /* 0D60 */    IV,    IV,  VBlw,  VBlw,     O,     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 0D70 */     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,   IND,   IND,   IND,   IND,   IND,   IND,
-
-  /* Sinhala */
-
-  /* 0D80 */     O,     O, VMPst, VMPst,     O,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,
-  /* 0D90 */    IV,    IV,    IV,    IV,    IV,    IV,    IV,     O,     O,     O,     B,     B,     B,     B,     B,     B,
-  /* 0DA0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 0DB0 */     B,     B,     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     B,     O,     O,
-  /* 0DC0 */     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,     H,     O,     O,     O,     O,  VPst,
-  /* 0DD0 */  VPst,  VPst,  VAbv,  VAbv,  VBlw,     O,  VBlw,     O,  VPst,  VPre,  VPre,  VPre,  VPre,  VPre,  VPre,  VPst,
-  /* 0DE0 */     O,     O,     O,     O,     O,     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 0DF0 */     O,     O,  VPst,  VPst,     O,     O,     O,     O,
-
-#define use_offset_0x1000u 1352
-
-
-  /* Myanmar */
-
-  /* 1000 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 1010 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 1020 */     B,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,  VPst,  VPst,  VAbv,  VAbv,  VBlw,
-  /* 1030 */  VBlw,  VPre,  VAbv,  VAbv,  VAbv,  VAbv, VMAbv, VMBlw, VMPst,     H,  VAbv,  MPst,  MPre,  MBlw,  MBlw,     B,
-  /* 1040 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,     O,    GB,     O,
-  /* 1050 */     B,     B,    IV,    IV,    IV,    IV,  VPst,  VPst,  VBlw,  VBlw,     B,     B,     B,     B,  MBlw,  MBlw,
-  /* 1060 */  MBlw,     B,  VPst, VMPst, VMPst,     B,     B,  VPst,  VPst, VMPst, VMPst, VMPst, VMPst, VMPst,     B,     B,
-  /* 1070 */     B,  VAbv,  VAbv,  VAbv,  VAbv,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 1080 */     B,     B,  MBlw,  VPst,  VPre,  VAbv,  VAbv, VMPst, VMPst, VMPst, VMPst, VMPst, VMPst, VMBlw,     B, VMPst,
-  /* 1090 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B, VMPst, VMPst,  VPst,  VAbv,     O,     O,
-
-#define use_offset_0x1700u 1512
-
-
-  /* Tagalog */
-
-  /* 1700 */    IV,    IV,    IV,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     B,     B,
-  /* 1710 */     B,     B,  VAbv,  VBlw,  VBlw,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
-
-  /* Hanunoo */
-
-  /* 1720 */    IV,    IV,    IV,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 1730 */     B,     B,  VAbv,  VBlw,  VBlw,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
-
-  /* Buhid */
-
-  /* 1740 */    IV,    IV,    IV,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 1750 */     B,     B,  VAbv,  VBlw,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
-
-  /* Tagbanwa */
-
-  /* 1760 */    IV,    IV,    IV,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     B,     B,
-  /* 1770 */     B,     O,  VAbv,  VBlw,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
-
-  /* Khmer */
-
-  /* 1780 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 1790 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 17A0 */     B,     B,     B,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,
-  /* 17B0 */    IV,    IV,    IV,    IV,     O,     O,  VPst,  VAbv,  VAbv,  VAbv,  VAbv,  VBlw,  VBlw,  VBlw,  VPre,  VPre,
-  /* 17C0 */  VPre,  VPre,  VPre,  VPre,  VPre,  VPre, VMAbv, VMPst,  VPst, VMAbv, VMAbv,    FM,  FAbv, CMAbv,    FM,    FM,
-  /* 17D0 */    FM,  VAbv,     H,    FM,     O,     O,     O,     O,     O,     O,     O,     O,     B,  VAbv,     O,     O,
-  /* 17E0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,     O,     O,     O,
-
-#define use_offset_0x1900u 1752
-
-
-  /* Limbu */
-
-  /* 1900 */    GB,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 1910 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,
-  /* 1920 */  VAbv,  VAbv,  VBlw,  VPst,  VPst,  VAbv,  VAbv,  VAbv,  VAbv,   SUB,   SUB,   SUB,     O,     O,     O,     O,
-  /* 1930 */  FPst,  FPst, VMBlw,  FPst,  FPst,  FPst,  FPst,  FPst,  FPst,  FBlw,  VAbv,    FM,     O,     O,     O,     O,
-  /* 1940 */     O,     O,     O,     O,     O,     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-
-  /* Tai Le */
-
-  /* 1950 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 1960 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,
-  /* 1970 */     B,     B,     B,     B,     B,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
-
-  /* New Tai Lue */
-
-  /* 1980 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 1990 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 19A0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,     O,
-  /* 19B0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 19C0 */     B,     B,     B,     B,     B,     B,     B,     B, VMPst, VMPst,     O,     O,     O,     O,     O,     O,
-  /* 19D0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,     O,     O,     O,
-  /* 19E0 */     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
-  /* 19F0 */     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
-
-  /* Buginese */
-
-  /* 1A00 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 1A10 */     B,     B,     B,     B,     B,     B,     B,  VAbv,  VBlw,  VPre,  VPst,  VAbv,     O,     O,     O,     O,
-
-  /* Tai Tham */
-
-  /* 1A20 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 1A30 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 1A40 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,    IV,    IV,    IV,
-  /* 1A50 */    IV,    IV,    IV,     B,     B,  MPre,  MBlw,  FPst,  FAbv,  FAbv,  FAbv,  FBlw,  FBlw,  FBlw,  FBlw,     O,
-  /* 1A60 */     H,  VPst,  VAbv,  VPst,  VPst,  VAbv,  VAbv,  VAbv,  VAbv,  VBlw,  VBlw,  VAbv,  VBlw,  VPst,  VPre,  VPre,
-  /* 1A70 */  VPre,  VPre,  VPre,  VAbv,  VAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv,    FM,    FM,    FM,     O,     O,    FM,
-  /* 1A80 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,     O,     O,     O,
-  /* 1A90 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,     O,     O,     O,
-
-#define use_offset_0x1b00u 2168
-
-
-  /* Balinese */
-
-  /* 1B00 */ VMAbv, VMAbv, VMAbv,  FAbv, VMPst,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,
-  /* 1B10 */    IV,    IV,    IV,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 1B20 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 1B30 */     B,     B,     B,     B, CMAbv,  VPst,  VAbv,  VAbv,  VBlw,  VBlw,  VBlw,  VBlw,  VAbv,  VAbv,  VPre,  VPre,
-  /* 1B40 */  VPre,  VPre,  VAbv,  VAbv,     H,     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,     O,
-  /* 1B50 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,     O,     O,     O,
-  /* 1B60 */     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O, SMAbv, SMBlw, SMAbv, SMAbv, SMAbv,
-  /* 1B70 */ SMAbv, SMAbv, SMAbv, SMAbv,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
-
-  /* Sundanese */
-
-  /* 1B80 */ VMAbv,  FAbv, VMPst,    IV,    IV,    IV,    IV,    IV,    IV,    IV,     B,     B,     B,     B,     B,     B,
-  /* 1B90 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 1BA0 */     B,   SUB,   SUB,   SUB,  VAbv,  VBlw,  VPre,  VPst,  VAbv,  VAbv,  VPst,     H,   SUB,   SUB,     B,     B,
-  /* 1BB0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-
-  /* Batak */
-
-  /* 1BC0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 1BD0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 1BE0 */     B,     B,     B,     B,    IV,    IV, CMAbv,  VPst,  VAbv,  VAbv,  VPst,  VPst,  VPst,  VAbv,  VPst,  VAbv,
-  /* 1BF0 */  FAbv,  FAbv,  VPst,  VPst,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
-
-  /* Lepcha */
-
-  /* 1C00 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 1C10 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 1C20 */     B,     B,     B,     B,   SUB,   SUB,  VPst,  VPre,  VPre,  VPre,  VPst,  VPst,  VBlw,  FAbv,  FAbv,  FAbv,
-  /* 1C30 */  FAbv,  FAbv,  FAbv,  FAbv, VMPre, VMPre,    FM, CMBlw,     O,     O,     O,     O,     O,     O,     O,     O,
-  /* 1C40 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,     B,     B,     B,
-
-#define use_offset_0x1cd0u 2504
-
-
-  /* Vedic Extensions */
-
-  /* 1CD0 */ VMAbv, VMAbv, VMAbv,     O, VMBlw, VMBlw, VMBlw, VMBlw, VMBlw, VMBlw, VMAbv, VMAbv, VMBlw, VMBlw, VMBlw, VMBlw,
-  /* 1CE0 */ VMAbv, VMPst, VMBlw, VMBlw, VMBlw, VMBlw, VMBlw, VMBlw, VMBlw,     O,     O,     O,     O, VMBlw,     O,     O,
-  /* 1CF0 */     O,     O, VMPst, VMPst, VMAbv,     O,     O,     O, VMAbv, VMAbv,     O,     O,     O,     O,     O,     O,
-
-#define use_offset_0x2008u 2552
-
-
-  /* General Punctuation */
-                                                                         O,     O,     O,     O,  ZWNJ,   ZWJ,     O,     O,
-  /* 2010 */    GB,    GB,    GB,    GB,    GB,     O,     O,     O,
-
-#define use_offset_0x2060u 2568
-
-  /* 2060 */    WJ,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
-
-  /* Superscripts and Subscripts */
-
-  /* 2070 */     O,     O,     O,     O,    FM,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
-  /* 2080 */     O,     O,    FM,    FM,    FM,     O,     O,     O,
-
-#define use_offset_0xa800u 2608
-
-
-  /* Syloti Nagri */
-
-  /* A800 */    IV,    IV,     O,    IV,    IV,    IV,  VAbv,     B,     B,     B,     B, VMAbv,     B,     B,     B,     B,
-  /* A810 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* A820 */     B,     B,     B,  VPst,  VPst,  VBlw,  VAbv,  VPst,     O,     O,     O,     O,     O,     O,     O,     O,
-  /* A830 */     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
-
-  /* Phags-pa */
-
-  /* A840 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* A850 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* A860 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* A870 */     B,     B,     B,     B,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
-
-  /* Saurashtra */
-
-  /* A880 */ VMPst, VMPst,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,
-  /* A890 */    IV,    IV,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* A8A0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* A8B0 */     B,     B,     B,     B,  FPst,  VPst,  VPst,  VPst,  VPst,  VPst,  VPst,  VPst,  VPst,  VPst,  VPst,  VPst,
-  /* A8C0 */  VPst,  VPst,  VPst,  VPst,     H,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
-  /* A8D0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,     O,     O,     O,
-
-  /* Devanagari Extended */
-
-  /* A8E0 */ VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv,
-  /* A8F0 */ VMAbv, VMAbv,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
-
-  /* Kayah Li */
-
-  /* A900 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* A910 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* A920 */     B,     B,     B,     B,     B,     B,  VAbv,  VAbv,  VAbv,  VAbv,  VAbv, VMBlw, VMBlw, VMBlw,     O,     O,
-
-  /* Rejang */
-
-  /* A930 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* A940 */     B,     B,     B,     B,     B,     B,     B,  VBlw,  VBlw,  VBlw,  VAbv,  VBlw,  VBlw,  VBlw,  VBlw,  FAbv,
-  /* A950 */  FAbv,  FAbv,  FPst,  VPst,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
-  /* A960 */     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
-  /* A970 */     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
-
-  /* Javanese */
-
-  /* A980 */ VMAbv, VMAbv,  FAbv, VMPst,    IV,    IV,    IV,    IV,    IV,     B,     B,     B,    IV,    IV,    IV,     B,
-  /* A990 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* A9A0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* A9B0 */     B,     B,     B, CMAbv,  VPst,  VPst,  VAbv,  VAbv,  VBlw,  VBlw,  VPre,  VPre,  VAbv,   SUB,  MPst,  MPst,
-  /* A9C0 */     H,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
-  /* A9D0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,     O,     O,     O,
-
-  /* Myanmar Extended-B */
-
-  /* A9E0 */     B,     B,     B,     B,     B,  VAbv,     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* A9F0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,
-
-  /* Cham */
-
-  /* AA00 */    IV,    IV,    IV,    IV,    IV,    IV,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* AA10 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* AA20 */     B,     B,     B,     B,     B,     B,     B,     B,     B,  VAbv,  VAbv,  VAbv,  VAbv,  VBlw,  VAbv,  VPre,
-  /* AA30 */  VPre,  VAbv,  VBlw,  MPst,  MPre,  MBlw,  MBlw,     O,     O,     O,     O,     O,     O,     O,     O,     O,
-  /* AA40 */     B,     B,     B,  FAbv,     B,     B,     B,     B,     B,     B,     B,     B,  FAbv,  FPst,     O,     O,
-  /* AA50 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,     O,     O,     O,
-
-  /* Myanmar Extended-A */
-
-  /* AA60 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* AA70 */     O,     B,     B,     B,     O,     O,     O,     O,     O,     O,     B, VMPst, VMAbv, VMPst,     B,     B,
-
-  /* Tai Viet */
-
-  /* AA80 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* AA90 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* AAA0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* AAB0 */  VAbv,     B,  VAbv,  VAbv,  VBlw,     B,     B,  VAbv,  VAbv,     B,     B,     B,     B,     B,  VAbv, VMAbv,
-  /* AAC0 */     B, VMAbv,     B,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
-  /* AAD0 */     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
-
-  /* Meetei Mayek Extensions */
-
-  /* AAE0 */    IV,    IV,     B,     B,     B,     B,     B,     B,     B,     B,     B,  VPre,  VBlw,  VAbv,  VPre,  VPst,
-  /* AAF0 */     O,     O,     O,     O,     O, VMPst,     H,     O,
-
-#define use_offset_0xabc0u 3368
-
-
-  /* Meetei Mayek */
-
-  /* ABC0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,    IV,    IV,
-  /* ABD0 */     B,    IV,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* ABE0 */     B,     B,     B,  VPst,  VPst,  VAbv,  VPst,  VPst,  VBlw,  VPst,  VPst,     O, VMPst,  VBlw,     O,     O,
-  /* ABF0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,     O,     O,     O,
-
-#define use_offset_0xfe00u 3432
-
-
-  /* Variation Selectors */
-
-  /* FE00 */    VS,    VS,    VS,    VS,    VS,    VS,    VS,    VS,    VS,    VS,    VS,    VS,    VS,    VS,    VS,    VS,
-
-#define use_offset_0x10a00u 3448
-
-
-  /* Kharoshthi */
-
-  /* 10A00 */     B,  VBlw,  VBlw,  VBlw,     O,  VAbv,  VBlw,     O,     O,     O,     O,     O,  VBlw,  VBlw, VMBlw, VMAbv,
-  /* 10A10 */     B,     B,     B,     B,     O,     B,     B,     B,     O,     B,     B,     B,     B,     B,     B,     B,
-  /* 10A20 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 10A30 */     B,     B,     B,     B,     O,     O,     O,     O, CMAbv, CMBlw, CMBlw,     O,     O,     O,     O,     H,
-  /* 10A40 */     B,     B,     B,     B,     B,     B,     B,     B,
-
-#define use_offset_0x11000u 3520
-
-
-  /* Brahmi */
-
-  /* 11000 */ VMPst, VMAbv, VMPst,     R,     R,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,
-  /* 11010 */    IV,    IV,    IV,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 11020 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 11030 */     B,     B,     B,     B,     B,     B,     B,     B,  VAbv,  VAbv,  VAbv,  VAbv,  VBlw,  VBlw,  VBlw,  VBlw,
-  /* 11040 */  VBlw,  VBlw,  VAbv,  VAbv,  VAbv,  VAbv,     H,     O,     O,     O,     O,     O,     O,     O,     O,     O,
-  /* 11050 */     O,     O,     N,     N,     N,     N,     N,     N,     N,     N,     N,     N,     N,     N,     N,     N,
-  /* 11060 */     N,     N,     N,     N,     N,     N,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 11070 */     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
-
-  /* Kaithi */
-
-  /* 11080 */ VMAbv, VMAbv, VMPst,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,     B,     B,     B,
-  /* 11090 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 110A0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 110B0 */  VPst,  VPre,  VPst,  VBlw,  VBlw,  VAbv,  VAbv,  VPst,  VPst,     H, CMBlw,     O,     O,     O,     O,     O,
-
-#define use_offset_0x11100u 3712
-
-
-  /* Chakma */
-
-  /* 11100 */ VMAbv, VMAbv, VMAbv,    IV,    IV,    IV,    IV,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 11110 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 11120 */     B,     B,     B,     B,     B,     B,     B,  VAbv,  VAbv,  VAbv,  VBlw,  VBlw,  VPre,  VAbv,  VAbv,  VAbv,
-  /* 11130 */  VAbv,  VBlw,  VBlw,     H,  VAbv,     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 11140 */     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
-
-  /* Mahajani */
-
-  /* 11150 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 11160 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 11170 */     B,     B,     B, CMBlw,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
-
-  /* Sharada */
-
-  /* 11180 */ VMAbv, VMAbv, VMPst,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,
-  /* 11190 */    IV,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 111A0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 111B0 */     B,     B,     B,  VPst,  VPre,  VPst,  VBlw,  VBlw,  VBlw,  VBlw,  VBlw,  VBlw,  VAbv,  VAbv,  VAbv,  VAbv,
-  /* 111C0 */     H,     B,     R,     R,     O,     O,     O,     O,     O,     O, CMBlw,  VAbv,  VBlw,     O,     O,     O,
-  /* 111D0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,     O,     O,     O,
-
-  /* Sinhala Archaic Numbers */
-
-  /* 111E0 */     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 111F0 */     B,     B,     B,     B,     B,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
-
-  /* Khojki */
-
-  /* 11200 */    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 11210 */     B,     B,     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 11220 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,  VPst,  VPst,  VPst,  VBlw,
-  /* 11230 */  VAbv,  VAbv,  VAbv,  VAbv, VMAbv,     H, CMAbv, CMAbv,
-
-#define use_offset_0x11280u 4024
-
-
-  /* Multani */
-
-  /* 11280 */    IV,    IV,    IV,    IV,     B,     B,     B,     O,     B,     O,     B,     B,     B,     B,     O,     B,
-  /* 11290 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     B,
-  /* 112A0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,     O,     O,     O,     O,
-
-  /* Khudawadi */
-
-  /* 112B0 */    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,     B,     B,     B,     B,     B,     B,
-  /* 112C0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 112D0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B, VMAbv,
-  /* 112E0 */  VPst,  VPre,  VPst,  VBlw,  VBlw,  VAbv,  VAbv,  VAbv,  VAbv, CMBlw,  VBlw,     O,     O,     O,     O,     O,
-  /* 112F0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,     O,     O,     O,
-
-  /* Grantha */
-
-  /* 11300 */ VMAbv, VMAbv, VMPst, VMPst,     O,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,     O,     O,    IV,
-  /* 11310 */    IV,     O,     O,    IV,    IV,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 11320 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     B,     B,     B,     B,     B,     B,
-  /* 11330 */     B,     O,     B,     B,     O,     B,     B,     B,     B,     B,     O,     O, CMBlw,     B,  VPst,  VPst,
-  /* 11340 */  VAbv,  VPst,  VPst,  VPst,  VPst,     O,     O,  VPre,  VPre,     O,     O,  VPre,  VPre,     H,     O,     O,
-  /* 11350 */     O,     O,     O,     O,     O,     O,     O,  VPst,     O,     O,     O,     O,     O,     O,     O,     O,
-  /* 11360 */    IV,    IV,  VPst,  VPst,     O,     O, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv,     O,     O,     O,
-  /* 11370 */ VMAbv, VMAbv, VMAbv, VMAbv, VMAbv,     O,     O,     O,
-
-#define use_offset_0x11480u 4272
-
-
-  /* Tirhuta */
-
-  /* 11480 */     O,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,     B,
-  /* 11490 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 114A0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 114B0 */  VPst,  VPre,  VPst,  VBlw,  VBlw,  VBlw,  VBlw,  VBlw,  VBlw,  VPre,  VAbv,  VPre,  VPre,  VPst,  VPre, VMAbv,
-  /* 114C0 */ VMAbv, VMPst,     H, CMBlw,     B,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
-  /* 114D0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,     O,     O,     O,
-
-#define use_offset_0x11580u 4368
-
-
-  /* Siddham */
-
-  /* 11580 */    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,     B,     B,
-  /* 11590 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 115A0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,  VPst,
-  /* 115B0 */  VPre,  VPst,  VBlw,  VBlw,  VBlw,  VBlw,     O,     O,  VPre,  VPre,  VPre,  VPre, VMAbv, VMAbv, VMPst,     H,
-  /* 115C0 */ CMBlw,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
-  /* 115D0 */     O,     O,     O,     O,     O,     O,     O,     O,    IV,    IV,    IV,    IV,  VBlw,  VBlw,     O,     O,
-  /* 115E0 */     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
-  /* 115F0 */     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
-
-  /* Modi */
-
-  /* 11600 */    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,     B,     B,
-  /* 11610 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 11620 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 11630 */  VPst,  VPst,  VPst,  VBlw,  VBlw,  VBlw,  VBlw,  VBlw,  VBlw,  VAbv,  VAbv,  VPst,  VPst, VMAbv, VMPst,     H,
-  /* 11640 */  VAbv,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
-  /* 11650 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,     O,     O,     O,
-  /* 11660 */     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
-  /* 11670 */     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
-
-  /* Takri */
-
-  /* 11680 */    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,    IV,     B,     B,     B,     B,     B,     B,
-  /* 11690 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 116A0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B, VMAbv, VMPst,  VAbv,  VPre,  VPst,
-  /* 116B0 */  VBlw,  VBlw,  VAbv,  VAbv,  VAbv,  VAbv,     H, CMBlw,     O,     O,     O,     O,     O,     O,     O,     O,
-  /* 116C0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,     O,     O,     O,
-  /* 116D0 */     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
-  /* 116E0 */     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
-  /* 116F0 */     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
-
-  /* Ahom */
-
-  /* 11700 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 11710 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,  MBlw,  MPre,  MAbv,
-  /* 11720 */  VPst,  VPst,  VAbv,  VAbv,  VBlw,  VBlw,  VPre,  VAbv,  VBlw,  VAbv,  VAbv,  VAbv,     O,     O,     O,     O,
-  /* 11730 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,     O,
-
-}; /* Table items: 4816; occupancy: 72% */
-
-USE_TABLE_ELEMENT_TYPE
-hb_use_get_categories (hb_codepoint_t u)
-{
-  switch (u >> 12)
-  {
-    case 0x0u:
-      if (hb_in_range (u, 0x0028u, 0x003Fu)) return use_table[u - 0x0028u + use_offset_0x0028u];
-      if (hb_in_range (u, 0x00A0u, 0x00D7u)) return use_table[u - 0x00A0u + use_offset_0x00a0u];
-      if (hb_in_range (u, 0x0900u, 0x0DF7u)) return use_table[u - 0x0900u + use_offset_0x0900u];
-      if (unlikely (u == 0x034Fu)) return CGJ;
-      break;
-
-    case 0x1u:
-      if (hb_in_range (u, 0x1000u, 0x109Fu)) return use_table[u - 0x1000u + use_offset_0x1000u];
-      if (hb_in_range (u, 0x1700u, 0x17EFu)) return use_table[u - 0x1700u + use_offset_0x1700u];
-      if (hb_in_range (u, 0x1900u, 0x1A9Fu)) return use_table[u - 0x1900u + use_offset_0x1900u];
-      if (hb_in_range (u, 0x1B00u, 0x1C4Fu)) return use_table[u - 0x1B00u + use_offset_0x1b00u];
-      if (hb_in_range (u, 0x1CD0u, 0x1CFFu)) return use_table[u - 0x1CD0u + use_offset_0x1cd0u];
-      break;
-
-    case 0x2u:
-      if (hb_in_range (u, 0x2008u, 0x2017u)) return use_table[u - 0x2008u + use_offset_0x2008u];
-      if (hb_in_range (u, 0x2060u, 0x2087u)) return use_table[u - 0x2060u + use_offset_0x2060u];
-      if (unlikely (u == 0x25CCu)) return GB;
-      break;
-
-    case 0xAu:
-      if (hb_in_range (u, 0xA800u, 0xAAF7u)) return use_table[u - 0xA800u + use_offset_0xa800u];
-      if (hb_in_range (u, 0xABC0u, 0xABFFu)) return use_table[u - 0xABC0u + use_offset_0xabc0u];
-      break;
-
-    case 0xFu:
-      if (hb_in_range (u, 0xFE00u, 0xFE0Fu)) return use_table[u - 0xFE00u + use_offset_0xfe00u];
-      break;
-
-    case 0x10u:
-      if (hb_in_range (u, 0x10A00u, 0x10A47u)) return use_table[u - 0x10A00u + use_offset_0x10a00u];
-      break;
-
-    case 0x11u:
-      if (hb_in_range (u, 0x11000u, 0x110BFu)) return use_table[u - 0x11000u + use_offset_0x11000u];
-      if (hb_in_range (u, 0x11100u, 0x11237u)) return use_table[u - 0x11100u + use_offset_0x11100u];
-      if (hb_in_range (u, 0x11280u, 0x11377u)) return use_table[u - 0x11280u + use_offset_0x11280u];
-      if (hb_in_range (u, 0x11480u, 0x114DFu)) return use_table[u - 0x11480u + use_offset_0x11480u];
-      if (hb_in_range (u, 0x11580u, 0x1173Fu)) return use_table[u - 0x11580u + use_offset_0x11580u];
-      if (unlikely (u == 0x1107Fu)) return HN;
-      break;
-
-    default:
-      break;
-  }
-  return USE_O;
-}
-
-#undef B
-#undef CGJ
-#undef FM
-#undef GB
-#undef H
-#undef HN
-#undef IND
-#undef IV
-#undef N
-#undef O
-#undef R
-#undef Rsv
-#undef S
-#undef SUB
-#undef VS
-#undef WJ
-#undef ZWJ
-#undef ZWNJ
-#undef CMBlw
-#undef CMAbv
-#undef FBlw
-#undef FPst
-#undef FAbv
-#undef MPre
-#undef MBlw
-#undef MPst
-#undef MAbv
-#undef SMBlw
-#undef SMAbv
-#undef VPre
-#undef VBlw
-#undef VPst
-#undef VAbv
-#undef VMPre
-#undef VMBlw
-#undef VMPst
-#undef VMAbv
-
-/* == End of generated table == */
diff --git a/src/hb-ot-shape-complex-use.cc b/src/hb-ot-shape-complex-use.cc
deleted file mode 100644 (file)
index d2b6e63..0000000
+++ /dev/null
@@ -1,588 +0,0 @@
-/*
- * Copyright © 2015  Mozilla Foundation.
- * Copyright © 2015  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.
- *
- * Mozilla Author(s): Jonathan Kew
- * Google Author(s): Behdad Esfahbod
- */
-
-#include "hb-ot-shape-complex-use-private.hh"
-#include "hb-ot-shape-complex-arabic-private.hh"
-
-/* buffer var allocations */
-#define use_category() complex_var_u8_0()
-
-
-/*
- * Universal Shaping Engine.
- * https://www.microsoft.com/typography/OpenTypeDev/USE/intro.htm
- */
-
-static const hb_tag_t
-basic_features[] =
-{
-  /*
-   * Basic features.
-   * These features are applied all at once, before reordering.
-   */
-  HB_TAG('r','k','r','f'),
-  HB_TAG('a','b','v','f'),
-  HB_TAG('b','l','w','f'),
-  HB_TAG('h','a','l','f'),
-  HB_TAG('p','s','t','f'),
-  HB_TAG('v','a','t','u'),
-  HB_TAG('c','j','c','t'),
-};
-static const hb_tag_t
-arabic_features[] =
-{
-  HB_TAG('i','s','o','l'),
-  HB_TAG('i','n','i','t'),
-  HB_TAG('m','e','d','i'),
-  HB_TAG('f','i','n','a'),
-  /* The spec doesn't specify these but we apply anyway, since our Arabic shaper
-   * does.  These are only used in Syriac spec. */
-  HB_TAG('m','e','d','2'),
-  HB_TAG('f','i','n','2'),
-  HB_TAG('f','i','n','3'),
-};
-/* Same order as arabic_features.  Don't need Syriac stuff.*/
-enum joining_form_t {
-  ISOL,
-  INIT,
-  MEDI,
-  FINA,
-  _NONE
-};
-static const hb_tag_t
-other_features[] =
-{
-  /*
-   * Other features.
-   * These features are applied all at once, after reordering.
-   */
-  HB_TAG('a','b','v','s'),
-  HB_TAG('b','l','w','s'),
-  HB_TAG('h','a','l','n'),
-  HB_TAG('p','r','e','s'),
-  HB_TAG('p','s','t','s'),
-  /* Positioning features, though we don't care about the types. */
-  HB_TAG('d','i','s','t'),
-  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
-clear_substitution_flags (const hb_ot_shape_plan_t *plan,
-                         hb_font_t *font,
-                         hb_buffer_t *buffer);
-static void
-record_rphf (const hb_ot_shape_plan_t *plan,
-            hb_font_t *font,
-            hb_buffer_t *buffer);
-static void
-record_pref (const hb_ot_shape_plan_t *plan,
-            hb_font_t *font,
-            hb_buffer_t *buffer);
-static void
-reorder (const hb_ot_shape_plan_t *plan,
-        hb_font_t *font,
-        hb_buffer_t *buffer);
-
-static void
-collect_features_use (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);
-
-  /* "Default glyph pre-processing group" */
-  map->add_global_bool_feature (HB_TAG('l','o','c','l'));
-  map->add_global_bool_feature (HB_TAG('c','c','m','p'));
-  map->add_global_bool_feature (HB_TAG('n','u','k','t'));
-  map->add_global_bool_feature (HB_TAG('a','k','h','n'));
-
-  /* "Reordering group" */
-  map->add_gsub_pause (clear_substitution_flags);
-  map->add_feature (HB_TAG('r','p','h','f'), 1, F_MANUAL_ZWJ);
-  map->add_gsub_pause (record_rphf);
-  map->add_gsub_pause (clear_substitution_flags);
-  map->add_feature (HB_TAG('p','r','e','f'), 1, F_GLOBAL | F_MANUAL_ZWJ);
-  map->add_gsub_pause (record_pref);
-
-  /* "Orthographic unit shaping group" */
-  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 (reorder);
-
-  /* "Topographical features" */
-  for (unsigned int i = 0; i < ARRAY_LENGTH (arabic_features); i++)
-    map->add_feature (arabic_features[i], 1, F_NONE);
-  map->add_gsub_pause (NULL);
-
-  /* "Standard typographic presentation" and "Positional feature application" */
-  for (unsigned int i = 0; i < ARRAY_LENGTH (other_features); i++)
-    map->add_feature (other_features[i], 1, F_GLOBAL | F_MANUAL_ZWJ);
-}
-
-struct use_shape_plan_t
-{
-  ASSERT_POD ();
-
-  hb_mask_t rphf_mask;
-
-  arabic_shape_plan_t *arabic_plan;
-};
-
-static bool
-has_arabic_joining (hb_script_t script)
-{
-  /* List of scripts that have data in arabic-table. */
-  switch ((int) script)
-  {
-    /* Unicode-1.1 additions */
-    case HB_SCRIPT_ARABIC:
-
-    /* Unicode-3.0 additions */
-    case HB_SCRIPT_MONGOLIAN:
-    case HB_SCRIPT_SYRIAC:
-
-    /* Unicode-5.0 additions */
-    case HB_SCRIPT_NKO:
-    case HB_SCRIPT_PHAGS_PA:
-
-    /* Unicode-6.0 additions */
-    case HB_SCRIPT_MANDAIC:
-
-    /* Unicode-7.0 additions */
-    case HB_SCRIPT_MANICHAEAN:
-    case HB_SCRIPT_PSALTER_PAHLAVI:
-
-      return true;
-
-    default:
-      return false;
-  }
-}
-
-static void *
-data_create_use (const hb_ot_shape_plan_t *plan)
-{
-  use_shape_plan_t *use_plan = (use_shape_plan_t *) calloc (1, sizeof (use_shape_plan_t));
-  if (unlikely (!use_plan))
-    return NULL;
-
-  use_plan->rphf_mask = plan->map.get_1_mask (HB_TAG('r','p','h','f'));
-
-  if (has_arabic_joining (plan->props.script))
-  {
-    use_plan->arabic_plan = (arabic_shape_plan_t *) data_create_arabic (plan);
-    if (unlikely (!use_plan->arabic_plan))
-    {
-      free (use_plan);
-      return NULL;
-    }
-  }
-
-  return use_plan;
-}
-
-static void
-data_destroy_use (void *data)
-{
-  use_shape_plan_t *use_plan = (use_shape_plan_t *) data;
-
-  if (use_plan->arabic_plan)
-    data_destroy_arabic (use_plan->arabic_plan);
-
-  free (data);
-}
-
-enum syllable_type_t {
-  independent_cluster,
-  virama_terminated_cluster,
-  consonant_cluster,
-  vowel_cluster,
-  number_joiner_terminated_cluster,
-  numeral_cluster,
-  symbol_cluster,
-  broken_cluster,
-};
-
-#include "hb-ot-shape-complex-use-machine.hh"
-
-
-static void
-setup_masks_use (const hb_ot_shape_plan_t *plan,
-                hb_buffer_t              *buffer,
-                hb_font_t                *font HB_UNUSED)
-{
-  const use_shape_plan_t *use_plan = (const use_shape_plan_t *) plan->data;
-
-  /* Do this before allocating use_category(). */
-  if (use_plan->arabic_plan)
-  {
-    setup_masks_arabic_plan (use_plan->arabic_plan, buffer, plan->props.script);
-  }
-
-  HB_BUFFER_ALLOCATE_VAR (buffer, use_category);
-
-  /* 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++)
-    info[i].use_category() = hb_use_get_categories (info[i].codepoint);
-}
-
-static void
-setup_rphf_mask (const hb_ot_shape_plan_t *plan,
-                hb_buffer_t *buffer)
-{
-  const use_shape_plan_t *use_plan = (const use_shape_plan_t *) plan->data;
-
-  hb_mask_t mask = use_plan->rphf_mask;
-  if (!mask) return;
-
-  hb_glyph_info_t *info = buffer->info;
-
-  foreach_syllable (buffer, start, end)
-  {
-    unsigned int limit = info[start].use_category() == USE_R ? 1 : MIN (3u, end - start);
-    for (unsigned int i = start; i < start + limit; i++)
-      info[i].mask |= mask;
-  }
-}
-
-static void
-setup_topographical_masks (const hb_ot_shape_plan_t *plan,
-                          hb_buffer_t *buffer)
-{
-  const use_shape_plan_t *use_plan = (const use_shape_plan_t *) plan->data;
-  if (use_plan->arabic_plan)
-    return;
-
-  ASSERT_STATIC (INIT < 4 && ISOL < 4 && MEDI < 4 && FINA < 4);
-  hb_mask_t masks[4], all_masks = 0;
-  for (unsigned int i = 0; i < 4; i++)
-  {
-    masks[i] = plan->map.get_1_mask (arabic_features[i]);
-    if (masks[i] == plan->map.get_global_mask ())
-      masks[i] = 0;
-    all_masks |= masks[i];
-  }
-  if (!all_masks)
-    return;
-  hb_mask_t other_masks = ~all_masks;
-
-  unsigned int last_start = 0;
-  joining_form_t last_form = _NONE;
-  hb_glyph_info_t *info = buffer->info;
-  foreach_syllable (buffer, start, end)
-  {
-    syllable_type_t syllable_type = (syllable_type_t) (info[start].syllable() & 0x0F);
-    switch (syllable_type)
-    {
-      case independent_cluster:
-      case symbol_cluster:
-       /* These don't join.  Nothing to do. */
-       last_form = _NONE;
-       break;
-
-      case virama_terminated_cluster:
-      case consonant_cluster:
-      case vowel_cluster:
-      case number_joiner_terminated_cluster:
-      case numeral_cluster:
-      case broken_cluster:
-
-       bool join = last_form == FINA || last_form == ISOL;
-
-       if (join)
-       {
-         /* Fixup previous syllable's form. */
-         last_form = last_form == FINA ? MEDI : INIT;
-         for (unsigned int i = last_start; i < start; i++)
-           info[i].mask = (info[i].mask & other_masks) | masks[last_form];
-       }
-
-       /* Form for this syllable. */
-       last_form = join ? FINA : ISOL;
-       for (unsigned int i = start; i < end; i++)
-         info[i].mask = (info[i].mask & other_masks) | masks[last_form];
-
-       break;
-    }
-
-    last_start = start;
-  }
-}
-
-static void
-setup_syllables (const hb_ot_shape_plan_t *plan,
-                hb_font_t *font HB_UNUSED,
-                hb_buffer_t *buffer)
-{
-  find_syllables (buffer);
-  setup_rphf_mask (plan, buffer);
-  setup_topographical_masks (plan, buffer);
-}
-
-static void
-clear_substitution_flags (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;
-  for (unsigned int i = 0; i < count; i++)
-    _hb_glyph_info_clear_substituted (&info[i]);
-}
-
-static void
-record_rphf (const hb_ot_shape_plan_t *plan,
-            hb_font_t *font,
-            hb_buffer_t *buffer)
-{
-  const use_shape_plan_t *use_plan = (const use_shape_plan_t *) plan->data;
-
-  hb_mask_t mask = use_plan->rphf_mask;
-  if (!mask) return;
-  hb_glyph_info_t *info = buffer->info;
-
-  foreach_syllable (buffer, start, end)
-  {
-    /* Mark a substituted repha as USE_R. */
-    for (unsigned int i = start; i < end && (info[i].mask & mask); i++)
-      if (_hb_glyph_info_substituted (&info[i]))
-      {
-       info[i].use_category() = USE_R;
-       break;
-      }
-  }
-}
-
-static void
-record_pref (const hb_ot_shape_plan_t *plan,
-            hb_font_t *font,
-            hb_buffer_t *buffer)
-{
-  hb_glyph_info_t *info = buffer->info;
-
-  foreach_syllable (buffer, start, end)
-  {
-    /* Mark a substituted pref as VPre, as they behave the same way. */
-    for (unsigned int i = start; i < end; i++)
-      if (_hb_glyph_info_substituted (&info[i]))
-      {
-       info[i].use_category() = USE_VPre;
-       break;
-      }
-  }
-}
-
-static inline bool
-is_halant (const hb_glyph_info_t &info)
-{
-  return info.use_category() == USE_H && !_hb_glyph_info_ligated (&info);
-}
-
-static void
-reorder_syllable (hb_buffer_t *buffer, unsigned int start, unsigned int end)
-{
-  syllable_type_t syllable_type = (syllable_type_t) (buffer->info[start].syllable() & 0x0F);
-  /* Only a few syllable types need reordering. */
-  if (unlikely (!(FLAG_SAFE (syllable_type) &
-                 (FLAG (virama_terminated_cluster) |
-                  FLAG (consonant_cluster) |
-                  FLAG (vowel_cluster) |
-                  FLAG (broken_cluster) |
-                  0))))
-    return;
-
-  hb_glyph_info_t *info = buffer->info;
-
-#define BASE_FLAGS (FLAG (USE_B) | FLAG (USE_GB) | FLAG (USE_IV))
-
-  /* Move things forward. */
-  if (info[start].use_category() == USE_R && end - start > 1)
-  {
-    /* Got a repha.  Reorder it to after first base, before first halant. */
-    for (unsigned int i = start + 1; i < end; i++)
-      if ((FLAG_UNSAFE (info[i].use_category()) & (BASE_FLAGS)) || is_halant (info[i]))
-      {
-       /* If we hit a halant, move before it; otherwise it's a base: move to it's
-        * place, and shift things in between backward. */
-
-       if (is_halant (info[i]))
-         i--;
-
-       buffer->merge_clusters (start, i + 1);
-       hb_glyph_info_t t = info[start];
-       memmove (&info[start], &info[start + 1], (i - start) * sizeof (info[0]));
-       info[i] = t;
-
-       break;
-      }
-  }
-
-  /* Move things back. */
-  unsigned int j = end;
-  for (unsigned int i = start; i < end; i++)
-  {
-    uint32_t flag = FLAG_UNSAFE (info[i].use_category());
-    if ((flag & (BASE_FLAGS)) || is_halant (info[i]))
-    {
-      /* If we hit a halant, move after it; otherwise it's a base: move to it's
-       * place, and shift things in between backward. */
-      if (is_halant (info[i]))
-       j = i + 1;
-      else
-       j = i;
-    }
-    else if (((flag) & (FLAG (USE_VPre) | FLAG (USE_VMPre))) &&
-            /* Only move the first component of a MultipleSubst. */
-            0 == _hb_glyph_info_get_lig_comp (&info[i]) &&
-            j < i)
-    {
-      buffer->merge_clusters (j, i + 1);
-      hb_glyph_info_t t = info[i];
-      memmove (&info[j + 1], &info[j], (i - j) * sizeof (info[0]));
-      info[j] = t;
-    }
-  }
-}
-
-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_glyph_info_t dottedcircle = {0};
-  if (!font->get_nominal_glyph (0x25CCu, &dottedcircle.codepoint))
-    return;
-  dottedcircle.use_category() = hb_use_get_categories (0x25CC);
-
-  buffer->clear_output ();
-
-  buffer->idx = 0;
-  unsigned int last_syllable = 0;
-  while (buffer->idx < buffer->len && !buffer->in_error)
-  {
-    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 ginfo = dottedcircle;
-      ginfo.cluster = buffer->cur().cluster;
-      ginfo.mask = buffer->cur().mask;
-      ginfo.syllable() = buffer->cur().syllable();
-      /* TODO Set glyph_props? */
-
-      /* Insert dottedcircle after possible Repha. */
-      while (buffer->idx < buffer->len && !buffer->in_error &&
-            last_syllable == buffer->cur().syllable() &&
-            buffer->cur().use_category() == USE_R)
-        buffer->next_glyph ();
-
-      buffer->output_info (ginfo);
-    }
-    else
-      buffer->next_glyph ();
-  }
-
-  buffer->swap_buffers ();
-}
-
-static void
-reorder (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;
-
-  foreach_syllable (buffer, start, end)
-    reorder_syllable (buffer, start, end);
-
-  /* Zero syllables now... */
-  unsigned int count = buffer->len;
-  for (unsigned int i = 0; i < count; i++)
-    info[i].syllable() = 0;
-
-  HB_BUFFER_DEALLOCATE_VAR (buffer, use_category);
-}
-
-static bool
-compose_use (const hb_ot_shape_normalize_context_t *c,
-            hb_codepoint_t  a,
-            hb_codepoint_t  b,
-            hb_codepoint_t *ab)
-{
-  /* Avoid recomposing split matras. */
-  if (HB_UNICODE_GENERAL_CATEGORY_IS_MARK (c->unicode->general_category (a)))
-    return false;
-
-  return (bool)c->unicode->compose (a, b, ab);
-}
-
-
-const hb_ot_complex_shaper_t _hb_ot_complex_shaper_use =
-{
-  "use",
-  collect_features_use,
-  NULL, /* override_features */
-  data_create_use,
-  data_destroy_use,
-  NULL, /* preprocess_text */
-  NULL, /* postprocess_glyphs */
-  HB_OT_SHAPE_NORMALIZATION_MODE_COMPOSED_DIACRITICS_NO_SHORT_CIRCUIT,
-  NULL, /* decompose */
-  compose_use,
-  setup_masks_use,
-  HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_EARLY,
-  false, /* fallback_position */
-};
index e134224..ec65351 100644 (file)
@@ -45,9 +45,5 @@ HB_INTERNAL void _hb_ot_shape_fallback_kern (const hb_ot_shape_plan_t *plan,
                                             hb_font_t *font,
                                             hb_buffer_t  *buffer);
 
-HB_INTERNAL void _hb_ot_shape_fallback_spaces (const hb_ot_shape_plan_t *plan,
-                                              hb_font_t *font,
-                                              hb_buffer_t  *buffer);
-
 
 #endif /* HB_OT_SHAPE_FALLBACK_PRIVATE_HH */
index ea8312b..53274b5 100644 (file)
@@ -224,7 +224,7 @@ position_mark (const hb_ot_shape_plan_t *plan,
        pos.x_offset += base_extents.x_bearing + base_extents.width - mark_extents.width / 2 - mark_extents.x_bearing;
         break;
       }
-      HB_FALLTHROUGH;
+      /* Fall through */
 
     default:
     case HB_UNICODE_COMBINING_CLASS_ATTACHED_BELOW:
@@ -259,7 +259,6 @@ position_mark (const hb_ot_shape_plan_t *plan,
     case HB_UNICODE_COMBINING_CLASS_BELOW_RIGHT:
       /* Add gap, fall-through. */
       base_extents.height -= y_gap;
-      HB_FALLTHROUGH;
 
     case HB_UNICODE_COMBINING_CLASS_ATTACHED_BELOW_LEFT:
     case HB_UNICODE_COMBINING_CLASS_ATTACHED_BELOW:
@@ -280,7 +279,6 @@ position_mark (const hb_ot_shape_plan_t *plan,
       /* Add gap, fall-through. */
       base_extents.y_bearing += y_gap;
       base_extents.height -= y_gap;
-      HB_FALLTHROUGH;
 
     case HB_UNICODE_COMBINING_CLASS_ATTACHED_ABOVE:
     case HB_UNICODE_COMBINING_CLASS_ATTACHED_ABOVE_RIGHT:
@@ -420,12 +418,13 @@ _hb_ot_shape_fallback_position (const hb_ot_shape_plan_t *plan,
   _hb_buffer_assert_gsubgpos_vars (buffer);
 
   unsigned int start = 0;
+  unsigned int last_cluster = buffer->info[0].cluster;
   unsigned int count = buffer->len;
-  hb_glyph_info_t *info = buffer->info;
   for (unsigned int i = 1; i < count; i++)
-    if (likely (!HB_UNICODE_GENERAL_CATEGORY_IS_MARK (_hb_glyph_info_get_general_category (&info[i])))) {
+    if (buffer->info[i].cluster != last_cluster) {
       position_cluster (plan, font, buffer, start, i);
       start = i;
+      last_cluster = buffer->info[i].cluster;
     }
   position_cluster (plan, font, buffer, start, count);
 }
@@ -484,70 +483,3 @@ _hb_ot_shape_fallback_kern (const hb_ot_shape_plan_t *plan,
     idx = skippy_iter.idx;
   }
 }
-
-
-/* Adjusts width of various spaces. */
-void
-_hb_ot_shape_fallback_spaces (const hb_ot_shape_plan_t *plan,
-                             hb_font_t *font,
-                             hb_buffer_t  *buffer)
-{
-  if (!HB_DIRECTION_IS_HORIZONTAL (buffer->props.direction))
-    return;
-
-  hb_glyph_info_t *info = buffer->info;
-  hb_glyph_position_t *pos = buffer->pos;
-  unsigned int count = buffer->len;
-  for (unsigned int i = 0; i < count; i++)
-    if (_hb_glyph_info_is_unicode_space (&info[i]) && !_hb_glyph_info_ligated (&info[i]))
-    {
-      hb_unicode_funcs_t::space_t space_type = _hb_glyph_info_get_unicode_space_fallback_type (&info[i]);
-      hb_codepoint_t glyph;
-      typedef hb_unicode_funcs_t t;
-      switch (space_type)
-      {
-       case t::NOT_SPACE: /* Shouldn't happen. */
-       case t::SPACE:
-         break;
-
-       case t::SPACE_EM:
-       case t::SPACE_EM_2:
-       case t::SPACE_EM_3:
-       case t::SPACE_EM_4:
-       case t::SPACE_EM_5:
-       case t::SPACE_EM_6:
-       case t::SPACE_EM_16:
-         pos[i].x_advance = (font->x_scale + ((int) space_type)/2) / (int) space_type;
-         break;
-
-       case t::SPACE_4_EM_18:
-         pos[i].x_advance = font->x_scale * 4 / 18;
-         break;
-
-       case t::SPACE_FIGURE:
-         for (char u = '0'; u <= '9'; u++)
-           if (font->get_nominal_glyph (u, &glyph))
-           {
-             pos[i].x_advance = font->get_glyph_h_advance (glyph);
-             break;
-           }
-         break;
-
-       case t::SPACE_PUNCTUATION:
-         if (font->get_nominal_glyph ('.', &glyph))
-           pos[i].x_advance = font->get_glyph_h_advance (glyph);
-         else if (font->get_nominal_glyph (',', &glyph))
-           pos[i].x_advance = font->get_glyph_h_advance (glyph);
-         break;
-
-       case t::SPACE_NARROW:
-         /* Half-space?
-          * Unicode doc http://www.unicode.org/charts/PDF/U2000.pdf says ~1/4 or 1/5 of EM.
-          * However, in my testing, many fonts have their regular space being about that
-          * size.  To me, a percentage of the space width makes more sense.  Half is as
-          * good as any. */
-         pos[i].x_advance /= 2;
-         break;
-      }
-    }
-}
index 107617e..8cc64af 100644 (file)
  *     with previous base, use that.  This needs the itemizer to have this
  *     knowledge too.  We need to provide assistance to the itemizer.
  *
- *   - When a font does not support a character but supports its canonical
- *     decomposition, well, use the decomposition.
+ *   - When a font does not support a character but supports its decomposition,
+ *     well, use the decomposition (preferring the canonical decomposition, but
+ *     falling back to the compatibility decomposition if necessary).  The
+ *     compatibility decomposition is really nice to have, for characters like
+ *     ellipsis, or various-sized space characters.
  *
  *   - The complex shapers can customize the compose and decompose functions to
  *     offload some of their requirements to the normalizer.  For example, the
  *     Indic shaper may want to disallow recomposing of two matras.
+ *
+ *   - We try compatibility decomposition if decomposing through canonical
+ *     decomposition alone failed to find a sequence that the font supports.
+ *     We don't try compatibility decomposition recursively during the canonical
+ *     decomposition phase.  This has minimal impact.  There are only a handful
+ *     of Greek letter that have canonical decompositions that include characters
+ *     with compatibility decomposition.  Those can be found using this command:
+ *
+ *     egrep  "`echo -n ';('; grep ';<' UnicodeData.txt | cut -d';' -f1 | tr '\n' '|'; echo ') '`" UnicodeData.txt
  */
 
 static bool
@@ -76,7 +88,7 @@ decompose_unicode (const hb_ot_shape_normalize_context_t *c,
                   hb_codepoint_t *a,
                   hb_codepoint_t *b)
 {
-  return (bool) c->unicode->decompose (ab, a, b);
+  return c->unicode->decompose (ab, a, b);
 }
 
 static bool
@@ -85,21 +97,21 @@ compose_unicode (const hb_ot_shape_normalize_context_t *c,
                 hb_codepoint_t  b,
                 hb_codepoint_t *ab)
 {
-  return (bool) c->unicode->compose (a, b, ab);
+  return c->unicode->compose (a, b, ab);
 }
 
 static inline void
 set_glyph (hb_glyph_info_t &info, hb_font_t *font)
 {
-  font->get_nominal_glyph (info.codepoint, &info.glyph_index());
+  font->get_glyph (info.codepoint, 0, &info.glyph_index());
 }
 
 static inline void
 output_char (hb_buffer_t *buffer, hb_codepoint_t unichar, hb_codepoint_t glyph)
 {
   buffer->cur().glyph_index() = glyph;
-  buffer->output_glyph (unichar); /* This is very confusing indeed. */
-  _hb_glyph_info_set_unicode_props (&buffer->prev(), buffer);
+  buffer->output_glyph (unichar);
+  _hb_glyph_info_set_unicode_props (&buffer->prev(), buffer->unicode);
 }
 
 static inline void
@@ -124,10 +136,10 @@ decompose (const hb_ot_shape_normalize_context_t *c, bool shortest, hb_codepoint
   hb_font_t * const font = c->font;
 
   if (!c->decompose (c, ab, &a, &b) ||
-      (b && !font->get_nominal_glyph (b, &b_glyph)))
+      (b && !font->get_glyph (b, 0, &b_glyph)))
     return 0;
 
-  bool has_a = (bool) font->get_nominal_glyph (a, &a_glyph);
+  bool has_a = font->get_glyph (a, 0, &a_glyph);
   if (shortest && has_a) {
     /* Output a and b */
     output_char (buffer, a, a_glyph);
@@ -159,6 +171,28 @@ decompose (const hb_ot_shape_normalize_context_t *c, bool shortest, hb_codepoint
   return 0;
 }
 
+/* Returns 0 if didn't decompose, number of resulting characters otherwise. */
+static inline unsigned int
+decompose_compatibility (const hb_ot_shape_normalize_context_t *c, hb_codepoint_t u)
+{
+  unsigned int len, i;
+  hb_codepoint_t decomposed[HB_UNICODE_MAX_DECOMPOSITION_LEN];
+  hb_codepoint_t glyphs[HB_UNICODE_MAX_DECOMPOSITION_LEN];
+
+  len = c->buffer->unicode->decompose_compatibility (u, decomposed);
+  if (!len)
+    return 0;
+
+  for (i = 0; i < len; i++)
+    if (!c->font->get_glyph (decomposed[i], 0, &glyphs[i]))
+      return 0;
+
+  for (i = 0; i < len; i++)
+    output_char (c->buffer, decomposed[i], glyphs[i]);
+
+  return len;
+}
+
 static inline void
 decompose_current_character (const hb_ot_shape_normalize_context_t *c, bool shortest)
 {
@@ -166,50 +200,17 @@ decompose_current_character (const hb_ot_shape_normalize_context_t *c, bool shor
   hb_codepoint_t u = buffer->cur().codepoint;
   hb_codepoint_t glyph;
 
-  if (shortest && c->font->get_nominal_glyph (u, &glyph))
-  {
+  /* Kind of a cute waterfall here... */
+  if (shortest && c->font->get_glyph (u, 0, &glyph))
     next_char (buffer, glyph);
-    return;
-  }
-
-  if (decompose (c, shortest, u))
-  {
+  else if (decompose (c, shortest, u))
     skip_char (buffer);
-    return;
-  }
-
-  if (!shortest && c->font->get_nominal_glyph (u, &glyph))
-  {
+  else if (!shortest && c->font->get_glyph (u, 0, &glyph))
     next_char (buffer, glyph);
-    return;
-  }
-
-  if (_hb_glyph_info_is_unicode_space (&buffer->cur()))
-  {
-    hb_codepoint_t space_glyph;
-    hb_unicode_funcs_t::space_t space_type = buffer->unicode->space_fallback_type (u);
-    if (space_type != hb_unicode_funcs_t::NOT_SPACE && c->font->get_nominal_glyph (0x0020u, &space_glyph))
-    {
-      _hb_glyph_info_set_unicode_space_fallback_type (&buffer->cur(), space_type);
-      next_char (buffer, space_glyph);
-      buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_SPACE_FALLBACK;
-      return;
-    }
-  }
-
-  if (u == 0x2011u)
-  {
-    /* U+2011 is the only sensible character that is a no-break version of another character
-     * and not a space.  The space ones are handled already.  Handle this lone one. */
-    hb_codepoint_t other_glyph;
-    if (c->font->get_nominal_glyph (0x2010u, &other_glyph))
-    {
-      next_char (buffer, other_glyph);
-      return;
-    }
-  }
-
-  next_char (buffer, glyph); /* glyph is initialized in earlier branches. */
+  else if (decompose_compatibility (c, u))
+    skip_char (buffer);
+  else
+    next_char (buffer, glyph); /* glyph is initialized in earlier branches. */
 }
 
 static inline void
@@ -218,10 +219,10 @@ handle_variation_selector_cluster (const hb_ot_shape_normalize_context_t *c, uns
   /* TODO Currently if there's a variation-selector we give-up, it's just too hard. */
   hb_buffer_t * const buffer = c->buffer;
   hb_font_t * const font = c->font;
-  for (; buffer->idx < end - 1 && !buffer->in_error;) {
+  for (; buffer->idx < end - 1;) {
     if (unlikely (buffer->unicode->is_variation_selector (buffer->cur(+1).codepoint))) {
       /* The next two lines are some ugly lines... But work. */
-      if (font->get_variation_glyph (buffer->cur().codepoint, buffer->cur(+1).codepoint, &buffer->cur().glyph_index()))
+      if (font->get_glyph (buffer->cur().codepoint, buffer->cur(+1).codepoint, &buffer->cur().glyph_index()))
       {
        buffer->replace_glyphs (2, 1, &buffer->cur().codepoint);
       }
@@ -254,13 +255,13 @@ 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;
-  for (unsigned int i = buffer->idx; i < end && !buffer->in_error; i++)
+  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, short_circuit);
       return;
     }
 
-  while (buffer->idx < end && !buffer->in_error)
+  while (buffer->idx < end)
     decompose_current_character (c, short_circuit);
 }
 
@@ -289,8 +290,6 @@ _hb_ot_shape_normalize (const hb_ot_shape_plan_t *plan,
                        hb_buffer_t *buffer,
                        hb_font_t *font)
 {
-  if (unlikely (!buffer->len)) return;
-
   _hb_buffer_assert_unicode_vars (buffer);
 
   hb_ot_shape_normalization_mode_t mode = plan->shaper->normalization_preference;
@@ -320,11 +319,11 @@ _hb_ot_shape_normalize (const hb_ot_shape_plan_t *plan,
 
   buffer->clear_output ();
   count = buffer->len;
-  for (buffer->idx = 0; buffer->idx < count && !buffer->in_error;)
+  for (buffer->idx = 0; buffer->idx < count;)
   {
     unsigned int end;
     for (end = buffer->idx + 1; end < count; end++)
-      if (likely (!HB_UNICODE_GENERAL_CATEGORY_IS_MARK (_hb_glyph_info_get_general_category (&buffer->info[end]))))
+      if (buffer->cur().cluster != buffer->info[end].cluster)
         break;
 
     decompose_cluster (&c, end, might_short_circuit, always_short_circuit);
@@ -345,13 +344,15 @@ _hb_ot_shape_normalize (const hb_ot_shape_plan_t *plan,
       if (_hb_glyph_info_get_modified_combining_class (&buffer->info[end]) == 0)
         break;
 
-    /* We are going to do a O(n^2).  Only do this if the sequence is short. */
+    /* We are going to do a bubble-sort.  Only do this if the
+     * sequence is short.  Doing it on long sequences can result
+     * in an O(n^2) DoS. */
     if (end - i > 10) {
       i = end;
       continue;
     }
 
-    buffer->sort (i, end, compare_combining_class);
+    hb_bubble_sort (buffer->info + i, end - i, compare_combining_class);
 
     i = end;
   }
@@ -370,7 +371,7 @@ _hb_ot_shape_normalize (const hb_ot_shape_plan_t *plan,
   count = buffer->len;
   unsigned int starter = 0;
   buffer->next_glyph ();
-  while (buffer->idx < count && !buffer->in_error)
+  while (buffer->idx < count)
   {
     hb_codepoint_t composed, glyph;
     if (/* We don't try to compose a non-mark character with it's preceding starter.
@@ -388,7 +389,7 @@ _hb_ot_shape_normalize (const hb_ot_shape_plan_t *plan,
                   buffer->cur().codepoint,
                   &composed) &&
        /* And the font has glyph for the composite. */
-       font->get_nominal_glyph (composed, &glyph))
+       font->get_glyph (composed, 0, &glyph))
     {
       /* Composes. */
       buffer->next_glyph (); /* Copy to out-buffer. */
@@ -399,7 +400,7 @@ _hb_ot_shape_normalize (const hb_ot_shape_plan_t *plan,
       /* 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);
+      _hb_glyph_info_set_unicode_props (&buffer->out_info[starter], buffer->unicode);
 
       continue;
     }
index 7811cb7..07adb04 100644 (file)
@@ -59,6 +59,10 @@ static hb_tag_t horizontal_features[] = {
   HB_TAG('r','c','l','t'),
 };
 
+static hb_tag_t vertical_features[] = {
+  HB_TAG('v','e','r','t'),
+};
+
 
 
 static void
@@ -101,13 +105,10 @@ hb_ot_shape_collect_features (hb_ot_shape_planner_t          *planner,
                        (horizontal_features[i] == HB_TAG('k','e','r','n') ?
                         F_HAS_FALLBACK : F_NONE));
   else
-  {
-    /* We really want to find a 'vert' feature if there's any in the font, no
-     * matter which script/langsys it is listed (or not) under.
-     * See various bugs referenced from:
-     * https://github.com/behdad/harfbuzz/issues/63 */
-    map->add_feature (HB_TAG ('v','e','r','t'), 1, F_GLOBAL | F_GLOBAL_SEARCH);
-  }
+    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);
@@ -145,7 +146,7 @@ _hb_ot_shaper_face_data_destroy (hb_ot_shaper_face_data_t *data)
 struct hb_ot_shaper_font_data_t {};
 
 hb_ot_shaper_font_data_t *
-_hb_ot_shaper_font_data_create (hb_font_t *font HB_UNUSED)
+_hb_ot_shaper_font_data_create (hb_font_t *font)
 {
   return (hb_ot_shaper_font_data_t *) HB_SHAPER_DATA_SUCCEEDED;
 }
@@ -228,7 +229,7 @@ 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++)
-    _hb_glyph_info_set_unicode_props (&info[i], buffer);
+    _hb_glyph_info_set_unicode_props (&info[i], buffer->unicode);
 }
 
 static void
@@ -245,7 +246,7 @@ hb_insert_dotted_circle (hb_buffer_t *buffer, hb_font_t *font)
 
   hb_glyph_info_t dottedcircle = {0};
   dottedcircle.codepoint = 0x25CCu;
-  _hb_glyph_info_set_unicode_props (&dottedcircle, buffer);
+  _hb_glyph_info_set_unicode_props (&dottedcircle, buffer->unicode);
 
   buffer->clear_output ();
 
@@ -254,7 +255,7 @@ hb_insert_dotted_circle (hb_buffer_t *buffer, hb_font_t *font)
   info.cluster = buffer->cur().cluster;
   info.mask = buffer->cur().mask;
   buffer->output_info (info);
-  while (buffer->idx < buffer->len && !buffer->in_error)
+  while (buffer->idx < buffer->len)
     buffer->next_glyph ();
 
   buffer->swap_buffers ();
@@ -263,24 +264,11 @@ hb_insert_dotted_circle (hb_buffer_t *buffer, hb_font_t *font)
 static void
 hb_form_clusters (hb_buffer_t *buffer)
 {
-  if (!(buffer->scratch_flags & HB_BUFFER_SCRATCH_FLAG_HAS_NON_ASCII) ||
-      buffer->cluster_level != HB_BUFFER_CLUSTER_LEVEL_MONOTONE_GRAPHEMES)
-    return;
-
-  /* Loop duplicated in hb_ensure_native_direction(), and in _hb-coretext.cc */
-  unsigned int base = 0;
   unsigned int count = buffer->len;
   hb_glyph_info_t *info = buffer->info;
   for (unsigned int i = 1; i < count; i++)
-  {
-    if (likely (!HB_UNICODE_GENERAL_CATEGORY_IS_MARK (_hb_glyph_info_get_general_category (&info[i])) &&
-               !_hb_glyph_info_is_joiner (&info[i])))
-    {
-      buffer->merge_clusters (base, i);
-      base = i;
-    }
-  }
-  buffer->merge_clusters (base, count);
+    if (HB_UNICODE_GENERAL_CATEGORY_IS_MARK (_hb_glyph_info_get_general_category (&info[i])))
+      buffer->merge_clusters (i - 1, i + 1);
 }
 
 static void
@@ -295,28 +283,7 @@ hb_ensure_native_direction (hb_buffer_t *buffer)
   if ((HB_DIRECTION_IS_HORIZONTAL (direction) && direction != hb_script_get_horizontal_direction (buffer->props.script)) ||
       (HB_DIRECTION_IS_VERTICAL   (direction) && direction != HB_DIRECTION_TTB))
   {
-    /* Same loop as hb_form_clusters().
-     * Since form_clusters() merged clusters already, we don't merge. */
-    unsigned int base = 0;
-    unsigned int count = buffer->len;
-    hb_glyph_info_t *info = buffer->info;
-    for (unsigned int i = 1; i < count; i++)
-    {
-      if (likely (!HB_UNICODE_GENERAL_CATEGORY_IS_MARK (_hb_glyph_info_get_general_category (&info[i]))))
-      {
-       if (buffer->cluster_level == HB_BUFFER_CLUSTER_LEVEL_MONOTONE_CHARACTERS)
-         buffer->merge_clusters (base, i);
-       buffer->reverse_range (base, i);
-
-       base = i;
-      }
-    }
-    if (buffer->cluster_level == HB_BUFFER_CLUSTER_LEVEL_MONOTONE_CHARACTERS)
-      buffer->merge_clusters (base, count);
-    buffer->reverse_range (base, count);
-
-    buffer->reverse ();
-
+    hb_buffer_reverse_clusters (buffer);
     buffer->props.direction = HB_DIRECTION_REVERSE (buffer->props.direction);
   }
 }
@@ -338,7 +305,7 @@ hb_ot_mirror_chars (hb_ot_shape_context_t *c)
   hb_glyph_info_t *info = buffer->info;
   for (unsigned int i = 0; i < count; i++) {
     hb_codepoint_t codepoint = unicode->mirroring (info[i].codepoint);
-    if (likely (codepoint == info[i].codepoint || !c->font->has_glyph (codepoint)))
+    if (likely (codepoint == info[i].codepoint))
       info[i].mask |= rtlm_mask;
     else
       info[i].codepoint = codepoint;
@@ -348,8 +315,7 @@ hb_ot_mirror_chars (hb_ot_shape_context_t *c)
 static inline void
 hb_ot_shape_setup_masks_fraction (hb_ot_shape_context_t *c)
 {
-  if (!(c->buffer->scratch_flags & HB_BUFFER_SCRATCH_FLAG_HAS_NON_ASCII) ||
-      !c->plan->has_frac)
+  if (!c->plan->has_frac)
     return;
 
   hb_buffer_t *buffer = c->buffer;
@@ -414,103 +380,6 @@ hb_ot_shape_setup_masks (hb_ot_shape_context_t *c)
   }
 }
 
-static void
-hb_ot_zero_width_default_ignorables (hb_ot_shape_context_t *c)
-{
-  hb_buffer_t *buffer = c->buffer;
-
-  if (!(buffer->scratch_flags & HB_BUFFER_SCRATCH_FLAG_HAS_DEFAULT_IGNORABLES) ||
-      (buffer->flags & HB_BUFFER_FLAG_PRESERVE_DEFAULT_IGNORABLES))
-    return;
-
-  unsigned int count = buffer->len;
-  hb_glyph_info_t *info = buffer->info;
-  hb_glyph_position_t *pos = buffer->pos;
-  unsigned int i = 0;
-  for (i = 0; i < count; i++)
-    if (unlikely (_hb_glyph_info_is_default_ignorable (&info[i])))
-      pos[i].x_advance = pos[i].y_advance = pos[i].x_offset = pos[i].y_offset = 0;
-}
-
-static void
-hb_ot_hide_default_ignorables (hb_ot_shape_context_t *c)
-{
-  hb_buffer_t *buffer = c->buffer;
-
-  if (!(buffer->scratch_flags & HB_BUFFER_SCRATCH_FLAG_HAS_DEFAULT_IGNORABLES) ||
-      (buffer->flags & HB_BUFFER_FLAG_PRESERVE_DEFAULT_IGNORABLES))
-    return;
-
-  unsigned int count = buffer->len;
-  hb_glyph_info_t *info = buffer->info;
-  hb_glyph_position_t *pos = buffer->pos;
-  unsigned int i = 0;
-  for (i = 0; i < count; i++)
-  {
-    if (unlikely (_hb_glyph_info_is_default_ignorable (&info[i])))
-      break;
-  }
-
-  /* No default-ignorables found; return. */
-  if (i == count)
-    return;
-
-  hb_codepoint_t space;
-  if (c->font->get_nominal_glyph (' ', &space))
-  {
-    /* Replace default-ignorables with a zero-advance space glyph. */
-    for (/*continue*/; i < count; i++)
-    {
-      if (_hb_glyph_info_is_default_ignorable (&info[i]))
-       info[i].codepoint = space;
-    }
-  }
-  else
-  {
-    /* Merge clusters and delete default-ignorables.
-     * NOTE! We can't use out-buffer as we have positioning data. */
-    unsigned int j = i;
-    for (; i < count; i++)
-    {
-      if (_hb_glyph_info_is_default_ignorable (&info[i]))
-      {
-       /* Merge clusters.
-        * Same logic as buffer->delete_glyph(), but for in-place removal. */
-
-       unsigned int cluster = info[i].cluster;
-       if (i + 1 < count && cluster == info[i + 1].cluster)
-         continue; /* Cluster survives; do nothing. */
-
-       if (j)
-       {
-         /* Merge cluster backward. */
-         if (cluster < info[j - 1].cluster)
-         {
-           unsigned int old_cluster = info[j - 1].cluster;
-           for (unsigned k = j; k && info[k - 1].cluster == old_cluster; k--)
-             info[k - 1].cluster = cluster;
-         }
-         continue;
-       }
-
-       if (i + 1 < count)
-         buffer->merge_clusters (i, i + 2); /* Merge cluster forward. */
-
-       continue;
-      }
-
-      if (j != i)
-      {
-       info[j] = info[i];
-       pos[j] = pos[i];
-      }
-      j++;
-    }
-    buffer->len = j;
-  }
-}
-
-
 static inline void
 hb_ot_map_glyphs_fast (hb_buffer_t  *buffer)
 {
@@ -519,8 +388,32 @@ hb_ot_map_glyphs_fast (hb_buffer_t  *buffer)
   hb_glyph_info_t *info = buffer->info;
   for (unsigned int i = 0; i < count; i++)
     info[i].codepoint = info[i].glyph_index();
+}
 
-  buffer->content_type = HB_BUFFER_CONTENT_TYPE_GLYPHS;
+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++)
+  {
+    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
@@ -528,6 +421,9 @@ hb_ot_substitute_default (hb_ot_shape_context_t *c)
 {
   hb_buffer_t *buffer = c->buffer;
 
+  if (c->plan->shaper->preprocess_text)
+    c->plan->shaper->preprocess_text (c->plan, buffer, c->font);
+
   hb_ot_shape_initialize_masks (c);
 
   hb_ot_mirror_chars (c);
@@ -552,10 +448,16 @@ hb_ot_substitute_complex (hb_ot_shape_context_t *c)
 {
   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);
+
   c->plan->substitute (c->font, buffer);
 
+  hb_ot_layout_substitute_finish (c->font, buffer);
+
   return;
 }
 
@@ -563,9 +465,6 @@ static inline void
 hb_ot_substitute (hb_ot_shape_context_t *c)
 {
   hb_ot_substitute_default (c);
-
-  _hb_buffer_allocate_gsubgpos_vars (c->buffer);
-
   hb_ot_substitute_complex (c);
 }
 
@@ -586,6 +485,20 @@ zero_mark_width (hb_glyph_position_t *pos)
 }
 
 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;
@@ -606,41 +519,26 @@ hb_ot_position_default (hb_ot_shape_context_t *c)
   unsigned int count = c->buffer->len;
   hb_glyph_info_t *info = c->buffer->info;
   hb_glyph_position_t *pos = c->buffer->pos;
-
-  if (HB_DIRECTION_IS_HORIZONTAL (direction))
-  {
-    for (unsigned int i = 0; i < count; i++)
-      pos[i].x_advance = c->font->get_glyph_h_advance (info[i].codepoint);
-    /* The nil glyph_h_origin() func returns 0, so no need to apply it. */
-    if (c->font->has_glyph_h_origin_func ())
-      for (unsigned int i = 0; i < count; i++)
-       c->font->subtract_glyph_h_origin (info[i].codepoint,
-                                         &pos[i].x_offset,
-                                         &pos[i].y_offset);
-  }
-  else
+  for (unsigned int i = 0; i < count; i++)
   {
-    for (unsigned int i = 0; i < count; i++)
-    {
-      pos[i].y_advance = c->font->get_glyph_v_advance (info[i].codepoint);
-      c->font->subtract_glyph_v_origin (info[i].codepoint,
-                                       &pos[i].x_offset,
-                                       &pos[i].y_offset);
-    }
+    c->font->get_glyph_advance_for_direction (info[i].codepoint,
+                                             direction,
+                                             &pos[i].x_advance,
+                                             &pos[i].y_advance);
+    c->font->subtract_glyph_origin_for_direction (info[i].codepoint,
+                                                 direction,
+                                                 &pos[i].x_offset,
+                                                 &pos[i].y_offset);
+
   }
-  if (c->buffer->scratch_flags & HB_BUFFER_SCRATCH_FLAG_HAS_SPACE_FALLBACK)
-    _hb_ot_shape_fallback_spaces (c->plan, c->font, c->buffer);
 }
 
 static inline bool
 hb_ot_position_complex (hb_ot_shape_context_t *c)
 {
-  hb_ot_layout_position_start (c->font, c->buffer);
-
   bool ret = false;
   unsigned int count = c->buffer->len;
-  bool has_positioning = (bool) hb_ot_layout_has_positioning (c->face);
-
+  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
@@ -659,8 +557,15 @@ hb_ot_position_complex (hb_ot_shape_context_t *c)
       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;
   }
@@ -670,56 +575,58 @@ hb_ot_position_complex (hb_ot_shape_context_t *c)
     hb_glyph_info_t *info = c->buffer->info;
     hb_glyph_position_t *pos = c->buffer->pos;
 
-    /* Change glyph origin to what GPOS expects (horizontal), apply GPOS, change it back. */
+    /* Change glyph origin to what GPOS expects, apply GPOS, change it back. */
 
-    /* The nil glyph_h_origin() func returns 0, so no need to apply it. */
-    if (c->font->has_glyph_h_origin_func ())
-      for (unsigned int i = 0; i < count; i++)
-       c->font->add_glyph_h_origin (info[i].codepoint,
-                                    &pos[i].x_offset,
-                                    &pos[i].y_offset);
+    for (unsigned int i = 0; i < count; i++) {
+      c->font->add_glyph_origin_for_direction (info[i].codepoint,
+                                              HB_DIRECTION_LTR,
+                                              &pos[i].x_offset,
+                                              &pos[i].y_offset);
+    }
 
     c->plan->position (c->font, c->buffer);
 
-    /* The nil glyph_h_origin() func returns 0, so no need to apply it. */
-    if (c->font->has_glyph_h_origin_func ())
-      for (unsigned int i = 0; i < count; i++)
-       c->font->subtract_glyph_h_origin (info[i].codepoint,
-                                         &pos[i].x_offset,
-                                         &pos[i].y_offset);
+    for (unsigned int i = 0; i < count; i++) {
+      c->font->subtract_glyph_origin_for_direction (info[i].codepoint,
+                                                   HB_DIRECTION_LTR,
+                                                   &pos[i].x_offset,
+                                                   &pos[i].y_offset);
+    }
 
     ret = true;
   }
 
   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;
+
     case HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_LATE:
       zero_mark_widths_by_gdef (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_EARLY:
     case HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_EARLY:
       break;
   }
 
-  /* Finishing off GPOS has to follow a certain order. */
-  hb_ot_layout_position_finish_advances (c->font, c->buffer);
-  hb_ot_zero_width_default_ignorables (c);
-  hb_ot_layout_position_finish_offsets (c->font, c->buffer);
-
   return ret;
 }
 
 static inline void
 hb_ot_position (hb_ot_shape_context_t *c)
 {
-  c->buffer->clear_positions ();
+  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_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);
 
@@ -735,18 +642,59 @@ hb_ot_position (hb_ot_shape_context_t *c)
 }
 
 
+/* Post-process */
+
+static void
+hb_ot_hide_default_ignorables (hb_ot_shape_context_t *c)
+{
+  if (c->buffer->flags & HB_BUFFER_FLAG_PRESERVE_DEFAULT_IGNORABLES)
+    return;
+
+  hb_codepoint_t space;
+  enum {
+    SPACE_DONT_KNOW,
+    SPACE_AVAILABLE,
+    SPACE_UNAVAILABLE
+  } space_status = SPACE_DONT_KNOW;
+
+  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++)
+  {
+    if (unlikely (!_hb_glyph_info_ligated (&info[i]) &&
+                 _hb_glyph_info_is_default_ignorable (&info[i])))
+    {
+      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;
+      }
+      else
+       continue; /* Delete it. XXX Merge clusters? */
+    }
+    if (j != i)
+    {
+      info[j] = info[i];
+      pos[j] = pos[i];
+    }
+    j++;
+  }
+  c->buffer->len = j;
+}
+
+
 /* Pull it all together! */
 
 static void
 hb_ot_shape_internal (hb_ot_shape_context_t *c)
 {
   c->buffer->deallocate_var_all ();
-  c->buffer->scratch_flags = HB_BUFFER_SCRATCH_FLAG_DEFAULT;
-  if (likely (!_hb_unsigned_int_mul_overflows (c->buffer->len, HB_BUFFER_MAX_EXPANSION_FACTOR)))
-  {
-    c->buffer->max_len = MAX (c->buffer->len * HB_BUFFER_MAX_EXPANSION_FACTOR,
-                             (unsigned) HB_BUFFER_MAX_LEN_MIN);
-  }
 
   /* Save the original direction, we use it later. */
   c->target_direction = c->buffer->props.direction;
@@ -761,22 +709,15 @@ hb_ot_shape_internal (hb_ot_shape_context_t *c)
 
   hb_ensure_native_direction (c->buffer);
 
-  if (c->plan->shaper->preprocess_text)
-    c->plan->shaper->preprocess_text (c->plan, c->buffer, c->font);
-
   hb_ot_substitute (c);
   hb_ot_position (c);
 
   hb_ot_hide_default_ignorables (c);
 
-  if (c->plan->shaper->postprocess_glyphs)
-    c->plan->shaper->postprocess_glyphs (c->plan, c->buffer, c->font);
-
   _hb_buffer_deallocate_unicode_vars (c->buffer);
 
   c->buffer->props.direction = c->target_direction;
 
-  c->buffer->max_len = HB_BUFFER_MAX_LEN_DEFAULT;
   c->buffer->deallocate_var_all ();
 }
 
@@ -795,11 +736,6 @@ _hb_ot_shape (hb_shape_plan_t    *shape_plan,
 }
 
 
-/**
- * hb_ot_shape_plan_collect_lookups:
- *
- * Since: 0.9.7
- **/
 void
 hb_ot_shape_plan_collect_lookups (hb_shape_plan_t *shape_plan,
                                  hb_tag_t         table_tag,
@@ -819,22 +755,17 @@ add_char (hb_font_t          *font,
          hb_set_t           *glyphs)
 {
   hb_codepoint_t glyph;
-  if (font->get_nominal_glyph (u, &glyph))
+  if (font->get_glyph (u, 0, &glyph))
     glyphs->add (glyph);
   if (mirror)
   {
     hb_codepoint_t m = unicode->mirroring (u);
-    if (m != u && font->get_nominal_glyph (m, &glyph))
+    if (m != u && font->get_glyph (m, 0, &glyph))
       glyphs->add (glyph);
   }
 }
 
 
-/**
- * hb_ot_shape_glyphs_closure:
- *
- * Since: 0.9.2
- **/
 void
 hb_ot_shape_glyphs_closure (hb_font_t          *font,
                            hb_buffer_t        *buffer,
index 7b1bcc0..1402f54 100644 (file)
 HB_BEGIN_DECLS
 
 /* TODO port to shape-plan / set. */
-HB_EXTERN void
+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_EXTERN void
+void
 hb_ot_shape_plan_collect_lookups (hb_shape_plan_t *shape_plan,
                                  hb_tag_t         table_tag,
                                  hb_set_t        *lookup_indexes /* OUT */);
index 0483557..878dd79 100644 (file)
@@ -175,29 +175,20 @@ typedef struct {
  *
  * Some items still missing.  Those are commented out at the end.
  * Keep sorted for bsearch.
- *
- * Updated as of 2015-05-06: OT1.7 on MS website has some newer
- * items that we don't have here, eg. Zazaki.  This is the new
- * items in OpenType 1.7 (red items), most of which we have:
- * http://www.microsoft.com/typography/otspec170/languagetags.htm
  */
 
 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 */
-  {"acf",      HB_TAG('F','A','N',' ')},       /* French Antillean */
   {"ach",      HB_TAG('A','C','H',' ')},       /* Acoli */
-  {"acr",      HB_TAG('A','C','R',' ')},       /* Achi */
   {"ada",      HB_TAG('D','N','G',' ')},       /* Dangme */
   {"ady",      HB_TAG('A','D','Y',' ')},       /* Adyghe */
   {"af",       HB_TAG('A','F','K',' ')},       /* Afrikaans */
-  {"ahg",      HB_TAG('A','G','W',' ')},       /* Agaw */
   {"aii",      HB_TAG('S','W','A',' ')},       /* Swadaya Aramaic */
   {"aio",      HB_TAG('A','I','O',' ')},       /* Aiton */
   {"aiw",      HB_TAG('A','R','I',' ')},       /* Aari */
   {"ak",       HB_TAG('T','W','I',' ')},       /* Akan [macrolanguage] */
-  {"aka",      HB_TAG('A','K','A',' ')},       /* Akan */
   {"alt",      HB_TAG('A','L','T',' ')},       /* [Southern] Altai */
   {"am",       HB_TAG('A','M','H',' ')},       /* Amharic */
   {"amf",      HB_TAG('H','B','N',' ')},       /* Hammer-Banna */
@@ -210,7 +201,6 @@ static const LangTag ot_languages[] = {
   {"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] */
-  {"atj",      HB_TAG('R','C','R',' ')},       /* R-Cree */
   {"atv",      HB_TAG('A','L','T',' ')},       /* [Northern] Altai */
   {"av",       HB_TAG('A','V','R',' ')},       /* Avaric */
   {"awa",      HB_TAG('A','W','A',' ')},       /* Awadhi */
@@ -219,7 +209,6 @@ static const LangTag ot_languages[] = {
   {"azb",      HB_TAG('A','Z','B',' ')},       /* South Azerbaijani */
   {"azj",      HB_TAG('A','Z','E',' ')},       /* North Azerbaijani */
   {"ba",       HB_TAG('B','S','H',' ')},       /* Bashkir */
-  {"bad",      HB_TAG('B','A','D','0')},       /* Banda */
   {"bai",      HB_TAG('B','M','L',' ')},       /* Bamileke [family] */
   {"bal",      HB_TAG('B','L','I',' ')},       /* Baluchi [macrolangauge] */
   {"ban",      HB_TAG('B','A','N',' ')},       /* Balinese */
@@ -228,13 +217,11 @@ static const LangTag ot_languages[] = {
   {"bci",      HB_TAG('B','A','U',' ')},       /* Baoulé */
   {"bcl",      HB_TAG('B','I','K',' ')},       /* Central Bikol */
   {"bcq",      HB_TAG('B','C','H',' ')},       /* Bench */
-  {"bdy",      HB_TAG('B','D','Y',' ')},       /* Bandjalang */
-  {"be",       HB_TAG('B','E','L',' ')},       /* Belarusian */
+  {"be",       HB_TAG('B','E','L',' ')},       /* Belarusian */
   {"bem",      HB_TAG('B','E','M',' ')},       /* Bemba (Zambia) */
-  {"ber",      HB_TAG('B','E','R',' ')},       /* Berber [family] */
+  {"ber",      HB_TAG('B','E','R',' ')},       /* Berber [family] */
   {"bfq",      HB_TAG('B','A','D',' ')},       /* Badaga */
   {"bft",      HB_TAG('B','L','T',' ')},       /* Balti */
-  {"bfu",      HB_TAG('L','A','H',' ')},       /* Lahuli */
   {"bfy",      HB_TAG('B','A','G',' ')},       /* Baghelkhandi */
   {"bg",       HB_TAG('B','G','R',' ')},       /* Bulgarian */
   {"bgc",      HB_TAG('B','G','C',' ')},       /* Haryanvi */
@@ -268,13 +255,11 @@ static const LangTag ot_languages[] = {
   {"bxr",      HB_TAG('R','B','U',' ')},       /* Russian Buriat */
   {"byn",      HB_TAG('B','I','L',' ')},       /* Bilen */
   {"ca",       HB_TAG('C','A','T',' ')},       /* Catalan */
-  {"cak",      HB_TAG('C','A','K',' ')},       /* Kaqchikel */
   {"cbk",      HB_TAG('C','B','K',' ')},       /* Chavacano */
   {"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 */
-  {"chk",      HB_TAG('C','H','K','0')},       /* Chuukese */
   {"cho",      HB_TAG('C','H','O',' ')},       /* Choctaw */
   {"chp",      HB_TAG('C','H','P',' ')},       /* Chipewyan */
   {"chr",      HB_TAG('C','H','R',' ')},       /* Cherokee */
@@ -282,12 +267,9 @@ static const LangTag ot_languages[] = {
   {"ckb",      HB_TAG('K','U','R',' ')},       /* Central Kurdish (Sorani) */
   {"ckt",      HB_TAG('C','H','K',' ')},       /* Chukchi */
   {"cop",      HB_TAG('C','O','P',' ')},       /* Coptic */
-  {"cpp",      HB_TAG('C','P','P',' ')},       /* Creoles */
   {"cr",       HB_TAG('C','R','E',' ')},       /* Cree */
-  {"cre",      HB_TAG('Y','C','R',' ')},       /* Y-Cree */
   {"crh",      HB_TAG('C','R','T',' ')},       /* Crimean Tatar */
   {"crj",      HB_TAG('E','C','R',' ')},       /* [Southern] East Cree */
-  {"crk",      HB_TAG('W','C','R',' ')},       /* West-Cree */
   {"crl",      HB_TAG('E','C','R',' ')},       /* [Northern] East Cree */
   {"crm",      HB_TAG('M','C','R',' ')},       /* Moose Cree */
   {"crx",      HB_TAG('C','R','R',' ')},       /* Carrier */
@@ -296,27 +278,21 @@ static const LangTag ot_languages[] = {
   {"ctg",      HB_TAG('C','T','G',' ')},       /* Chittagonian */
   {"cts",      HB_TAG('B','I','K',' ')},       /* Northern Catanduanes Bikol */
   {"cu",       HB_TAG('C','S','L',' ')},       /* Church Slavic */
-  {"cuk",      HB_TAG('C','U','K',' ')},       /* San Blas Kuna */
   {"cv",       HB_TAG('C','H','U',' ')},       /* Chuvash */
   {"cwd",      HB_TAG('D','C','R',' ')},       /* Woods Cree */
   {"cy",       HB_TAG('W','E','L',' ')},       /* Welsh */
   {"da",       HB_TAG('D','A','N',' ')},       /* Danish */
   {"dap",      HB_TAG('N','I','S',' ')},       /* Nisi (India) */
   {"dar",      HB_TAG('D','A','R',' ')},       /* Dargwa */
-  {"dax",      HB_TAG('D','A','X',' ')},       /* Dayi */
   {"de",       HB_TAG('D','E','U',' ')},       /* German */
   {"dgo",      HB_TAG('D','G','O',' ')},       /* Dogri */
   {"dhd",      HB_TAG('M','A','W',' ')},       /* Dhundari */
-  {"dhg",      HB_TAG('D','H','G',' ')},       /* Dhangu */
   {"din",      HB_TAG('D','N','K',' ')},       /* Dinka [macrolanguage] */
   {"diq",      HB_TAG('D','I','Q',' ')},       /* Dimli */
   {"dje",      HB_TAG('D','J','R',' ')},       /* Zarma */
-  {"djr",      HB_TAG('D','J','R','0')},       /* Djambarrpuyngu */
   {"dng",      HB_TAG('D','U','N',' ')},       /* Dungan */
-  {"dnj",      HB_TAG('D','N','J',' ')},       /* Dan */
   {"doi",      HB_TAG('D','G','R',' ')},       /* Dogri [macrolanguage] */
   {"dsb",      HB_TAG('L','S','B',' ')},       /* Lower Sorbian */
-  {"duj",      HB_TAG('D','U','J',' ')},       /* Dhuwal */
   {"dv",       HB_TAG('D','I','V',' ')},       /* Dhivehi/Divehi/Maldivian */
   {"dyu",      HB_TAG('J','U','L',' ')},       /* Jula */
   {"dz",       HB_TAG('D','Z','N',' ')},       /* Dzongkha */
@@ -326,30 +302,23 @@ static const LangTag ot_languages[] = {
   {"el",       HB_TAG('E','L','L',' ')},       /* Modern Greek (1453-) */
   {"emk",      HB_TAG('M','N','K',' ')},       /* Eastern Maninkakan */
   {"en",       HB_TAG('E','N','G',' ')},       /* English */
-  {"enf",      HB_TAG('F','N','E',' ')},       /* Forest Nenets */
-  {"enh",      HB_TAG('T','N','E',' ')},       /* Tundra Nenets */
   {"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 */
-  {"esu",      HB_TAG('E','S','U',' ')},       /* Central Yupik */
   {"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 */
   {"fa",       HB_TAG('F','A','R',' ')},       /* Persian [macrolanguage] */
-  {"fan",      HB_TAG('F','A','N','0')},       /* Fang */
-  {"fat",      HB_TAG('F','A','T',' ')},       /* Fanti */
   {"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 */
-  {"flm",      HB_TAG('H','A','L',' ')},       /* Halam */
   {"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 */
-  {"fuf",      HB_TAG('F','T','A',' ')},       /* Futa */
   {"fur",      HB_TAG('F','R','L',' ')},       /* Friulian */
   {"fuv",      HB_TAG('F','U','V',' ')},       /* Nigerian Fulfulde */
   {"fy",       HB_TAG('F','R','I',' ')},       /* Western Frisian */
@@ -360,37 +329,30 @@ static const LangTag ot_languages[] = {
   {"gd",       HB_TAG('G','A','E',' ')},       /* Scottish Gaelic */
   {"gez",      HB_TAG('G','E','Z',' ')},       /* Ge'ez */
   {"ggo",      HB_TAG('G','O','N',' ')},       /* Southern Gondi */
-  {"gih",      HB_TAG('G','I','H',' ')},       /* Githabul */
-  {"gil",      HB_TAG('G','I','L','0')},       /* Kiribati (Gilbertese) */
-  {"gkp",      HB_TAG('G','K','P',' ')},       /* Kpelle (Guinea) */
   {"gl",       HB_TAG('G','A','L',' ')},       /* Galician */
   {"gld",      HB_TAG('N','A','N',' ')},       /* Nanai */
-  {"gle",      HB_TAG('I','R','T',' ')},       /* Irish Traditional */
   {"glk",      HB_TAG('G','L','K',' ')},       /* Gilaki */
   {"gn",       HB_TAG('G','U','A',' ')},       /* Guarani [macrolanguage] */
-  {"gnn",      HB_TAG('G','N','N',' ')},       /* Gumatj */
   {"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 */
-  {"gsw",      HB_TAG('A','L','S',' ')},       /* Alsatian */
   {"gu",       HB_TAG('G','U','J',' ')},       /* Gujarati */
   {"guc",      HB_TAG('G','U','C',' ')},       /* Wayuu */
-  {"guf",      HB_TAG('G','U','F',' ')},       /* Gupapuyngu */
   {"guk",      HB_TAG('G','M','Z',' ')},       /* Gumuz */
 /*{"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 */
-  {"haw",      HB_TAG('H','A','W',' ')},       /* Hawaiian */
-  {"hay",      HB_TAG('H','A','Y',' ')},       /* Haya */
-  {"haz",      HB_TAG('H','A','Z',' ')},       /* Hazaragi */
+  {"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 */
+  {"hz",       HB_TAG('H','E','R',' ')},       /* Herero */
   {"hi",       HB_TAG('H','I','N',' ')},       /* Hindi */
   {"hil",      HB_TAG('H','I','L',' ')},       /* Hiligaynon */
-  {"hmn",      HB_TAG('H','M','N',' ')},       /* Hmong */
   {"hnd",      HB_TAG('H','N','D',' ')},       /* [Southern] Hindko */
   {"hne",      HB_TAG('C','H','H',' ')},       /* Chattisgarhi */
   {"hno",      HB_TAG('H','N','D',' ')},       /* [Northern] Hindko */
@@ -404,13 +366,11 @@ static const LangTag ot_languages[] = {
   {"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) */
-  {"iba",      HB_TAG('I','B','A',' ')},       /* Iban */
   {"ibb",      HB_TAG('I','B','B',' ')},       /* Ibibio */
   {"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 */
-  {"ii",       HB_TAG('Y','I','M',' ')},       /* Yi Modern */
   {"ijc",      HB_TAG('I','J','O',' ')},       /* Izon */
   {"ijo",      HB_TAG('I','J','O',' ')},       /* Ijo [family] */
   {"ik",       HB_TAG('I','P','K',' ')},       /* Inupiaq [macrolanguage] */
@@ -426,20 +386,15 @@ static const LangTag ot_languages[] = {
   {"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','0')},       /* Kabyle */
+  {"kab",      HB_TAG('K','A','B',' ')},       /* Kabyle */
   {"kam",      HB_TAG('K','M','B',' ')},       /* Kamba (Kenya) */
   {"kar",      HB_TAG('K','R','N',' ')},       /* Karen [family] */
-  {"kat",      HB_TAG('K','G','E',' ')},       /* Khutsuri Georgian */
   {"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 */
-  {"kea",      HB_TAG('K','E','A',' ')},       /* Kabuverdianu (Crioulo) */
-  {"kek",      HB_TAG('K','E','K',' ')},       /* Kekchi */
   {"kex",      HB_TAG('K','K','N',' ')},       /* Kokni */
-  {"kfa",      HB_TAG('K','O','D',' ')},       /* Kodagu */
   {"kfr",      HB_TAG('K','A','C',' ')},       /* Kachchi */
-  {"kfx",      HB_TAG('K','U','L',' ')},       /* Kulvi */
   {"kfy",      HB_TAG('K','M','N',' ')},       /* Kumaoni */
   {"kg",       HB_TAG('K','O','N',' ')},       /* Kongo [macrolanguage] */
   {"kha",      HB_TAG('K','S','I',' ')},       /* Khasi */
@@ -448,9 +403,7 @@ static const LangTag ot_languages[] = {
 /*{"kht",      HB_TAG('K','H','T',' ')},*/     /* Khamti (OpenType spec and SIL fonts) */
   {"khw",      HB_TAG('K','H','W',' ')},       /* Khowar */
   {"ki",       HB_TAG('K','I','K',' ')},       /* Gikuyu/Kikuyu */
-  {"kiu",      HB_TAG('K','I','U',' ')},       /* Kirmanjki */
   {"kj",       HB_TAG('K','U','A',' ')},       /* Kuanyama/Kwanyama */
-  {"kjd",      HB_TAG('K','J','D',' ')},       /* Southern Kiwai */
   {"kjh",      HB_TAG('K','H','A',' ')},       /* Khakass */
   {"kjp",      HB_TAG('K','J','P',' ')},       /* Pwo Eastern Karen */
   {"kk",       HB_TAG('K','A','Z',' ')},       /* Kazakh */
@@ -464,8 +417,6 @@ static const LangTag ot_languages[] = {
   {"ko",       HB_TAG('K','O','R',' ')},       /* Korean */
   {"koi",      HB_TAG('K','O','P',' ')},       /* Komi-Permyak */
   {"kok",      HB_TAG('K','O','K',' ')},       /* Konkani [macrolanguage] */
-  {"kon",      HB_TAG('K','O','N','0')},       /* Kongo */
-  {"kos",      HB_TAG('K','O','S',' ')},       /* Kosraean */
   {"kpe",      HB_TAG('K','P','L',' ')},       /* Kpelle [macrolanguage] */
   {"kpv",      HB_TAG('K','O','Z',' ')},       /* Komi-Zyrian */
   {"kpy",      HB_TAG('K','Y','K',' ')},       /* Koryak */
@@ -475,11 +426,9 @@ static const LangTag ot_languages[] = {
   {"krl",      HB_TAG('K','R','L',' ')},       /* Karelian */
   {"kru",      HB_TAG('K','U','U',' ')},       /* Kurukh */
   {"ks",       HB_TAG('K','S','H',' ')},       /* Kashmiri */
-  {"ksh",      HB_TAG('K','S','H','0')},       /* Ripuarian, Kölsch */
+  {"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) */
-  {"ktb",      HB_TAG('K','E','B',' ')},       /* Kebena */
-  {"ktu",      HB_TAG('K','O','N',' ')},       /* Kikongo */
   {"ku",       HB_TAG('K','U','R',' ')},       /* Kurdish [macrolanguage] */
   {"kum",      HB_TAG('K','U','M',' ')},       /* Kumyk */
   {"kv",       HB_TAG('K','O','M',' ')},       /* Komi [macrolanguage] */
@@ -507,7 +456,6 @@ static const LangTag ot_languages[] = {
   {"lmo",      HB_TAG('L','M','O',' ')},       /* Lombard */
   {"ln",       HB_TAG('L','I','N',' ')},       /* Lingala */
   {"lo",       HB_TAG('L','A','O',' ')},       /* Lao */
-  {"lom",      HB_TAG('L','O','M',' ')},       /* Loma */
   {"lrc",      HB_TAG('L','R','C',' ')},       /* Northern Luri */
   {"lt",       HB_TAG('L','T','H',' ')},       /* Lithuanian */
   {"lu",       HB_TAG('L','U','B',' ')},       /* Luba-Katanga */
@@ -522,8 +470,6 @@ static const LangTag ot_languages[] = {
   {"mag",      HB_TAG('M','A','G',' ')},       /* Magahi */
   {"mai",      HB_TAG('M','T','H',' ')},       /* Maithili */
   {"mak",      HB_TAG('M','K','R',' ')},       /* Makasar */
-  {"mal",      HB_TAG('M','A','L',' ')},       /* Malayalam */
-  {"mam",      HB_TAG('M','A','M',' ')},       /* Mam */
   {"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 */
@@ -566,7 +512,6 @@ static const LangTag ot_languages[] = {
   {"mww",      HB_TAG('M','W','W',' ')},       /* Hmong Daw */
   {"my",       HB_TAG('B','R','M',' ')},       /* Burmese */
   {"mym",      HB_TAG('M','E','N',' ')},       /* Me'en */
-  {"myn",      HB_TAG('M','Y','N',' ')},       /* Mayan */
   {"myq",      HB_TAG('M','N','K',' ')},       /* Forest Maninka (retired code) */
   {"myv",      HB_TAG('E','R','Z',' ')},       /* Erzya */
   {"mzn",      HB_TAG('M','Z','N',' ')},       /* Mazanderani */
@@ -584,7 +529,6 @@ static const LangTag ot_languages[] = {
   {"ng",       HB_TAG('N','D','G',' ')},       /* Ndonga */
   {"nga",      HB_TAG('N','G','A',' ')},       /* Ngabaka */
   {"ngl",      HB_TAG('L','M','W',' ')},       /* Lomwe */
-  {"ngo",      HB_TAG('S','X','T',' ')},       /* Sutu */
   {"niu",      HB_TAG('N','I','U',' ')},       /* Niuean */
   {"niv",      HB_TAG('G','I','L',' ')},       /* Gilyak */
   {"nl",       HB_TAG('N','L','D',' ')},       /* Dutch */
@@ -598,22 +542,19 @@ static const LangTag ot_languages[] = {
   {"nr",       HB_TAG('N','D','B',' ')},       /* [South] Ndebele */
   {"nsk",      HB_TAG('N','A','S',' ')},       /* Naskapi */
   {"nso",      HB_TAG('S','O','T',' ')},       /* [Northern] Sotho */
-  {"nv",       HB_TAG('N','A','V',' ')},       /* Navajo */
   {"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) */
   {"oj",       HB_TAG('O','J','B',' ')},       /* Ojibwa [macrolanguage] */
   {"ojs",      HB_TAG('O','C','R',' ')},       /* Oji-Cree */
-  {"okm",      HB_TAG('K','O','H',' ')},       /* Korean Old Hangul */
   {"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 */
   {"pag",      HB_TAG('P','A','G',' ')},       /* Pangasinan */
   {"pam",      HB_TAG('P','A','M',' ')},       /* Kapampangan/Pampanga */
-  {"pap",      HB_TAG('P','A','P','0')},       /* Papiamento */
-  {"pau",      HB_TAG('P','A','U',' ')},       /* Palauan */
+  {"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 */
@@ -627,34 +568,24 @@ static const LangTag ot_languages[] = {
   {"plp",      HB_TAG('P','A','P',' ')},       /* Palpa */
   {"pms",      HB_TAG('P','M','S',' ')},       /* Piemontese */
   {"pnb",      HB_TAG('P','N','B',' ')},       /* Western Panjabi */
-  {"poh",      HB_TAG('P','O','H',' ')},       /* Pocomchi */
-  {"pon",      HB_TAG('P','O','N',' ')},       /* Pohnpeian */
   {"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 */
   {"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é */
-  {"quh",      HB_TAG('Q','U','H',' ')},       /* Quechua (Bolivia) */
   {"quz",      HB_TAG('Q','U','Z',' ')},       /* Cusco Quechua */
-  {"qvi",      HB_TAG('Q','V','I',' ')},       /* Quechua (Ecuador) */
-  {"qwh",      HB_TAG('Q','W','H',' ')},       /* Quechua (Peru) */
   {"raj",      HB_TAG('R','A','J',' ')},       /* Rajasthani [macrolanguage] */
-  {"rar",      HB_TAG('R','A','R',' ')},       /* Rarotongan */
   {"rbb",      HB_TAG('P','L','G',' ')},       /* Rumai Palaung */
   {"rej",      HB_TAG('R','E','J',' ')},       /* Rejang */
   {"ria",      HB_TAG('R','I','A',' ')},       /* Riang (India) */
-  {"rif",      HB_TAG('R','I','F',' ')},       /* Tarifit */
   {"ril",      HB_TAG('R','I','A',' ')},       /* Riang (Myanmar) */
-  {"rit",      HB_TAG('R','I','T',' ')},       /* Ritarungo */
   {"rki",      HB_TAG('A','R','K',' ')},       /* Rakhine */
-  {"rkw",      HB_TAG('R','K','W',' ')},       /* Arakwal */
   {"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 */
   {"rom",      HB_TAG('R','O','Y',' ')},       /* Romany [macrolanguage] */
-  {"rtm",      HB_TAG('R','T','M',' ')},       /* Rotuman */
   {"ru",       HB_TAG('R','U','S',' ')},       /* Russian */
   {"rue",      HB_TAG('R','S','Y',' ')},       /* Rusyn */
   {"rup",      HB_TAG('R','U','P',' ')},       /* Aromanian/Arumanian/Macedo-Romanian */
@@ -662,11 +593,10 @@ static const LangTag ot_languages[] = {
   {"rwr",      HB_TAG('M','A','W',' ')},       /* Marwari (India) */
   {"sa",       HB_TAG('S','A','N',' ')},       /* Sanskrit */
   {"sah",      HB_TAG('Y','A','K',' ')},       /* Yakut */
-  {"sam",      HB_TAG('P','A','A',' ')},       /* Palestinian Aramaic */
   {"sas",      HB_TAG('S','A','S',' ')},       /* Sasak */
   {"sat",      HB_TAG('S','A','T',' ')},       /* Santali */
-  {"sc",       HB_TAG('S','R','D',' ')},       /* Sardinian [macrolanguage] */
   {"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 */
@@ -679,7 +609,6 @@ static const LangTag ot_languages[] = {
   {"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) */
-  {"shi",      HB_TAG('S','H','I',' ')},       /* Tachelhit */
   {"shn",      HB_TAG('S','H','N',' ')},       /* Shan */
   {"si",       HB_TAG('S','N','H',' ')},       /* Sinhala */
   {"sid",      HB_TAG('S','I','D',' ')},       /* Sidamo */
@@ -692,7 +621,7 @@ 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 */
-  {"sn",       HB_TAG('S','N','A','0')},       /* Shona */
+  {"sn",       HB_TAG('S','N','A',' ')},       /* Shona */
   {"snk",      HB_TAG('S','N','K',' ')},       /* Soninke */
   {"so",       HB_TAG('S','M','L',' ')},       /* Somali */
   {"sop",      HB_TAG('S','O','P',' ')},       /* Songe */
@@ -730,24 +659,20 @@ static const LangTag ot_languages[] = {
   {"tiv",      HB_TAG('T','I','V',' ')},       /* Tiv */
   {"tk",       HB_TAG('T','K','M',' ')},       /* Turkmen */
   {"tl",       HB_TAG('T','G','L',' ')},       /* Tagalog */
-  {"tmh",      HB_TAG('T','M','H',' ')},       /* Tamashek */
+  {"tmh",      HB_TAG('t','m','h',' ')},       /* Tamashek [macrolanguage] */
   {"tn",       HB_TAG('T','N','A',' ')},       /* Tswana */
   {"to",       HB_TAG('T','G','N',' ')},       /* Tonga (Tonga Islands) */
-  {"tod",      HB_TAG('T','O','D','0')},       /* Toma */
-  {"toi",      HB_TAG('T','N','G',' ')},       /* Tonga */
   {"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 */
   {"tum",      HB_TAG('T','U','M',' ')},       /* Tumbuka */
-  {"tvl",      HB_TAG('T','V','L',' ')},       /* Tuvalu */
   {"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 */
-  {"tzo",      HB_TAG('T','Z','O',' ')},       /* Tzotzil */
   {"udm",      HB_TAG('U','D','M',' ')},       /* Udmurt */
   {"ug",       HB_TAG('U','Y','G',' ')},       /* Uighur */
   {"uk",       HB_TAG('U','K','R',' ')},       /* Ukrainian */
@@ -759,8 +684,8 @@ static const LangTag ot_languages[] = {
   {"uzs",      HB_TAG('U','Z','B',' ')},       /* Southern Uzbek */
   {"ve",       HB_TAG('V','E','N',' ')},       /* Venda */
   {"vec",      HB_TAG('V','E','C',' ')},       /* Venetian */
-  {"vi",       HB_TAG('V','I','T',' ')},       /* Vietnamese */
   {"vls",      HB_TAG('F','L','E',' ')},       /* Vlaams */
+  {"vi",       HB_TAG('V','I','T',' ')},       /* Vietnamese */
   {"vmw",      HB_TAG('M','A','K',' ')},       /* Makhuwa */
   {"vo",       HB_TAG('V','O','L',' ')},       /* Volapük */
   {"vro",      HB_TAG('V','R','O',' ')},       /* Võro */
@@ -769,60 +694,73 @@ static const LangTag ot_languages[] = {
   {"wbm",      HB_TAG('W','A',' ',' ')},       /* Wa */
   {"wbr",      HB_TAG('W','A','G',' ')},       /* Wagdi */
   {"wle",      HB_TAG('S','I','G',' ')},       /* Wolane */
-  {"wo",       HB_TAG('W','L','F',' ')},       /* Wolof */
   {"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 */
-  {"xan",      HB_TAG('S','E','K',' ')},       /* Sekota */
   {"xh",       HB_TAG('X','H','S',' ')},       /* Xhosa */
-  {"xjb",      HB_TAG('X','J','B',' ')},       /* Minjangbal */
   {"xog",      HB_TAG('X','O','G',' ')},       /* Soga */
   {"xom",      HB_TAG('K','M','O',' ')},       /* Komo (Sudan) */
-  {"xpe",      HB_TAG('X','P','E',' ')},       /* Kpelle (Liberia) */
   {"xsl",      HB_TAG('S','S','L',' ')},       /* South Slavey */
   {"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 */
-  {"yap",      HB_TAG('Y','A','P',' ')},       /* Yapese */
   {"yi",       HB_TAG('J','I','I',' ')},       /* Yiddish [macrolanguage] */
   {"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 */
-  {"zgh",      HB_TAG('Z','G','H',' ')},       /* Standard Morrocan Tamazigh */
   {"zne",      HB_TAG('Z','N','D',' ')},       /* Zande */
   {"zu",       HB_TAG('Z','U','L',' ')},       /* Zulu */
-  {"zum",      HB_TAG('L','R','C',' ')},       /* Kumzari */
-  {"zza",      HB_TAG('Z','Z','A',' ')},       /* Zazaki */
+  {"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. */
 
-/*{"chp",      HB_TAG('S','A','Y',' ')},*/     /* Sayisi */
-/*{"cwd",      HB_TAG('T','C','R',' ')},*/     /* TH-Cree */
-/*{"emk",      HB_TAG('E','M','K',' ')},*/     /* Eastern Maninkakan */
+/*{"ahg/awn/xan?",     HB_TAG('A','G','W',' ')},*/     /* Agaw */
+/*{"gsw?/gsw-FR?",     HB_TAG('A','L','S',' ')},*/     /* Alsatian */
 /*{"krc",      HB_TAG('B','A','L',' ')},*/     /* Balkar */
 /*{"??",       HB_TAG('B','C','R',' ')},*/     /* Bible Cree */
 /*{"zh?",      HB_TAG('C','H','N',' ')},*/     /* Chinese (seen in Microsoft fonts) */
+/*{"acf/gcf?", HB_TAG('F','A','N',' ')},*/     /* French Antillean */
+/*{"enf?/yrk?",        HB_TAG('F','N','E',' ')},*/     /* Forest Nenets */
+/*{"fuf?",     HB_TAG('F','T','A',' ')},*/     /* Futa */
 /*{"ar-Syrc?", HB_TAG('G','A','R',' ')},*/     /* Garshuni */
-/*{"hy?",      HB_TAG('H','Y','E','0')},*/     /* Armenian East (ISO 639-3 hye according to Microsoft, but that’s equivalent to ISO 639-1 hy) */
-/*{"ga-Latg?/" HB_TAG('I','R','T',' ')},*/     /* Irish Traditional */
+/*{"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 */
-/*{"ka-Geok?", HB_TAG('K','G','E',' ')},*/     /* Khutsuri Georgian */
+/*{"alw?/ktb?",        HB_TAG('K','E','B',' ')},*/     /* Kebena */
+/*{"Geok",     HB_TAG('K','G','E',' ')},*/     /* Khutsuri Georgian */
 /*{"kca",      HB_TAG('K','H','K',' ')},*/     /* Khanty-Kazim */
 /*{"kca",      HB_TAG('K','H','S',' ')},*/     /* Khanty-Shurishkar */
 /*{"kca",      HB_TAG('K','H','V',' ')},*/     /* Khanty-Vakhi */
-/*{"kqs, kss", HB_TAG('K','I','S',' ')},*/     /* Kisii */
-/*{"lua",      HB_TAG('L','U','A',' ')},*/     /* Luba-Lulua */
-/*{"mlq",      HB_TAG('M','L','N',' ')},*/     /* Malinke */
-/*{"nso",      HB_TAG('N','S','O',' ')},*/     /* Sotho, Northern */
+/*{"guz?/kqs?/kss?",   HB_TAG('K','I','S',' ')},*/     /* Kisii */
+/*{"kfa/kfi?/kpb?/xua?/xuj?",  HB_TAG('K','O','D',' ')},*/     /* Kodagu */
+/*{"okm?/oko?",        HB_TAG('K','O','H',' ')},*/     /* Korean Old Hangul */
+/*{"kon?/ktu?/...",    HB_TAG('K','O','N',' ')},*/     /* Kikongo */
+/*{"kfx?",     HB_TAG('K','U','L',' ')},*/     /* Kulvi */
+/*{"??",       HB_TAG('L','A','H',' ')},*/     /* Lahuli */
+/*{"??",       HB_TAG('L','C','R',' ')},*/     /* L-Cree */
 /*{"??",       HB_TAG('M','A','L',' ')},*/     /* Malayalam Traditional */
-/*{"csw",      HB_TAG('N','C','R',' ')},*/     /* N-Cree */
-/*{"csw",      HB_TAG('N','H','C',' ')},*/     /* Norway House Cree */
-/*{"el-polyton",       HB_TAG('P','G','R',' ')},*/     /* Polytonic Greek */
-/*{"bgr, cnh, cnw, czt, sez, tcp, csy, ctd, flm, pck, tcz, zom, cmr, dao, hlt, cka, cnk, mrh, mwg, cbl, cnb, csh",     HB_TAG('Q','I','N',' ')},*/     /* Chin */
+/*{"mnk?/mlq?/...",    HB_TAG('M','L','N',' ')},*/     /* Malinke */
+/*{"??",       HB_TAG('N','C','R',' ')},*/     /* N-Cree */
+/*{"??",       HB_TAG('N','H','C',' ')},*/     /* Norway House Cree */
+/*{"jpa?/sam?",        HB_TAG('P','A','A',' ')},*/     /* Palestinian Aramaic */
+/*{"polyton",  HB_TAG('P','G','R',' ')},*/     /* Polytonic Greek */
+/*{"??",       HB_TAG('Q','I','N',' ')},*/     /* Asho Chin */
+/*{"??",       HB_TAG('R','C','R',' ')},*/     /* R-Cree */
+/*{"chp?",     HB_TAG('S','A','Y',' ')},*/     /* Sayisi */
+/*{"xan?",     HB_TAG('S','E','K',' ')},*/     /* Sekota */
+/*{"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('W','C','R',' ')},*/     /* West-Cree */
+/*{"cre?",     HB_TAG('Y','C','R',' ')},*/     /* Y-Cree */
 /*{"??",       HB_TAG('Y','I','C',' ')},*/     /* Yi Classic */
-/*{"zh-Latn-pinyin",   HB_TAG('Z','H','P',' ')},*/     /* Chinese Phonetic */
+/*{"ii?/Yiii?",        HB_TAG('Y','I','M',' ')},*/     /* Yi Modern */
+/*{"??",       HB_TAG('Z','H','P',' ')},*/     /* Chinese Phonetic */
 };
 
 typedef struct {
@@ -888,14 +826,6 @@ hb_ot_tag_from_language (hb_language_t language)
     }
   }
 
-  /*
-   * The International Phonetic Alphabet is a variant tag in BCP-47,
-   * which can be applied to any language.
-   */
-  if (strstr (lang_str, "-fonipa")) {
-    return HB_TAG('I','P','P','H');  /* Phonetic transcription—IPA conventions */
-  }
-
   /* Find a language matching in the first component */
   {
     const LangTag *lang_tag;
@@ -934,15 +864,6 @@ hb_ot_tag_from_language (hb_language_t language)
   return HB_OT_TAG_DEFAULT_LANGUAGE;
 }
 
-/**
- * hb_ot_tag_to_language:
- *
- * 
- *
- * Return value: (transfer none):
- *
- * Since: 0.9.2
- **/
 hb_language_t
 hb_ot_tag_to_language (hb_tag_t tag)
 {
@@ -965,12 +886,6 @@ hb_ot_tag_to_language (hb_tag_t tag)
     }
   }
 
-  /* struct LangTag has only room for 3-letter language tags. */
-  switch (tag) {
-  case HB_TAG('I','P','P','H'):  /* Phonetic transcription—IPA conventions */
-    return hb_language_from_string ("und-fonipa", -1);
-  }
-
   /* Else return a custom language in the form of "x-hbotABCD" */
   {
     unsigned char buf[11] = "x-hbot";
@@ -985,27 +900,4 @@ hb_ot_tag_to_language (hb_tag_t tag)
   }
 }
 
-#ifdef MAIN
-static inline void
-test_langs_sorted (void)
-{
-  for (unsigned int i = 1; i < ARRAY_LENGTH (ot_languages); i++)
-  {
-    int c = lang_compare_first_component (ot_languages[i-1].language, ot_languages[i].language);
-    if (c >= 0)
-    {
-      fprintf (stderr, "ot_languages not sorted at index %d: %s %d %s\n",
-              i, ot_languages[i-1].language, c, ot_languages[i].language);
-      abort();
-    }
-  }
-}
-
-int
-main (void)
-{
-  test_langs_sorted ();
-  return 0;
-}
 
-#endif
index 54fb747..1bf12ab 100644 (file)
@@ -39,18 +39,18 @@ HB_BEGIN_DECLS
 #define HB_OT_TAG_DEFAULT_SCRIPT       HB_TAG ('D', 'F', 'L', 'T')
 #define HB_OT_TAG_DEFAULT_LANGUAGE     HB_TAG ('d', 'f', 'l', 't')
 
-HB_EXTERN void
+void
 hb_ot_tags_from_script (hb_script_t  script,
                        hb_tag_t    *script_tag_1,
                        hb_tag_t    *script_tag_2);
 
-HB_EXTERN hb_script_t
+hb_script_t
 hb_ot_tag_to_script (hb_tag_t tag);
 
-HB_EXTERN hb_tag_t
+hb_tag_t
 hb_ot_tag_from_language (hb_language_t language);
 
-HB_EXTERN hb_language_t
+hb_language_t
 hb_ot_tag_to_language (hb_tag_t tag);
 
 
index d58a695..06b24a8 100644 (file)
 #include <stdarg.h>
 
 
-/* Compile-time custom allocator support. */
-
-#if defined(hb_malloc_impl) \
- && defined(hb_calloc_impl) \
- && defined(hb_realloc_impl) \
- && defined(hb_free_impl)
-extern "C" void* hb_malloc_impl(size_t size);
-extern "C" void* hb_calloc_impl(size_t nmemb, size_t size);
-extern "C" void* hb_realloc_impl(void *ptr, size_t size);
-extern "C" void  hb_free_impl(void *ptr);
-#define malloc hb_malloc_impl
-#define calloc hb_calloc_impl
-#define realloc hb_realloc_impl
-#define free hb_free_impl
-#endif
-
-
 /* Compiler attributes */
 
 
@@ -119,36 +102,6 @@ extern "C" void  hb_free_impl(void *ptr);
 #define HB_FUNC __func__
 #endif
 
-/*
- * Borrowed from https://bugzilla.mozilla.org/show_bug.cgi?id=1215411
- * HB_FALLTHROUGH is an annotation to suppress compiler warnings about switch
- * cases that fall through without a break or return statement. HB_FALLTHROUGH
- * is only needed on cases that have code:
- *
- * switch (foo) {
- *   case 1: // These cases have no code. No fallthrough annotations are needed.
- *   case 2:
- *   case 3:
- *     foo = 4; // This case has code, so a fallthrough annotation is needed:
- *     HB_FALLTHROUGH;
- *   default:
- *     return foo;
- * }
- */
-#if defined(__clang__) && __cplusplus >= 201103L
-   /* clang's fallthrough annotations are only available starting in C++11. */
-#  define HB_FALLTHROUGH [[clang::fallthrough]]
-#elif defined(_MSC_VER)
-   /*
-    * MSVC's __fallthrough annotations are checked by /analyze (Code Analysis):
-    * https://msdn.microsoft.com/en-us/library/ms235402%28VS.80%29.aspx
-    */
-#  include <sal.h>
-#  define HB_FALLTHROUGH __fallthrough
-#else
-#  define HB_FALLTHROUGH /* FALLTHROUGH */
-#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,
@@ -168,20 +121,15 @@ extern "C" void  hb_free_impl(void *ptr);
 
 #  if defined(_WIN32_WCE)
      /* Some things not defined on Windows CE. */
-#    define strdup _strdup
-#    define vsnprintf _vsnprintf
 #    define getenv(Name) NULL
-#    if _WIN32_WCE < 0x800
-#      define setlocale(Category, Locale) "C"
+#    define setlocale(Category, Locale) "C"
 static int errno = 0; /* Use something better? */
-#    endif
 #  elif defined(WINAPI_FAMILY) && (WINAPI_FAMILY==WINAPI_FAMILY_PC_APP || WINAPI_FAMILY==WINAPI_FAMILY_PHONE_APP)
 #    define getenv(Name) NULL
 #  endif
-#  if defined(_MSC_VER) && _MSC_VER < 1900
+#  if (defined(__WIN32__) && !defined(__WINE__)) || defined(_MSC_VER)
 #    define snprintf _snprintf
-#  elif defined(_MSC_VER) && _MSC_VER >= 1900
-#    /* Covers VC++ Error for strdup being a deprecated POSIX name and to instead use _strdup instead */
+     /* Windows CE only has _strdup, while rest of Windows has both. */
 #    define strdup _strdup
 #  endif
 #endif
@@ -244,9 +192,8 @@ static inline unsigned int ARRAY_LENGTH (const Type (&)[n]) { return n; }
 #define _ASSERT_STATIC0(_line, _cond)  _ASSERT_STATIC1 (_line, (_cond))
 #define ASSERT_STATIC(_cond)           _ASSERT_STATIC0 (__LINE__, (_cond))
 
-template <unsigned int cond> class hb_assert_constant_t {};
-
-#define ASSERT_STATIC_EXPR_ZERO(_cond) (0 * (unsigned int) sizeof (hb_assert_constant_t<_cond>))
+#define ASSERT_STATIC_EXPR(_cond)((void) sizeof (char[(_cond) ? 1 : -1]))
+#define ASSERT_STATIC_EXPR_ZERO(_cond) (0 * sizeof (char[(_cond) ? 1 : -1]))
 
 #define _PASTE1(a,b) a##b
 #define PASTE(a,b) _PASTE1(a,b)
@@ -299,8 +246,8 @@ ASSERT_STATIC (sizeof (hb_var_int_t) == 4);
 
 /* Void! */
 struct _hb_void_t {};
-typedef const _hb_void_t *hb_void_t;
-#define HB_VOID ((const _hb_void_t *) NULL)
+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
@@ -612,15 +559,6 @@ static inline unsigned char TOLOWER (unsigned char c)
 /* Debug */
 
 
-/* HB_NDEBUG disables some sanity checks that are very safe to disable and
- * should be disabled in production systems.  If NDEBUG is defined, enable
- * HB_NDEBUG; but if it's desirable that normal assert()s (which are very
- * light-weight) to be enabled, then HB_DEBUG can be defined to disable
- * the costlier checks. */
-#ifdef NDEBUG
-#define HB_NDEBUG
-#endif
-
 #ifndef HB_DEBUG
 #define HB_DEBUG 0
 #endif
@@ -800,7 +738,7 @@ template <typename T>
 static inline void _hb_warn_no_return (bool returned)
 {
   if (unlikely (!returned)) {
-    fprintf (stderr, "OUCH, returned with no call to return_trace().  This is a bug, please report.\n");
+    fprintf (stderr, "OUCH, returned with no call to TRACE_RETURN.  This is a bug, please report.\n");
   }
 }
 template <>
@@ -835,7 +773,7 @@ struct hb_auto_trace_t {
   inline ret_t ret (ret_t v, unsigned int line = 0)
   {
     if (unlikely (returned)) {
-      fprintf (stderr, "OUCH, double calls to return_trace().  This is a bug, please report.\n");
+      fprintf (stderr, "OUCH, double calls to TRACE_RETURN.  This is a bug, please report.\n");
       return v;
     }
 
@@ -866,7 +804,7 @@ struct hb_auto_trace_t<0, ret_t> {
   inline ret_t ret (ret_t v, unsigned int line HB_UNUSED = 0) { return v; }
 };
 
-#define return_trace(RET) return trace.ret (RET, __LINE__)
+#define TRACE_RETURN(RET) trace.ret (RET, __LINE__)
 
 /* Misc */
 
@@ -904,68 +842,51 @@ hb_in_ranges (T u, T lo1, T hi1, T lo2, T hi2, T lo3, T hi3)
 }
 
 
-/* Enable bitwise ops on enums marked as flags_t */
-/* To my surprise, looks like the function resolver is happy to silently cast
- * one enum to another...  So this doesn't provide the type-checking that I
- * originally had in mind... :(.
- *
- * For MSVC warnings, see: https://github.com/behdad/harfbuzz/pull/163
- */
-#ifdef _MSC_VER
-# pragma warning(disable:4200)
-# pragma warning(disable:4800)
-#endif
-#define HB_MARK_AS_FLAG_T(T) \
-       extern "C++" { \
-         static inline T operator | (T l, T r) { return T ((unsigned) l | (unsigned) r); } \
-         static inline T operator & (T l, T r) { return T ((unsigned) l & (unsigned) r); } \
-         static inline T operator ^ (T l, T r) { return T ((unsigned) l ^ (unsigned) r); } \
-         static inline T operator ~ (T r) { return T (~(unsigned int) r); } \
-         static inline T& operator |= (T &l, T r) { l = l | r; return l; } \
-         static inline T& operator &= (T& l, T r) { l = l & r; return l; } \
-         static inline T& operator ^= (T& l, T r) { l = l ^ r; return l; } \
-       }
-
-
 /* Useful for set-operations on small enums.
  * For example, for testing "x ∈ {x1, x2, x3}" use:
- * (FLAG_SAFE(x) & (FLAG(x1) | FLAG(x2) | FLAG(x3)))
+ * (FLAG(x) & (FLAG(x1) | FLAG(x2) | FLAG(x3)))
  */
-#define FLAG(x) (ASSERT_STATIC_EXPR_ZERO ((x) < 32) + (1U << (x)))
-#define FLAG_SAFE(x) (1U << (x))
-#define FLAG_UNSAFE(x) ((x) < 32 ? FLAG_SAFE(x) : 0)
+#define FLAG(x) (1<<(x))
 #define FLAG_RANGE(x,y) (ASSERT_STATIC_EXPR_ZERO ((x) < (y)) + FLAG(y+1) - FLAG(x))
 
 
 template <typename T, typename T2> static inline void
-hb_stable_sort (T *array, unsigned int len, int(*compar)(const T *, const T *), T2 *array2)
+hb_bubble_sort (T *array, unsigned int len, int(*compar)(const T *, const T *), T2 *array2)
 {
-  for (unsigned int i = 1; i < len; i++)
-  {
-    unsigned int j = i;
-    while (j && compar (&array[j - 1], &array[i]) > 0)
-      j--;
-    if (i == j)
-      continue;
-    /* Move item i to occupy place for item j, shift what's in between. */
-    {
-      T t = array[i];
-      memmove (&array[j + 1], &array[j], (i - j) * sizeof (T));
-      array[j] = t;
-    }
-    if (array2)
-    {
-      T2 t = array2[i];
-      memmove (&array2[j + 1], &array2[j], (i - j) * sizeof (T2));
-      array2[j] = t;
-    }
-  }
+  if (unlikely (!len))
+    return;
+
+  unsigned int k = len - 1;
+  do {
+    unsigned int new_k = 0;
+
+    for (unsigned int j = 0; j < k; j++)
+      if (compar (&array[j], &array[j+1]) > 0)
+      {
+        {
+         T t;
+         t = array[j];
+         array[j] = array[j + 1];
+         array[j + 1] = t;
+       }
+        if (array2)
+        {
+         T2 t;
+         t = array2[j];
+         array2[j] = array2[j + 1];
+         array2[j + 1] = t;
+       }
+
+       new_k = j;
+      }
+    k = new_k;
+  } while (k);
 }
 
 template <typename T> static inline void
-hb_stable_sort (T *array, unsigned int len, int(*compar)(const T *, const T *))
+hb_bubble_sort (T *array, unsigned int len, int(*compar)(const T *, const T *))
 {
-  hb_stable_sort (array, len, compar, (int *) NULL);
+  hb_bubble_sort (array, len, compar, (int *) NULL);
 }
 
 static inline hb_bool_t
@@ -1015,7 +936,5 @@ hb_options (void)
   return _hb_options.opts;
 }
 
-/* Size signifying variable-sized array */
-#define VAR 1
 
 #endif /* HB_PRIVATE_HH */
index 3c302b1..acba4e9 100644 (file)
  * "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.
- *
- * Our filters are highly accurate if the lookup covers fairly local
- * set of glyphs, but fully flooded and ineffective if coverage is
- * all over the place.
- *
- * The frozen-set can be used instead of a digest, to trade more
- * memory for 100% accuracy, but in practice, that doesn't look like
- * an attractive trade-off.
+ * queries.  As a result, our filters have much higher.
  */
 
 template <typename mask_t, unsigned int shift>
@@ -362,6 +354,7 @@ struct hb_frozen_set_t
       return;
     unsigned int min = set.get_min ();
     const elt_t &min_elt = set.elt (min);
+    const elt_t &max_elt = set.elt (max);
 
     start = min & ~MASK;
     count = max - start + 1;
index cb7fcdb..59a0af4 100644 (file)
@@ -35,7 +35,7 @@
  *
  * Return value: (transfer full):
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_set_t *
 hb_set_create (void)
@@ -55,7 +55,7 @@ hb_set_create (void)
  *
  * Return value: (transfer full):
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_set_t *
 hb_set_get_empty (void)
@@ -76,7 +76,7 @@ hb_set_get_empty (void)
  *
  * Return value: (transfer full):
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_set_t *
 hb_set_reference (hb_set_t *set)
@@ -88,7 +88,7 @@ hb_set_reference (hb_set_t *set)
  * hb_set_destroy: (skip)
  * @set: a set.
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 void
 hb_set_destroy (hb_set_t *set)
@@ -110,7 +110,7 @@ hb_set_destroy (hb_set_t *set)
  *
  * Return value:
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_bool_t
 hb_set_set_user_data (hb_set_t           *set,
@@ -129,7 +129,7 @@ hb_set_set_user_data (hb_set_t           *set,
  *
  * Return value: (transfer none):
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 void *
 hb_set_get_user_data (hb_set_t           *set,
@@ -147,7 +147,7 @@ hb_set_get_user_data (hb_set_t           *set,
  *
  * Return value: 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_bool_t
 hb_set_allocation_successful (const hb_set_t  *set HB_UNUSED)
@@ -161,7 +161,7 @@ hb_set_allocation_successful (const hb_set_t  *set HB_UNUSED)
  *
  * 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 void
 hb_set_clear (hb_set_t *set)
@@ -177,7 +177,7 @@ hb_set_clear (hb_set_t *set)
  *
  * Return value: 
  *
- * Since: 0.9.7
+ * Since: 1.0
  **/
 hb_bool_t
 hb_set_is_empty (const hb_set_t *set)
@@ -194,7 +194,7 @@ hb_set_is_empty (const hb_set_t *set)
  *
  * Return value: 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_bool_t
 hb_set_has (const hb_set_t *set,
@@ -210,7 +210,7 @@ hb_set_has (const hb_set_t *set,
  *
  * 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 void
 hb_set_add (hb_set_t       *set,
@@ -227,7 +227,7 @@ hb_set_add (hb_set_t       *set,
  *
  * 
  *
- * Since: 0.9.7
+ * Since: 1.0
  **/
 void
 hb_set_add_range (hb_set_t       *set,
@@ -244,7 +244,7 @@ hb_set_add_range (hb_set_t       *set,
  *
  * 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 void
 hb_set_del (hb_set_t       *set,
@@ -261,7 +261,7 @@ hb_set_del (hb_set_t       *set,
  *
  * 
  *
- * Since: 0.9.7
+ * Since: 1.0
  **/
 void
 hb_set_del_range (hb_set_t       *set,
@@ -280,7 +280,7 @@ hb_set_del_range (hb_set_t       *set,
  *
  * Return value: 
  *
- * Since: 0.9.7
+ * Since: 1.0
  **/
 hb_bool_t
 hb_set_is_equal (const hb_set_t *set,
@@ -296,7 +296,7 @@ hb_set_is_equal (const hb_set_t *set,
  *
  * 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 void
 hb_set_set (hb_set_t       *set,
@@ -312,7 +312,7 @@ hb_set_set (hb_set_t       *set,
  *
  * 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 void
 hb_set_union (hb_set_t       *set,
@@ -328,7 +328,7 @@ hb_set_union (hb_set_t       *set,
  *
  * 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 void
 hb_set_intersect (hb_set_t       *set,
@@ -344,7 +344,7 @@ hb_set_intersect (hb_set_t       *set,
  *
  * 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 void
 hb_set_subtract (hb_set_t       *set,
@@ -360,7 +360,7 @@ hb_set_subtract (hb_set_t       *set,
  *
  * 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 void
 hb_set_symmetric_difference (hb_set_t       *set,
@@ -375,7 +375,7 @@ hb_set_symmetric_difference (hb_set_t       *set,
  *
  * 
  *
- * Since: 0.9.10
+ * Since: 1.0
  **/
 void
 hb_set_invert (hb_set_t *set)
@@ -391,7 +391,7 @@ hb_set_invert (hb_set_t *set)
  *
  * Return value: set population.
  *
- * Since: 0.9.7
+ * Since: 1.0
  **/
 unsigned int
 hb_set_get_population (const hb_set_t *set)
@@ -407,7 +407,7 @@ hb_set_get_population (const hb_set_t *set)
  *
  * Return value: minimum of the set, or %HB_SET_VALUE_INVALID if set is empty.
  *
- * Since: 0.9.7
+ * Since: 1.0
  **/
 hb_codepoint_t
 hb_set_get_min (const hb_set_t *set)
@@ -423,7 +423,7 @@ hb_set_get_min (const hb_set_t *set)
  *
  * Return value: minimum of the set, or %HB_SET_VALUE_INVALID if set is empty.
  *
- * Since: 0.9.7
+ * Since: 1.0
  **/
 hb_codepoint_t
 hb_set_get_max (const hb_set_t *set)
@@ -440,7 +440,7 @@ hb_set_get_max (const hb_set_t *set)
  *
  * Return value: whether there was a next value.
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_bool_t
 hb_set_next (const hb_set_t *set,
@@ -460,7 +460,7 @@ hb_set_next (const hb_set_t *set,
  *
  * Return value: whether there was a next range.
  *
- * Since: 0.9.7
+ * Since: 1.0
  **/
 hb_bool_t
 hb_set_next_range (const hb_set_t *set,
index 2164c1a..bafdae9 100644 (file)
 HB_BEGIN_DECLS
 
 
-/*
- * Since: 0.9.21
- */
 #define HB_SET_VALUE_INVALID ((hb_codepoint_t) -1)
 
 typedef struct hb_set_t hb_set_t;
 
 
-HB_EXTERN hb_set_t *
+hb_set_t *
 hb_set_create (void);
 
-HB_EXTERN hb_set_t *
+hb_set_t *
 hb_set_get_empty (void);
 
-HB_EXTERN hb_set_t *
+hb_set_t *
 hb_set_reference (hb_set_t *set);
 
-HB_EXTERN void
+void
 hb_set_destroy (hb_set_t *set);
 
-HB_EXTERN hb_bool_t
+hb_bool_t
 hb_set_set_user_data (hb_set_t           *set,
                      hb_user_data_key_t *key,
                      void *              data,
                      hb_destroy_func_t   destroy,
                      hb_bool_t           replace);
 
-HB_EXTERN void *
+void *
 hb_set_get_user_data (hb_set_t           *set,
                      hb_user_data_key_t *key);
 
 
 /* Returns false if allocation has failed before */
-HB_EXTERN hb_bool_t
+hb_bool_t
 hb_set_allocation_successful (const hb_set_t *set);
 
-HB_EXTERN void
+void
 hb_set_clear (hb_set_t *set);
 
-HB_EXTERN hb_bool_t
+hb_bool_t
 hb_set_is_empty (const hb_set_t *set);
 
-HB_EXTERN hb_bool_t
+hb_bool_t
 hb_set_has (const hb_set_t *set,
            hb_codepoint_t  codepoint);
 
 /* Right now limited to 16-bit integers.  Eventually will do full codepoint range, sans -1
  * which we will use as a sentinel. */
-HB_EXTERN void
+void
 hb_set_add (hb_set_t       *set,
            hb_codepoint_t  codepoint);
 
-HB_EXTERN void
+void
 hb_set_add_range (hb_set_t       *set,
                  hb_codepoint_t  first,
                  hb_codepoint_t  last);
 
-HB_EXTERN void
+void
 hb_set_del (hb_set_t       *set,
            hb_codepoint_t  codepoint);
 
-HB_EXTERN void
+void
 hb_set_del_range (hb_set_t       *set,
                  hb_codepoint_t  first,
                  hb_codepoint_t  last);
 
-HB_EXTERN hb_bool_t
+hb_bool_t
 hb_set_is_equal (const hb_set_t *set,
                 const hb_set_t *other);
 
-HB_EXTERN void
+void
 hb_set_set (hb_set_t       *set,
            const hb_set_t *other);
 
-HB_EXTERN void
+void
 hb_set_union (hb_set_t       *set,
              const hb_set_t *other);
 
-HB_EXTERN void
+void
 hb_set_intersect (hb_set_t       *set,
                  const hb_set_t *other);
 
-HB_EXTERN void
+void
 hb_set_subtract (hb_set_t       *set,
                 const hb_set_t *other);
 
-HB_EXTERN void
+void
 hb_set_symmetric_difference (hb_set_t       *set,
                             const hb_set_t *other);
 
-HB_EXTERN void
+void
 hb_set_invert (hb_set_t *set);
 
-HB_EXTERN unsigned int
+unsigned int
 hb_set_get_population (const hb_set_t *set);
 
 /* Returns -1 if set empty. */
-HB_EXTERN hb_codepoint_t
+hb_codepoint_t
 hb_set_get_min (const hb_set_t *set);
 
 /* Returns -1 if set empty. */
-HB_EXTERN hb_codepoint_t
+hb_codepoint_t
 hb_set_get_max (const hb_set_t *set);
 
 /* Pass -1 in to get started. */
-HB_EXTERN hb_bool_t
+hb_bool_t
 hb_set_next (const hb_set_t *set,
             hb_codepoint_t *codepoint);
 
 /* Pass -1 for first and last to get started. */
-HB_EXTERN hb_bool_t
+hb_bool_t
 hb_set_next_range (const hb_set_t *set,
                   hb_codepoint_t *first,
                   hb_codepoint_t *last);
index 56e2ea5..2166173 100644 (file)
@@ -106,7 +106,7 @@ hb_shape_plan_plan (hb_shape_plan_t    *shape_plan,
  *
  * Return value: (transfer full):
  *
- * Since: 0.9.7
+ * Since: 1.0
  **/
 hb_shape_plan_t *
 hb_shape_plan_create (hb_face_t                     *face,
@@ -126,9 +126,9 @@ hb_shape_plan_create (hb_face_t                     *face,
 
   if (unlikely (!face))
     face = hb_face_get_empty ();
-  if (unlikely (!props))
+  if (unlikely (!props || hb_object_is_inert (face)))
     return hb_shape_plan_get_empty ();
-  if (num_user_features && !(features = (hb_feature_t *) calloc (num_user_features, sizeof (hb_feature_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);
@@ -158,7 +158,7 @@ hb_shape_plan_create (hb_face_t                     *face,
  *
  * Return value: (transfer full):
  *
- * Since: 0.9.7
+ * Since: 1.0
  **/
 hb_shape_plan_t *
 hb_shape_plan_get_empty (void)
@@ -194,7 +194,7 @@ hb_shape_plan_get_empty (void)
  *
  * Return value: (transfer full):
  *
- * Since: 0.9.7
+ * Since: 1.0
  **/
 hb_shape_plan_t *
 hb_shape_plan_reference (hb_shape_plan_t *shape_plan)
@@ -208,7 +208,7 @@ hb_shape_plan_reference (hb_shape_plan_t *shape_plan)
  *
  * 
  *
- * Since: 0.9.7
+ * Since: 1.0
  **/
 void
 hb_shape_plan_destroy (hb_shape_plan_t *shape_plan)
@@ -236,7 +236,7 @@ hb_shape_plan_destroy (hb_shape_plan_t *shape_plan)
  *
  * Return value: 
  *
- * Since: 0.9.7
+ * Since: 1.0
  **/
 hb_bool_t
 hb_shape_plan_set_user_data (hb_shape_plan_t    *shape_plan,
@@ -257,7 +257,7 @@ hb_shape_plan_set_user_data (hb_shape_plan_t    *shape_plan,
  *
  * Return value: (transfer none):
  *
- * Since: 0.9.7
+ * Since: 1.0
  **/
 void *
 hb_shape_plan_get_user_data (hb_shape_plan_t    *shape_plan,
@@ -279,7 +279,7 @@ hb_shape_plan_get_user_data (hb_shape_plan_t    *shape_plan,
  *
  * Return value: 
  *
- * Since: 0.9.7
+ * Since: 1.0
  **/
 hb_bool_t
 hb_shape_plan_execute (hb_shape_plan_t    *shape_plan,
@@ -293,13 +293,9 @@ hb_shape_plan_execute (hb_shape_plan_t    *shape_plan,
                  num_features,
                  shape_plan->shaper_func);
 
-  if (unlikely (!buffer->len))
-    return true;
-
-  assert (!hb_object_is_inert (buffer));
-  assert (buffer->content_type == HB_BUFFER_CONTENT_TYPE_UNICODE);
-
-  if (unlikely (hb_object_is_inert (shape_plan)))
+  if (unlikely (hb_object_is_inert (shape_plan) ||
+               hb_object_is_inert (font) ||
+               hb_object_is_inert (buffer)))
     return false;
 
   assert (shape_plan->face_unsafe == font->face);
@@ -400,7 +396,7 @@ hb_non_global_user_features_present (const hb_feature_t *user_features,
  *
  * Return value: (transfer full):
  *
- * Since: 0.9.7
+ * Since: 1.0
  **/
 hb_shape_plan_t *
 hb_shape_plan_create_cached (hb_face_t                     *face,
@@ -457,10 +453,6 @@ retry:
 
   hb_shape_plan_t *shape_plan = hb_shape_plan_create (face, props, user_features, num_user_features, shaper_list);
 
-  /* Don't add to the cache if face is inert. */
-  if (unlikely (hb_object_is_inert (face)))
-    return shape_plan;
-
   /* 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))
@@ -491,7 +483,7 @@ retry:
  *
  * Return value: (transfer none):
  *
- * Since: 0.9.7
+ * Since: 1.0
  **/
 const char *
 hb_shape_plan_get_shaper (hb_shape_plan_t *shape_plan)
index aa5e0c7..8f54552 100644 (file)
@@ -38,49 +38,49 @@ HB_BEGIN_DECLS
 
 typedef struct hb_shape_plan_t hb_shape_plan_t;
 
-HB_EXTERN hb_shape_plan_t *
+hb_shape_plan_t *
 hb_shape_plan_create (hb_face_t                     *face,
                      const hb_segment_properties_t *props,
                      const hb_feature_t            *user_features,
                      unsigned int                   num_user_features,
                      const char * const            *shaper_list);
 
-HB_EXTERN hb_shape_plan_t *
+hb_shape_plan_t *
 hb_shape_plan_create_cached (hb_face_t                     *face,
                             const hb_segment_properties_t *props,
                             const hb_feature_t            *user_features,
                             unsigned int                   num_user_features,
                             const char * const            *shaper_list);
 
-HB_EXTERN hb_shape_plan_t *
+hb_shape_plan_t *
 hb_shape_plan_get_empty (void);
 
-HB_EXTERN hb_shape_plan_t *
+hb_shape_plan_t *
 hb_shape_plan_reference (hb_shape_plan_t *shape_plan);
 
-HB_EXTERN void
+void
 hb_shape_plan_destroy (hb_shape_plan_t *shape_plan);
 
-HB_EXTERN hb_bool_t
+hb_bool_t
 hb_shape_plan_set_user_data (hb_shape_plan_t    *shape_plan,
                             hb_user_data_key_t *key,
                             void *              data,
                             hb_destroy_func_t   destroy,
                             hb_bool_t           replace);
 
-HB_EXTERN void *
+void *
 hb_shape_plan_get_user_data (hb_shape_plan_t    *shape_plan,
                             hb_user_data_key_t *key);
 
 
-HB_EXTERN hb_bool_t
+hb_bool_t
 hb_shape_plan_execute (hb_shape_plan_t    *shape_plan,
                       hb_font_t          *font,
                       hb_buffer_t        *buffer,
                       const hb_feature_t *features,
                       unsigned int        num_features);
 
-HB_EXTERN const char *
+const char *
 hb_shape_plan_get_shaper (hb_shape_plan_t *shape_plan);
 
 
index 352d42c..9a59c08 100644 (file)
 #include "hb-buffer-private.hh"
 #include "hb-font-private.hh"
 
-/**
- * SECTION:hb-shape
- * @title: Shaping
- * @short_description: Conversion of text strings into positioned glyphs
- * @include: hb.h
- *
- * Shaping is the central operation of HarfBuzz. Shaping operates on buffers,
- * which are sequences of Unicode characters that use the same font and have
- * the same text direction, script and language. After shaping the buffer
- * contains the output glyphs and their positions.
- **/
 
 static bool
 parse_space (const char **pp, const char *end)
@@ -209,18 +198,15 @@ parse_one_feature (const char **pp, const char *end, hb_feature_t *feature)
 
 /**
  * hb_feature_from_string:
- * @str: (array length=len) (element-type uint8_t): a string to parse
- * @len: length of @str, or -1 if string is %NULL terminated
- * @feature: (out): the #hb_feature_t to initialize with the parsed values
- *
- * Parses a string into a #hb_feature_t.
+ * @str: (array length=len):
+ * @len: 
+ * @feature: (out) (optional):
  *
- * TODO: document the syntax here.
+ * 
  *
- * Return value:
- * %true if @str is successfully parsed, %false otherwise.
+ * Return value: 
  *
- * Since: 0.9.5
+ * Since: 1.0
  **/
 hb_bool_t
 hb_feature_from_string (const char *str, int len,
@@ -245,15 +231,13 @@ hb_feature_from_string (const char *str, int len,
 
 /**
  * hb_feature_to_string:
- * @feature: an #hb_feature_t to convert
- * @buf: (array length=size) (out): output string
- * @size: the allocated size of @buf
+ * @feature: 
+ * @buf: (array length=size):
+ * @size: 
  *
- * Converts a #hb_feature_t into a %NULL-terminated string in the format
- * understood by hb_feature_from_string(). The client in responsible for
- * allocating big enough size for @buf, 128 bytes is more than enough.
+ * 
  *
- * Since: 0.9.5
+ * Since: 1.0
  **/
 void
 hb_feature_to_string (hb_feature_t *feature,
@@ -306,12 +290,11 @@ void free_static_shaper_list (void)
 /**
  * hb_shape_list_shapers:
  *
- * Retrieves the list of shapers supported by HarfBuzz.
+ * 
  *
- * Return value: (transfer none) (array zero-terminated=1): an array of
- *    constant strings
+ * Return value: (transfer none):
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 const char **
 hb_shape_list_shapers (void)
@@ -350,21 +333,17 @@ retry:
 
 /**
  * hb_shape_full:
- * @font: an #hb_font_t to use for shaping
- * @buffer: an #hb_buffer_t to shape
- * @features: (array length=num_features) (allow-none): an array of user
- *    specified #hb_feature_t or %NULL
- * @num_features: the length of @features array
- * @shaper_list: (array zero-terminated=1) (allow-none): a %NULL-terminated
- *    array of shapers to use or %NULL
+ * @font: a font.
+ * @buffer: a buffer.
+ * @features: (array length=num_features):
+ * @num_features: 
+ * @shaper_list: (array zero-terminated=1):
  *
- * See hb_shape() for details. If @shaper_list is not %NULL, the specified
- * shapers will be used in the given order, otherwise the default shapers list
- * will be used.
+ * 
  *
- * Return value: %FALSE if all shapers failed, %TRUE otherwise
+ * Return value: 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_bool_t
 hb_shape_full (hb_font_t          *font,
@@ -373,6 +352,11 @@ hb_shape_full (hb_font_t          *font,
               unsigned int        num_features,
               const char * const *shaper_list)
 {
+  if (unlikely (!buffer->len))
+    return true;
+
+  assert (buffer->content_type == HB_BUFFER_CONTENT_TYPE_UNICODE);
+
   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);
@@ -384,19 +368,14 @@ hb_shape_full (hb_font_t          *font,
 
 /**
  * hb_shape:
- * @font: an #hb_font_t to use for shaping
- * @buffer: an #hb_buffer_t to shape
- * @features: (array length=num_features) (allow-none): an array of user
- *    specified #hb_feature_t or %NULL
- * @num_features: the length of @features array
- *
- * Shapes @buffer using @font turning its Unicode characters content to
- * positioned glyphs. If @features is not %NULL, it will be used to control the
- * features applied during shaping.
+ * @font: a font.
+ * @buffer: a buffer.
+ * @features: (array length=num_features):
+ * @num_features: 
  *
- * Return value: %FALSE if all shapers failed, %TRUE otherwise
+ * 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 void
 hb_shape (hb_font_t           *font,
index 53bb845..10a35cb 100644 (file)
@@ -47,29 +47,32 @@ typedef struct hb_feature_t {
   unsigned int  end;
 } hb_feature_t;
 
-HB_EXTERN hb_bool_t
+/* len=-1 means str is NUL-terminated */
+hb_bool_t
 hb_feature_from_string (const char *str, int len,
                        hb_feature_t *feature);
 
-HB_EXTERN void
+/* Something like 128 bytes is more than enough.
+ * nul-terminates. */
+void
 hb_feature_to_string (hb_feature_t *feature,
                      char *buf, unsigned int size);
 
 
-HB_EXTERN void
+void
 hb_shape (hb_font_t           *font,
          hb_buffer_t         *buffer,
          const hb_feature_t  *features,
          unsigned int         num_features);
 
-HB_EXTERN hb_bool_t
+hb_bool_t
 hb_shape_full (hb_font_t          *font,
               hb_buffer_t        *buffer,
               const hb_feature_t *features,
               unsigned int        num_features,
               const char * const *shaper_list);
 
-HB_EXTERN const char **
+const char **
 hb_shape_list_shapers (void);
 
 
index b0835d3..6c537d4 100644 (file)
@@ -46,9 +46,6 @@ HB_SHAPER_IMPLEMENT (ot) /* <--- This is our main OpenType shaper. */
 #ifdef HAVE_UNISCRIBE
 HB_SHAPER_IMPLEMENT (uniscribe)
 #endif
-#ifdef HAVE_DIRECTWRITE
-HB_SHAPER_IMPLEMENT (directwrite)
-#endif
 #ifdef HAVE_CORETEXT
 HB_SHAPER_IMPLEMENT (coretext)
 #endif
index b25566d..580b95c 100644 (file)
@@ -64,7 +64,7 @@ retry:
     }
 
     /* Not found; allocate one. */
-    shapers = (hb_shaper_pair_t *) calloc (1, sizeof (all_shapers));
+    shapers = (hb_shaper_pair_t *) malloc (sizeof (all_shapers));
     if (unlikely (!shapers)) {
       (void) hb_atomic_ptr_cmpexch (&static_shapers, NULL, &all_shapers[0]);
       return (const hb_shaper_pair_t *) all_shapers;
index b4a5833..5b53821 100644 (file)
@@ -148,12 +148,6 @@ static const hb_script_t ucdn_script_translate[] =
     HB_SCRIPT_SIDDHAM,
     HB_SCRIPT_TIRHUTA,
     HB_SCRIPT_WARANG_CITI,
-    HB_SCRIPT_AHOM,
-    HB_SCRIPT_ANATOLIAN_HIEROGLYPHS,
-    HB_SCRIPT_HATRAN,
-    HB_SCRIPT_MULTANI,
-    HB_SCRIPT_OLD_HUNGARIAN,
-    HB_SCRIPT_SIGNWRITING,
 };
 
 static hb_unicode_combining_class_t
index 73b5502..0670b5c 100644 (file)
@@ -2,9 +2,11 @@
 
 noinst_LTLIBRARIES = libhb-ucdn.la
 
-include Makefile.sources
 
-libhb_ucdn_la_SOURCES = $(LIBHB_UCDN_sources)
+libhb_ucdn_la_SOURCES = \
+       ucdn.h \
+       ucdn.c \
+       unicodedata_db.h
 libhb_ucdn_la_CPPFLAGS = \
        -I$(top_srcdir) \
        -I$(top_srcdir)/src \
index 0177460..95f8ac6 100644 (file)
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.14 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994-2013 Free Software Foundation, Inc.
@@ -78,9 +78,9 @@ PRE_UNINSTALL = :
 POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
-DIST_COMMON = $(srcdir)/Makefile.sources $(srcdir)/Makefile.in \
-       $(srcdir)/Makefile.am $(top_srcdir)/depcomp COPYING README
 subdir = src/hb-ucdn
+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 \
        $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/libtool.m4 \
@@ -95,8 +95,7 @@ CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
 LTLIBRARIES = $(noinst_LTLIBRARIES)
 libhb_ucdn_la_DEPENDENCIES =
-am__objects_1 = libhb_ucdn_la-ucdn.lo
-am_libhb_ucdn_la_OBJECTS = $(am__objects_1)
+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@)
@@ -189,8 +188,6 @@ CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
-DIRECTWRITE_CXXFLAGS = @DIRECTWRITE_CXXFLAGS@
-DIRECTWRITE_LIBS = @DIRECTWRITE_LIBS@
 DLLTOOL = @DLLTOOL@
 DSYMUTIL = @DSYMUTIL@
 DUMPBIN = @DUMPBIN@
@@ -200,20 +197,15 @@ ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
 FGREP = @FGREP@
-FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@
-FONTCONFIG_LIBS = @FONTCONFIG_LIBS@
 FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
-FREETYPE_DEPS = @FREETYPE_DEPS@
 FREETYPE_LIBS = @FREETYPE_LIBS@
 GIT = @GIT@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_DEPS = @GLIB_DEPS@
 GLIB_LIBS = @GLIB_LIBS@
 GLIB_MKENUMS = @GLIB_MKENUMS@
 GOBJECT_CFLAGS = @GOBJECT_CFLAGS@
 GOBJECT_LIBS = @GOBJECT_LIBS@
 GRAPHITE2_CFLAGS = @GRAPHITE2_CFLAGS@
-GRAPHITE2_DEPS = @GRAPHITE2_DEPS@
 GRAPHITE2_LIBS = @GRAPHITE2_LIBS@
 GREP = @GREP@
 GTKDOC_CHECK = @GTKDOC_CHECK@
@@ -337,12 +329,11 @@ top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 noinst_LTLIBRARIES = libhb-ucdn.la
-LIBHB_UCDN_sources = \
+libhb_ucdn_la_SOURCES = \
        ucdn.h \
        ucdn.c \
        unicodedata_db.h
 
-libhb_ucdn_la_SOURCES = $(LIBHB_UCDN_sources)
 libhb_ucdn_la_CPPFLAGS = \
        -I$(top_srcdir) \
        -I$(top_srcdir)/src \
@@ -354,7 +345,7 @@ all: all-am
 
 .SUFFIXES:
 .SUFFIXES: .c .lo .o .obj
-$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am $(srcdir)/Makefile.sources $(am__configure_deps)
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
        @for dep in $?; do \
          case '$(am__configure_deps)' in \
            *$$dep*) \
@@ -375,7 +366,6 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
            echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
            cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
        esac;
-$(srcdir)/Makefile.sources:
 
 $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
        cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
diff --git a/src/hb-ucdn/Makefile.sources b/src/hb-ucdn/Makefile.sources
deleted file mode 100644 (file)
index d5f87b2..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-LIBHB_UCDN_sources = \
-       ucdn.h \
-       ucdn.c \
-       unicodedata_db.h
index 8354ae5..ec8085b 100644 (file)
@@ -191,12 +191,6 @@ typedef unsigned __int64 uint64_t;
 #define UCDN_SCRIPT_SIDDHAM 123
 #define UCDN_SCRIPT_TIRHUTA 124
 #define UCDN_SCRIPT_WARANG_CITI 125
-#define UCDN_SCRIPT_AHOM 126
-#define UCDN_SCRIPT_ANATOLIAN_HIEROGLYPHS 127
-#define UCDN_SCRIPT_HATRAN 128
-#define UCDN_SCRIPT_MULTANI 129
-#define UCDN_SCRIPT_OLD_HUNGARIAN 130
-#define UCDN_SCRIPT_SIGNWRITING 131
 
 #define UCDN_GENERAL_CATEGORY_CC 0
 #define UCDN_GENERAL_CATEGORY_CF 1
index f458be1..a78d2e6 100644 (file)
@@ -1,6 +1,6 @@
 /* this file was generated by makeunicodedata.py 3.2 */
 
-#define UNIDATA_VERSION "8.0.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},
@@ -141,7 +141,7 @@ static const UCDRecord ucd_records[] = {
     {12, 34, 13, 0, 5, 0, 40},
     {12, 220, 13, 0, 5, 0, 40},
     {12, 220, 13, 0, 5, 0, 6},
-    {13, 0, 11, 0, 5, 0, 6},
+    {13, 0, 11, 0, 5, 0, 0},
     {21, 0, 11, 0, 5, 0, 6},
     {12, 35, 13, 0, 5, 0, 40},
     {6, 0, 4, 0, 5, 0, 6},
@@ -300,8 +300,7 @@ static const UCDRecord ucd_records[] = {
     {21, 0, 0, 0, 5, 0, 25},
     {15, 0, 0, 0, 5, 0, 25},
     {26, 0, 18, 0, 5, 0, 25},
-    {9, 0, 0, 0, 5, 0, 26},
-    {5, 0, 0, 0, 5, 0, 26},
+    {7, 0, 0, 0, 5, 0, 26},
     {17, 0, 18, 0, 5, 0, 27},
     {7, 0, 0, 0, 5, 0, 27},
     {21, 0, 0, 0, 5, 0, 27},
@@ -350,6 +349,7 @@ static const UCDRecord ucd_records[] = {
     {13, 0, 0, 0, 5, 0, 45},
     {7, 0, 0, 0, 5, 0, 46},
     {7, 0, 0, 0, 5, 0, 55},
+    {10, 0, 0, 0, 5, 0, 55},
     {13, 0, 0, 0, 5, 0, 55},
     {15, 0, 0, 0, 5, 0, 55},
     {26, 0, 18, 0, 5, 0, 55},
@@ -500,6 +500,7 @@ static const UCDRecord ucd_records[] = {
     {15, 0, 18, 0, 2, 0, 0},
     {26, 0, 0, 0, 2, 0, 33},
     {7, 0, 0, 0, 2, 0, 35},
+    {2, 0, 18, 0, 2, 0, 35},
     {2, 0, 18, 0, 2, 0, 102},
     {7, 0, 0, 0, 2, 0, 36},
     {6, 0, 0, 0, 2, 0, 36},
@@ -567,8 +568,10 @@ static const UCDRecord ucd_records[] = {
     {6, 0, 0, 0, 5, 0, 85},
     {12, 9, 13, 0, 5, 0, 85},
     {13, 0, 0, 0, 5, 0, 85},
+    {2, 0, 18, 0, 2, 0, 24},
     {4, 0, 0, 0, 5, 0, 102},
     {3, 0, 0, 0, 4, 0, 102},
+    {2, 0, 18, 0, 4, 0, 102},
     {12, 26, 13, 0, 5, 0, 5},
     {25, 0, 9, 0, 5, 0, 5},
     {24, 0, 4, 0, 5, 0, 6},
@@ -641,8 +644,6 @@ static const UCDRecord ucd_records[] = {
     {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, 128},
-    {15, 0, 3, 0, 5, 0, 128},
     {7, 0, 3, 0, 5, 0, 63},
     {15, 0, 3, 0, 5, 0, 63},
     {21, 0, 18, 0, 5, 0, 63},
@@ -650,7 +651,6 @@ static const UCDRecord ucd_records[] = {
     {21, 0, 3, 0, 5, 0, 75},
     {7, 0, 3, 0, 5, 0, 97},
     {7, 0, 3, 0, 5, 0, 96},
-    {15, 0, 3, 0, 5, 0, 96},
     {7, 0, 3, 0, 5, 0, 60},
     {12, 0, 13, 0, 5, 0, 60},
     {12, 220, 13, 0, 5, 0, 60},
@@ -680,9 +680,6 @@ static const UCDRecord ucd_records[] = {
     {21, 0, 3, 0, 5, 0, 122},
     {15, 0, 3, 0, 5, 0, 122},
     {7, 0, 3, 0, 5, 0, 90},
-    {9, 0, 3, 0, 5, 0, 130},
-    {5, 0, 3, 0, 5, 0, 130},
-    {15, 0, 3, 0, 5, 0, 130},
     {15, 0, 11, 0, 5, 0, 6},
     {10, 0, 0, 0, 5, 0, 93},
     {12, 0, 13, 0, 5, 0, 93},
@@ -715,7 +712,6 @@ static const UCDRecord ucd_records[] = {
     {7, 0, 0, 0, 5, 0, 99},
     {10, 9, 0, 0, 5, 0, 99},
     {21, 0, 0, 0, 5, 0, 99},
-    {12, 7, 13, 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},
@@ -724,8 +720,6 @@ static const UCDRecord ucd_records[] = {
     {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, 129},
-    {21, 0, 0, 0, 5, 0, 129},
     {7, 0, 0, 0, 5, 0, 109},
     {12, 0, 13, 0, 5, 0, 109},
     {10, 0, 0, 0, 5, 0, 109},
@@ -763,14 +757,6 @@ static const UCDRecord ucd_records[] = {
     {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, 126},
-    {12, 0, 13, 0, 5, 0, 126},
-    {10, 0, 0, 0, 5, 0, 126},
-    {12, 9, 13, 0, 5, 0, 126},
-    {13, 0, 0, 0, 5, 0, 126},
-    {15, 0, 0, 0, 5, 0, 126},
-    {21, 0, 0, 0, 5, 0, 126},
-    {26, 0, 0, 0, 5, 0, 126},
     {9, 0, 0, 0, 5, 0, 125},
     {5, 0, 0, 0, 5, 0, 125},
     {13, 0, 0, 0, 5, 0, 125},
@@ -781,7 +767,6 @@ static const UCDRecord ucd_records[] = {
     {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, 127},
     {7, 0, 0, 0, 5, 0, 115},
     {13, 0, 0, 0, 5, 0, 115},
     {21, 0, 0, 0, 5, 0, 115},
@@ -809,9 +794,6 @@ static const UCDRecord ucd_records[] = {
     {12, 230, 13, 0, 5, 0, 2},
     {25, 0, 0, 0, 5, 0, 0},
     {13, 0, 8, 0, 5, 0, 0},
-    {26, 0, 0, 0, 5, 0, 131},
-    {12, 0, 13, 0, 5, 0, 131},
-    {21, 0, 0, 0, 5, 0, 131},
     {7, 0, 3, 0, 5, 0, 113},
     {15, 0, 3, 0, 5, 0, 113},
     {12, 220, 13, 0, 5, 0, 113},
@@ -1579,12 +1561,6 @@ static const Reindex nfc_last[] = {
 #define UCDN_SCRIPT_SIDDHAM 123
 #define UCDN_SCRIPT_TIRHUTA 124
 #define UCDN_SCRIPT_WARANG_CITI 125
-#define UCDN_SCRIPT_AHOM 126
-#define UCDN_SCRIPT_ANATOLIAN_HIEROGLYPHS 127
-#define UCDN_SCRIPT_HATRAN 128
-#define UCDN_SCRIPT_MULTANI 129
-#define UCDN_SCRIPT_OLD_HUNGARIAN 130
-#define UCDN_SCRIPT_SIGNWRITING 131
 
 #define UCDN_GENERAL_CATEGORY_CC 0
 #define UCDN_GENERAL_CATEGORY_CF 1
@@ -1647,251 +1623,252 @@ static const Reindex nfc_last[] = {
 static const unsigned char index0[] = {
     0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 
     21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 
-    39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 52, 52, 52, 52, 
-    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 
-    52, 52, 53, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 
-    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 
-    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 
-    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 
-    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 54, 55, 56, 56, 56, 57, 
-    58, 59, 60, 61, 62, 63, 64, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 
-    65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 
-    65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 66, 67, 67, 67, 
-    67, 67, 67, 67, 67, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 
-    68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 52, 69, 70, 71, 72, 73, 
-    74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 88, 90, 
-    91, 92, 93, 94, 95, 96, 97, 98, 88, 99, 88, 88, 88, 88, 88, 100, 100, 
-    100, 101, 102, 103, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 104, 104, 
-    104, 104, 105, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 106, 106, 107, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 108, 108, 109, 110, 88, 88, 88, 111, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 112, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 113, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 114, 
-    115, 116, 117, 118, 119, 120, 121, 122, 122, 123, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 124, 88, 88, 88, 88, 88, 125, 88, 126, 127, 
-    128, 129, 130, 131, 132, 133, 134, 135, 88, 88, 88, 88, 88, 88, 52, 52, 
-    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 
-    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 
-    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 
-    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 
-    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 
-    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 
-    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 
-    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 
-    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 
-    52, 52, 136, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 
-    52, 137, 138, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 
-    52, 52, 52, 52, 52, 52, 139, 140, 140, 140, 140, 140, 140, 140, 140, 140, 
-    140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 
-    140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 
-    140, 140, 140, 140, 52, 52, 141, 140, 140, 140, 140, 142, 140, 140, 140, 
-    140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 
-    140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 
-    140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 
-    140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 
-    140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 
-    140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 
-    140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 
-    140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 
-    140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 
-    140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 
-    140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 
-    140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 
-    140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 
-    140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 
-    140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 
-    140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 
-    140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 
-    140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 
-    142, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 143, 144, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 
-    88, 88, 88, 88, 88, 88, 88, 88, 88, 68, 68, 68, 68, 68, 68, 68, 68, 68, 
-    68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 
-    68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 
-    68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 
-    68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 
-    68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 
-    68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 
-    68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 
-    68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 
-    68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 
-    68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 
-    68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 
-    68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 
-    68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 
-    68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 145, 68, 68, 68, 68, 68, 
-    68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 
-    68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 
-    68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 
-    68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 
-    68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 
-    68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 
-    68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 
-    68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 
-    68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 
-    68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 
-    68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 
-    68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 
-    68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 
-    68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 145, 
+    39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 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, 54, 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, 55, 56, 57, 57, 57, 58, 
+    59, 60, 61, 62, 63, 64, 65, 66, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 
+    67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 
+    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, 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, 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, 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, 
+    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, 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, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 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, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 
+    70, 70, 70, 70, 70, 70, 70, 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, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
+    74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
+    74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
+    74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
+    74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
+    74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
+    74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
+    74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
+    74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
+    74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
+    74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
+    74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
+    74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 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, 74, 74, 74, 74, 74, 
+    74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
+    74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
+    74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
+    74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
+    74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
+    74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
+    74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
+    74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
+    74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 
+    74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 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, 
 };
 
 static const unsigned short index1[] = {
@@ -1917,323 +1894,319 @@ static const unsigned short index1[] = {
     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, 225, 226, 227, 228, 229, 
-    229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 120, 240, 241, 
-    242, 243, 244, 241, 245, 246, 247, 248, 249, 120, 250, 251, 252, 253, 
-    254, 255, 256, 257, 257, 256, 257, 258, 259, 260, 261, 262, 263, 264, 
-    120, 265, 266, 267, 268, 269, 269, 268, 270, 271, 272, 273, 274, 275, 
-    276, 277, 278, 120, 279, 280, 281, 282, 282, 282, 282, 283, 284, 285, 
-    286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 293, 293, 296, 297, 
-    294, 298, 299, 300, 301, 302, 303, 120, 304, 305, 305, 305, 305, 305, 
-    306, 307, 308, 309, 310, 311, 120, 120, 120, 120, 312, 313, 314, 315, 
-    316, 317, 318, 319, 320, 321, 322, 323, 120, 120, 120, 120, 324, 325, 
-    326, 327, 328, 329, 330, 331, 332, 333, 332, 332, 332, 334, 335, 336, 
-    337, 338, 339, 340, 339, 339, 339, 341, 342, 343, 344, 345, 120, 120, 
-    120, 120, 346, 346, 346, 346, 346, 347, 348, 349, 350, 351, 352, 353, 
-    354, 355, 356, 346, 357, 358, 350, 359, 360, 360, 360, 360, 361, 362, 
-    363, 363, 363, 363, 363, 364, 365, 365, 365, 365, 365, 365, 365, 365, 
-    365, 365, 365, 365, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 
-    366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 367, 367, 367, 367, 
-    367, 367, 367, 367, 367, 368, 369, 368, 367, 367, 367, 367, 367, 368, 
-    367, 367, 367, 367, 368, 369, 368, 367, 369, 367, 367, 367, 367, 367, 
-    367, 367, 368, 367, 367, 367, 367, 367, 367, 367, 367, 370, 371, 372, 
-    373, 374, 367, 367, 375, 376, 377, 377, 377, 377, 377, 377, 377, 377, 
-    377, 377, 378, 379, 380, 381, 381, 381, 381, 381, 381, 381, 381, 381, 
-    381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 
-    381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 
-    381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 
-    381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 
-    381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 382, 381, 381, 
-    383, 384, 384, 385, 386, 386, 386, 386, 386, 386, 386, 386, 386, 387, 
-    388, 389, 390, 391, 392, 120, 393, 393, 394, 120, 395, 395, 396, 120, 
-    397, 398, 399, 120, 400, 400, 400, 400, 400, 400, 401, 402, 403, 404, 
-    405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 415, 415, 415, 
-    416, 415, 415, 415, 415, 415, 415, 120, 415, 415, 415, 415, 415, 417, 
-    381, 381, 381, 381, 381, 381, 381, 381, 418, 120, 419, 419, 419, 420, 
-    421, 422, 423, 424, 425, 426, 427, 427, 427, 428, 429, 120, 430, 430, 
-    430, 430, 430, 431, 430, 430, 430, 432, 433, 434, 435, 435, 435, 435, 
-    436, 436, 437, 438, 439, 439, 439, 439, 439, 439, 440, 441, 442, 443, 
-    444, 445, 446, 447, 446, 447, 448, 449, 450, 451, 120, 120, 120, 120, 
-    120, 120, 120, 120, 452, 453, 453, 453, 453, 453, 454, 455, 456, 457, 
-    458, 459, 460, 461, 462, 463, 464, 465, 465, 465, 466, 467, 468, 469, 
-    470, 470, 470, 470, 471, 472, 473, 474, 475, 475, 475, 475, 476, 477, 
-    478, 479, 480, 481, 482, 483, 484, 484, 484, 485, 120, 120, 120, 120, 
-    120, 120, 120, 120, 486, 120, 487, 488, 489, 490, 491, 492, 54, 54, 54, 
-    54, 493, 494, 56, 56, 56, 56, 56, 495, 496, 497, 54, 498, 54, 54, 54, 
-    499, 56, 56, 56, 500, 501, 502, 503, 504, 504, 504, 505, 506, 27, 27, 27, 
-    27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 507, 508, 27, 
-    27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 509, 510, 511, 512, 509, 510, 
-    509, 510, 511, 512, 509, 513, 509, 510, 509, 511, 509, 514, 509, 514, 
-    509, 514, 515, 516, 517, 518, 519, 520, 509, 521, 522, 523, 524, 525, 
-    526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 
-    540, 541, 56, 542, 543, 544, 543, 545, 120, 120, 546, 547, 548, 549, 550, 
-    120, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 
-    564, 563, 565, 566, 567, 568, 569, 570, 571, 572, 573, 572, 574, 575, 
-    572, 576, 572, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 
-    588, 589, 590, 591, 592, 587, 587, 593, 594, 595, 596, 597, 587, 587, 
-    598, 578, 599, 600, 587, 587, 601, 587, 587, 572, 602, 603, 572, 604, 
-    605, 606, 607, 607, 607, 607, 607, 607, 607, 607, 608, 572, 572, 609, 
-    610, 578, 578, 611, 572, 572, 572, 572, 577, 612, 572, 572, 613, 572, 
-    572, 572, 572, 614, 120, 120, 120, 572, 613, 120, 120, 615, 615, 615, 
-    615, 615, 616, 616, 617, 618, 618, 618, 618, 618, 618, 618, 618, 618, 
-    619, 615, 615, 620, 620, 620, 620, 620, 620, 620, 620, 620, 621, 620, 
-    620, 620, 620, 621, 572, 620, 620, 622, 572, 623, 573, 624, 625, 626, 
-    627, 573, 572, 622, 576, 572, 578, 628, 629, 625, 630, 572, 572, 572, 
-    572, 631, 572, 572, 572, 632, 633, 572, 572, 572, 572, 572, 634, 572, 
-    635, 572, 634, 636, 637, 620, 620, 638, 620, 620, 620, 572, 572, 572, 
-    572, 572, 572, 572, 639, 572, 572, 576, 572, 572, 640, 641, 615, 642, 
-    642, 643, 572, 572, 572, 572, 572, 644, 645, 646, 647, 648, 649, 578, 
-    578, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 
-    650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 
-    650, 650, 650, 650, 650, 578, 578, 578, 578, 578, 578, 578, 578, 578, 
-    578, 578, 578, 578, 578, 578, 578, 651, 652, 652, 653, 587, 587, 578, 
-    654, 601, 655, 656, 657, 658, 659, 660, 661, 578, 662, 587, 663, 664, 
-    665, 666, 647, 578, 578, 590, 654, 666, 667, 668, 669, 587, 587, 587, 
-    587, 670, 671, 587, 587, 587, 587, 672, 673, 674, 647, 675, 676, 572, 
-    572, 572, 572, 572, 572, 578, 578, 677, 678, 679, 573, 572, 572, 680, 
-    572, 572, 572, 681, 572, 572, 572, 572, 682, 572, 683, 684, 120, 120, 
-    685, 120, 120, 686, 686, 686, 686, 686, 687, 688, 688, 688, 688, 688, 
-    689, 690, 691, 692, 693, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 
-    694, 695, 696, 697, 698, 698, 698, 698, 699, 700, 701, 701, 701, 701, 
-    701, 701, 701, 702, 703, 704, 367, 367, 369, 120, 369, 369, 369, 369, 
-    369, 369, 369, 369, 705, 705, 705, 705, 706, 707, 708, 709, 710, 711, 
-    533, 712, 713, 120, 120, 120, 120, 120, 120, 120, 714, 714, 714, 715, 
-    714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 716, 120, 714, 714, 
-    714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 
-    714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 717, 120, 120, 120, 
-    718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 729, 729, 
-    729, 729, 729, 729, 729, 729, 730, 731, 732, 733, 733, 733, 733, 733, 
-    733, 733, 733, 733, 733, 734, 735, 736, 736, 736, 736, 737, 738, 365, 
-    365, 365, 365, 365, 365, 365, 365, 365, 365, 739, 740, 741, 736, 736, 
-    736, 742, 718, 718, 718, 718, 719, 120, 733, 733, 743, 743, 743, 744, 
-    745, 746, 741, 741, 741, 747, 748, 749, 743, 743, 743, 750, 745, 746, 
-    741, 741, 741, 741, 751, 749, 741, 752, 753, 753, 753, 753, 753, 754, 
-    753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 741, 741, 741, 
-    755, 756, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 757, 
-    741, 741, 741, 755, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 
-    758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 
-    758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 
-    758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 
-    758, 758, 759, 760, 572, 572, 572, 572, 572, 572, 572, 572, 758, 758, 
-    758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 
-    758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 759, 760, 760, 760, 
-    760, 760, 761, 761, 762, 761, 761, 761, 761, 761, 761, 761, 761, 761, 
+    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, 
+    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, 
+    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, 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, 
+    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, 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, 365, 365, 365, 
-    822, 823, 824, 824, 824, 824, 824, 825, 826, 827, 828, 829, 830, 831, 
-    346, 350, 832, 833, 833, 833, 833, 833, 834, 835, 120, 836, 837, 838, 
-    839, 346, 346, 840, 841, 842, 842, 842, 842, 842, 842, 843, 844, 845, 
-    120, 120, 846, 847, 848, 849, 120, 850, 850, 850, 120, 369, 369, 54, 54, 
-    54, 54, 54, 851, 852, 120, 853, 853, 853, 853, 853, 853, 853, 853, 853, 
-    853, 847, 847, 847, 847, 854, 855, 856, 857, 365, 365, 365, 365, 365, 
-    365, 365, 365, 365, 365, 365, 365, 365, 365, 365, 365, 365, 365, 365, 
-    365, 365, 365, 365, 365, 365, 365, 365, 365, 365, 365, 365, 365, 365, 
-    365, 365, 365, 365, 365, 365, 365, 365, 365, 365, 365, 365, 365, 365, 
-    365, 365, 365, 365, 365, 858, 120, 366, 366, 859, 860, 366, 366, 366, 
-    366, 366, 861, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 
-    862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 
-    862, 862, 862, 862, 862, 862, 862, 863, 863, 863, 863, 863, 863, 863, 
-    863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 
-    863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 758, 758, 758, 
-    758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 759, 758, 758, 758, 
-    758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 864, 760, 760, 760, 
-    760, 865, 120, 866, 867, 121, 868, 869, 870, 871, 121, 128, 128, 128, 
-    128, 128, 128, 128, 128, 128, 128, 128, 128, 872, 873, 874, 120, 875, 
-    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, 876, 120, 120, 128, 128, 128, 128, 128, 128, 128, 128, 877, 
-    128, 128, 128, 128, 128, 128, 120, 120, 120, 120, 120, 128, 878, 879, 
-    879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 
-    128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 
-    128, 128, 893, 894, 895, 896, 897, 898, 899, 899, 900, 901, 902, 902, 
-    903, 904, 905, 906, 905, 905, 905, 905, 907, 908, 908, 908, 909, 910, 
-    910, 910, 911, 912, 913, 120, 914, 915, 916, 915, 915, 917, 915, 915, 
-    918, 915, 919, 915, 919, 120, 120, 120, 120, 915, 915, 915, 915, 915, 
-    915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 920, 921, 922, 922, 
-    922, 922, 922, 923, 607, 924, 924, 924, 924, 924, 924, 925, 926, 927, 
-    928, 572, 929, 930, 120, 120, 120, 120, 120, 607, 607, 607, 607, 607, 
-    931, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 
-    120, 120, 120, 932, 932, 932, 933, 934, 934, 934, 934, 934, 934, 935, 
-    120, 936, 937, 937, 938, 939, 939, 939, 939, 940, 120, 941, 941, 942, 
-    943, 944, 944, 944, 944, 945, 946, 947, 947, 947, 948, 949, 949, 949, 
-    949, 950, 949, 951, 120, 120, 120, 120, 120, 952, 952, 952, 952, 952, 
-    953, 953, 953, 953, 953, 954, 954, 954, 954, 954, 954, 955, 955, 955, 
-    956, 957, 958, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 959, 
-    959, 959, 959, 959, 120, 960, 960, 960, 960, 960, 960, 961, 962, 120, 
+    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, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 
-    963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 
-    963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 964, 
-    120, 963, 963, 965, 120, 963, 120, 120, 120, 120, 120, 120, 120, 120, 
-    120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 966, 967, 968, 
-    968, 968, 968, 969, 970, 971, 971, 972, 973, 974, 974, 975, 976, 977, 
-    977, 977, 978, 979, 980, 120, 120, 120, 120, 120, 120, 981, 981, 982, 
-    983, 984, 984, 985, 986, 987, 987, 987, 988, 120, 120, 120, 120, 120, 
-    120, 120, 120, 989, 989, 989, 989, 990, 990, 990, 991, 992, 992, 993, 
-    992, 992, 992, 992, 992, 994, 995, 996, 997, 998, 998, 999, 1000, 1001, 
-    120, 1002, 1003, 1004, 1004, 1004, 1005, 1006, 1006, 1006, 1007, 120, 
-    120, 120, 120, 1008, 1009, 1008, 1008, 1010, 1011, 1012, 120, 1013, 1013, 
-    1013, 1013, 1013, 1013, 1014, 1015, 1016, 1016, 1017, 1018, 1019, 1019, 
-    1020, 1021, 1022, 1022, 1023, 1024, 120, 1025, 120, 120, 120, 120, 120, 
-    120, 120, 120, 120, 120, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 
-    1026, 1027, 120, 120, 120, 120, 120, 120, 1028, 1028, 1028, 1028, 1028, 
-    1028, 1029, 120, 1030, 1030, 1030, 1030, 1030, 1030, 1031, 1032, 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, 1033, 1033, 1033, 1034, 120, 120, 120, 120, 120, 120, 120, 120, 120, 
-    120, 120, 120, 120, 120, 120, 120, 1035, 1036, 1036, 1036, 1036, 1036, 
-    1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 120, 1044, 1045, 1046, 
-    1046, 1046, 1046, 1046, 1047, 1048, 1049, 120, 1050, 1050, 1050, 1051, 
-    1052, 1053, 1054, 1055, 1055, 1055, 1056, 1057, 1058, 1059, 1060, 120, 
-    1061, 1061, 1061, 1061, 1062, 120, 1063, 1064, 1064, 1064, 1064, 1064, 
-    1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 120, 1074, 1074, 
-    1075, 1074, 1074, 1076, 1077, 1078, 120, 120, 120, 120, 120, 120, 120, 
-    120, 1079, 1080, 1081, 1082, 1081, 1083, 1084, 1084, 1084, 1084, 1084, 
-    1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1093, 1094, 1095, 
-    1096, 1097, 1098, 1099, 1100, 1101, 1102, 1102, 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, 
-    1103, 1103, 1103, 1103, 1103, 1103, 1104, 1105, 1106, 120, 1107, 1108, 
+    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, 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, 120, 120, 120, 120, 120, 1109, 1109, 1109, 1109, 1109, 1110, 1111, 
-    1112, 1113, 1114, 1114, 1115, 120, 120, 120, 120, 1116, 1116, 1116, 1116, 
-    1116, 1116, 1117, 1118, 1119, 120, 1120, 1121, 120, 120, 120, 120, 1122, 
-    1122, 1122, 1122, 1122, 1123, 1124, 120, 1125, 1126, 120, 120, 120, 120, 
-    120, 120, 1127, 1127, 1127, 1128, 1129, 1130, 1131, 1132, 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, 120, 120, 120, 120, 1133
-    1133, 1133, 1133, 1134, 1134, 1134, 1134, 1135, 1136, 1137, 1138, 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, 120, 120, 120, 120, 120, 120, 120, 120, 1139, 1139, 1139, 1139, 
-    1139, 1139, 1139, 1140, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 
-    1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 
-    1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 
-    1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 
-    1141, 1141, 1141, 1141, 1141, 1141, 1141, 1142, 120, 120, 120, 120, 120, 
-    120, 120, 120, 120, 120, 120, 120, 1143, 1143, 1143, 1143, 1143, 1143, 
-    1143, 1143, 1143, 1143, 1143, 1143, 1143, 1144, 1145, 120, 1141, 1141, 
-    1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 
-    1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1146, 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, 120, 120, 120, 120, 120, 1147, 1147, 1147, 1147, 1147, 
-    1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 
-    1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 
-    1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1148, 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, 120, 120, 120, 120, 120, 1149, 1149, 1149, 1149, 1149
-    1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149
-    1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149
-    1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1150, 
+    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, 120, 120, 120, 120, 120, 776, 776, 776, 776, 776, 
+    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, 776, 776, 776, 776, 776, 1151, 1152, 1152, 1152, 1153, 1154, 1155, 
-    120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 1156, 1156, 
-    1156, 1157, 1158, 120, 1159, 1159, 1159, 1159, 1159, 1159, 1160, 1161, 
-    1162, 120, 1163, 1164, 1165, 1159, 1159, 1166, 1159, 1159, 120, 120, 120, 
-    120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 1167, 1167, 1167, 
-    1167, 1167, 1167, 1167, 1167, 1168, 120, 1169, 1170, 1170, 1170, 1170, 
-    1171, 120, 1172, 1173, 1174, 120, 120, 120, 120, 120, 120, 120, 120, 120, 
-    120, 120, 120, 1175, 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, 1176, 1176, 1176, 1176, 1176, 1176, 
-    1176, 1176, 1176, 1176, 1176, 1176, 1176, 1177, 1176, 1178, 1176, 1179, 
-    1176, 1180, 1181, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 
-    607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 
-    607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 
-    607, 607, 1182, 120, 607, 607, 607, 607, 1183, 1184, 607, 607, 607, 607, 
-    607, 607, 1185, 1186, 1187, 1188, 1189, 1190, 607, 607, 607, 1191, 607, 
-    607, 607, 607, 607, 607, 607, 1192, 120, 120, 927, 927, 927, 927, 927, 
-    927, 927, 927, 1193, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 
-    120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 572, 
-    572, 572, 572, 572, 572, 572, 572, 572, 572, 614, 120, 922, 922, 1194, 
+    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, 1195, 1195, 1195, 1196, 1197, 1197, 1198, 1195, 1195, 
-    1199, 1200, 1197, 1197, 1195, 1195, 1195, 1196, 1197, 1197, 1201, 1202, 
-    1203, 1199, 1204, 1205, 1197, 1195, 1195, 1195, 1196, 1197, 1197, 1206, 
-    1207, 1208, 1209, 1197, 1197, 1197, 1210, 1211, 1212, 1213, 1197, 1197, 
-    1198, 1195, 1195, 1199, 1197, 1197, 1197, 1195, 1195, 1195, 1196, 1197, 
-    1197, 1198, 1195, 1195, 1199, 1197, 1197, 1197, 1195, 1195, 1195, 1196, 
-    1197, 1197, 1198, 1195, 1195, 1199, 1197, 1197, 1197, 1195, 1195, 1195, 
-    1196, 1197, 1197, 1214, 1195, 1195, 1195, 1215, 1197, 1197, 1216, 1217, 
-    1195, 1195, 1218, 1197, 1197, 1219, 1198, 1195, 1195, 1220, 1197, 1197, 
-    1221, 1222, 1195, 1195, 1223, 1197, 1197, 1197, 1224, 1195, 1195, 1195, 
-    1215, 1197, 1197, 1216, 1225, 1226, 1226, 1226, 1226, 1226, 1226, 1227, 
-    1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 
-    1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 
-    1227, 1227, 1227, 1227, 1227, 1227, 1227, 1228, 1228, 1228, 1228, 1228, 
-    1228, 1229, 1230, 1228, 1228, 1228, 1228, 1228, 1231, 1232, 1227, 1233, 
-    1234, 120, 1235, 1236, 1228, 120, 120, 120, 120, 120, 120, 120, 120, 120, 
-    120, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 
-    1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 
-    1237, 1238, 1239, 1240, 120, 120, 120, 120, 120, 1241, 128, 128, 128, 
-    1242, 1243, 1244, 1245, 1246, 1247, 1242, 1248, 1242, 1244, 1244, 1249, 
-    128, 1250, 128, 1251, 1252, 1250, 128, 1251, 120, 120, 120, 120, 120, 
-    120, 1253, 120, 572, 572, 572, 572, 572, 929, 572, 572, 572, 572, 572, 
-    572, 572, 572, 572, 572, 572, 572, 929, 120, 572, 614, 1254, 572, 1254, 
-    572, 1254, 572, 572, 572, 681, 120, 616, 1255, 618, 618, 618, 1256, 618, 
-    618, 618, 618, 618, 618, 618, 1257, 618, 618, 618, 618, 618, 1258, 120, 
-    120, 120, 120, 120, 120, 120, 120, 1259, 607, 607, 607, 1260, 120, 741, 
-    741, 741, 741, 741, 1261, 741, 1262, 1263, 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, 
-    120, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 
-    572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 
-    572, 572, 572, 572, 1264, 572, 572, 572, 572, 572, 572, 572, 572, 572, 
-    572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 
-    572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 
-    572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 1265, 572, 572, 572, 
-    572, 1266, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 
-    572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 
-    572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 1267, 120, 572, 
-    1268, 929, 120, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 
-    572, 572, 572, 929, 120, 572, 572, 572, 572, 572, 572, 572, 572, 572, 
-    572, 1268, 120, 120, 120, 120, 120, 572, 929, 572, 572, 572, 572, 572, 
-    572, 572, 120, 572, 684, 572, 572, 572, 572, 572, 120, 572, 572, 572, 
-    681, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 572, 
-    1267, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 1268, 
-    120, 120, 120, 120, 120, 120, 120, 1267, 120, 120, 120, 120, 120, 120, 
-    120, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 
-    758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 1269, 
-    760, 760, 760, 760, 760, 758, 758, 758, 758, 758, 758, 1270, 760, 758, 
-    758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 
-    758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 759, 758, 
-    758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 
-    758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 
-    758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 
-    758, 758, 758, 758, 758, 864, 760, 760, 760, 760, 760, 760, 760, 760, 
-    760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 
-    760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 
-    760, 760, 760, 760, 760, 760, 760, 758, 758, 758, 759, 760, 760, 760, 
-    760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 
-    760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 
-    760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 
-    760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 
-    1271, 1272, 120, 120, 120, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 
-    1273, 1273, 1273, 1273, 1273, 120, 120, 120, 120, 120, 120, 120, 120, 
-    120, 120, 120, 120, 120, 120, 120, 120, 879, 879, 879, 879, 879, 879, 
-    879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 
-    879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 120, 120, 863, 863, 
-    863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 
-    863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 
-    863, 1274, 
+    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[] = {
@@ -2316,110 +2289,109 @@ static const unsigned short index2[] = {
     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, 126, 126, 
-    64, 64, 64, 64, 64, 64, 137, 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, 195, 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, 219, 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, 64, 64, 64, 64, 64, 64, 64, 235, 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, 
+    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, 
-    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, 
+    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, 
@@ -2427,166 +2399,166 @@ static const unsigned short index2[] = {
     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, 297, 64, 64, 
-    298, 298, 298, 298, 298, 298, 64, 64, 299, 300, 300, 300, 300, 300, 300, 
-    300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 
-    301, 301, 300, 302, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 
-    303, 303, 303, 303, 303, 303, 303, 303, 304, 305, 64, 64, 64, 306, 306, 
-    306, 306, 306, 306, 306, 306, 306, 306, 306, 84, 84, 84, 307, 307, 307, 
-    306, 306, 306, 306, 306, 306, 306, 306, 64, 64, 64, 64, 64, 64, 64, 308, 
-    308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 64, 308, 308, 
-    308, 308, 309, 309, 310, 64, 64, 64, 311, 311, 311, 311, 311, 311, 311, 
-    311, 311, 311, 312, 312, 313, 84, 84, 64, 314, 314, 314, 314, 314, 314, 
-    314, 314, 314, 314, 315, 315, 64, 64, 64, 64, 316, 316, 316, 316, 316, 
-    316, 316, 316, 316, 316, 316, 316, 316, 64, 316, 316, 316, 64, 317, 317, 
-    64, 64, 64, 64, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 
-    318, 319, 319, 320, 319, 319, 319, 319, 319, 319, 319, 320, 320, 320, 
-    320, 320, 320, 320, 320, 319, 320, 320, 319, 319, 319, 319, 319, 319, 
-    319, 319, 319, 321, 319, 322, 322, 322, 323, 322, 322, 322, 324, 318, 
-    325, 64, 64, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 64, 64, 
-    64, 64, 64, 64, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 64, 64, 
-    64, 64, 64, 64, 328, 328, 66, 66, 328, 66, 329, 328, 328, 328, 328, 330, 
-    330, 330, 331, 64, 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 64, 
-    64, 64, 64, 64, 64, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 
-    333, 334, 333, 333, 333, 333, 333, 335, 333, 64, 64, 64, 64, 64, 300, 
-    300, 300, 300, 300, 300, 64, 64, 336, 336, 336, 336, 336, 336, 336, 336, 
-    336, 336, 336, 336, 336, 336, 336, 64, 337, 337, 337, 338, 338, 338, 338, 
-    337, 337, 338, 338, 338, 64, 64, 64, 64, 338, 338, 337, 338, 338, 338, 
-    338, 338, 338, 339, 340, 341, 64, 64, 64, 64, 342, 64, 64, 64, 343, 343, 
-    344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 345, 345, 345, 345, 
-    345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 64, 64, 345, 345, 345, 
-    345, 345, 64, 64, 64, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 
-    346, 346, 64, 64, 64, 64, 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, 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, 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, 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, 250, 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, 26, 26, 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, 
+    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, 
+    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, 
+    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, 
+    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, 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, 64, 64, 64, 64, 26, 
-    26, 26, 26, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 
+    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, 
@@ -2624,280 +2596,263 @@ static const unsigned short index2[] = {
     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, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 
-    496, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 498, 498, 498, 
-    498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 499, 498, 498, 498, 
-    498, 498, 498, 498, 64, 64, 64, 500, 500, 500, 500, 500, 500, 500, 500, 
-    500, 500, 500, 500, 500, 500, 500, 64, 501, 501, 501, 501, 501, 501, 501, 
-    501, 502, 502, 502, 502, 502, 502, 503, 503, 504, 504, 504, 504, 504, 
-    504, 504, 504, 504, 504, 504, 504, 505, 506, 506, 506, 507, 507, 507, 
-    507, 507, 507, 507, 507, 507, 507, 504, 504, 64, 64, 64, 64, 72, 75, 72, 
-    75, 72, 75, 508, 77, 79, 79, 79, 509, 77, 77, 77, 77, 77, 77, 77, 77, 77, 
-    77, 509, 510, 72, 75, 72, 75, 403, 403, 77, 77, 511, 511, 511, 511, 511, 
-    511, 511, 511, 511, 511, 511, 511, 511, 511, 512, 512, 512, 512, 512, 
-    512, 512, 512, 512, 512, 513, 513, 514, 514, 514, 514, 514, 514, 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, 515, 515, 37, 41, 37, 41, 42, 
-    37, 41, 37, 41, 41, 41, 37, 41, 37, 41, 37, 37, 37, 37, 64, 64, 37, 37, 
-    37, 37, 37, 41, 37, 41, 64, 64, 64, 64, 64, 64, 64, 42, 44, 44, 41, 42, 
-    42, 42, 42, 42, 516, 516, 517, 516, 516, 516, 518, 516, 516, 516, 516, 
-    517, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 
-    516, 516, 519, 519, 517, 517, 519, 520, 520, 520, 520, 64, 64, 64, 64, 
-    521, 521, 521, 521, 521, 521, 277, 277, 250, 444, 64, 64, 64, 64, 64, 64, 
-    522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 523, 523, 
-    523, 523, 524, 524, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 
-    525, 525, 525, 525, 525, 525, 525, 525, 524, 524, 524, 524, 524, 524, 
-    524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 526, 64, 64, 64, 64, 
-    64, 64, 64, 64, 64, 527, 527, 528, 528, 528, 528, 528, 528, 528, 528, 
-    528, 528, 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, 176, 171, 64, 
-    64, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 530, 530, 530, 530, 
-    530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 
-    530, 530, 531, 531, 531, 531, 531, 532, 532, 532, 84, 533, 534, 534, 534, 
-    534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 535, 535, 
-    535, 535, 535, 535, 535, 535, 535, 535, 535, 536, 537, 64, 64, 64, 64, 
-    64, 64, 64, 64, 64, 64, 64, 538, 290, 290, 290, 290, 290, 64, 64, 64, 
-    539, 539, 539, 540, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 
-    541, 541, 541, 541, 541, 542, 540, 540, 539, 539, 539, 539, 540, 540, 
-    539, 540, 540, 540, 543, 544, 544, 544, 544, 544, 544, 544, 544, 544, 
-    544, 544, 544, 544, 64, 46, 545, 545, 545, 545, 545, 545, 545, 545, 545, 
-    545, 64, 64, 64, 64, 544, 544, 278, 278, 278, 278, 278, 280, 546, 278, 
-    283, 283, 278, 278, 278, 278, 278, 64, 547, 547, 547, 547, 547, 547, 547, 
-    547, 547, 548, 548, 548, 548, 548, 548, 549, 549, 548, 548, 549, 549, 
-    548, 548, 64, 547, 547, 547, 548, 547, 547, 547, 547, 547, 547, 547, 547, 
-    548, 549, 64, 64, 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, 64, 
-    64, 551, 551, 551, 551, 546, 278, 278, 278, 278, 278, 278, 286, 286, 286, 
-    278, 279, 280, 279, 278, 278, 552, 552, 552, 552, 552, 552, 552, 552, 
-    553, 552, 553, 553, 554, 552, 552, 553, 553, 552, 552, 552, 552, 552, 
-    553, 553, 552, 553, 552, 64, 64, 64, 64, 64, 64, 64, 64, 552, 552, 555, 
-    556, 556, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 558, 
-    559, 559, 558, 558, 560, 560, 557, 561, 561, 558, 562, 64, 64, 292, 292, 
-    292, 292, 292, 292, 64, 41, 41, 41, 515, 44, 44, 44, 44, 41, 41, 41, 41, 
-    41, 62, 64, 64, 298, 298, 298, 298, 298, 298, 298, 298, 557, 557, 557, 
-    558, 558, 559, 558, 558, 559, 558, 558, 560, 558, 562, 64, 64, 563, 563, 
-    563, 563, 563, 563, 563, 563, 563, 563, 64, 64, 64, 64, 64, 64, 290, 290, 
-    290, 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, 564, 
-    564, 564, 564, 564, 564, 564, 564, 565, 565, 565, 565, 565, 565, 565, 
-    565, 496, 496, 497, 497, 497, 497, 497, 497, 41, 41, 41, 41, 41, 41, 41, 
-    64, 64, 64, 64, 83, 83, 83, 83, 83, 64, 64, 64, 64, 64, 110, 566, 110, 
-    110, 567, 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, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 
-    568, 568, 568, 568, 568, 568, 64, 64, 64, 64, 64, 64, 64, 64, 64, 126, 
-    126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 569, 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, 77, 77, 469, 473, 473, 570, 570, 474, 475, 474, 475, 474, 
-    475, 474, 475, 474, 475, 474, 475, 474, 475, 474, 475, 469, 469, 474, 
-    475, 469, 469, 469, 469, 570, 570, 570, 571, 469, 571, 64, 469, 571, 469, 
-    469, 473, 451, 452, 451, 452, 451, 452, 572, 469, 469, 573, 574, 575, 
-    575, 576, 64, 469, 577, 572, 469, 64, 64, 64, 64, 126, 126, 126, 126, 
-    126, 64, 126, 126, 126, 126, 126, 126, 126, 64, 64, 410, 64, 578, 578, 
-    579, 580, 579, 578, 578, 581, 582, 578, 583, 584, 585, 584, 584, 586, 
-    586, 586, 586, 586, 586, 586, 586, 586, 586, 584, 578, 587, 588, 587, 
-    578, 578, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 
-    589, 589, 589, 589, 589, 589, 581, 578, 582, 590, 591, 590, 592, 592, 
-    592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 
-    592, 592, 581, 588, 582, 588, 581, 582, 593, 594, 595, 593, 593, 596, 
-    596, 596, 596, 596, 596, 596, 596, 596, 596, 597, 596, 596, 596, 596, 
-    596, 596, 596, 596, 596, 596, 596, 596, 596, 597, 597, 598, 598, 598, 
-    598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 64, 64, 64, 
-    598, 598, 598, 598, 598, 598, 64, 64, 598, 598, 598, 64, 64, 64, 580, 
-    580, 588, 590, 599, 580, 580, 64, 600, 601, 601, 601, 601, 600, 600, 64, 
-    64, 602, 602, 602, 26, 30, 64, 64, 603, 603, 603, 603, 603, 603, 603, 
-    603, 603, 603, 603, 603, 64, 603, 603, 603, 603, 603, 603, 603, 603, 603, 
-    603, 64, 603, 603, 603, 64, 603, 603, 64, 603, 603, 603, 603, 603, 603, 
-    603, 64, 64, 603, 603, 603, 64, 64, 64, 64, 64, 84, 66, 84, 64, 64, 64, 
-    64, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 64, 
-    64, 64, 277, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 
-    604, 605, 605, 605, 605, 606, 606, 606, 606, 606, 606, 606, 606, 606, 
-    606, 606, 606, 606, 606, 606, 606, 606, 605, 605, 606, 64, 64, 64, 26, 
-    26, 26, 26, 64, 64, 64, 64, 606, 64, 64, 64, 64, 64, 64, 64, 277, 277, 
-    277, 277, 277, 136, 64, 64, 607, 607, 607, 607, 607, 607, 607, 607, 607, 
-    607, 607, 607, 607, 64, 64, 64, 608, 608, 608, 608, 608, 608, 608, 608, 
-    608, 64, 64, 64, 64, 64, 64, 64, 136, 438, 438, 438, 438, 438, 438, 438, 
+    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, 609, 609, 609, 609, 609, 609, 609, 609, 610, 610, 610, 610, 64, 64, 
-    64, 64, 611, 611, 611, 611, 611, 611, 611, 611, 611, 612, 611, 611, 611, 
-    611, 611, 611, 611, 611, 612, 64, 64, 64, 64, 64, 613, 613, 613, 613, 
-    613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 614, 614, 614, 614, 
-    614, 64, 64, 64, 64, 64, 615, 615, 615, 615, 615, 615, 615, 615, 615, 
-    615, 615, 615, 615, 615, 64, 616, 617, 617, 617, 617, 617, 617, 617, 617, 
-    617, 617, 617, 617, 64, 64, 64, 64, 618, 619, 619, 619, 619, 619, 64, 64, 
-    620, 620, 620, 620, 620, 620, 620, 620, 621, 621, 621, 621, 621, 621, 
-    621, 621, 622, 622, 622, 622, 622, 622, 622, 622, 623, 623, 623, 623, 
-    623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 64, 64, 624, 624, 624, 
-    624, 624, 624, 624, 624, 624, 624, 64, 64, 64, 64, 64, 64, 625, 625, 625, 
-    625, 625, 625, 625, 625, 626, 626, 626, 626, 626, 626, 626, 626, 626, 
-    626, 626, 626, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 627, 628, 628, 
-    628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 64, 628, 
-    628, 628, 628, 628, 628, 64, 64, 629, 629, 629, 629, 629, 629, 64, 64, 
-    629, 64, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 
-    629, 629, 629, 629, 629, 629, 629, 64, 629, 629, 64, 64, 64, 629, 64, 64, 
-    629, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 
-    630, 64, 631, 632, 632, 632, 632, 632, 632, 632, 632, 633, 633, 633, 633, 
-    633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 634, 634, 635, 
-    635, 635, 635, 635, 635, 635, 636, 636, 636, 636, 636, 636, 636, 636, 
-    636, 636, 636, 636, 636, 636, 636, 64, 64, 64, 64, 64, 64, 64, 64, 637, 
-    637, 637, 637, 637, 637, 637, 637, 637, 638, 638, 638, 638, 638, 638, 
-    638, 638, 638, 638, 638, 64, 638, 638, 64, 64, 64, 64, 64, 639, 639, 639, 
-    639, 639, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 
-    640, 640, 641, 641, 641, 641, 641, 641, 64, 64, 64, 642, 643, 643, 643, 
-    643, 643, 643, 643, 643, 643, 643, 64, 64, 64, 64, 64, 644, 645, 645, 
-    645, 645, 645, 645, 645, 645, 646, 646, 646, 646, 646, 646, 646, 646, 64, 
-    64, 64, 64, 647, 647, 646, 646, 647, 647, 647, 647, 647, 647, 647, 647, 
-    64, 64, 647, 647, 647, 647, 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, 64, 64, 64, 64, 64, 678, 678, 678, 678, 
-    678, 678, 678, 678, 678, 678, 678, 64, 64, 64, 64, 64, 64, 64, 679, 679, 
-    679, 679, 679, 679, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 
-    680, 680, 680, 680, 680, 64, 681, 682, 681, 683, 683, 683, 683, 683, 683, 
-    683, 683, 683, 683, 683, 683, 683, 682, 682, 682, 682, 682, 682, 682, 
-    682, 682, 682, 682, 682, 682, 682, 684, 685, 685, 685, 685, 685, 685, 
-    685, 64, 64, 64, 64, 686, 686, 686, 686, 686, 686, 686, 686, 686, 686, 
-    686, 686, 686, 686, 686, 686, 686, 686, 686, 686, 687, 687, 687, 687, 
-    687, 687, 687, 687, 687, 687, 64, 64, 64, 64, 64, 64, 64, 684, 688, 688, 
-    689, 690, 690, 690, 690, 690, 690, 690, 690, 690, 690, 690, 690, 690, 
-    689, 689, 689, 688, 688, 688, 688, 689, 689, 691, 692, 693, 693, 694, 
-    693, 693, 693, 693, 64, 64, 64, 64, 64, 64, 695, 695, 695, 695, 695, 695, 
-    695, 695, 695, 64, 64, 64, 64, 64, 64, 64, 696, 696, 696, 696, 696, 696, 
-    696, 696, 696, 696, 64, 64, 64, 64, 64, 64, 697, 697, 697, 698, 698, 698, 
-    698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 
-    698, 698, 698, 699, 699, 699, 699, 699, 700, 699, 699, 699, 699, 699, 
-    699, 701, 701, 64, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 703, 
-    703, 703, 703, 64, 64, 64, 64, 704, 704, 704, 704, 704, 704, 704, 704, 
-    704, 704, 704, 705, 706, 706, 704, 64, 707, 707, 708, 709, 709, 709, 709, 
-    709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 708, 708, 
-    708, 707, 707, 707, 707, 707, 707, 707, 707, 707, 708, 710, 709, 709, 
-    709, 709, 711, 711, 711, 711, 711, 712, 707, 707, 711, 64, 64, 713, 713, 
-    713, 713, 713, 713, 713, 713, 713, 713, 709, 711, 709, 711, 711, 711, 64, 
-    714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 
-    714, 714, 714, 714, 714, 714, 64, 64, 64, 715, 715, 715, 715, 715, 715, 
-    715, 715, 715, 715, 64, 715, 715, 715, 715, 715, 715, 715, 715, 715, 716, 
-    716, 716, 717, 717, 717, 716, 716, 717, 718, 719, 717, 720, 720, 720, 
-    720, 720, 720, 64, 64, 721, 721, 721, 721, 721, 721, 721, 64, 721, 64, 
-    721, 721, 721, 721, 64, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 
-    721, 721, 721, 721, 721, 64, 721, 721, 722, 64, 64, 64, 64, 64, 64, 723, 
-    723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 
-    724, 725, 725, 725, 724, 724, 724, 724, 724, 724, 726, 727, 64, 64, 64, 
-    64, 64, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 64, 64, 64, 64, 
-    64, 64, 729, 729, 730, 730, 64, 731, 731, 731, 731, 731, 731, 731, 731, 
-    64, 64, 731, 731, 64, 64, 731, 731, 731, 731, 731, 731, 731, 731, 731, 
-    731, 731, 731, 731, 731, 64, 731, 731, 731, 731, 731, 731, 731, 64, 731, 
-    731, 64, 731, 731, 731, 731, 731, 64, 64, 732, 731, 730, 730, 729, 730, 
-    730, 730, 730, 64, 64, 730, 730, 64, 64, 730, 730, 733, 64, 64, 731, 64, 
-    64, 64, 64, 64, 64, 730, 64, 64, 64, 64, 64, 731, 731, 731, 731, 731, 
-    730, 730, 64, 64, 734, 734, 734, 734, 734, 734, 734, 64, 64, 64, 735, 
-    735, 735, 735, 735, 735, 735, 735, 736, 736, 736, 737, 737, 737, 737, 
-    737, 737, 736, 737, 736, 736, 736, 736, 737, 737, 736, 738, 739, 735, 
-    735, 740, 735, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 64, 64, 
-    64, 64, 64, 64, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 
-    742, 742, 742, 742, 743, 743, 743, 744, 744, 744, 744, 64, 64, 743, 743, 
-    743, 743, 744, 744, 743, 745, 746, 747, 747, 747, 747, 747, 747, 747, 
-    747, 747, 747, 747, 747, 747, 747, 747, 742, 742, 742, 742, 744, 744, 64, 
-    64, 748, 748, 748, 748, 748, 748, 748, 748, 749, 749, 749, 750, 750, 750, 
-    750, 750, 750, 750, 750, 749, 749, 750, 749, 751, 750, 752, 752, 752, 
-    748, 64, 64, 64, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 64, 
-    64, 64, 64, 64, 64, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 
-    754, 755, 756, 755, 756, 756, 755, 755, 755, 755, 755, 755, 757, 758, 
-    759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 64, 64, 64, 64, 64, 64, 
-    760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 64, 64, 64, 761, 761, 
-    761, 762, 762, 761, 761, 761, 761, 762, 761, 761, 761, 761, 763, 64, 64, 
-    64, 64, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 765, 765, 766, 
-    766, 766, 767, 768, 768, 768, 768, 768, 768, 768, 768, 769, 769, 769, 
-    769, 769, 769, 769, 769, 770, 770, 770, 770, 770, 770, 770, 770, 770, 
-    770, 771, 771, 771, 771, 771, 771, 771, 771, 771, 64, 64, 64, 64, 64, 64, 
-    64, 64, 64, 64, 64, 64, 772, 773, 773, 773, 773, 773, 773, 773, 773, 773, 
-    64, 64, 64, 64, 64, 64, 64, 774, 774, 774, 774, 774, 774, 774, 774, 774, 
-    774, 64, 64, 64, 64, 64, 64, 775, 775, 775, 775, 775, 775, 775, 775, 775, 
-    775, 775, 775, 775, 775, 775, 64, 776, 776, 776, 776, 776, 64, 64, 64, 
-    774, 774, 774, 774, 64, 64, 64, 64, 777, 777, 777, 777, 777, 777, 777, 
-    777, 777, 777, 777, 777, 777, 777, 777, 64, 778, 778, 778, 778, 778, 778, 
-    778, 778, 778, 778, 778, 778, 778, 778, 778, 64, 511, 64, 64, 64, 64, 64, 
-    64, 64, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 
-    779, 779, 64, 780, 780, 780, 780, 780, 780, 780, 780, 780, 780, 64, 64, 
-    64, 64, 781, 781, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 
-    782, 782, 782, 64, 64, 783, 783, 783, 783, 783, 784, 64, 64, 785, 785, 
-    785, 785, 785, 785, 785, 785, 786, 786, 786, 786, 786, 786, 786, 787, 
-    787, 787, 787, 787, 788, 788, 788, 788, 789, 789, 789, 789, 787, 788, 64, 
-    64, 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, 64, 791, 791, 791, 
-    791, 791, 791, 791, 64, 785, 785, 785, 785, 785, 64, 64, 64, 64, 64, 785, 
-    785, 785, 792, 792, 792, 792, 792, 792, 792, 792, 792, 792, 792, 792, 
-    792, 64, 64, 64, 792, 793, 793, 793, 793, 793, 793, 793, 793, 793, 793, 
-    793, 793, 793, 793, 793, 793, 793, 793, 793, 793, 793, 793, 64, 64, 64, 
-    64, 64, 64, 64, 64, 794, 794, 794, 794, 795, 795, 795, 795, 795, 795, 
-    795, 795, 795, 795, 795, 795, 795, 486, 482, 64, 64, 64, 64, 64, 64, 796, 
-    796, 796, 796, 796, 796, 796, 796, 796, 796, 796, 64, 64, 64, 64, 64, 
-    796, 796, 796, 796, 796, 64, 64, 64, 796, 64, 64, 64, 64, 64, 64, 64, 
-    796, 796, 64, 64, 797, 798, 799, 800, 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, 801, 
-    801, 400, 400, 400, 277, 277, 277, 802, 801, 801, 801, 801, 801, 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, 277, 64, 64, 64, 64, 64, 64, 64, 606, 606, 
-    803, 803, 803, 606, 64, 64, 521, 521, 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, 804, 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, 804, 34, 34, 34, 34, 34, 34, 34, 34, 34, 445, 
-    34, 34, 442, 442, 442, 442, 442, 804, 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, 
-    804, 34, 445, 34, 34, 34, 34, 34, 34, 34, 34, 442, 34, 64, 64, 805, 805, 
-    805, 805, 805, 805, 805, 805, 805, 805, 806, 806, 806, 806, 806, 806, 
-    806, 806, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 
-    807, 807, 807, 806, 806, 806, 806, 807, 807, 807, 807, 807, 807, 807, 
-    807, 807, 807, 806, 806, 806, 806, 806, 806, 806, 806, 807, 806, 806, 
-    806, 806, 806, 806, 807, 806, 806, 808, 808, 808, 808, 808, 64, 64, 64, 
-    64, 64, 64, 64, 807, 807, 807, 807, 807, 64, 807, 807, 807, 807, 807, 
-    807, 807, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 
-    809, 64, 64, 810, 810, 810, 810, 810, 810, 810, 810, 810, 811, 811, 811, 
-    811, 811, 811, 811, 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, 812, 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, 47, 47, 47, 
-    47, 47, 26, 26, 64, 26, 26, 26, 26, 26, 26, 26, 26, 26, 64, 26, 26, 26, 
-    26, 64, 64, 64, 64, 64, 64, 64, 26, 26, 26, 26, 26, 64, 64, 64, 496, 496, 
-    496, 496, 496, 496, 496, 497, 496, 496, 496, 496, 496, 497, 497, 497, 
-    497, 497, 497, 497, 497, 497, 64, 64, 64, 410, 64, 64, 64, 64, 64, 64, 
-    410, 410, 410, 410, 410, 410, 410, 410, 565, 565, 565, 565, 565, 565, 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 */
index 0cb99f0..a2c59da 100644 (file)
@@ -115,8 +115,6 @@ HB_UNICODE_FUNCS_IMPLEMENT_CALLBACKS_SIMPLE
     /* XXX This hack belongs to the Tibetan shaper:
      * Reorder PADMA to ensure it comes after any vowel marks. */
     if (unlikely (unicode == 0x0FC6u)) return 254;
-    /* Reorder TSA -PHRU to reorder before U+0F74 */
-    if (unlikely (unicode == 0x0F39u)) return 127;
 
     return _hb_modified_combining_class[combining_class (unicode)];
   }
@@ -201,50 +199,6 @@ HB_UNICODE_FUNCS_IMPLEMENT_CALLBACKS_SIMPLE
     }
   }
 
-  /* Space estimates based on:
-   * http://www.unicode.org/charts/PDF/U2000.pdf
-   * https://www.microsoft.com/typography/developers/fdsspec/spaces.aspx
-   */
-  enum space_t {
-    NOT_SPACE = 0,
-    SPACE_EM   = 1,
-    SPACE_EM_2 = 2,
-    SPACE_EM_3 = 3,
-    SPACE_EM_4 = 4,
-    SPACE_EM_5 = 5,
-    SPACE_EM_6 = 6,
-    SPACE_EM_16 = 16,
-    SPACE_4_EM_18,     /* 4/18th of an EM! */
-    SPACE,
-    SPACE_FIGURE,
-    SPACE_PUNCTUATION,
-    SPACE_NARROW,
-  };
-  static inline space_t
-  space_fallback_type (hb_codepoint_t u)
-  {
-    switch (u)
-    {
-      /* All GC=Zs chars that can use a fallback. */
-      default:     return NOT_SPACE;   /* U+1680 OGHAM SPACE MARK */
-      case 0x0020u: return SPACE;      /* U+0020 SPACE */
-      case 0x00A0u: return SPACE;      /* U+00A0 NO-BREAK SPACE */
-      case 0x2000u: return SPACE_EM_2; /* U+2000 EN QUAD */
-      case 0x2001u: return SPACE_EM;   /* U+2001 EM QUAD */
-      case 0x2002u: return SPACE_EM_2; /* U+2002 EN SPACE */
-      case 0x2003u: return SPACE_EM;   /* U+2003 EM SPACE */
-      case 0x2004u: return SPACE_EM_3; /* U+2004 THREE-PER-EM SPACE */
-      case 0x2005u: return SPACE_EM_4; /* U+2005 FOUR-PER-EM SPACE */
-      case 0x2006u: return SPACE_EM_6; /* U+2006 SIX-PER-EM SPACE */
-      case 0x2007u: return SPACE_FIGURE;       /* U+2007 FIGURE SPACE */
-      case 0x2008u: return SPACE_PUNCTUATION;  /* U+2008 PUNCTUATION SPACE */
-      case 0x2009u: return SPACE_EM_5;         /* U+2009 THIN SPACE */
-      case 0x200Au: return SPACE_EM_16;                /* U+200A HAIR SPACE */
-      case 0x202Fu: return SPACE_NARROW;       /* U+202F NARROW NO-BREAK SPACE */
-      case 0x205Fu: return SPACE_4_EM_18;      /* U+205F MEDIUM MATHEMATICAL SPACE */
-      case 0x3000u: return SPACE_EM;           /* U+3000 IDEOGRAPHIC SPACE */
-    }
-  }
 
   struct {
 #define HB_UNICODE_FUNC_IMPLEMENT(name) hb_unicode_##name##_func_t name;
@@ -345,26 +299,19 @@ extern HB_INTERNAL const hb_unicode_funcs_t _hb_unicode_funcs_nil;
 #define HB_MODIFIED_COMBINING_CLASS_CCC118 118 /* sign u / sign uu */
 #define HB_MODIFIED_COMBINING_CLASS_CCC122 122 /* mai * */
 
-/* Tibetan
- * Modify U+0F74 (ccc=132) to reorder before ccc=130 marks.
- */
+/* Tibetan */
 #define HB_MODIFIED_COMBINING_CLASS_CCC129 129 /* sign aa */
 #define HB_MODIFIED_COMBINING_CLASS_CCC130 130 /* sign i */
-#define HB_MODIFIED_COMBINING_CLASS_CCC132 128 /* sign u */
+#define HB_MODIFIED_COMBINING_CLASS_CCC132 132 /* sign u */
 
 
 /* Misc */
 
 #define HB_UNICODE_GENERAL_CATEGORY_IS_MARK(gen_cat) \
-       (FLAG_SAFE (gen_cat) & \
+       (FLAG (gen_cat) & \
         (FLAG (HB_UNICODE_GENERAL_CATEGORY_SPACING_MARK) | \
          FLAG (HB_UNICODE_GENERAL_CATEGORY_ENCLOSING_MARK) | \
          FLAG (HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK)))
 
-#define HB_UNICODE_GENERAL_CATEGORY_IS_NON_ENCLOSING_MARK_OR_MODIFIER_SYMBOL(gen_cat) \
-       (FLAG_SAFE (gen_cat) & \
-        (FLAG (HB_UNICODE_GENERAL_CATEGORY_SPACING_MARK) | \
-         FLAG (HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK) | \
-         FLAG (HB_UNICODE_GENERAL_CATEGORY_MODIFIER_SYMBOL)))
 
 #endif /* HB_UNICODE_PRIVATE_HH */
index 487d10b..fc19006 100644 (file)
@@ -146,8 +146,13 @@ hb_unicode_funcs_get_default (void)
 }
 
 #if !defined(HB_NO_UNICODE_FUNCS) && defined(HB_UNICODE_FUNCS_NIL)
-#error "Could not find any Unicode functions implementation, you have to provide your own"
-#error "Consider building hb-ucdn.c.  If you absolutely want to build without any, check the code."
+#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
 
 /**
@@ -158,7 +163,7 @@ hb_unicode_funcs_get_default (void)
  *
  * Return value: (transfer full):
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_unicode_funcs_t *
 hb_unicode_funcs_create (hb_unicode_funcs_t *parent)
@@ -204,7 +209,7 @@ const hb_unicode_funcs_t _hb_unicode_funcs_nil = {
  *
  * Return value: (transfer full):
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_unicode_funcs_t *
 hb_unicode_funcs_get_empty (void)
@@ -220,7 +225,7 @@ hb_unicode_funcs_get_empty (void)
  *
  * Return value: (transfer full):
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_unicode_funcs_t *
 hb_unicode_funcs_reference (hb_unicode_funcs_t *ufuncs)
@@ -234,7 +239,7 @@ hb_unicode_funcs_reference (hb_unicode_funcs_t *ufuncs)
  *
  * 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 void
 hb_unicode_funcs_destroy (hb_unicode_funcs_t *ufuncs)
@@ -263,7 +268,7 @@ hb_unicode_funcs_destroy (hb_unicode_funcs_t *ufuncs)
  *
  * Return value: 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_bool_t
 hb_unicode_funcs_set_user_data (hb_unicode_funcs_t *ufuncs,
@@ -284,7 +289,7 @@ hb_unicode_funcs_set_user_data (hb_unicode_funcs_t *ufuncs,
  *
  * Return value: (transfer none):
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 void *
 hb_unicode_funcs_get_user_data (hb_unicode_funcs_t *ufuncs,
@@ -300,7 +305,7 @@ hb_unicode_funcs_get_user_data (hb_unicode_funcs_t *ufuncs,
  *
  * 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 void
 hb_unicode_funcs_make_immutable (hb_unicode_funcs_t *ufuncs)
@@ -319,7 +324,7 @@ hb_unicode_funcs_make_immutable (hb_unicode_funcs_t *ufuncs)
  *
  * Return value: 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_bool_t
 hb_unicode_funcs_is_immutable (hb_unicode_funcs_t *ufuncs)
@@ -335,7 +340,7 @@ hb_unicode_funcs_is_immutable (hb_unicode_funcs_t *ufuncs)
  *
  * Return value: 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_unicode_funcs_t *
 hb_unicode_funcs_get_parent (hb_unicode_funcs_t *ufuncs)
@@ -395,7 +400,7 @@ HB_UNICODE_FUNCS_IMPLEMENT_CALLBACKS_SIMPLE
  *
  * Return value: 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_bool_t
 hb_unicode_compose (hb_unicode_funcs_t *ufuncs,
@@ -417,7 +422,7 @@ hb_unicode_compose (hb_unicode_funcs_t *ufuncs,
  *
  * Return value: 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 hb_bool_t
 hb_unicode_decompose (hb_unicode_funcs_t *ufuncs,
@@ -438,7 +443,7 @@ hb_unicode_decompose (hb_unicode_funcs_t *ufuncs,
  *
  * Return value: 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
 unsigned int
 hb_unicode_decompose_compatibility (hb_unicode_funcs_t *ufuncs,
index 6a15cb0..1c4e097 100644 (file)
@@ -174,23 +174,23 @@ typedef struct hb_unicode_funcs_t hb_unicode_funcs_t;
 /*
  * just give me the best implementation you've got there.
  */
-HB_EXTERN hb_unicode_funcs_t *
+hb_unicode_funcs_t *
 hb_unicode_funcs_get_default (void);
 
 
-HB_EXTERN hb_unicode_funcs_t *
+hb_unicode_funcs_t *
 hb_unicode_funcs_create (hb_unicode_funcs_t *parent);
 
-HB_EXTERN hb_unicode_funcs_t *
+hb_unicode_funcs_t *
 hb_unicode_funcs_get_empty (void);
 
-HB_EXTERN hb_unicode_funcs_t *
+hb_unicode_funcs_t *
 hb_unicode_funcs_reference (hb_unicode_funcs_t *ufuncs);
 
-HB_EXTERN void
+void
 hb_unicode_funcs_destroy (hb_unicode_funcs_t *ufuncs);
 
-HB_EXTERN hb_bool_t
+hb_bool_t
 hb_unicode_funcs_set_user_data (hb_unicode_funcs_t *ufuncs,
                                hb_user_data_key_t *key,
                                void *              data,
@@ -198,18 +198,18 @@ hb_unicode_funcs_set_user_data (hb_unicode_funcs_t *ufuncs,
                                hb_bool_t           replace);
 
 
-HB_EXTERN void *
+void *
 hb_unicode_funcs_get_user_data (hb_unicode_funcs_t *ufuncs,
                                hb_user_data_key_t *key);
 
 
-HB_EXTERN void
+void
 hb_unicode_funcs_make_immutable (hb_unicode_funcs_t *ufuncs);
 
-HB_EXTERN hb_bool_t
+hb_bool_t
 hb_unicode_funcs_is_immutable (hb_unicode_funcs_t *ufuncs);
 
-HB_EXTERN hb_unicode_funcs_t *
+hb_unicode_funcs_t *
 hb_unicode_funcs_get_parent (hb_unicode_funcs_t *ufuncs);
 
 
@@ -283,9 +283,9 @@ typedef unsigned int                        (*hb_unicode_decompose_compatibility_func_t)    (hb_unicode_
  *
  * 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
-HB_EXTERN void
+void
 hb_unicode_funcs_set_combining_class_func (hb_unicode_funcs_t *ufuncs,
                                           hb_unicode_combining_class_func_t func,
                                           void *user_data, hb_destroy_func_t destroy);
@@ -299,9 +299,9 @@ hb_unicode_funcs_set_combining_class_func (hb_unicode_funcs_t *ufuncs,
  *
  * 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
-HB_EXTERN void
+void
 hb_unicode_funcs_set_eastasian_width_func (hb_unicode_funcs_t *ufuncs,
                                           hb_unicode_eastasian_width_func_t func,
                                           void *user_data, hb_destroy_func_t destroy);
@@ -315,9 +315,9 @@ hb_unicode_funcs_set_eastasian_width_func (hb_unicode_funcs_t *ufuncs,
  *
  * 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
-HB_EXTERN void
+void
 hb_unicode_funcs_set_general_category_func (hb_unicode_funcs_t *ufuncs,
                                            hb_unicode_general_category_func_t func,
                                            void *user_data, hb_destroy_func_t destroy);
@@ -331,9 +331,9 @@ hb_unicode_funcs_set_general_category_func (hb_unicode_funcs_t *ufuncs,
  *
  * 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
-HB_EXTERN void
+void
 hb_unicode_funcs_set_mirroring_func (hb_unicode_funcs_t *ufuncs,
                                     hb_unicode_mirroring_func_t func,
                                     void *user_data, hb_destroy_func_t destroy);
@@ -347,9 +347,9 @@ hb_unicode_funcs_set_mirroring_func (hb_unicode_funcs_t *ufuncs,
  *
  * 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
-HB_EXTERN void
+void
 hb_unicode_funcs_set_script_func (hb_unicode_funcs_t *ufuncs,
                                  hb_unicode_script_func_t func,
                                  void *user_data, hb_destroy_func_t destroy);
@@ -363,9 +363,9 @@ hb_unicode_funcs_set_script_func (hb_unicode_funcs_t *ufuncs,
  *
  * 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
-HB_EXTERN void
+void
 hb_unicode_funcs_set_compose_func (hb_unicode_funcs_t *ufuncs,
                                   hb_unicode_compose_func_t func,
                                   void *user_data, hb_destroy_func_t destroy);
@@ -379,9 +379,9 @@ hb_unicode_funcs_set_compose_func (hb_unicode_funcs_t *ufuncs,
  *
  * 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
-HB_EXTERN void
+void
 hb_unicode_funcs_set_decompose_func (hb_unicode_funcs_t *ufuncs,
                                     hb_unicode_decompose_func_t func,
                                     void *user_data, hb_destroy_func_t destroy);
@@ -395,88 +395,47 @@ hb_unicode_funcs_set_decompose_func (hb_unicode_funcs_t *ufuncs,
  *
  * 
  *
- * Since: 0.9.2
+ * Since: 1.0
  **/
-HB_EXTERN void
+void
 hb_unicode_funcs_set_decompose_compatibility_func (hb_unicode_funcs_t *ufuncs,
                                                   hb_unicode_decompose_compatibility_func_t func,
                                                   void *user_data, hb_destroy_func_t destroy);
 
 /* accessors */
 
-/**
- * hb_unicode_combining_class:
- *
- * Since: 0.9.2
- **/
-HB_EXTERN hb_unicode_combining_class_t
+hb_unicode_combining_class_t
 hb_unicode_combining_class (hb_unicode_funcs_t *ufuncs,
                            hb_codepoint_t unicode);
 
-/**
- * hb_unicode_eastasian_width:
- *
- * Since: 0.9.2
- **/
-HB_EXTERN unsigned int
+unsigned int
 hb_unicode_eastasian_width (hb_unicode_funcs_t *ufuncs,
                            hb_codepoint_t unicode);
 
-/**
- * hb_unicode_general_category:
- *
- * Since: 0.9.2
- **/
-HB_EXTERN hb_unicode_general_category_t
+hb_unicode_general_category_t
 hb_unicode_general_category (hb_unicode_funcs_t *ufuncs,
                             hb_codepoint_t unicode);
 
-/**
- * hb_unicode_mirroring:
- *
- * Since: 0.9.2
- **/
-HB_EXTERN hb_codepoint_t
+hb_codepoint_t
 hb_unicode_mirroring (hb_unicode_funcs_t *ufuncs,
                      hb_codepoint_t unicode);
 
-/**
- * hb_unicode_script:
- *
- * Since: 0.9.2
- **/
-HB_EXTERN hb_script_t
+hb_script_t
 hb_unicode_script (hb_unicode_funcs_t *ufuncs,
                   hb_codepoint_t unicode);
 
-/**
- * hb_unicode_compose:
- *
- * Since: 0.9.2
- **/
-HB_EXTERN hb_bool_t
+hb_bool_t
 hb_unicode_compose (hb_unicode_funcs_t *ufuncs,
                    hb_codepoint_t      a,
                    hb_codepoint_t      b,
                    hb_codepoint_t     *ab);
-
-/**
- * hb_unicode_decompose:
- *
- * Since: 0.9.2
- **/
-HB_EXTERN hb_bool_t
+hb_bool_t
 hb_unicode_decompose (hb_unicode_funcs_t *ufuncs,
                      hb_codepoint_t      ab,
                      hb_codepoint_t     *a,
                      hb_codepoint_t     *b);
 
-/**
- * hb_unicode_decompose_compatibility:
- *
- * Since: 0.9.2
- **/
-HB_EXTERN unsigned int
+unsigned int
 hb_unicode_decompose_compatibility (hb_unicode_funcs_t *ufuncs,
                                    hb_codepoint_t      u,
                                    hb_codepoint_t     *decomposed);
index 7fda678..e7bcad2 100644 (file)
@@ -486,16 +486,14 @@ struct hb_uniscribe_shaper_font_data_t {
   LOGFONTW log_font;
   HFONT hfont;
   SCRIPT_CACHE script_cache;
-  double x_mult, y_mult; /* From LOGFONT space to HB space. */
 };
 
 static bool
 populate_log_font (LOGFONTW  *lf,
-                  hb_font_t *font,
-                  unsigned int font_size)
+                  hb_font_t *font)
 {
   memset (lf, 0, sizeof (*lf));
-  lf->lfHeight = -font_size;
+  lf->lfHeight = -font->y_scale;
   lf->lfCharSet = DEFAULT_CHARSET;
 
   hb_face_t *face = font->face;
@@ -515,19 +513,9 @@ _hb_uniscribe_shaper_font_data_create (hb_font_t *font)
   if (unlikely (!data))
     return NULL;
 
-  int font_size = font->face->get_upem (); /* Default... */
-  /* No idea if the following is even a good idea. */
-  if (font->y_ppem)
-    font_size = font->y_ppem;
-
-  if (font_size < 0)
-    font_size = -font_size;
-  data->x_mult = (double) font->x_scale / font_size;
-  data->y_mult = (double) font->y_scale / font_size;
-
   data->hdc = GetDC (NULL);
 
-  if (unlikely (!populate_log_font (&data->log_font, font, font_size))) {
+  if (unlikely (!populate_log_font (&data->log_font, font))) {
     DEBUG_MSG (UNISCRIBE, font, "Font populate_log_font() failed");
     _hb_uniscribe_shaper_font_data_destroy (data);
     return NULL;
@@ -919,7 +907,7 @@ retry:
 
     if (unlikely (items[i].a.fNoGlyphIndex))
       FAIL ("ScriptShapeOpenType() set fNoGlyphIndex");
-    if (unlikely (hr == E_OUTOFMEMORY || hr == E_NOT_SUFFICIENT_BUFFER))
+    if (unlikely (hr == E_OUTOFMEMORY))
     {
       if (unlikely (!buffer->ensure (buffer->allocated * 2)))
        FAIL ("Buffer resize failed");
@@ -1006,22 +994,21 @@ retry:
 
     /* The rest is crap.  Let's store position info there for now. */
     info->mask = advances[i];
-    info->var1.i32 = offsets[i].du;
-    info->var2.i32 = offsets[i].dv;
+    info->var1.u32 = offsets[i].du;
+    info->var2.u32 = offsets[i].dv;
   }
 
   /* Set glyph positions */
   buffer->clear_positions ();
-  double x_mult = font_data->x_mult, y_mult = font_data->y_mult;
   for (unsigned int i = 0; i < glyphs_len; i++)
   {
     hb_glyph_info_t *info = &buffer->info[i];
     hb_glyph_position_t *pos = &buffer->pos[i];
 
     /* TODO vertical */
-    pos->x_advance = x_mult * (int32_t) info->mask;
-    pos->x_offset = x_mult * (backward ? -info->var1.i32 : info->var1.i32);
-    pos->y_offset = y_mult * info->var2.i32;
+    pos->x_advance = info->mask;
+    pos->x_offset = backward ? -info->var1.u32 : info->var1.u32;
+    pos->y_offset = info->var2.u32;
   }
 
   if (backward)
index 4e4ef99..001ab38 100644 (file)
 HB_BEGIN_DECLS
 
 
-HB_EXTERN LOGFONTW *
+LOGFONTW *
 hb_uniscribe_font_get_logfontw (hb_font_t *font);
 
-HB_EXTERN HFONT
+HFONT
 hb_uniscribe_font_get_hfont (hb_font_t *font);
 
 
index 74cf5d6..14d3c2e 100644 (file)
@@ -146,11 +146,11 @@ struct hb_utf16_t
       return text;
     }
 
-    if (likely (c <= 0xDBFFu && text < end))
+    if (likely (hb_in_range (c, 0xD800u, 0xDBFFu)))
     {
       /* High-surrogate in c */
-      hb_codepoint_t l = *text;
-      if (likely (hb_in_range (l, 0xDC00u, 0xDFFFu)))
+      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);
@@ -170,7 +170,8 @@ struct hb_utf16_t
        hb_codepoint_t *unicode,
        hb_codepoint_t replacement)
   {
-    hb_codepoint_t c = *--text;
+    const uint16_t *end = text--;
+    hb_codepoint_t c = *text;
 
     if (likely (!hb_in_range (c, 0xD800u, 0xDFFFu)))
     {
@@ -178,22 +179,14 @@ struct hb_utf16_t
       return text;
     }
 
-    if (likely (c >= 0xDC00u && start < text))
-    {
-      /* Low-surrogate in c */
-      hb_codepoint_t h = text[-1];
-      if (likely (hb_in_range (h, 0xD800u, 0xDBFFu)))
-      {
-        /* High-surrogate in h */
-        *unicode = (h << 10) + c - ((0xD800u << 10) - 0x10000u + 0xDC00u);
-        text--;
-        return text;
-      }
-    }
+    if (likely (start < text && hb_in_range (c, 0xDC00u, 0xDFFFu)))
+      text--;
+
+    if (likely (next (text, end, unicode, replacement) == end))
+      return text;
 
-    /* Lonely / out-of-order surrogate. */
     *unicode = replacement;
-    return text;
+    return end - 1;
   }
 
 
@@ -218,9 +211,14 @@ struct hb_utf32_t
        hb_codepoint_t *unicode,
        hb_codepoint_t replacement)
   {
-    hb_codepoint_t c = *unicode = *text++;
-    if (validate && unlikely (c >= 0xD800u && (c <= 0xDFFFu || c > 0x10FFFFu)))
-      *unicode = replacement;
+    hb_codepoint_t c = *text++;
+    if (validate && unlikely (c > 0x10FFFFu || hb_in_range (c, 0xD800u, 0xDFFFu)))
+      goto error;
+    *unicode = c;
+    return text;
+
+  error:
+    *unicode = replacement;
     return text;
   }
 
@@ -230,10 +228,8 @@ struct hb_utf32_t
        hb_codepoint_t *unicode,
        hb_codepoint_t replacement)
   {
-    hb_codepoint_t c = *unicode = *--text;
-    if (validate && unlikely (c >= 0xD800u && (c <= 0xDFFFu || c > 0x10FFFFu)))
-      *unicode = replacement;
-    return text;
+    next (text - 1, text, unicode, replacement);
+    return text - 1;
   }
 
   static inline unsigned int
index c90db6b..648a46f 100644 (file)
 HB_BEGIN_DECLS
 
 
-#define HB_VERSION_MAJOR 1
-#define HB_VERSION_MINOR 2
-#define HB_VERSION_MICRO 7
+#define HB_VERSION_MAJOR 0
+#define HB_VERSION_MINOR 9
+#define HB_VERSION_MICRO 40
 
-#define HB_VERSION_STRING "1.2.7"
+#define HB_VERSION_STRING "0.9.40"
 
 #define HB_VERSION_ATLEAST(major,minor,micro) \
        ((major)*10000+(minor)*100+(micro) <= \
         HB_VERSION_MAJOR*10000+HB_VERSION_MINOR*100+HB_VERSION_MICRO)
 
 
-HB_EXTERN void
+void
 hb_version (unsigned int *major,
            unsigned int *minor,
            unsigned int *micro);
 
-HB_EXTERN const char *
+const char *
 hb_version_string (void);
 
-HB_EXTERN hb_bool_t
+hb_bool_t
 hb_version_atleast (unsigned int major,
                    unsigned int minor,
                    unsigned int micro);
index 0ffd889..2517160 100644 (file)
@@ -47,15 +47,15 @@ HB_BEGIN_DECLS
         HB_VERSION_MAJOR*10000+HB_VERSION_MINOR*100+HB_VERSION_MICRO)
 
 
-HB_EXTERN void
+void
 hb_version (unsigned int *major,
            unsigned int *minor,
            unsigned int *micro);
 
-HB_EXTERN const char *
+const char *
 hb_version_string (void);
 
-HB_EXTERN hb_bool_t
+hb_bool_t
 hb_version_atleast (unsigned int major,
                    unsigned int minor,
                    unsigned int micro);
index 8f322bc..e0f88e2 100644 (file)
 
 
 #if defined(HB_ATOMIC_INT_NIL)
-#error "Could not find any system to define atomic_int macros, library WILL NOT be thread-safe"
-#error "Check hb-atomic-private.hh for possible resolutions."
+#ifdef _MSC_VER
+#pragma message("Could not find any system to define atomic_int macros, library may NOT be thread-safe")
+#else
+#warning "Could not find any system to define atomic_int macros, library may NOT be thread-safe"
+#endif
 #endif
 
 #if defined(HB_MUTEX_IMPL_NIL)
-#error "Could not find any system to define mutex macros, library WILL NOT be thread-safe"
-#error "Check hb-mutex-private.hh for possible resolutions."
+#ifdef _MSC_VER
+#pragma message("Could not find any system to define mutex macros, library may NOT be thread-safe")
+#else
+#warning "Could not find any system to define mutex macros, library may NOT be thread-safe"
+#endif
+#endif
+
+#if defined(HB_ATOMIC_INT_NIL) || defined(HB_MUTEX_IMPL_NIL)
+#ifdef _MSC_VER
+#pragma message("To suppress these warnings, define HB_NO_MT")
+#else
+#warning "To suppress these warnings, define HB_NO_MT"
 #endif
+#endif
+
+
index 7402034..c5a938a 100644 (file)
--- a/src/hb.h
+++ b/src/hb.h
 #define HB_H
 #define HB_H_IN
 
-#ifndef HB_EXTERN
-#define HB_EXTERN extern
-#endif
-
 #include "hb-blob.h"
 #include "hb-buffer.h"
 #include "hb-common.h"
index 0c90f8f..a8fe046 100644 (file)
@@ -120,7 +120,7 @@ main (int argc, char **argv)
            info->cluster,
            info->codepoint,
            pos->x_offset,
-           pos->y_offset,
+           pos->x_offset,
            pos->x_advance,
            pos->y_advance);
 
index d306056..32bf39e 100755 (executable)
@@ -1,7 +1,7 @@
 #! /bin/sh
 # test-driver - basic testsuite driver script.
 
-scriptversion=2013-07-13.22; # UTC
+scriptversion=2012-06-27.10; # UTC
 
 # Copyright (C) 2011-2013 Free Software Foundation, Inc.
 #
@@ -44,12 +44,13 @@ print_usage ()
 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 [TEST-SCRIPT-ARGUMENTS]
+              [--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.
@@ -68,23 +69,10 @@ while test $# -gt 0; do
   --enable-hard-errors) enable_hard_errors=$2; shift;;
   --) shift; break;;
   -*) usage_error "invalid option: '$1'";;
-   *) break;;
   esac
   shift
 done
 
-missing_opts=
-test x"$test_name" = x && missing_opts="$missing_opts --test-name"
-test x"$log_file"  = x && missing_opts="$missing_opts --log-file"
-test x"$trs_file"  = x && missing_opts="$missing_opts --trs-file"
-if test x"$missing_opts" != x; then
-  usage_error "the following mandatory options are missing:$missing_opts"
-fi
-
-if test $# -eq 0; then
-  usage_error "missing argument"
-fi
-
 if test $color_tests = yes; then
   # Keep this in sync with 'lib/am/check.am:$(am__tty_colors)'.
   red='\e[0;31m' # Red.
index ec77822..16a3cd2 100644 (file)
@@ -1,9 +1,5 @@
 # Process this file with automake to produce Makefile.in
 
-SUBDIRS = api shaping fuzzing
-
-# Convenience targets:
-lib:
-       @$(MAKE) $(AM_MAKEFLAGS) -C $(top_builddir)/src lib
+SUBDIRS = api shaping
 
 -include $(top_srcdir)/git.mk
index 8b9d36d..ce251b6 100644 (file)
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.14 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994-2013 Free Software Foundation, Inc.
@@ -200,8 +200,6 @@ CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
-DIRECTWRITE_CXXFLAGS = @DIRECTWRITE_CXXFLAGS@
-DIRECTWRITE_LIBS = @DIRECTWRITE_LIBS@
 DLLTOOL = @DLLTOOL@
 DSYMUTIL = @DSYMUTIL@
 DUMPBIN = @DUMPBIN@
@@ -211,20 +209,15 @@ ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
 FGREP = @FGREP@
-FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@
-FONTCONFIG_LIBS = @FONTCONFIG_LIBS@
 FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
-FREETYPE_DEPS = @FREETYPE_DEPS@
 FREETYPE_LIBS = @FREETYPE_LIBS@
 GIT = @GIT@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_DEPS = @GLIB_DEPS@
 GLIB_LIBS = @GLIB_LIBS@
 GLIB_MKENUMS = @GLIB_MKENUMS@
 GOBJECT_CFLAGS = @GOBJECT_CFLAGS@
 GOBJECT_LIBS = @GOBJECT_LIBS@
 GRAPHITE2_CFLAGS = @GRAPHITE2_CFLAGS@
-GRAPHITE2_DEPS = @GRAPHITE2_DEPS@
 GRAPHITE2_LIBS = @GRAPHITE2_LIBS@
 GREP = @GREP@
 GTKDOC_CHECK = @GTKDOC_CHECK@
@@ -347,7 +340,7 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-SUBDIRS = api shaping fuzzing
+SUBDIRS = api shaping
 all: all-recursive
 
 .SUFFIXES:
@@ -659,10 +652,6 @@ uninstall-am:
        ps ps-am tags tags-am uninstall uninstall-am
 
 
-# Convenience targets:
-lib:
-       @$(MAKE) $(AM_MAKEFLAGS) -C $(top_builddir)/src lib
-
 -include $(top_srcdir)/git.mk
 
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
index d7d40af..4ff14fa 100644 (file)
@@ -6,10 +6,6 @@ CLEANFILES =
 DISTCLEANFILES =
 MAINTAINERCLEANFILES =
 
-# Convenience targets:
-lib:
-       @$(MAKE) $(AM_MAKEFLAGS) -C $(top_builddir)/src lib
-
 if HAVE_GLIB
 AM_CPPFLAGS = -DSRCDIR="\"$(srcdir)\"" -I$(top_srcdir)/src/ -I$(top_builddir)/src/ $(GLIB_CFLAGS)
 LDADD = $(top_builddir)/src/libharfbuzz.la $(GLIB_LIBS)
@@ -38,7 +34,7 @@ test_unicode_CPPFLAGS += $(GLIB_CFLAGS)
 endif
 if HAVE_ICU
 test_unicode_CPPFLAGS += $(ICU_CFLAGS)
-test_unicode_LDADD += $(top_builddir)/src/libharfbuzz-icu.la $(ICU_LIBS)
+test_unicode_LDADD += $(top_builddir)/src/libharfbuzz-icu.la
 endif
 
 
index 951a535..6faa95f 100644 (file)
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.14 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994-2013 Free Software Foundation, Inc.
@@ -84,7 +84,7 @@ 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@@HAVE_ICU_TRUE@am__append_3 = $(top_builddir)/src/libharfbuzz-icu.la $(ICU_LIBS)
+@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)
@@ -195,10 +195,8 @@ test_unicode_OBJECTS = test_unicode-test-unicode.$(OBJEXT)
 @HAVE_GLIB_TRUE@am__DEPENDENCIES_2 =  \
 @HAVE_GLIB_TRUE@       $(top_builddir)/src/libharfbuzz.la \
 @HAVE_GLIB_TRUE@       $(am__DEPENDENCIES_1)
-@HAVE_GLIB_TRUE@@HAVE_ICU_TRUE@am__DEPENDENCIES_3 = $(top_builddir)/src/libharfbuzz-icu.la \
-@HAVE_GLIB_TRUE@@HAVE_ICU_TRUE@        $(am__DEPENDENCIES_1)
 @HAVE_GLIB_TRUE@test_unicode_DEPENDENCIES = $(am__DEPENDENCIES_2) \
-@HAVE_GLIB_TRUE@       $(am__DEPENDENCIES_3)
+@HAVE_GLIB_TRUE@       $(am__append_3)
 test_version_SOURCES = test-version.c
 test_version_OBJECTS = test-version.$(OBJEXT)
 test_version_LDADD = $(LDADD)
@@ -520,8 +518,6 @@ CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
-DIRECTWRITE_CXXFLAGS = @DIRECTWRITE_CXXFLAGS@
-DIRECTWRITE_LIBS = @DIRECTWRITE_LIBS@
 DLLTOOL = @DLLTOOL@
 DSYMUTIL = @DSYMUTIL@
 DUMPBIN = @DUMPBIN@
@@ -531,20 +527,15 @@ ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
 FGREP = @FGREP@
-FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@
-FONTCONFIG_LIBS = @FONTCONFIG_LIBS@
 FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
-FREETYPE_DEPS = @FREETYPE_DEPS@
 FREETYPE_LIBS = @FREETYPE_LIBS@
 GIT = @GIT@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_DEPS = @GLIB_DEPS@
 GLIB_LIBS = @GLIB_LIBS@
 GLIB_MKENUMS = @GLIB_MKENUMS@
 GOBJECT_CFLAGS = @GOBJECT_CFLAGS@
 GOBJECT_LIBS = @GOBJECT_LIBS@
 GRAPHITE2_CFLAGS = @GRAPHITE2_CFLAGS@
-GRAPHITE2_DEPS = @GRAPHITE2_DEPS@
 GRAPHITE2_LIBS = @GRAPHITE2_LIBS@
 GREP = @GREP@
 GTKDOC_CHECK = @GTKDOC_CHECK@
@@ -1374,10 +1365,6 @@ uninstall-am:
        uninstall-am
 
 
-# Convenience targets:
-lib:
-       @$(MAKE) $(AM_MAKEFLAGS) -C $(top_builddir)/src lib
-
 # check-tool: Run tests under $(TOOL)
 @HAVE_GLIB_TRUE@check-tool:
 @HAVE_GLIB_TRUE@       $(AM_V_at)$(MAKE) $(AM_MAKEFLAGS) check \
index 34f6c74..6b6a503 100644 (file)
@@ -36,8 +36,8 @@ static void
 test_face_empty (void)
 {
   g_assert (hb_face_get_empty ());
-  g_assert (hb_face_get_empty () != hb_face_create (hb_blob_get_empty (), 0));
-  g_assert (hb_face_get_empty () != hb_face_create (NULL, 0));
+  g_assert (hb_face_get_empty () == hb_face_create (hb_blob_get_empty (), 0));
+  g_assert (hb_face_get_empty () == hb_face_create (NULL, 0));
 
   g_assert (hb_face_reference_table (hb_face_get_empty (), HB_TAG ('h','e','a','d')) == hb_blob_get_empty ());
 
@@ -115,7 +115,6 @@ _test_font_nil_funcs (hb_font_t *font)
   hb_codepoint_t glyph;
   hb_position_t x, y;
   hb_glyph_extents_t extents;
-  unsigned int upem = hb_face_get_upem (hb_font_get_face (font));
 
   x = y = 13;
   g_assert (!hb_font_get_glyph_contour_point (font, 17, 2, &x, &y));
@@ -123,7 +122,7 @@ _test_font_nil_funcs (hb_font_t *font)
   g_assert_cmpint (y, ==, 0);
 
   x = hb_font_get_glyph_h_advance (font, 17);
-  g_assert_cmpint (x, ==, upem);
+  g_assert_cmpint (x, ==, 0);
 
   extents.x_bearing = extents.y_bearing = 13;
   extents.width = extents.height = 15;
@@ -291,22 +290,9 @@ test_fontfuncs_subclassing (void)
   x = hb_font_get_glyph_h_advance (font1, 2);
   g_assert_cmpint (x, ==, 0);
 
-  /* creating sub-font doesn't make the parent font immutable;
-   * making a font immutable however makes it's lineage immutable.
-   */
-  font2 = hb_font_create_sub_font (font1);
-  font3 = hb_font_create_sub_font (font2);
-  g_assert (!hb_font_is_immutable (font1));
-  g_assert (!hb_font_is_immutable (font2));
-  g_assert (!hb_font_is_immutable (font3));
-  hb_font_make_immutable (font3);
-  g_assert (hb_font_is_immutable (font1));
-  g_assert (hb_font_is_immutable (font2));
-  g_assert (hb_font_is_immutable (font3));
-  hb_font_destroy (font2);
-  hb_font_destroy (font3);
 
   font2 = hb_font_create_sub_font (font1);
+  g_assert (hb_font_is_immutable (font1));
   hb_font_destroy (font1);
 
   /* setup font2 to override some funcs */
@@ -330,8 +316,12 @@ test_fontfuncs_subclassing (void)
   x = hb_font_get_glyph_h_advance (font2, 2);
   g_assert_cmpint (x, ==, 0);
 
-  /* setup font3 to override scale */
+
   font3 = hb_font_create_sub_font (font2);
+  g_assert (hb_font_is_immutable (font2));
+  hb_font_destroy (font2);
+
+  /* setup font3 to override scale */
   hb_font_set_scale (font3, 20, 30);
 
   x = y = 1;
@@ -358,9 +348,9 @@ static void
 test_font_empty (void)
 {
   g_assert (hb_font_get_empty ());
-  g_assert (hb_font_get_empty () != hb_font_create (hb_face_get_empty ()));
-  g_assert (hb_font_get_empty () != hb_font_create (NULL));
-  g_assert (hb_font_get_empty () != hb_font_create_sub_font (NULL));
+  g_assert (hb_font_get_empty () == hb_font_create (hb_face_get_empty ()));
+  g_assert (hb_font_get_empty () == hb_font_create (NULL));
+  g_assert (hb_font_get_empty () == hb_font_create_sub_font (NULL));
   g_assert (hb_font_is_immutable (hb_font_get_empty ()));
 
   g_assert (hb_font_get_face (hb_font_get_empty ()) == hb_face_get_empty ());
@@ -376,7 +366,6 @@ test_font_properties (void)
   hb_font_t *subfont;
   int x_scale, y_scale;
   unsigned int x_ppem, y_ppem;
-  unsigned int upem;
 
   blob = hb_blob_create (test_data, sizeof (test_data), HB_MEMORY_MODE_READONLY, NULL, NULL);
   face = hb_face_create (blob, 0);
@@ -386,35 +375,22 @@ test_font_properties (void)
 
 
   g_assert (hb_font_get_face (font) == face);
-  g_assert (hb_font_get_parent (font) == hb_font_get_empty ());
-  subfont = hb_font_create_sub_font (font);
-  g_assert (hb_font_get_parent (subfont) == font);
-  hb_font_set_parent(subfont, NULL);
-  g_assert (hb_font_get_parent (subfont) == hb_font_get_empty());
-  hb_font_set_parent(subfont, font);
-  g_assert (hb_font_get_parent (subfont) == font);
-  hb_font_set_parent(subfont, NULL);
-  hb_font_make_immutable (subfont);
-  g_assert (hb_font_get_parent (subfont) == hb_font_get_empty());
-  hb_font_set_parent(subfont, font);
-  g_assert (hb_font_get_parent (subfont) == hb_font_get_empty());
-  hb_font_destroy (subfont);
+  g_assert (hb_font_get_parent (font) == NULL);
 
 
   /* Check scale */
 
-  upem = hb_face_get_upem (hb_font_get_face (font));
   hb_font_get_scale (font, NULL, NULL);
   x_scale = y_scale = 13;
   hb_font_get_scale (font, &x_scale, NULL);
-  g_assert_cmpint (x_scale, ==, upem);
+  g_assert_cmpint (x_scale, ==, 0);
   x_scale = y_scale = 13;
   hb_font_get_scale (font, NULL, &y_scale);
-  g_assert_cmpint (y_scale, ==, upem);
+  g_assert_cmpint (y_scale, ==, 0);
   x_scale = y_scale = 13;
   hb_font_get_scale (font, &x_scale, &y_scale);
-  g_assert_cmpint (x_scale, ==, upem);
-  g_assert_cmpint (y_scale, ==, upem);
+  g_assert_cmpint (x_scale, ==, 0);
+  g_assert_cmpint (y_scale, ==, 0);
 
   hb_font_set_scale (font, 17, 19);
 
index 02b9760..3afe6ae 100644 (file)
@@ -36,7 +36,7 @@ create_blob (void)
   return hb_blob_create (data, sizeof (data), HB_MEMORY_MODE_READONLY, NULL, NULL);
 }
 static void *
-create_blob_from_inert (void)
+create_blob_inert (void)
 {
   return hb_blob_create (NULL, 0, HB_MEMORY_MODE_DUPLICATE, NULL, NULL);
 }
@@ -47,7 +47,7 @@ create_buffer (void)
   return hb_buffer_create ();
 }
 static void *
-create_buffer_from_inert (void)
+create_buffer_inert (void)
 {
   return NULL;
 }
@@ -58,7 +58,7 @@ create_set (void)
   return hb_set_create ();
 }
 static void *
-create_set_from_inert (void)
+create_set_inert (void)
 {
   return NULL;
 }
@@ -72,7 +72,7 @@ create_face (void)
   return face;
 }
 static void *
-create_face_from_inert (void)
+create_face_inert (void)
 {
   return hb_face_create (hb_blob_get_empty (), 0);
 }
@@ -86,7 +86,7 @@ create_font (void)
   return font;
 }
 static void *
-create_font_from_inert (void)
+create_font_inert (void)
 {
   return hb_font_create (hb_face_get_empty ());
 }
@@ -97,7 +97,7 @@ create_font_funcs (void)
   return hb_font_funcs_create ();
 }
 static void *
-create_font_funcs_from_inert (void)
+create_font_funcs_inert (void)
 {
   return NULL;
 }
@@ -108,9 +108,9 @@ create_unicode_funcs (void)
   return hb_unicode_funcs_create (NULL);
 }
 static void *
-create_unicode_funcs_from_inert (void)
+create_unicode_funcs_inert (void)
 {
-  return hb_unicode_funcs_create (hb_unicode_funcs_get_empty ());
+  return hb_unicode_funcs_get_default ();
 }
 
 
@@ -125,7 +125,7 @@ typedef hb_bool_t (*is_immutable_func_t)   (void *obj);
 
 typedef struct {
   create_func_t          create;
-  create_func_t          create_from_inert;
+  create_func_t          create_inert;
   create_func_t          get_empty;
   reference_func_t       reference;
   destroy_func_t         destroy;
@@ -139,7 +139,7 @@ typedef struct {
 #define OBJECT_WITHOUT_IMMUTABILITY(name) \
   { \
     (create_func_t)         create_##name, \
-    (create_func_t)         create_##name##_from_inert, \
+    (create_func_t)         create_##name##_inert, \
     (create_func_t)         hb_##name##_get_empty, \
     (reference_func_t)      hb_##name##_reference, \
     (destroy_func_t)        hb_##name##_destroy, \
@@ -152,7 +152,7 @@ typedef struct {
 #define OBJECT_WITH_IMMUTABILITY(name) \
   { \
     (create_func_t)         create_##name, \
-    (create_func_t)         create_##name##_from_inert, \
+    (create_func_t)         create_##name##_inert, \
     (create_func_t)         hb_##name##_get_empty, \
     (reference_func_t)      hb_##name##_reference, \
     (destroy_func_t)        hb_##name##_destroy, \
@@ -340,8 +340,8 @@ test_object (void)
     {
       data_t data[2] = {{MAGIC0, FALSE}, {MAGIC1, FALSE}};
 
-      g_test_message ("->create_from_inert()");
-      obj = o->create_from_inert ();
+      g_test_message ("->create_inert()");
+      obj = o->create_inert ();
       if (!obj)
        continue;
       if (obj == o->get_empty ())
@@ -351,14 +351,18 @@ test_object (void)
       o->destroy (obj);
 
       if (o->is_immutable)
-       g_assert (!o->is_immutable (obj));
+       g_assert (o->is_immutable (obj));
 
-      g_assert (o->set_user_data (obj, &key[0], &data[0], free_up0, TRUE));
-      g_assert (o->get_user_data (obj, &key[0]));
+      g_assert (!o->set_user_data (obj, &key[0], &data[0], free_up0, TRUE));
+      g_assert (!o->get_user_data (obj, &key[0]));
 
       o->destroy (obj);
+      o->destroy (obj);
+      o->destroy (obj);
+      o->destroy (obj);
+      o->destroy (obj);
 
-      g_assert (data[0].freed);
+      g_assert (!data[0].freed);
     }
   }
 }
index 29e0aa2..b667c7d 100644 (file)
@@ -222,13 +222,6 @@ test_ot_tag_language (void)
   test_tag_from_language ("XYZ", "xyz"); /* Unknown ISO 639-3 */
   test_tag_from_language ("XYZ", "xyz-qw"); /* Unknown ISO 639-3 */
 
-  /* International Phonetic Alphabet */
-  test_tag_from_language ("IPPH", "en-fonipa");
-  test_tag_from_language ("IPPH", "rm-CH-fonipa-sursilv-x-foobar");
-  test_tag_from_language ("IPPH", "und-fonipa");
-  test_tag_from_language ("IPPH", "zh-fonipa");
-  test_tag_to_language ("IPPH", "und-fonipa");
-
   /* Test that x-hbot overrides the base language */
   test_tag_from_language ("ABC", "fa-x-hbotabc-zxc");
   test_tag_from_language ("ABC", "fa-ir-x-hbotabc-zxc");
index c274f0f..ccf6eed 100644 (file)
@@ -101,7 +101,7 @@ test_shape (void)
 
   ffuncs = hb_font_funcs_create ();
   hb_font_funcs_set_glyph_h_advance_func (ffuncs, glyph_h_advance_func, NULL, NULL);
-  hb_font_funcs_set_glyph_func (ffuncs, glyph_func, malloc (10), free);
+  hb_font_funcs_set_glyph_func (ffuncs, glyph_func, NULL, NULL);
   hb_font_funcs_set_glyph_h_kerning_func (ffuncs, glyph_h_kerning_func, NULL, NULL);
   hb_font_set_funcs (font, ffuncs, NULL, NULL);
   hb_font_funcs_destroy (ffuncs);
@@ -139,48 +139,6 @@ test_shape (void)
 }
 
 static void
-test_shape_clusters (void)
-{
-  hb_face_t *face;
-  hb_font_t *font;
-  hb_buffer_t *buffer;
-  unsigned int len;
-  hb_glyph_info_t *glyphs;
-
-  face = hb_face_create (NULL, 0);
-  font = hb_font_create (face);
-  hb_face_destroy (face);
-
-  buffer =  hb_buffer_create ();
-  hb_buffer_set_direction (buffer, HB_DIRECTION_LTR);
-  {
-    /* https://code.google.com/p/chromium/issues/detail?id=497578 */
-    hb_codepoint_t test[] = {0xFFF1, 0xF0B6};
-    hb_buffer_add_utf32 (buffer, test, 2, 0, 2);
-  }
-
-  hb_shape (font, buffer, NULL, 0);
-
-  len = hb_buffer_get_length (buffer);
-  glyphs = hb_buffer_get_glyph_infos (buffer, NULL);
-
-  {
-    const hb_codepoint_t output_glyphs[] = {0};
-    const hb_position_t output_clusters[] = {0};
-    unsigned int i;
-    g_assert_cmpint (len, ==, 1);
-    for (i = 0; i < len; i++) {
-      g_assert_cmphex (glyphs[i].codepoint, ==, output_glyphs[i]);
-      g_assert_cmphex (glyphs[i].cluster,   ==, output_clusters[i]);
-    }
-  }
-
-  hb_buffer_destroy (buffer);
-  hb_font_destroy (font);
-}
-
-
-static void
 test_shape_list (void)
 {
   const char **shapers = hb_shape_list_shapers ();
@@ -199,7 +157,6 @@ main (int argc, char **argv)
   hb_test_init (&argc, &argv);
 
   hb_test_add (test_shape);
-  hb_test_add (test_shape_clusters);
   /* TODO test fallback shaper */
   /* TODO test shaper_full */
   hb_test_add (test_shape_list);
diff --git a/test/fuzzing/Makefile.am b/test/fuzzing/Makefile.am
deleted file mode 100644 (file)
index 7b0eb94..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-# Process this file with automake to produce Makefile.in
-
-NULL =
-EXTRA_DIST =
-CLEANFILES =
-DISTCLEANFILES =
-MAINTAINERCLEANFILES =
-
-# Convenience targets:
-lib:
-       @$(MAKE) $(AM_MAKEFLAGS) -C $(top_builddir)/src fuzzing
-
-$(top_builddir)/src/libharfbuzz-fuzzing.la: lib
-
-EXTRA_DIST += \
-       README \
-       $(NULL)
-
-check_PROGRAMS = \
-       hb-fuzzer \
-       $(NULL)
-
-AM_CPPFLAGS = \
-       -DHB_DISABLE_DEPRECATED \
-       -I$(top_srcdir)/src/ \
-       -I$(top_builddir)/src/ \
-       $(NULL)
-LDADD = \
-       $(top_builddir)/src/libharfbuzz-fuzzing.la \
-       $(NULL)
-
-hb_fuzzer_SOURCES = \
-       hb-fuzzer.cc \
-       $(NULL)
-hb_fuzzer_LDADD = \
-       $(LDADD) \
-       $(NULL)
-hb_fuzzer_CPPFLAGS = \
-       $(AM_CPPFLAGS) \
-       -DMAIN \
-       $(NULL)
-hb_fuzzer_DEPENDENCIES = \
-       lib \
-       $(NULL)
-
-check:
-       cat $(srcdir)/../shaping/tests/fuzzed.tests | \
-       cut -d: -f1 | while read x; do \
-               ./hb-fuzzer $(srcdir)/../shaping/$$x; \
-       done
-
--include $(top_srcdir)/git.mk
diff --git a/test/fuzzing/Makefile.in b/test/fuzzing/Makefile.in
deleted file mode 100644 (file)
index eca39c0..0000000
+++ /dev/null
@@ -1,696 +0,0 @@
-# Makefile.in generated by automake 1.14.1 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
-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@
-check_PROGRAMS = hb-fuzzer$(EXEEXT) $(am__EXEEXT_1)
-subdir = test/fuzzing
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-       $(top_srcdir)/depcomp README
-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__EXEEXT_1 =
-am__objects_1 =
-am_hb_fuzzer_OBJECTS = hb_fuzzer-hb-fuzzer.$(OBJEXT) $(am__objects_1)
-hb_fuzzer_OBJECTS = $(am_hb_fuzzer_OBJECTS)
-am__DEPENDENCIES_1 =
-am__DEPENDENCIES_2 = $(top_builddir)/src/libharfbuzz-fuzzing.la \
-       $(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_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
-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_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@)
-am__v_CXXLD_0 = @echo "  CXXLD   " $@;
-am__v_CXXLD_1 = 
-SOURCES = $(hb_fuzzer_SOURCES)
-DIST_SOURCES = $(hb_fuzzer_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)
-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@
-DIRECTWRITE_CXXFLAGS = @DIRECTWRITE_CXXFLAGS@
-DIRECTWRITE_LIBS = @DIRECTWRITE_LIBS@
-DLLTOOL = @DLLTOOL@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-FGREP = @FGREP@
-FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@
-FONTCONFIG_LIBS = @FONTCONFIG_LIBS@
-FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
-FREETYPE_DEPS = @FREETYPE_DEPS@
-FREETYPE_LIBS = @FREETYPE_LIBS@
-GIT = @GIT@
-GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_DEPS = @GLIB_DEPS@
-GLIB_LIBS = @GLIB_LIBS@
-GLIB_MKENUMS = @GLIB_MKENUMS@
-GOBJECT_CFLAGS = @GOBJECT_CFLAGS@
-GOBJECT_LIBS = @GOBJECT_LIBS@
-GRAPHITE2_CFLAGS = @GRAPHITE2_CFLAGS@
-GRAPHITE2_DEPS = @GRAPHITE2_DEPS@
-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@
-NULL = 
-EXTRA_DIST = README $(NULL)
-CLEANFILES = 
-DISTCLEANFILES = 
-MAINTAINERCLEANFILES = 
-AM_CPPFLAGS = \
-       -DHB_DISABLE_DEPRECATED \
-       -I$(top_srcdir)/src/ \
-       -I$(top_builddir)/src/ \
-       $(NULL)
-
-LDADD = \
-       $(top_builddir)/src/libharfbuzz-fuzzing.la \
-       $(NULL)
-
-hb_fuzzer_SOURCES = \
-       hb-fuzzer.cc \
-       $(NULL)
-
-hb_fuzzer_LDADD = \
-       $(LDADD) \
-       $(NULL)
-
-hb_fuzzer_CPPFLAGS = \
-       $(AM_CPPFLAGS) \
-       -DMAIN \
-       $(NULL)
-
-hb_fuzzer_DEPENDENCIES = \
-       lib \
-       $(NULL)
-
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .cc .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 test/fuzzing/Makefile'; \
-       $(am__cd) $(top_srcdir) && \
-         $(AUTOMAKE) --gnits test/fuzzing/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-checkPROGRAMS:
-       @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
-       echo " rm -f" $$list; \
-       rm -f $$list || exit $$?; \
-       test -n "$(EXEEXT)" || exit 0; \
-       list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
-       echo " rm -f" $$list; \
-       rm -f $$list
-
-hb-fuzzer$(EXEEXT): $(hb_fuzzer_OBJECTS) $(hb_fuzzer_DEPENDENCIES) $(EXTRA_hb_fuzzer_DEPENDENCIES) 
-       @rm -f hb-fuzzer$(EXEEXT)
-       $(AM_V_CXXLD)$(CXXLINK) $(hb_fuzzer_OBJECTS) $(hb_fuzzer_LDADD) $(LIBS)
-
-mostlyclean-compile:
-       -rm -f *.$(OBJEXT)
-
-distclean-compile:
-       -rm -f *.tab.c
-
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hb_fuzzer-hb-fuzzer.Po@am__quote@
-
-.cc.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 $@ $<
-
-.cc.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) '$<'`
-
-.cc.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 $@ $<
-
-hb_fuzzer-hb-fuzzer.o: hb-fuzzer.cc
-@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hb_fuzzer_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT hb_fuzzer-hb-fuzzer.o -MD -MP -MF $(DEPDIR)/hb_fuzzer-hb-fuzzer.Tpo -c -o hb_fuzzer-hb-fuzzer.o `test -f 'hb-fuzzer.cc' || echo '$(srcdir)/'`hb-fuzzer.cc
-@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/hb_fuzzer-hb-fuzzer.Tpo $(DEPDIR)/hb_fuzzer-hb-fuzzer.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-fuzzer.cc' object='hb_fuzzer-hb-fuzzer.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) $(hb_fuzzer_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o hb_fuzzer-hb-fuzzer.o `test -f 'hb-fuzzer.cc' || echo '$(srcdir)/'`hb-fuzzer.cc
-
-hb_fuzzer-hb-fuzzer.obj: hb-fuzzer.cc
-@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hb_fuzzer_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT hb_fuzzer-hb-fuzzer.obj -MD -MP -MF $(DEPDIR)/hb_fuzzer-hb-fuzzer.Tpo -c -o hb_fuzzer-hb-fuzzer.obj `if test -f 'hb-fuzzer.cc'; then $(CYGPATH_W) 'hb-fuzzer.cc'; else $(CYGPATH_W) '$(srcdir)/hb-fuzzer.cc'; fi`
-@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) $(DEPDIR)/hb_fuzzer-hb-fuzzer.Tpo $(DEPDIR)/hb_fuzzer-hb-fuzzer.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='hb-fuzzer.cc' object='hb_fuzzer-hb-fuzzer.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) $(hb_fuzzer_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o hb_fuzzer-hb-fuzzer.obj `if test -f 'hb-fuzzer.cc'; then $(CYGPATH_W) 'hb-fuzzer.cc'; else $(CYGPATH_W) '$(srcdir)/hb-fuzzer.cc'; fi`
-
-mostlyclean-libtool:
-       -rm -f *.lo
-
-clean-libtool:
-       -rm -rf .libs _libs
-
-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`; \
-       $(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-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
-
-GTAGS:
-       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
-
-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
-       $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
-check: check-am
-all-am: Makefile
-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)
-       -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
-
-maintainer-clean-generic:
-       @echo "This command is intended for maintainers to use"
-       @echo "it deletes files that may require special tools to rebuild."
-       -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
-clean: clean-am
-
-clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
-       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: check-am install-am install-strip
-
-.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \
-       clean-checkPROGRAMS 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-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
-
-
-# Convenience targets:
-lib:
-       @$(MAKE) $(AM_MAKEFLAGS) -C $(top_builddir)/src fuzzing
-
-$(top_builddir)/src/libharfbuzz-fuzzing.la: lib
-
-check:
-       cat $(srcdir)/../shaping/tests/fuzzed.tests | \
-       cut -d: -f1 | while read x; do \
-               ./hb-fuzzer $(srcdir)/../shaping/$$x; \
-       done
-
--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/test/fuzzing/README b/test/fuzzing/README
deleted file mode 100644 (file)
index c858f5d..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-In order to build the fuzzer one needs to build HarfBuzz and
-harfbuzz/test/fuzzing/hb-fuzzer.cc with:
-  - Using the most recent Clang
-  - With -fsanitize=address (or =undefined, or a combination)
-  - With -fsanitize-coverage=edge[,8bit-counters,trace-cmp]
-  - With various defines that limit worst case exponential behavior.
-    See FUZZING_CPPFLAGS in harfbuzz/src/Makefile.am for the list.
-  - link against libFuzzer
-
-To run the fuzzer one needs to first obtain a test corpus as a directory
-containing interesting fonts.  A good starting point is inside
-harfbuzz/test/shaping/fonts/fonts/.
-Then, run the fuzzer like this:
-   ./hb-fuzzer -max_len=2048 CORPUS_DIR
-Where max_len specifies the maximal length of font files to handle.
-The smaller the faster.
-
-For more details consult the following locations:
-  - http://llvm.org/docs/LibFuzzer.html or
-  - https://github.com/google/libfuzzer-bot/tree/master/harfbuzz
-  - https://github.com/behdad/harfbuzz/issues/139
diff --git a/test/fuzzing/hb-fuzzer.cc b/test/fuzzing/hb-fuzzer.cc
deleted file mode 100644 (file)
index b319a71..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-#include <stddef.h>
-#include <hb.h>
-#include <hb-ot.h>
-#include <string.h>
-
-extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
-
-  hb_blob_t *blob = hb_blob_create((const char *)data, size,
-                                   HB_MEMORY_MODE_READONLY, NULL, NULL);
-  hb_face_t *face = hb_face_create(blob, 0);
-  hb_font_t *font = hb_font_create(face);
-  hb_ot_font_set_funcs(font);
-  hb_font_set_scale(font, 12, 12);
-
-  {
-    const char text[] = "ABCDEXYZ123@_%&)*$!";
-    hb_buffer_t *buffer = hb_buffer_create();
-    hb_buffer_add_utf8(buffer, text, -1, 0, -1);
-    hb_buffer_guess_segment_properties(buffer);
-    hb_shape(font, buffer, NULL, 0);
-    hb_buffer_destroy(buffer);
-  }
-
-  uint32_t text32[16];
-  if (size > sizeof(text32)) {
-    memcpy(text32, data + size - sizeof(text32), sizeof(text32));
-    hb_buffer_t *buffer = hb_buffer_create();
-    hb_buffer_add_utf32(buffer, text32, sizeof(text32)/sizeof(text32[0]), 0, -1);
-    hb_buffer_guess_segment_properties(buffer);
-    hb_shape(font, buffer, NULL, 0);
-    hb_buffer_destroy(buffer);
-  }
-
-
-  hb_font_destroy(font);
-  hb_face_destroy(face);
-  hb_blob_destroy(blob);
-  return 0;
-}
-
-#ifdef MAIN
-#include <iostream>
-#include <iterator>
-#include <fstream>
-#include <assert.h>
-
-std::string FileToString(const std::string &Path) {
-  /* TODO This silently passes if file does not exist.  Fix it! */
-  std::ifstream T(Path.c_str());
-  return std::string((std::istreambuf_iterator<char>(T)),
-                     std::istreambuf_iterator<char>());
-}
-
-int main(int argc, char **argv) {
-  for (int i = 1; i < argc; i++) {
-    std::string s = FileToString(argv[i]);
-    std::cout << argv[i] << std::endl;
-    LLVMFuzzerTestOneInput((const unsigned char*)s.data(), s.size());
-  }
-}
-#endif
index e67e3ef..70bcdd5 100644 (file)
@@ -6,15 +6,10 @@ CLEANFILES =
 DISTCLEANFILES =
 MAINTAINERCLEANFILES =
 
-# Convenience targets:
-lib:
-       @$(MAKE) $(AM_MAKEFLAGS) -C $(top_builddir)/src lib
-
 manifests:
        @$(srcdir)/hb-manifest-update "$(srcdir)/texts" "$(srcdir)/fonts" "$(srcdir)/tests"
 
 EXTRA_DIST += \
-       README.md \
        hb-diff \
        hb-diff-colorize \
        hb-diff-filter-failures \
@@ -43,24 +38,12 @@ CLEANFILES += \
 TESTS = \
        tests/arabic-fallback-shaping.tests \
        tests/arabic-feature-order.tests \
-       tests/cluster.tests \
        tests/context-matching.tests \
-       tests/cursive-positioning.tests \
-       tests/default-ignorables.tests \
-       tests/fallback-positioning.tests \
-       tests/fuzzed.tests \
        tests/hangul-jamo.tests \
-       tests/hyphens.tests \
        tests/indic-joiner-candrabindu.tests \
        tests/indic-old-spec.tests \
        tests/indic-pref-blocking.tests \
-       tests/ligature-id.tests \
-       tests/mark-filtering-sets.tests \
        tests/mongolian-variation-selector.tests \
-       tests/spaces.tests \
-       tests/simple.tests \
-       tests/use.tests \
-       tests/vertical.tests \
        tests/zero-width-marks.tests \
        $(NULL)
 
index 7f2b708..8e726ff 100644 (file)
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.14 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994-2013 Free Software Foundation, Inc.
@@ -80,16 +80,10 @@ POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
 TESTS = tests/arabic-fallback-shaping.tests \
-       tests/arabic-feature-order.tests tests/cluster.tests \
-       tests/context-matching.tests tests/cursive-positioning.tests \
-       tests/default-ignorables.tests \
-       tests/fallback-positioning.tests tests/fuzzed.tests \
-       tests/hangul-jamo.tests tests/hyphens.tests \
-       tests/indic-joiner-candrabindu.tests \
+       tests/arabic-feature-order.tests tests/context-matching.tests \
+       tests/hangul-jamo.tests tests/indic-joiner-candrabindu.tests \
        tests/indic-old-spec.tests tests/indic-pref-blocking.tests \
-       tests/ligature-id.tests tests/mark-filtering-sets.tests \
-       tests/mongolian-variation-selector.tests tests/spaces.tests \
-       tests/simple.tests tests/use.tests tests/vertical.tests \
+       tests/mongolian-variation-selector.tests \
        tests/zero-width-marks.tests $(am__EXEEXT_1)
 subdir = test/shaping
 DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
@@ -355,8 +349,6 @@ CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
-DIRECTWRITE_CXXFLAGS = @DIRECTWRITE_CXXFLAGS@
-DIRECTWRITE_LIBS = @DIRECTWRITE_LIBS@
 DLLTOOL = @DLLTOOL@
 DSYMUTIL = @DSYMUTIL@
 DUMPBIN = @DUMPBIN@
@@ -366,20 +358,15 @@ ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
 FGREP = @FGREP@
-FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@
-FONTCONFIG_LIBS = @FONTCONFIG_LIBS@
 FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
-FREETYPE_DEPS = @FREETYPE_DEPS@
 FREETYPE_LIBS = @FREETYPE_LIBS@
 GIT = @GIT@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_DEPS = @GLIB_DEPS@
 GLIB_LIBS = @GLIB_LIBS@
 GLIB_MKENUMS = @GLIB_MKENUMS@
 GOBJECT_CFLAGS = @GOBJECT_CFLAGS@
 GOBJECT_LIBS = @GOBJECT_LIBS@
 GRAPHITE2_CFLAGS = @GRAPHITE2_CFLAGS@
-GRAPHITE2_DEPS = @GRAPHITE2_DEPS@
 GRAPHITE2_LIBS = @GRAPHITE2_LIBS@
 GREP = @GREP@
 GTKDOC_CHECK = @GTKDOC_CHECK@
@@ -505,12 +492,12 @@ top_srcdir = @top_srcdir@
 NULL = 
 
 # TODO Figure out Python stuff
-EXTRA_DIST = README.md 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 record-test.sh \
-       run-tests.sh texts/in-tree fonts/sha1sum $(TESTS) $(NULL) \
-       hb_test_tools.py $(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 \
+       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 = 
@@ -889,10 +876,6 @@ uninstall-am:
        uninstall uninstall-am
 
 
-# Convenience targets:
-lib:
-       @$(MAKE) $(AM_MAKEFLAGS) -C $(top_builddir)/src lib
-
 manifests:
        @$(srcdir)/hb-manifest-update "$(srcdir)/texts" "$(srcdir)/fonts" "$(srcdir)/tests"
 
diff --git a/test/shaping/README.md b/test/shaping/README.md
deleted file mode 100644 (file)
index bf09909..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-Adding tests
-============
-
-You can test shaping of a unicode sequence against a font like this:
-```sh
-$ ./hb-unicode-encode 41 42 43 627 | ../../util/hb-shape font.ttf
-```
-assuming an in-tree build.  The 41 42 43 627 here is a sequence of
-Unicode codepoints: U+0041,0042,0043,0627.  When you are happy with
-the shape results, you can use the `record-test.sh` script to add
-this to the test suite.  `record-test.sh` requires `pyftsubset` to
-be installed.  You can get `pyftsubset` by installing
-FontTools from <https://github.com/behdad/fonttools>.
-
-To use `record-test.sh`, just put it right before the `hb-shape` invocation:
-```sh
-$ ./hb-unicode-encode 41 42 43 627 | ./record-it.sh ../../util/hb-shape font.ttf
-```
-what this does is:
-  * Subset the font for the sequence of Unicode characters requested,
-  * Compare the `hb-shape` output of the original font versus the subset
-    font for the input sequence,
-  * If the outputs differ, perhaps it is because the font does not have
-    glyph names; it then compares the output of `hb-view` for both fonts.
-  * If the outputs differ, recording fails.  Otherwise, it will move the
-    subset font file into `fonts/sha1sum` and name it after its hash,
-    and prints out the test case input, which you can then redirect to
-    an existing or new test file in `tests`, eg.:
-```sh
-$ ./hb-unicode-encode 41 42 43 627 | ./record-it.sh ../../util/hb-shape font.ttf >> tests/test-name.test
-```
-
-If you created a new test file, add it to `Makefile.am` so it is run.
-Check that `make test` does indeed run it, and that the test passes.
-When everything looks good, `git add` the new font as well as new
-test file if you created any.  You can see what new files are there
-by running `git status tests fonts/sha1sum`.  And commit!
-
-*Note!*  Please only add tests using Open Source fonts, preferably under
-OFL or similar license.
diff --git a/test/shaping/fonts/sha1sum/0509e80afb379d16560e9e47bdd7d888bebdebc6.ttf b/test/shaping/fonts/sha1sum/0509e80afb379d16560e9e47bdd7d888bebdebc6.ttf
deleted file mode 100644 (file)
index 2036031..0000000
Binary files a/test/shaping/fonts/sha1sum/0509e80afb379d16560e9e47bdd7d888bebdebc6.ttf and /dev/null differ
diff --git a/test/shaping/fonts/sha1sum/051d92f8bc6ff724511b296c27623f824de256e9.ttf b/test/shaping/fonts/sha1sum/051d92f8bc6ff724511b296c27623f824de256e9.ttf
deleted file mode 100644 (file)
index 419f8f3..0000000
Binary files a/test/shaping/fonts/sha1sum/051d92f8bc6ff724511b296c27623f824de256e9.ttf and /dev/null differ
diff --git a/test/shaping/fonts/sha1sum/07f054357ff8638bac3711b422a1e31180bba863.ttf b/test/shaping/fonts/sha1sum/07f054357ff8638bac3711b422a1e31180bba863.ttf
deleted file mode 100644 (file)
index fcd4f32..0000000
Binary files a/test/shaping/fonts/sha1sum/07f054357ff8638bac3711b422a1e31180bba863.ttf and /dev/null differ
diff --git a/test/shaping/fonts/sha1sum/191826b9643e3f124d865d617ae609db6a2ce203.ttf b/test/shaping/fonts/sha1sum/191826b9643e3f124d865d617ae609db6a2ce203.ttf
deleted file mode 100644 (file)
index dbc6e26..0000000
Binary files a/test/shaping/fonts/sha1sum/191826b9643e3f124d865d617ae609db6a2ce203.ttf and /dev/null differ
diff --git a/test/shaping/fonts/sha1sum/1a6f1687b7a221f9f2c834b0b360d3c8463b6daf.ttf b/test/shaping/fonts/sha1sum/1a6f1687b7a221f9f2c834b0b360d3c8463b6daf.ttf
deleted file mode 100644 (file)
index c71e85a..0000000
Binary files a/test/shaping/fonts/sha1sum/1a6f1687b7a221f9f2c834b0b360d3c8463b6daf.ttf and /dev/null differ
diff --git a/test/shaping/fonts/sha1sum/1c04a16f32a39c26c851b7fc014d2e8d298ba2b8.ttf b/test/shaping/fonts/sha1sum/1c04a16f32a39c26c851b7fc014d2e8d298ba2b8.ttf
deleted file mode 100644 (file)
index 26d19ad..0000000
Binary files a/test/shaping/fonts/sha1sum/1c04a16f32a39c26c851b7fc014d2e8d298ba2b8.ttf and /dev/null differ
diff --git a/test/shaping/fonts/sha1sum/1c2c3fc37b2d4c3cb2ef726c6cdaaabd4b7f3eb9.ttf b/test/shaping/fonts/sha1sum/1c2c3fc37b2d4c3cb2ef726c6cdaaabd4b7f3eb9.ttf
deleted file mode 100644 (file)
index 213e7ce..0000000
Binary files a/test/shaping/fonts/sha1sum/1c2c3fc37b2d4c3cb2ef726c6cdaaabd4b7f3eb9.ttf and /dev/null differ
diff --git a/test/shaping/fonts/sha1sum/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf b/test/shaping/fonts/sha1sum/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf
deleted file mode 100644 (file)
index 7210658..0000000
Binary files a/test/shaping/fonts/sha1sum/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf and /dev/null differ
diff --git a/test/shaping/fonts/sha1sum/205edd09bd3d141cc9580f650109556cc28b22cb.ttf b/test/shaping/fonts/sha1sum/205edd09bd3d141cc9580f650109556cc28b22cb.ttf
deleted file mode 100644 (file)
index 4e0ce0a..0000000
Binary files a/test/shaping/fonts/sha1sum/205edd09bd3d141cc9580f650109556cc28b22cb.ttf and /dev/null differ
diff --git a/test/shaping/fonts/sha1sum/298c9e1d955f10f6f72c6915c3c6ff9bf9695cec.ttf b/test/shaping/fonts/sha1sum/298c9e1d955f10f6f72c6915c3c6ff9bf9695cec.ttf
deleted file mode 100644 (file)
index 0d677a8..0000000
Binary files a/test/shaping/fonts/sha1sum/298c9e1d955f10f6f72c6915c3c6ff9bf9695cec.ttf and /dev/null differ
diff --git a/test/shaping/fonts/sha1sum/3511ff5c1647150595846ac414c595cccac34f18.ttf b/test/shaping/fonts/sha1sum/3511ff5c1647150595846ac414c595cccac34f18.ttf
deleted file mode 100644 (file)
index 789abf7..0000000
Binary files a/test/shaping/fonts/sha1sum/3511ff5c1647150595846ac414c595cccac34f18.ttf and /dev/null differ
diff --git a/test/shaping/fonts/sha1sum/375d6ae32a3cbe52fbf81a4e5777e3377675d5a3.ttf b/test/shaping/fonts/sha1sum/375d6ae32a3cbe52fbf81a4e5777e3377675d5a3.ttf
deleted file mode 100644 (file)
index b284c98..0000000
Binary files a/test/shaping/fonts/sha1sum/375d6ae32a3cbe52fbf81a4e5777e3377675d5a3.ttf and /dev/null differ
diff --git a/test/shaping/fonts/sha1sum/43979b90b2dd929723cf4fe1715990bcb9c9a56b.ttf b/test/shaping/fonts/sha1sum/43979b90b2dd929723cf4fe1715990bcb9c9a56b.ttf
deleted file mode 100644 (file)
index a5c0156..0000000
Binary files a/test/shaping/fonts/sha1sum/43979b90b2dd929723cf4fe1715990bcb9c9a56b.ttf and /dev/null differ
diff --git a/test/shaping/fonts/sha1sum/43ef465752be9af900745f72fe29cb853a1401a5.ttf b/test/shaping/fonts/sha1sum/43ef465752be9af900745f72fe29cb853a1401a5.ttf
deleted file mode 100644 (file)
index 649c156..0000000
Binary files a/test/shaping/fonts/sha1sum/43ef465752be9af900745f72fe29cb853a1401a5.ttf and /dev/null differ
diff --git a/test/shaping/fonts/sha1sum/45855bc8d46332b39c4ab9e2ee1a26b1f896da6b.ttf b/test/shaping/fonts/sha1sum/45855bc8d46332b39c4ab9e2ee1a26b1f896da6b.ttf
deleted file mode 100644 (file)
index 6ef470c..0000000
Binary files a/test/shaping/fonts/sha1sum/45855bc8d46332b39c4ab9e2ee1a26b1f896da6b.ttf and /dev/null differ
diff --git a/test/shaping/fonts/sha1sum/49c9f7485c1392fa09a1b801bc2ffea79275f22e.ttf b/test/shaping/fonts/sha1sum/49c9f7485c1392fa09a1b801bc2ffea79275f22e.ttf
deleted file mode 100644 (file)
index ea1326d..0000000
Binary files a/test/shaping/fonts/sha1sum/49c9f7485c1392fa09a1b801bc2ffea79275f22e.ttf and /dev/null differ
diff --git a/test/shaping/fonts/sha1sum/56cfd0e18d07f41c38e9598545a6d369127fc6f9.ttf b/test/shaping/fonts/sha1sum/56cfd0e18d07f41c38e9598545a6d369127fc6f9.ttf
deleted file mode 100644 (file)
index 4795238..0000000
Binary files a/test/shaping/fonts/sha1sum/56cfd0e18d07f41c38e9598545a6d369127fc6f9.ttf and /dev/null differ
diff --git a/test/shaping/fonts/sha1sum/5a5daf5eb5a4db77a2baa3ad9c7a6ed6e0655fa8.ttf b/test/shaping/fonts/sha1sum/5a5daf5eb5a4db77a2baa3ad9c7a6ed6e0655fa8.ttf
deleted file mode 100644 (file)
index 9b4d23f..0000000
Binary files a/test/shaping/fonts/sha1sum/5a5daf5eb5a4db77a2baa3ad9c7a6ed6e0655fa8.ttf and /dev/null differ
diff --git a/test/shaping/fonts/sha1sum/641bd9db850193064d17575053ae2bf8ec149ddc.ttf b/test/shaping/fonts/sha1sum/641bd9db850193064d17575053ae2bf8ec149ddc.ttf
deleted file mode 100644 (file)
index 66cefd4..0000000
Binary files a/test/shaping/fonts/sha1sum/641bd9db850193064d17575053ae2bf8ec149ddc.ttf and /dev/null differ
diff --git a/test/shaping/fonts/sha1sum/6466d38c62e73a39202435a4f73bf5d6acbb73c0.ttf b/test/shaping/fonts/sha1sum/6466d38c62e73a39202435a4f73bf5d6acbb73c0.ttf
deleted file mode 100644 (file)
index 33c4229..0000000
Binary files a/test/shaping/fonts/sha1sum/6466d38c62e73a39202435a4f73bf5d6acbb73c0.ttf and /dev/null differ
diff --git a/test/shaping/fonts/sha1sum/706c5d7b625f207bc0d874c67237aad6f1e9cd6f.ttf b/test/shaping/fonts/sha1sum/706c5d7b625f207bc0d874c67237aad6f1e9cd6f.ttf
deleted file mode 100644 (file)
index eb5c50c..0000000
Binary files a/test/shaping/fonts/sha1sum/706c5d7b625f207bc0d874c67237aad6f1e9cd6f.ttf and /dev/null differ
diff --git a/test/shaping/fonts/sha1sum/7a37dc4d5bf018456aea291cee06daf004c0221c.ttf b/test/shaping/fonts/sha1sum/7a37dc4d5bf018456aea291cee06daf004c0221c.ttf
deleted file mode 100644 (file)
index a5787a8..0000000
Binary files a/test/shaping/fonts/sha1sum/7a37dc4d5bf018456aea291cee06daf004c0221c.ttf and /dev/null differ
diff --git a/test/shaping/fonts/sha1sum/7ef276fc886ea502a03b9b0e5c8b547d5dc2b61c.ttf b/test/shaping/fonts/sha1sum/7ef276fc886ea502a03b9b0e5c8b547d5dc2b61c.ttf
deleted file mode 100644 (file)
index fb4534a..0000000
Binary files a/test/shaping/fonts/sha1sum/7ef276fc886ea502a03b9b0e5c8b547d5dc2b61c.ttf and /dev/null differ
diff --git a/test/shaping/fonts/sha1sum/8099955657a54e9ee38a6ba1d6f950ce58e3cc25.ttf b/test/shaping/fonts/sha1sum/8099955657a54e9ee38a6ba1d6f950ce58e3cc25.ttf
deleted file mode 100644 (file)
index 6bb13bd..0000000
Binary files a/test/shaping/fonts/sha1sum/8099955657a54e9ee38a6ba1d6f950ce58e3cc25.ttf and /dev/null differ
diff --git a/test/shaping/fonts/sha1sum/8240789f6d12d4cfc4b5e8e6f246c3701bcf861f.ttf b/test/shaping/fonts/sha1sum/8240789f6d12d4cfc4b5e8e6f246c3701bcf861f.ttf
deleted file mode 100644 (file)
index 8eed14d..0000000
Binary files a/test/shaping/fonts/sha1sum/8240789f6d12d4cfc4b5e8e6f246c3701bcf861f.ttf and /dev/null differ
diff --git a/test/shaping/fonts/sha1sum/MANIFEST b/test/shaping/fonts/sha1sum/MANIFEST
new file mode 100644 (file)
index 0000000..924732d
--- /dev/null
@@ -0,0 +1,19 @@
+226bc2deab3846f1a682085f70c67d0421014144.ttf
+270b89df543a7e48e206a2d830c0e10e5265c630.ttf
+37033cc5cf37bb223d7355153016b6ccece93b28.ttf
+4cce528e99f600ed9c25a2b69e32eb94a03b4ae8.ttf
+5028afb650b1bb718ed2131e872fbcce57828fff.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/a34a7b00f22ffb5fd7eef6933b81c7e71bc2cdfb.ttf b/test/shaping/fonts/sha1sum/a34a7b00f22ffb5fd7eef6933b81c7e71bc2cdfb.ttf
deleted file mode 100644 (file)
index 74fceec..0000000
Binary files a/test/shaping/fonts/sha1sum/a34a7b00f22ffb5fd7eef6933b81c7e71bc2cdfb.ttf and /dev/null differ
diff --git a/test/shaping/fonts/sha1sum/a98e908e2ed21b22228ea59ebcc0f05034c86f2e.ttf b/test/shaping/fonts/sha1sum/a98e908e2ed21b22228ea59ebcc0f05034c86f2e.ttf
deleted file mode 100644 (file)
index 8bbddb1..0000000
Binary files a/test/shaping/fonts/sha1sum/a98e908e2ed21b22228ea59ebcc0f05034c86f2e.ttf and /dev/null differ
diff --git a/test/shaping/fonts/sha1sum/b9e2aaa0d75fcef6971ec3a96d806ba4a6b31fe2.ttf b/test/shaping/fonts/sha1sum/b9e2aaa0d75fcef6971ec3a96d806ba4a6b31fe2.ttf
deleted file mode 100644 (file)
index 500276d..0000000
Binary files a/test/shaping/fonts/sha1sum/b9e2aaa0d75fcef6971ec3a96d806ba4a6b31fe2.ttf and /dev/null differ
diff --git a/test/shaping/fonts/sha1sum/bb0c53752e85c3d28973ebc913287b8987d3dfe8.ttf b/test/shaping/fonts/sha1sum/bb0c53752e85c3d28973ebc913287b8987d3dfe8.ttf
deleted file mode 100644 (file)
index 3b7c470..0000000
Binary files a/test/shaping/fonts/sha1sum/bb0c53752e85c3d28973ebc913287b8987d3dfe8.ttf and /dev/null differ
diff --git a/test/shaping/fonts/sha1sum/c4e48b0886ef460f532fb49f00047ec92c432ec0.ttf b/test/shaping/fonts/sha1sum/c4e48b0886ef460f532fb49f00047ec92c432ec0.ttf
deleted file mode 100644 (file)
index 99cda16..0000000
Binary files a/test/shaping/fonts/sha1sum/c4e48b0886ef460f532fb49f00047ec92c432ec0.ttf and /dev/null differ
diff --git a/test/shaping/fonts/sha1sum/cc5f3d2d717fb6bd4dfae1c16d48a2cb8e12233b.ttf b/test/shaping/fonts/sha1sum/cc5f3d2d717fb6bd4dfae1c16d48a2cb8e12233b.ttf
deleted file mode 100644 (file)
index a48d2a6..0000000
Binary files a/test/shaping/fonts/sha1sum/cc5f3d2d717fb6bd4dfae1c16d48a2cb8e12233b.ttf and /dev/null differ
diff --git a/test/shaping/fonts/sha1sum/f22416c692720a7d46fadf4af99f4c9e094f00b9.ttf b/test/shaping/fonts/sha1sum/f22416c692720a7d46fadf4af99f4c9e094f00b9.ttf
deleted file mode 100644 (file)
index 1dbadde..0000000
Binary files a/test/shaping/fonts/sha1sum/f22416c692720a7d46fadf4af99f4c9e094f00b9.ttf and /dev/null differ
diff --git a/test/shaping/fonts/sha1sum/f518eb6f6b5eec2946c9fbbbde44e45d46f5e2ac.ttf b/test/shaping/fonts/sha1sum/f518eb6f6b5eec2946c9fbbbde44e45d46f5e2ac.ttf
deleted file mode 100644 (file)
index 039f5e8..0000000
Binary files a/test/shaping/fonts/sha1sum/f518eb6f6b5eec2946c9fbbbde44e45d46f5e2ac.ttf and /dev/null differ
diff --git a/test/shaping/fonts/sha1sum/fab39d60d758cb586db5a504f218442cd1395725.ttf b/test/shaping/fonts/sha1sum/fab39d60d758cb586db5a504f218442cd1395725.ttf
deleted file mode 100644 (file)
index 451ed04..0000000
Binary files a/test/shaping/fonts/sha1sum/fab39d60d758cb586db5a504f218442cd1395725.ttf and /dev/null differ
diff --git a/test/shaping/fonts/sha1sum/fbb6c84c9e1fe0c39e152fbe845e51fd81f6748e.ttf b/test/shaping/fonts/sha1sum/fbb6c84c9e1fe0c39e152fbe845e51fd81f6748e.ttf
deleted file mode 100644 (file)
index d49432d..0000000
Binary files a/test/shaping/fonts/sha1sum/fbb6c84c9e1fe0c39e152fbe845e51fd81f6748e.ttf and /dev/null differ
diff --git a/test/shaping/fonts/sha1sum/fcdcffbdf1c4c97c05308d7600e4c283eb47dbca.ttf b/test/shaping/fonts/sha1sum/fcdcffbdf1c4c97c05308d7600e4c283eb47dbca.ttf
deleted file mode 100644 (file)
index c4e0253..0000000
Binary files a/test/shaping/fonts/sha1sum/fcdcffbdf1c4c97c05308d7600e4c283eb47dbca.ttf and /dev/null differ
diff --git a/test/shaping/fonts/sha1sum/ffa0f5d2d9025486d8469d8b1fdd983e7632499b.ttf b/test/shaping/fonts/sha1sum/ffa0f5d2d9025486d8469d8b1fdd983e7632499b.ttf
deleted file mode 100644 (file)
index 224dbc6..0000000
Binary files a/test/shaping/fonts/sha1sum/ffa0f5d2d9025486d8469d8b1fdd983e7632499b.ttf and /dev/null differ
index 3705de7..6a13fa2 100755 (executable)
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/python
 
 from hb_test_tools import *
 import sys, os
index 1fdae8a..4e045d2 100755 (executable)
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/python
 
 from hb_test_tools import *
 
index 34b76de..4fe218a 100755 (executable)
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/python
 
 from hb_test_tools import *
 
index c02f541..a496447 100755 (executable)
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/python
 
 from hb_test_tools import *
 
index 12ee8f0..81626e1 100755 (executable)
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/python
 
 from hb_test_tools import *
 
index b1b36ba..f486bcc 100755 (executable)
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/python
 
 from hb_test_tools import *
 
index eeb84b8..b963f22 100755 (executable)
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/python
 
 from hb_test_tools import *
 
index 9ac5ed6..5b00eae 100755 (executable)
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/python
 
 from hb_test_tools import *
 
index 5889807..11bf365 100755 (executable)
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/python
 
 from hb_test_tools import *
 
index 1d004c0..ecc26cc 100755 (executable)
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/python
 
 from hb_test_tools import *
 
index 747699b..a370e5e 100644 (file)
@@ -1,15 +1,11 @@
-#!/usr/bin/env python
+#!/usr/bin/python
 
-from __future__ import print_function
 import sys, os, re, difflib, unicodedata, errno, cgi
 from itertools import *
 
 diff_symbols = "-+=*&^%$#@!~/"
 diff_colors = ['red', 'green', 'blue']
 
-if sys.version_info[0] >= 3:
-       unichr = chr
-
 class ColorFormatter:
 
        class Null:
@@ -146,7 +142,7 @@ class ZipDiffer:
                                                sys.stdout.writelines ([symbols[i], l])
                except IOError as e:
                        if e.errno != errno.EPIPE:
-                               print ("%s: %s: %s" % (sys.argv[0], e.filename, e.strerror), file=sys.stderr)
+                               print >> sys.stderr, "%s: %s: %s" % (sys.argv[0], e.filename, e.strerror)
                                sys.exit (1)
 
 
@@ -219,7 +215,7 @@ class DiffSinks:
                        else:
                                failed += 1
                total = passed + failed
-               print ("%d out of %d tests passed.  %d failed (%g%%)" % (passed, total, failed, 100. * failed / total))
+               print "%d out of %d tests passed.  %d failed (%g%%)" % (passed, total, failed, 100. * failed / total)
 
        @staticmethod
        def print_ngrams (f, ns=(1,2,3)):
@@ -244,7 +240,7 @@ class DiffSinks:
                del importantgrams
 
                for ngram, stats in allgrams.iteritems ():
-                       print ("zscore: %9f failed: %6d passed: %6d ngram: <%s>" % (stats.zscore (allstats), stats.failed.count, stats.passed.count, ','.join ("U+%04X" % u for u in ngram)))
+                       print "zscore: %9f failed: %6d passed: %6d ngram: <%s>" % (stats.zscore (allstats), stats.failed.count, stats.passed.count, ','.join ("U+%04X" % u for u in ngram))
 
 
 
@@ -314,7 +310,7 @@ class FilterHelpers:
        def filter_printer_function (filter_callback):
                def printer (f):
                        for line in filter_callback (f):
-                               print (line)
+                               print line
                return printer
 
        @staticmethod
@@ -348,7 +344,7 @@ class UtilMains:
        def process_multiple_files (callback, mnemonic = "FILE"):
 
                if "--help" in sys.argv:
-                       print ("Usage: %s %s..." % (sys.argv[0], mnemonic))
+                       print "Usage: %s %s..." % (sys.argv[0], mnemonic)
                        sys.exit (1)
 
                try:
@@ -357,14 +353,14 @@ class UtilMains:
                                callback (FileHelpers.open_file_or_stdin (s))
                except IOError as e:
                        if e.errno != errno.EPIPE:
-                               print ("%s: %s: %s" % (sys.argv[0], e.filename, e.strerror), file=sys.stderr)
+                               print >> sys.stderr, "%s: %s: %s" % (sys.argv[0], e.filename, e.strerror)
                                sys.exit (1)
 
        @staticmethod
        def process_multiple_args (callback, mnemonic):
 
                if len (sys.argv) == 1 or "--help" in sys.argv:
-                       print ("Usage: %s %s..." % (sys.argv[0], mnemonic))
+                       print "Usage: %s %s..." % (sys.argv[0], mnemonic)
                        sys.exit (1)
 
                try:
@@ -372,7 +368,7 @@ class UtilMains:
                                callback (s)
                except IOError as e:
                        if e.errno != errno.EPIPE:
-                               print ("%s: %s: %s" % (sys.argv[0], e.filename, e.strerror), file=sys.stderr)
+                               print >> sys.stderr, "%s: %s: %s" % (sys.argv[0], e.filename, e.strerror)
                                sys.exit (1)
 
        @staticmethod
@@ -381,8 +377,8 @@ class UtilMains:
                                              concat_separator = False):
 
                if "--help" in sys.argv:
-                       print ("Usage:\n  %s %s...\nor:\n  %s\n\nWhen called with no arguments, input is read from standard input." \
-                             % (sys.argv[0], mnemonic, sys.argv[0]))
+                       print "Usage:\n  %s %s...\nor:\n  %s\n\nWhen called with no arguments, input is read from standard input." \
+                             % (sys.argv[0], mnemonic, sys.argv[0])
                        sys.exit (1)
 
                try:
@@ -393,15 +389,15 @@ class UtilMains:
                                                break
                                        if line[-1] == '\n':
                                                line = line[:-1]
-                                       print (callback (line))
+                                       print callback (line)
                        else:
                                args = sys.argv[1:]
                                if concat_separator != False:
                                        args = [concat_separator.join (args)]
-                               print (separator.join (callback (x) for x in (args)))
+                               print separator.join (callback (x) for x in (args))
                except IOError as e:
                        if e.errno != errno.EPIPE:
-                               print ("%s: %s: %s" % (sys.argv[0], e.filename, e.strerror), file=sys.stderr)
+                               print >> sys.stderr, "%s: %s: %s" % (sys.argv[0], e.filename, e.strerror)
                                sys.exit (1)
 
 
@@ -414,14 +410,12 @@ class Unicode:
        @staticmethod
        def parse (s):
                s = re.sub (r"0[xX]", " ", s)
-               s = re.sub (r"[<+>{},;&#\\xXuUnNiI\n    ]", " ", s)
+               s = re.sub (r"[<+>,;&#\\xXuU\n  ]", " ", s)
                return [int (x, 16) for x in s.split ()]
 
        @staticmethod
        def encode (s):
-               s = u''.join (unichr (x) for x in Unicode.parse (s))
-               if sys.version_info[0] == 2: s = s.encode ('utf-8')
-               return s
+               return u''.join (unichr (x) for x in Unicode.parse (s)).encode ('utf-8')
 
        shorthands = {
                "ZERO WIDTH NON-JOINER": "ZWNJ",
@@ -477,7 +471,7 @@ class Manifest:
 
                if not os.path.exists (s):
                        if strict:
-                               print ("%s: %s does not exist" % (sys.argv[0], s), file=sys.stderr)
+                               print >> sys.stderr, "%s: %s does not exist" % (sys.argv[0], s)
                                sys.exit (1)
                        return
 
@@ -493,7 +487,7 @@ class Manifest:
                                                yield p
                        except IOError:
                                if strict:
-                                       print ("%s: %s does not exist" % (sys.argv[0], os.path.join (s, "MANIFEST")), file=sys.stderr)
+                                       print >> sys.stderr, "%s: %s does not exist" % (sys.argv[0], os.path.join (s, "MANIFEST"))
                                        sys.exit (1)
                                return
                else:
@@ -512,12 +506,12 @@ class Manifest:
                        dirnames.sort ()
                        filenames.sort ()
                        ms = os.path.join (dirpath, "MANIFEST")
-                       print ("  GEN    %s" % ms)
+                       print "  GEN    %s" % ms
                        m = open (ms, "w")
                        for f in filenames:
-                               print (f, file=m)
+                               print >> m, f
                        for f in dirnames:
-                               print (f, file=m)
+                               print >> m, f
                        for f in dirnames:
                                Manifest.update_recursive (os.path.join (dirpath, f))
 
index b2a74f7..a69157f 100755 (executable)
@@ -5,47 +5,15 @@ dir=`mktemp --directory`
 hb_shape=$1
 shift
 fontfile=$1
-if test "x${fontfile:0:1}" == 'x-'; then
-       echo "Specify font file before other options." >&2
-       exit 1
-fi
 shift
-if ! echo "$hb_shape" | grep -q 'hb-shape'; then
-       echo "Specify hb-shape (not hb-view, etc)." >&2
-       exit 1
-fi
-options=
-have_text=false
-for arg in "$@"; do
-       if test "x${arg:0:1}" == 'x-'; then
-               if echo "$arg" | grep -q ' '; then
-                       echo "Space in argument is not supported: '$arg'." >&2
-                       exit 1
-               fi
-               options="$options${options:+ }$arg"
-               continue
-       fi
-       if $have_text; then
-               echo "Too many arguments found...  Use '=' notation for options: '$arg'" >&2
-               exit 1;
-       fi
-       text="$arg"
-       have_text=true
-done
-if ! $have_text; then
-       text=`cat`
-fi
-unicodes=`echo "$text" | ./hb-unicode-decode`
-glyphs=`echo "$text" | $hb_shape $options "$fontfile"`
-if test $? != 0; then
-       echo "hb-shape failed." >&2
-       exit 2
-fi
+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 \
-       --no-hinting \
        "$dir/font.ttf" \
        --text="$text"
 if ! test -s "$dir/font.ttf.subset"; then
@@ -54,14 +22,14 @@ if ! test -s "$dir/font.ttf.subset"; then
 fi
 
 # Verify that subset font produces same glyphs!
-glyphs_subset=`echo "$text" | $hb_shape $options "$dir/font.ttf.subset"`
+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 $options "$dir/font.ttf" --output-format=png --output-file="$dir/orig.png"
-       echo "$text" | $hb_view $options "$dir/font.ttf.subset" --output-format=png --output-file="$dir/subset.png"
+       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"
@@ -78,18 +46,7 @@ sha1sum=`sha1sum "$dir/font.ttf.subset" | cut -d' ' -f1`
 subset="fonts/sha1sum/$sha1sum.ttf"
 mv "$dir/font.ttf.subset" "$subset"
 
-# There ought to be an easier way to do this, but it escapes me...
-unicodes_file=`mktemp`
-glyphs_file=`mktemp`
-echo "$unicodes" > "$unicodes_file"
-echo "$glyphs" > "$glyphs_file"
-# Open the "file"s
-exec 3<"$unicodes_file"
-exec 4<"$glyphs_file"
-while read uline <&3 && read gline <&4; do
-       echo "$subset:$options:$uline:$gline"
-done
-
+echo "$subset:$unicodes:$glyphs"
 
 rm -f "$dir/font.ttf"
 rmdir "$dir"
index 021c6f8..a2cdf32 100755 (executable)
@@ -8,34 +8,16 @@ hb_shape=$top_builddir/util/hb-shape$EXEEXT
 
 fails=0
 
-reference=false
-if test "x$1" = x--reference; then
-       reference=true
-       shift
-fi
-
 if test $# = 0; then
        set /dev/stdin
 fi
 
+IFS=:
 for f in "$@"; do
-       $reference || echo "Running tests in $f"
-       while IFS=: read fontfile options unicodes glyphs_expected; do
-               if echo "$fontfile" | grep -q '^#'; then
-                       $reference || echo "Skipping $fontfile:$unicodes"
-                       continue
-               fi
-               $reference || echo "Testing $fontfile:$unicodes"
-               glyphs=`$srcdir/hb-unicode-encode "$unicodes" | $hb_shape $options "$srcdir/$fontfile"`
-               if test $? != 0; then
-                       echo "hb-shape failed." >&2
-                       fails=$((fails+1))
-                       continue
-               fi
-               if $reference; then
-                       echo "$fontfile:$options:$unicodes:$glyphs"
-                       continue
-               fi
+       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
@@ -45,8 +27,8 @@ for f in "$@"; do
 done
 
 if test $fails != 0; then
-       $reference || echo "$fails tests failed."
+       echo "$fails tests failed."
        exit 1
 else
-       $reference || echo "All tests passed."
+       echo "All tests passed."
 fi
index 6f1cb8b..e3eaf3f 100644 (file)
@@ -1 +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@221,0+0|uni0651=2@260,736+0|uni064E=2@935,1259+0|uni0651=2@974,736+0|uni06440627.fina=2+1470|uni064F=0@558,-10+0|uni0633.init=0+1585]
+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@221,0+0|uni0651=2@260,736+0|uni064E=2@935,1259+0|uni0651=2@974,736+0|uni06440627.fina=2+1470|uni064F=0@558,-10+0|uni0633.init=0+1585]
index e60ab1a..3e3cf6a 100644 (file)
@@ -1,3 +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]
+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/cluster.tests b/test/shaping/tests/cluster.tests
deleted file mode 100644 (file)
index 24f04dd..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-fonts/sha1sum/6466d38c62e73a39202435a4f73bf5d6acbb73c0.ttf:--cluster-level=2:U+0078,U+030A,U+0058,U+030A:[gid2=0+1083|gid4=1@-555,-8+0|gid1=2+1200|gid4=3@-614,349+0]
-fonts/sha1sum/43ef465752be9af900745f72fe29cb853a1401a5.ttf:--cluster-level=1:U+05D4,U+05B7,U+05E9,U+05BC,U+05C1,U+05B8,U+05DE,U+05B4,U+05DD:[uni05DD=8+1359|uni05B4=7@111,0+0|uni05DE=6+1391|uni05B8=5+0|uni05BC=3+0|uni05C1=3+0|uni05E9=2+1451|uni05B7=1@28,0+0|uni05D4=0+1338]
index e20616e..4c7d25f 100644 (file)
@@ -1,3 +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+0|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]
+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/cursive-positioning.tests b/test/shaping/tests/cursive-positioning.tests
deleted file mode 100644 (file)
index ce63bd1..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-fonts/sha1sum/c4e48b0886ef460f532fb49f00047ec92c432ec0.ttf::U+0643,U+0645,U+0645,U+062B,U+0644:[gid8=4+738|gid5=3@441,1197+0|gid6=3@0,432+405|gid9=2@0,477+452|gid9=1@0,977+452|gid10=0@20,1577+207]
-fonts/sha1sum/298c9e1d955f10f6f72c6915c3c6ff9bf9695cec.ttf::U+0643,U+0645,U+0645,U+062B,U+0644:[gid8=4+738|gid5=3@441,1197+0|gid6=3@0,432+405|gid9=2@0,477+500|gid9=1@0,577+452|gid10=0@20,1177+207]
-#fonts/sha1sum/706c5d7b625f207bc0d874c67237aad6f1e9cd6f.ttf::U+0B1F,U+0B4D,U+0B1A,U+0B4D,U+0B1A:[ttaorya=0+1307|casubscriptorya=0@-242,104+-231|casubscriptnarroworya=0@20,104+507]
-fonts/sha1sum/07f054357ff8638bac3711b422a1e31180bba863.ttf:--font-funcs=ot --no-glyph-names:U+0606,U+06E1:[2=0@40,502+0|1=0+1000]
diff --git a/test/shaping/tests/default-ignorables.tests b/test/shaping/tests/default-ignorables.tests
deleted file mode 100644 (file)
index 2d3ce97..0000000
+++ /dev/null
@@ -1 +0,0 @@
-fonts/sha1sum/051d92f8bc6ff724511b296c27623f824de256e9.ttf::U+0075,U+0361,U+034F,U+0301,U+0069:[gid2=0+1266|gid7=0@-617,442+0|gid5=0@-7,0+0|gid1=4+528]
diff --git a/test/shaping/tests/fallback-positioning.tests b/test/shaping/tests/fallback-positioning.tests
deleted file mode 100644 (file)
index 499db7d..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-fonts/sha1sum/7ef276fc886ea502a03b9b0e5c8b547d5dc2b61c.ttf:--font-funcs=ft:U+0078,U+0301,U+0058,U+0301:[x=0+1030|acutecomb=0@-45,-32+0|X=2+1295|acutecomb=2@-171,310+0]
-fonts/sha1sum/7ef276fc886ea502a03b9b0e5c8b547d5dc2b61c.ttf:--font-funcs=ot:U+0078,U+0301,U+0058,U+0301:[gid2=0+1030|gid4=0@-21,-27+0|gid1=2+1295|gid4=2@-147,321+0]
diff --git a/test/shaping/tests/fuzzed.tests b/test/shaping/tests/fuzzed.tests
deleted file mode 100644 (file)
index 7a5d395..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-fonts/sha1sum/1a6f1687b7a221f9f2c834b0b360d3c8463b6daf.ttf:--font-funcs=ot:U+0041:[gid0=0+1000]
-fonts/sha1sum/5a5daf5eb5a4db77a2baa3ad9c7a6ed6e0655fa8.ttf:--font-funcs=ot:U+0041:[gid0=0+1000]
-fonts/sha1sum/0509e80afb379d16560e9e47bdd7d888bebdebc6.ttf:--font-funcs=ot:U+0041:[gid0=0+1000]
-fonts/sha1sum/641bd9db850193064d17575053ae2bf8ec149ddc.ttf:--font-funcs=ot:U+0041:[gid0=0+1000]
-fonts/sha1sum/375d6ae32a3cbe52fbf81a4e5777e3377675d5a3.ttf:--font-funcs=ot:U+0041:[gid0=0+4352]
-fonts/sha1sum/8240789f6d12d4cfc4b5e8e6f246c3701bcf861f.ttf:--font-funcs=ot:U+0041:[gid0=0+1024]
-fonts/sha1sum/b9e2aaa0d75fcef6971ec3a96d806ba4a6b31fe2.ttf:--font-funcs=ot:U+0041:[gid0=0+1000|gid1=0+1000|gid8=0+1000|gid3=0+1000|gid0=0+1000|gid1=0+1000|gid1=0+1000|gid8=0+1000|gid3=0+1000|gid0=0+1000|gid1=0+1000|gid8=0+1000|gid3=0+1000|gid0=0+1000|gid1=0+1000|gid1=0+1000]
-fonts/sha1sum/43979b90b2dd929723cf4fe1715990bcb9c9a56b.ttf:--font-funcs=ot:U+0041:[gid0=0+1000]
-fonts/sha1sum/3511ff5c1647150595846ac414c595cccac34f18.ttf:--font-funcs=ot:U+0041:[gid0=0+1000|gid512=0+1000|gid15104=0+1000|gid11004=0+1000|gid3408=0+1000|gid18244=0+1000|gid17872=0+1000|gid17961=0+1000|gid0=0+1000|gid992=0+1000|gid15616=0+1000|gid0=0+1000|gid14151=0+1000|gid20559=0+1000|gid20992=0+1000|gid5440=0+1000|gid256=0+1000|gid0=0+1000|gid10=0+1000|gid8960=0+1000|gid256=0+1000|gid1024=0+1000|gid1490=0+1000|gid0=0+1000|gid768=0+1000|gid4096=0+1000|gid256=0+1000|gid2216=0+1000|gid0=0+1000|gid256=0+1000|gid256=0+1000|gid0=0+1000|gid768=0+1000|gid10752=0+1000|gid11004=0+1000|gid3408=0+1000|gid18244=0+1000|gid17734=0+1000|gid53248=0+1000|gid256=0+1000|gid0=0+1000|gid512=0+1000|gid14848=0+1000|gid10793=0+1000|gid57344=0+1000|gid768=0+1000|gid18227=0+1000|gid20285=0+1000|gid20480=0+1000|gid0=0+1000|gid256=0+1000|gid0=0+1000|gid810=0+1000|gid0=0+1000|gid11004=0+1000|gid3408=0+1000|gid18244=0+1000|gid17734=0+1000|gid53289=0+1000|gid57344=0+1000|gid768=0+1000|gid15667=0+1000|gid71=0+1000|gid0=0+1000|gid20559=0+1000|gid21248=0+1000|gid256=0+1000|gid0=0+1000|gid2816=0+1000|gid2776=0+1000|gid0=0+1000|gid51516=0+1000|gid0=0+1000|gid32=0+1000|gid26209=0+1000|gid28005=0+1000|gid65249=0+1000|gid29690=0+1000|gid0=0+1000|gid51548=0+1000|gid0=0+1000|gid2454=0+1000|gid28783=0+1000|gid29556=0+1000|gid1291=0+1000|gid3458=0+1000|gid80=0+1000|gid0=0+1000|gid2804=0+1000|gid210=0+1000|gid28786=0+1000|gid25968=0+1000|gid45763=0+1000|gid50546=0+1000|gid0=0+1000|gid59136=0+1000|gid0=0+1000|gid38144=0+1000|gid256=0+1000|gid0=0+1000|gid2560=0+1000|gid30208=0+1000|gid52224=0+1000|gid580=0+1000|gid17996=0+1000|gid21504=0+1000|gid6734=0+1000|gid108=0+1000|gid116=0+1000|gid24846=0+1000|gid1024=0+1000|gid0=0+1000|gid255=0+1000|gid65280=0+1000|gid256=0+1000|gid0=0+1000|gid8704=0+1000|gid1345=0+1000|gid23109=0+1000|gid8192=0+1000|gid10823=0+1000|gid21076=0+1000|gid8192=0+1000|gid12877=0+1000|gid20300=0+1000|gid8192=0+1000|gid6738=0+1000|gid20301=0+1000|gid8192=0+1000|gid16980=0+1000|gid21067=0+1000|gid8251=0+1000|gid18944=0+1000|gid255=0+1000|gid65280=0+1000|gid15360=0+1000|gid256=0+1000|gid255=0+1000|gid65280=0+1000|gid256=0+1000|gid768=0+1000|gid255=0+1000|gid65280=0+1000|gid256=0+1000|gid768=0+1000|gid255=0+1000|gid65280=0+1000|gid256=0+1000|gid1024=0+1000|gid12=0+1000|gid65280=0+1000|gid256=0+1000|gid1280=0+1000|gid255=0+1000|gid65280=0+1000|gid256=0+1000|gid1536=0+1000|gid1899=0+1000|gid25970=0+1000|gid110=0+1000|gid11264=0+1000|gid27502=0+1000|gid29285=0+1000|gid12907=0+1000|gid25974=0+1000|gid28160=0+1000|gid14443=0+1000|gid25970=0+1000|gid28288=0+1000|gid3=0+1000|gid118=0+1000|gid18259=0+1000|gid21826=0+1000|gid45716=0+1000|gid46369=0+1000|gid0=0+1000|gid0=0+1000|gid1=0+1000|gid16=0+1000|gid17=0+1000|gid256=0+1000|gid4=0+1000|gid16=0+1000|gid18244=0+1000|gid17734=0+1000|gid28=0+1000|gid12=0+1000|gid0=0+1000|gid284=0+1000|gid0=0+1000|gid28=0+1000|gid18256=0+1000|gid20307=0+1000|gid45114=0+1000|gid47616=0+1000|gid226=0+1000|gid10296=0+1000|gid0=0+1000|gid57927=0+1000|gid1=0+1000|gid0=0+1000|gid0=0+1000|gid21248=0+1000|gid5440=0+1000|gid256=0+1000|gid0=0+1000|gid10=0+1000|gid768=0+1000|gid256=0+1000|gid1024=0+1000|gid512=0+1000|gid0=0+1000|gid297=0+1000|gid16=0+1000|gid24833=0+1000|gid28774=0+1000|gid10794=0+1000|gid2304=0+1000|gid29=0+1000|gid32=0+1000|gid42=0+1000|gid64515=0+1000|gid42=0+1000|gid42=0+1000|gid64525=0+1000|gid20551=0+1000|gid17477=0+1000|gid18128=0+1000|gid10720=0+1000|gid3=0+1000|gid61=0+1000|gid3408=0+1000|gid18244=0+1000|gid17734=0+1000|gid53289=0+1000|gid57344=0+1000|gid768=0+1000|gid15616=0+1000|gid512=0+1000|gid55=0+1000|gid10576=0+1000|gid20307=0+1000|gid0=0+1000|gid255=0+1000|gid56063=0+1000|gid53504=0+1000|gid42=0+1000|gid42=0+1000|gid64525=0+1000|gid12288=0+1000|gid18176=0+1000|gid80=0+1000|gid20307=0+1000|gid1=0+1000|gid0=0+1000|gid62=0+1000]
-fonts/sha1sum/fab39d60d758cb586db5a504f218442cd1395725.ttf:--font-funcs=ot:U+0041,U+0041:[gid0=0+1000|gid0=1+1000]
-fonts/sha1sum/205edd09bd3d141cc9580f650109556cc28b22cb.ttf:--font-funcs=ot:U+0041:[gid0=0+1000]
index fe9973f..667a1cc 100644 (file)
@@ -1,2 +1,2 @@
-fonts/sha1sum/757ebd573617a24aa9dfbf0b885c54875c6fe06b.ttf::U+115F,U+11A2:[gid3=0+920|gid4=0+0]
-fonts/sha1sum/7e14e7883ed152baa158b80e207b66114c823a8b.ttf::U+11A2:[gid1=0+920]
+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/hyphens.tests b/test/shaping/tests/hyphens.tests
deleted file mode 100644 (file)
index d2cb186..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-fonts/sha1sum/1c04a16f32a39c26c851b7fc014d2e8d298ba2b8.ttf::U+2010:[gid1=0+739]
-fonts/sha1sum/1c04a16f32a39c26c851b7fc014d2e8d298ba2b8.ttf::U+2011:[gid1=0+739]
index 80ad8ce..351e927 100644 (file)
@@ -1,2 +1,2 @@
-fonts/sha1sum/5028afb650b1bb718ed2131e872fbcce57828fff.ttf::U+0B13,U+200D,U+0B01:[omorya=0+1450]
-fonts/sha1sum/5028afb650b1bb718ed2131e872fbcce57828fff.ttf::U+0B13,U+200C,U+0B01:[oorya=0+1309|space=0+0|candrabinduorya=0+0]
+fonts/sha1sum/5028afb650b1bb718ed2131e872fbcce57828fff.ttf:U+0B13,U+200D,U+0B01:[omorya=0+1450]
+fonts/sha1sum/5028afb650b1bb718ed2131e872fbcce57828fff.ttf:U+0B13,U+200C,U+0B01:[oorya=0+1309|space=1+0|candrabinduorya=1+0]
index 5410a6a..96e8cdd 100644 (file)
@@ -1,2 +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]
+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]
index 204b92a..260980a 100644 (file)
@@ -1,2 +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]
+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/ligature-id.tests b/test/shaping/tests/ligature-id.tests
deleted file mode 100644 (file)
index a1ce2bb..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-fonts/sha1sum/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|space=3+213|u0995_u09B0_u09CD.blwf.vatu=4+643|u0995_u09CD.half_u09B2.pres=7+602]
-fonts/sha1sum/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|space=6+213|u0995_u09B0_u09CD.blwf.vatu=7+643|u0995_u09CD.half_u09B2.pres=10+602]
-fonts/sha1sum/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|space=9+213|u0995_u09B0_u09CD.blwf.vatu=10+643|u0995_u09CD.half_u09B2.pres=13+602]
-fonts/sha1sum/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|space=12+213|u0995_u09B0_u09CD.blwf.vatu=13+643|u0995_u09CD.half_u09B2.pres=16+602]
-fonts/sha1sum/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|space=15+213|u0995_u09B0_u09CD.blwf.vatu=16+643|u0995_u09CD.half_u09B2.pres=19+602]
-fonts/sha1sum/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|space=18+213|u0995_u09B0_u09CD.blwf.vatu=19+643|u0995_u09CD.half_u09B2.pres=22+602]
-fonts/sha1sum/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|space=21+213|u0995_u09B0_u09CD.blwf.vatu=22+643|u0995_u09CD.half_u09B2.pres=25+602]
-fonts/sha1sum/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|space=24+213|u0995_u09B0_u09CD.blwf.vatu=25+643|u0995_u09CD.half_u09B2.pres=28+602]
-fonts/sha1sum/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|space=27+213|u0995_u09B0_u09CD.blwf.vatu=28+643|u0995_u09CD.half_u09B2.pres=31+602]
-fonts/sha1sum/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|u0995_u09CD.half_u0995.pres=27+566|space=30+213|u0995_u09B0_u09CD.blwf.vatu=31+643|u0995_u09CD.half_u09B2.pres=34+602]
-fonts/sha1sum/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|u0995_u09CD.half_u0995.pres=27+566|u0995_u09CD.half_u0995.pres=30+566|space=33+213|u0995_u09B0_u09CD.blwf.vatu=34+643|u0995_u09CD.half_u09B2.pres=37+602]
-fonts/sha1sum/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|u0995_u09CD.half_u0995.pres=27+566|u0995_u09CD.half_u0995.pres=30+566|u0995_u09CD.half_u0995.pres=33+566|space=36+213|u0995_u09B0_u09CD.blwf.vatu=37+643|u0995_u09CD.half_u09B2.pres=40+602]
-fonts/sha1sum/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|u0995_u09CD.half_u0995.pres=27+566|u0995_u09CD.half_u0995.pres=30+566|u0995_u09CD.half_u0995.pres=33+566|u0995_u09CD.half_u0995.pres=36+566|space=39+213|u0995_u09B0_u09CD.blwf.vatu=40+643|u0995_u09CD.half_u09B2.pres=43+602]
-fonts/sha1sum/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|u0995_u09CD.half_u0995.pres=27+566|u0995_u09CD.half_u0995.pres=30+566|u0995_u09CD.half_u0995.pres=33+566|u0995_u09CD.half_u0995.pres=36+566|u0995_u09CD.half_u0995.pres=39+566|space=42+213|u0995_u09B0_u09CD.blwf.vatu=43+643|u0995_u09CD.half_u09B2.pres=46+602]
-fonts/sha1sum/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|u0995_u09CD.half_u0995.pres=27+566|u0995_u09CD.half_u0995.pres=30+566|u0995_u09CD.half_u0995.pres=33+566|u0995_u09CD.half_u0995.pres=36+566|u0995_u09CD.half_u0995.pres=39+566|u0995_u09CD.half_u0995.pres=42+566|space=45+213|u0995_u09B0_u09CD.blwf.vatu=46+643|u0995_u09CD.half_u09B2.pres=49+602]
-fonts/sha1sum/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|u0995_u09CD.half_u0995.pres=27+566|u0995_u09CD.half_u0995.pres=30+566|u0995_u09CD.half_u0995.pres=33+566|u0995_u09CD.half_u0995.pres=36+566|u0995_u09CD.half_u0995.pres=39+566|u0995_u09CD.half_u0995.pres=42+566|u0995_u09CD.half_u0995.pres=45+566|space=48+213|u0995_u09B0_u09CD.blwf.vatu=49+643|u0995_u09CD.half_u09B2.pres=52+602]
-fonts/sha1sum/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|u0995_u09CD.half_u0995.pres=27+566|u0995_u09CD.half_u0995.pres=30+566|u0995_u09CD.half_u0995.pres=33+566|u0995_u09CD.half_u0995.pres=36+566|u0995_u09CD.half_u0995.pres=39+566|u0995_u09CD.half_u0995.pres=42+566|u0995_u09CD.half_u0995.pres=45+566|u0995_u09CD.half_u0995.pres=48+566|space=51+213|u0995_u09B0_u09CD.blwf.vatu=52+643|u0995_u09CD.half_u09B2.pres=55+602]
-fonts/sha1sum/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|u0995_u09CD.half_u0995.pres=27+566|u0995_u09CD.half_u0995.pres=30+566|u0995_u09CD.half_u0995.pres=33+566|u0995_u09CD.half_u0995.pres=36+566|u0995_u09CD.half_u0995.pres=39+566|u0995_u09CD.half_u0995.pres=42+566|u0995_u09CD.half_u0995.pres=45+566|u0995_u09CD.half_u0995.pres=48+566|u0995_u09CD.half_u0995.pres=51+566|space=54+213|u0995_u09B0_u09CD.blwf.vatu=55+643|u0995_u09CD.half_u09B2.pres=58+602]
-fonts/sha1sum/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|u0995_u09CD.half_u0995.pres=27+566|u0995_u09CD.half_u0995.pres=30+566|u0995_u09CD.half_u0995.pres=33+566|u0995_u09CD.half_u0995.pres=36+566|u0995_u09CD.half_u0995.pres=39+566|u0995_u09CD.half_u0995.pres=42+566|u0995_u09CD.half_u0995.pres=45+566|u0995_u09CD.half_u0995.pres=48+566|u0995_u09CD.half_u0995.pres=51+566|u0995_u09CD.half_u0995.pres=54+566|space=57+213|u0995_u09B0_u09CD.blwf.vatu=58+643|u0995_u09CD.half_u09B2.pres=61+602]
-fonts/sha1sum/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|u0995_u09CD.half_u0995.pres=27+566|u0995_u09CD.half_u0995.pres=30+566|u0995_u09CD.half_u0995.pres=33+566|u0995_u09CD.half_u0995.pres=36+566|u0995_u09CD.half_u0995.pres=39+566|u0995_u09CD.half_u0995.pres=42+566|u0995_u09CD.half_u0995.pres=45+566|u0995_u09CD.half_u0995.pres=48+566|u0995_u09CD.half_u0995.pres=51+566|u0995_u09CD.half_u0995.pres=54+566|u0995_u09CD.half_u0995.pres=57+566|space=60+213|u0995_u09B0_u09CD.blwf.vatu=61+643|u0995_u09CD.half_u09B2.pres=64+602]
-fonts/sha1sum/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|u0995_u09CD.half_u0995.pres=27+566|u0995_u09CD.half_u0995.pres=30+566|u0995_u09CD.half_u0995.pres=33+566|u0995_u09CD.half_u0995.pres=36+566|u0995_u09CD.half_u0995.pres=39+566|u0995_u09CD.half_u0995.pres=42+566|u0995_u09CD.half_u0995.pres=45+566|u0995_u09CD.half_u0995.pres=48+566|u0995_u09CD.half_u0995.pres=51+566|u0995_u09CD.half_u0995.pres=54+566|u0995_u09CD.half_u0995.pres=57+566|u0995_u09CD.half_u0995.pres=60+566|space=63+213|u0995_u09B0_u09CD.blwf.vatu=64+643|u0995_u09CD.half_u09B2.pres=67+602]
-fonts/sha1sum/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|u0995_u09CD.half_u0995.pres=27+566|u0995_u09CD.half_u0995.pres=30+566|u0995_u09CD.half_u0995.pres=33+566|u0995_u09CD.half_u0995.pres=36+566|u0995_u09CD.half_u0995.pres=39+566|u0995_u09CD.half_u0995.pres=42+566|u0995_u09CD.half_u0995.pres=45+566|u0995_u09CD.half_u0995.pres=48+566|u0995_u09CD.half_u0995.pres=51+566|u0995_u09CD.half_u0995.pres=54+566|u0995_u09CD.half_u0995.pres=57+566|u0995_u09CD.half_u0995.pres=60+566|u0995_u09CD.half_u0995.pres=63+566|space=66+213|u0995_u09B0_u09CD.blwf.vatu=67+643|u0995_u09CD.half_u09B2.pres=70+602]
-fonts/sha1sum/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|u0995_u09CD.half_u0995.pres=27+566|u0995_u09CD.half_u0995.pres=30+566|u0995_u09CD.half_u0995.pres=33+566|u0995_u09CD.half_u0995.pres=36+566|u0995_u09CD.half_u0995.pres=39+566|u0995_u09CD.half_u0995.pres=42+566|u0995_u09CD.half_u0995.pres=45+566|u0995_u09CD.half_u0995.pres=48+566|u0995_u09CD.half_u0995.pres=51+566|u0995_u09CD.half_u0995.pres=54+566|u0995_u09CD.half_u0995.pres=57+566|u0995_u09CD.half_u0995.pres=60+566|u0995_u09CD.half_u0995.pres=63+566|u0995_u09CD.half_u0995.pres=66+566|space=69+213|u0995_u09B0_u09CD.blwf.vatu=70+643|u0995_u09CD.half_u09B2.pres=73+602]
-fonts/sha1sum/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|u0995_u09CD.half_u0995.pres=27+566|u0995_u09CD.half_u0995.pres=30+566|u0995_u09CD.half_u0995.pres=33+566|u0995_u09CD.half_u0995.pres=36+566|u0995_u09CD.half_u0995.pres=39+566|u0995_u09CD.half_u0995.pres=42+566|u0995_u09CD.half_u0995.pres=45+566|u0995_u09CD.half_u0995.pres=48+566|u0995_u09CD.half_u0995.pres=51+566|u0995_u09CD.half_u0995.pres=54+566|u0995_u09CD.half_u0995.pres=57+566|u0995_u09CD.half_u0995.pres=60+566|u0995_u09CD.half_u0995.pres=63+566|u0995_u09CD.half_u0995.pres=66+566|u0995_u09CD.half_u0995.pres=69+566|space=72+213|u0995_u09B0_u09CD.blwf.vatu=73+643|u0995_u09CD.half_u09B2.pres=76+602]
-fonts/sha1sum/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|u0995_u09CD.half_u0995.pres=27+566|u0995_u09CD.half_u0995.pres=30+566|u0995_u09CD.half_u0995.pres=33+566|u0995_u09CD.half_u0995.pres=36+566|u0995_u09CD.half_u0995.pres=39+566|u0995_u09CD.half_u0995.pres=42+566|u0995_u09CD.half_u0995.pres=45+566|u0995_u09CD.half_u0995.pres=48+566|u0995_u09CD.half_u0995.pres=51+566|u0995_u09CD.half_u0995.pres=54+566|u0995_u09CD.half_u0995.pres=57+566|u0995_u09CD.half_u0995.pres=60+566|u0995_u09CD.half_u0995.pres=63+566|u0995_u09CD.half_u0995.pres=66+566|u0995_u09CD.half_u0995.pres=69+566|u0995_u09CD.half_u0995.pres=72+566|space=75+213|u0995_u09B0_u09CD.blwf.vatu=76+643|u0995_u09CD.half_u09B2.pres=79+602]
-fonts/sha1sum/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|u0995_u09CD.half_u0995.pres=27+566|u0995_u09CD.half_u0995.pres=30+566|u0995_u09CD.half_u0995.pres=33+566|u0995_u09CD.half_u0995.pres=36+566|u0995_u09CD.half_u0995.pres=39+566|u0995_u09CD.half_u0995.pres=42+566|u0995_u09CD.half_u0995.pres=45+566|u0995_u09CD.half_u0995.pres=48+566|u0995_u09CD.half_u0995.pres=51+566|u0995_u09CD.half_u0995.pres=54+566|u0995_u09CD.half_u0995.pres=57+566|u0995_u09CD.half_u0995.pres=60+566|u0995_u09CD.half_u0995.pres=63+566|u0995_u09CD.half_u0995.pres=66+566|u0995_u09CD.half_u0995.pres=69+566|u0995_u09CD.half_u0995.pres=72+566|u0995_u09CD.half_u0995.pres=75+566|space=78+213|u0995_u09B0_u09CD.blwf.vatu=79+643|u0995_u09CD.half_u09B2.pres=82+602]
-fonts/sha1sum/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|u0995_u09CD.half_u0995.pres=27+566|u0995_u09CD.half_u0995.pres=30+566|u0995_u09CD.half_u0995.pres=33+566|u0995_u09CD.half_u0995.pres=36+566|u0995_u09CD.half_u0995.pres=39+566|u0995_u09CD.half_u0995.pres=42+566|u0995_u09CD.half_u0995.pres=45+566|u0995_u09CD.half_u0995.pres=48+566|u0995_u09CD.half_u0995.pres=51+566|u0995_u09CD.half_u0995.pres=54+566|u0995_u09CD.half_u0995.pres=57+566|u0995_u09CD.half_u0995.pres=60+566|u0995_u09CD.half_u0995.pres=63+566|u0995_u09CD.half_u0995.pres=66+566|u0995_u09CD.half_u0995.pres=69+566|u0995_u09CD.half_u0995.pres=72+566|u0995_u09CD.half_u0995.pres=75+566|u0995_u09CD.half_u0995.pres=78+566|space=81+213|u0995_u09B0_u09CD.blwf.vatu=82+643|u0995_u09CD.half_u09B2.pres=85+602]
-fonts/sha1sum/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|u0995_u09CD.half_u0995.pres=27+566|u0995_u09CD.half_u0995.pres=30+566|u0995_u09CD.half_u0995.pres=33+566|u0995_u09CD.half_u0995.pres=36+566|u0995_u09CD.half_u0995.pres=39+566|u0995_u09CD.half_u0995.pres=42+566|u0995_u09CD.half_u0995.pres=45+566|u0995_u09CD.half_u0995.pres=48+566|u0995_u09CD.half_u0995.pres=51+566|u0995_u09CD.half_u0995.pres=54+566|u0995_u09CD.half_u0995.pres=57+566|u0995_u09CD.half_u0995.pres=60+566|u0995_u09CD.half_u0995.pres=63+566|u0995_u09CD.half_u0995.pres=66+566|u0995_u09CD.half_u0995.pres=69+566|u0995_u09CD.half_u0995.pres=72+566|u0995_u09CD.half_u0995.pres=75+566|u0995_u09CD.half_u0995.pres=78+566|u0995_u09CD.half_u0995.pres=81+566|space=84+213|u0995_u09B0_u09CD.blwf.vatu=85+643|u0995_u09CD.half_u09B2.pres=88+602]
-fonts/sha1sum/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|u0995_u09CD.half_u0995.pres=27+566|u0995_u09CD.half_u0995.pres=30+566|u0995_u09CD.half_u0995.pres=33+566|u0995_u09CD.half_u0995.pres=36+566|u0995_u09CD.half_u0995.pres=39+566|u0995_u09CD.half_u0995.pres=42+566|u0995_u09CD.half_u0995.pres=45+566|u0995_u09CD.half_u0995.pres=48+566|u0995_u09CD.half_u0995.pres=51+566|u0995_u09CD.half_u0995.pres=54+566|u0995_u09CD.half_u0995.pres=57+566|u0995_u09CD.half_u0995.pres=60+566|u0995_u09CD.half_u0995.pres=63+566|u0995_u09CD.half_u0995.pres=66+566|u0995_u09CD.half_u0995.pres=69+566|u0995_u09CD.half_u0995.pres=72+566|u0995_u09CD.half_u0995.pres=75+566|u0995_u09CD.half_u0995.pres=78+566|u0995_u09CD.half_u0995.pres=81+566|u0995_u09CD.half_u0995.pres=84+566|space=87+213|u0995_u09B0_u09CD.blwf.vatu=88+643|u0995_u09CD.half_u09B2.pres=91+602]
-fonts/sha1sum/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|u0995_u09CD.half_u0995.pres=27+566|u0995_u09CD.half_u0995.pres=30+566|u0995_u09CD.half_u0995.pres=33+566|u0995_u09CD.half_u0995.pres=36+566|u0995_u09CD.half_u0995.pres=39+566|u0995_u09CD.half_u0995.pres=42+566|u0995_u09CD.half_u0995.pres=45+566|u0995_u09CD.half_u0995.pres=48+566|u0995_u09CD.half_u0995.pres=51+566|u0995_u09CD.half_u0995.pres=54+566|u0995_u09CD.half_u0995.pres=57+566|u0995_u09CD.half_u0995.pres=60+566|u0995_u09CD.half_u0995.pres=63+566|u0995_u09CD.half_u0995.pres=66+566|u0995_u09CD.half_u0995.pres=69+566|u0995_u09CD.half_u0995.pres=72+566|u0995_u09CD.half_u0995.pres=75+566|u0995_u09CD.half_u0995.pres=78+566|u0995_u09CD.half_u0995.pres=81+566|u0995_u09CD.half_u0995.pres=84+566|u0995_u09CD.half_u0995.pres=87+566|space=90+213|u0995_u09B0_u09CD.blwf.vatu=91+643|u0995_u09CD.half_u09B2.pres=94+602]
-fonts/sha1sum/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|u0995_u09CD.half_u0995.pres=27+566|u0995_u09CD.half_u0995.pres=30+566|u0995_u09CD.half_u0995.pres=33+566|u0995_u09CD.half_u0995.pres=36+566|u0995_u09CD.half_u0995.pres=39+566|u0995_u09CD.half_u0995.pres=42+566|u0995_u09CD.half_u0995.pres=45+566|u0995_u09CD.half_u0995.pres=48+566|u0995_u09CD.half_u0995.pres=51+566|u0995_u09CD.half_u0995.pres=54+566|u0995_u09CD.half_u0995.pres=57+566|u0995_u09CD.half_u0995.pres=60+566|u0995_u09CD.half_u0995.pres=63+566|u0995_u09CD.half_u0995.pres=66+566|u0995_u09CD.half_u0995.pres=69+566|u0995_u09CD.half_u0995.pres=72+566|u0995_u09CD.half_u0995.pres=75+566|u0995_u09CD.half_u0995.pres=78+566|u0995_u09CD.half_u0995.pres=81+566|u0995_u09CD.half_u0995.pres=84+566|u0995_u09CD.half_u0995.pres=87+566|u0995_u09CD.half_u0995.pres=90+566|space=93+213|u0995_u09B0_u09CD.blwf.vatu=94+643|u0995_u09CD.half_u09B2.pres=97+602]
-fonts/sha1sum/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|u0995_u09CD.half_u0995.pres=27+566|u0995_u09CD.half_u0995.pres=30+566|u0995_u09CD.half_u0995.pres=33+566|u0995_u09CD.half_u0995.pres=36+566|u0995_u09CD.half_u0995.pres=39+566|u0995_u09CD.half_u0995.pres=42+566|u0995_u09CD.half_u0995.pres=45+566|u0995_u09CD.half_u0995.pres=48+566|u0995_u09CD.half_u0995.pres=51+566|u0995_u09CD.half_u0995.pres=54+566|u0995_u09CD.half_u0995.pres=57+566|u0995_u09CD.half_u0995.pres=60+566|u0995_u09CD.half_u0995.pres=63+566|u0995_u09CD.half_u0995.pres=66+566|u0995_u09CD.half_u0995.pres=69+566|u0995_u09CD.half_u0995.pres=72+566|u0995_u09CD.half_u0995.pres=75+566|u0995_u09CD.half_u0995.pres=78+566|u0995_u09CD.half_u0995.pres=81+566|u0995_u09CD.half_u0995.pres=84+566|u0995_u09CD.half_u0995.pres=87+566|u0995_u09CD.half_u0995.pres=90+566|u0995_u09CD.half_u0995.pres=93+566|space=96+213|u0995_u09B0_u09CD.blwf.vatu=97+643|u0995_u09CD.half_u09B2.pres=100+602]
-fonts/sha1sum/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|u0995_u09CD.half_u0995.pres=27+566|u0995_u09CD.half_u0995.pres=30+566|u0995_u09CD.half_u0995.pres=33+566|u0995_u09CD.half_u0995.pres=36+566|u0995_u09CD.half_u0995.pres=39+566|u0995_u09CD.half_u0995.pres=42+566|u0995_u09CD.half_u0995.pres=45+566|u0995_u09CD.half_u0995.pres=48+566|u0995_u09CD.half_u0995.pres=51+566|u0995_u09CD.half_u0995.pres=54+566|u0995_u09CD.half_u0995.pres=57+566|u0995_u09CD.half_u0995.pres=60+566|u0995_u09CD.half_u0995.pres=63+566|u0995_u09CD.half_u0995.pres=66+566|u0995_u09CD.half_u0995.pres=69+566|u0995_u09CD.half_u0995.pres=72+566|u0995_u09CD.half_u0995.pres=75+566|u0995_u09CD.half_u0995.pres=78+566|u0995_u09CD.half_u0995.pres=81+566|u0995_u09CD.half_u0995.pres=84+566|u0995_u09CD.half_u0995.pres=87+566|u0995_u09CD.half_u0995.pres=90+566|u0995_u09CD.half_u0995.pres=93+566|u0995_u09CD.half_u0995.pres=96+566|space=99+213|u0995_u09B0_u09CD.blwf.vatu=100+643|u0995_u09CD.half_u09B2.pres=103+602]
-fonts/sha1sum/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|u0995_u09CD.half_u0995.pres=27+566|u0995_u09CD.half_u0995.pres=30+566|u0995_u09CD.half_u0995.pres=33+566|u0995_u09CD.half_u0995.pres=36+566|u0995_u09CD.half_u0995.pres=39+566|u0995_u09CD.half_u0995.pres=42+566|u0995_u09CD.half_u0995.pres=45+566|u0995_u09CD.half_u0995.pres=48+566|u0995_u09CD.half_u0995.pres=51+566|u0995_u09CD.half_u0995.pres=54+566|u0995_u09CD.half_u0995.pres=57+566|u0995_u09CD.half_u0995.pres=60+566|u0995_u09CD.half_u0995.pres=63+566|u0995_u09CD.half_u0995.pres=66+566|u0995_u09CD.half_u0995.pres=69+566|u0995_u09CD.half_u0995.pres=72+566|u0995_u09CD.half_u0995.pres=75+566|u0995_u09CD.half_u0995.pres=78+566|u0995_u09CD.half_u0995.pres=81+566|u0995_u09CD.half_u0995.pres=84+566|u0995_u09CD.half_u0995.pres=87+566|u0995_u09CD.half_u0995.pres=90+566|u0995_u09CD.half_u0995.pres=93+566|u0995_u09CD.half_u0995.pres=96+566|u0995_u09CD.half_u0995.pres=99+566|space=102+213|u0995_u09B0_u09CD.blwf.vatu=103+643|u0995_u09CD.half_u09B2.pres=106+602]
-fonts/sha1sum/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|u0995_u09CD.half_u0995.pres=27+566|u0995_u09CD.half_u0995.pres=30+566|u0995_u09CD.half_u0995.pres=33+566|u0995_u09CD.half_u0995.pres=36+566|u0995_u09CD.half_u0995.pres=39+566|u0995_u09CD.half_u0995.pres=42+566|u0995_u09CD.half_u0995.pres=45+566|u0995_u09CD.half_u0995.pres=48+566|u0995_u09CD.half_u0995.pres=51+566|u0995_u09CD.half_u0995.pres=54+566|u0995_u09CD.half_u0995.pres=57+566|u0995_u09CD.half_u0995.pres=60+566|u0995_u09CD.half_u0995.pres=63+566|u0995_u09CD.half_u0995.pres=66+566|u0995_u09CD.half_u0995.pres=69+566|u0995_u09CD.half_u0995.pres=72+566|u0995_u09CD.half_u0995.pres=75+566|u0995_u09CD.half_u0995.pres=78+566|u0995_u09CD.half_u0995.pres=81+566|u0995_u09CD.half_u0995.pres=84+566|u0995_u09CD.half_u0995.pres=87+566|u0995_u09CD.half_u0995.pres=90+566|u0995_u09CD.half_u0995.pres=93+566|u0995_u09CD.half_u0995.pres=96+566|u0995_u09CD.half_u0995.pres=99+566|u0995_u09CD.half_u0995.pres=102+566|space=105+213|u0995_u09B0_u09CD.blwf.vatu=106+643|u0995_u09CD.half_u09B2.pres=109+602]
diff --git a/test/shaping/tests/mark-filtering-sets.tests b/test/shaping/tests/mark-filtering-sets.tests
deleted file mode 100644 (file)
index 7b5c910..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-fonts/sha1sum/f22416c692720a7d46fadf4af99f4c9e094f00b9.ttf::U+062A,U+062E,U+062A,U+0629:[glyph837=3@299,1170+0|uni06C1.1=3+502|glyph837=2@149,690+0|uni0628.8=2+532|glyph836=1@-51,1259+0|glyph514=1+196|glyph837=0@655,1751+0|glyph112=0@0,-358+905]
-fonts/sha1sum/f22416c692720a7d46fadf4af99f4c9e094f00b9.ttf::U+062A,U+062E,U+0646,U+0629:[glyph837=3@299,1170+0|uni06C1.1=3+502|glyph836=2@149,690+0|uni0628.8=2+532|glyph836=1@-51,1259+0|glyph514=1+196|glyph837=0@655,1751+0|glyph112=0@0,-358+905]
-fonts/sha1sum/f22416c692720a7d46fadf4af99f4c9e094f00b9.ttf::U+062A,U+062E,U+0626,U+0629:[glyph837=3@299,1170+0|uni06C1.1=3+502|glyph847=2@149,690+0|uni0628.8=2+532|glyph836=1@-51,1259+0|glyph514=1+196|glyph837=0@655,1751+0|glyph112=0@0,-358+905]
-fonts/sha1sum/f22416c692720a7d46fadf4af99f4c9e094f00b9.ttf::U+062A,U+062E,U+062B,U+0629:[glyph837=3@299,1520+0|uni06C1.1=3+502|glyph838=2@149,690+0|uni0628.8=2+532|glyph836=1@-51,1259+0|glyph514=1+196|glyph837=0@655,1751+0|glyph112=0@0,-358+905]
-fonts/sha1sum/f22416c692720a7d46fadf4af99f4c9e094f00b9.ttf::U+062A,U+062E,U+0679,U+0629:[glyph837=3@299,1520+0|uni06C1.1=3+502|glyph842=2@149,690+0|uni0628.8=2+532|glyph836=1@-51,1259+0|glyph514=1+196|glyph837=0@655,1751+0|glyph112=0@0,-358+905]
index 0a2e580..6b7e94a 100644 (file)
@@ -1,4 +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=19+0|space=22+500|uni182D.E8E2_g.init=23+1000|space=23+0|uni182D.E8E5_g.medi1=25+800|space=25+0|space=28+500|uni182D.EA1D_g.init2=29+950|space=29+0|space=32+500|uni182D.EA1E_g.init3=33+650|space=33+0|space=36+500|space=36+0|uni182D.E8E4_g.medi=38+800|space=38+0|space=38+0|uni182D.E8E5_g.medi1=41+800|space=41+0|space=44+500|space=44+0|uni182D.E8E6_g.medi2=46+650|space=46+0|space=49+500|space=49+0|uni182D.E8E6_g.medi2=51+650|space=51+0|space=54+500|space=54+0|uni182D.E8E4_g.medi=56+800|space=56+0|uni182D.E8E8_g.fina1=58+1250|space=60+500|space=60+0|uni182D.E8E9_g.fina2=62+1050|space=64+500|uni1820.E820_a.isol=65+1550|space=65+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=73+0|space=73+0|uni182D.E8E5_g.medi1=76+800|uni1820.E823_a.medi=77+400|space=77+0|space=79+500|space=79+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]
-fonts/sha1sum/a34a7b00f22ffb5fd7eef6933b81c7e71bc2cdfb.ttf::U+180A,U+1868,U+180A,U+1868,U+180B,U+180A,U+1868,U+180C,U+180A,U+1868,U+180D,U+180A:[gid1=0+268|gid10=1+778|gid1=2+268|gid9=3+575|gid1=5+268|gid10=6+778|gid1=8+268|gid8=9+575|gid1=11+268]
+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/simple.tests b/test/shaping/tests/simple.tests
deleted file mode 100644 (file)
index bebe008..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-fonts/sha1sum/49c9f7485c1392fa09a1b801bc2ffea79275f22e.ttf:--shaper=ot:U+0056,U+0041,U+0042,U+0045,U+0061,U+0062,U+0063,U+0064:[V=0+1142|A=1+1295|B=2+1295|E=3+1123|a=4+1126|b=5+1164|c=6+1072|d=7+1164]
-fonts/sha1sum/49c9f7485c1392fa09a1b801bc2ffea79275f22e.ttf:--shaper=fallback:U+0056,U+0041,U+0042,U+0045,U+0061,U+0062,U+0063,U+0064:[V=0+1295|A=1+1295|B=2+1295|E=3+1123|a=4+1126|b=5+1164|c=6+1072|d=7+1164]
diff --git a/test/shaping/tests/spaces.tests b/test/shaping/tests/spaces.tests
deleted file mode 100644 (file)
index cb386de..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-fonts/sha1sum/1c2c3fc37b2d4c3cb2ef726c6cdaaabd4b7f3eb9.ttf:--font-funcs=ot:U+0020:[gid1=0+560]
-fonts/sha1sum/1c2c3fc37b2d4c3cb2ef726c6cdaaabd4b7f3eb9.ttf:--font-funcs=ot:U+00A0:[gid1=0+560]
-fonts/sha1sum/1c2c3fc37b2d4c3cb2ef726c6cdaaabd4b7f3eb9.ttf:--font-funcs=ot:U+1680:[gid0=0+692]
-fonts/sha1sum/1c2c3fc37b2d4c3cb2ef726c6cdaaabd4b7f3eb9.ttf:--font-funcs=ot:U+2000:[gid1=0+1024]
-fonts/sha1sum/1c2c3fc37b2d4c3cb2ef726c6cdaaabd4b7f3eb9.ttf:--font-funcs=ot:U+2001:[gid1=0+2048]
-fonts/sha1sum/1c2c3fc37b2d4c3cb2ef726c6cdaaabd4b7f3eb9.ttf:--font-funcs=ot:U+2002:[gid1=0+1024]
-fonts/sha1sum/1c2c3fc37b2d4c3cb2ef726c6cdaaabd4b7f3eb9.ttf:--font-funcs=ot:U+2003:[gid1=0+2048]
-fonts/sha1sum/1c2c3fc37b2d4c3cb2ef726c6cdaaabd4b7f3eb9.ttf:--font-funcs=ot:U+2004:[gid1=0+683]
-fonts/sha1sum/1c2c3fc37b2d4c3cb2ef726c6cdaaabd4b7f3eb9.ttf:--font-funcs=ot:U+2005:[gid1=0+512]
-fonts/sha1sum/1c2c3fc37b2d4c3cb2ef726c6cdaaabd4b7f3eb9.ttf:--font-funcs=ot:U+2006:[gid1=0+341]
-fonts/sha1sum/1c2c3fc37b2d4c3cb2ef726c6cdaaabd4b7f3eb9.ttf:--font-funcs=ot:U+2007:[gid1=0+560]
-fonts/sha1sum/1c2c3fc37b2d4c3cb2ef726c6cdaaabd4b7f3eb9.ttf:--font-funcs=ot:U+2008:[gid1=0+560]
-fonts/sha1sum/1c2c3fc37b2d4c3cb2ef726c6cdaaabd4b7f3eb9.ttf:--font-funcs=ot:U+2009:[gid1=0+410]
-fonts/sha1sum/1c2c3fc37b2d4c3cb2ef726c6cdaaabd4b7f3eb9.ttf:--font-funcs=ot:U+200A:[gid1=0+128]
-fonts/sha1sum/1c2c3fc37b2d4c3cb2ef726c6cdaaabd4b7f3eb9.ttf:--font-funcs=ot:U+202F:[gid1=0+280]
-fonts/sha1sum/1c2c3fc37b2d4c3cb2ef726c6cdaaabd4b7f3eb9.ttf:--font-funcs=ot:U+205F:[gid1=0+455]
-fonts/sha1sum/1c2c3fc37b2d4c3cb2ef726c6cdaaabd4b7f3eb9.ttf:--font-funcs=ot:U+3000:[gid1=0+2048]
diff --git a/test/shaping/tests/use.tests b/test/shaping/tests/use.tests
deleted file mode 100644 (file)
index e35259c..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-fonts/sha1sum/fbb6c84c9e1fe0c39e152fbe845e51fd81f6748e.ttf::U+1B1B,U+1B44,U+1B13,U+1B3E:[gid3=0+990|gid7=0+2473|gid5=0@-293,-400+0]
-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+0|uni1A25=3+1912|uni1A58=3+0|uni1A63=3+1212]
-fonts/sha1sum/f518eb6f6b5eec2946c9fbbbde44e45d46f5e2ac.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+1211|uni1A25=3+1912|uni1A58=3+0|uni1A63=3+1212]
diff --git a/test/shaping/tests/vertical.tests b/test/shaping/tests/vertical.tests
deleted file mode 100644 (file)
index 8276890..0000000
+++ /dev/null
@@ -1 +0,0 @@
-fonts/sha1sum/191826b9643e3f124d865d617ae609db6a2ce203.ttf:--direction=t:U+300C:[uni300C.vert=0@-512,-578+0,-1024]
index c08f26b..be7ec96 100644 (file)
@@ -1,11 +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]
-fonts/sha1sum/45855bc8d46332b39c4ab9e2ee1a26b1f896da6b.ttf::U+0E01,U+0E34,U+0E01:[gid1=0+1264|gid2=0@20,0+0|gid1=2+1264]
-fonts/sha1sum/7a37dc4d5bf018456aea291cee06daf004c0221c.ttf::U+0E01,U+0E34,U+0E01:[gid1=0+1264|gid2=0@20,0+1000|gid1=2+1264]
-fonts/sha1sum/8099955657a54e9ee38a6ba1d6f950ce58e3cc25.ttf::U+0E01,U+0E34,U+0E01:[gid1=0+1264|gid2=0+0|gid1=2+1264]
-fonts/sha1sum/bb0c53752e85c3d28973ebc913287b8987d3dfe8.ttf::U+0E01,U+0E34,U+0E01:[gid1=0+1264|gid2=0+0|gid1=2+1264]
-fonts/sha1sum/ffa0f5d2d9025486d8469d8b1fdd983e7632499b.ttf::U+0058,U+0303,U+0078,U+0303,U+006A,U+006A,U+006A,U+0303,U+006A,U+0303,U+006A,U+006A:[gid1=0+1200|gid6=0@-1029,340+0|gid3=2+1083|gid6=2@-992,0+0|gid2=4+528|gid2=5+528|gid5=6+528|gid6=6@-693,0+0|gid5=8+528|gid6=8@-693,0+0|gid2=10+528|gid2=11+528]
-fonts/sha1sum/cc5f3d2d717fb6bd4dfae1c16d48a2cb8e12233b.ttf::U+0058,U+0303,U+0078,U+0303,U+006A,U+006A,U+006A,U+0303,U+006A,U+0303,U+006A,U+006A:[gid1=0+1200|gid6=0@-1029,340+1200|gid3=2+1083|gid6=2@-992,0+1200|gid2=4+528|gid2=5+528|gid5=6+528|gid6=6@-693,0+1200|gid5=8+528|gid6=8@-693,0+1200|gid2=10+528|gid2=11+528]
-fonts/sha1sum/fcdcffbdf1c4c97c05308d7600e4c283eb47dbca.ttf::U+0058,U+0303,U+0078,U+0303,U+006A,U+006A,U+006A,U+0303,U+006A,U+0303,U+006A,U+006A:[gid1=0+1200|gid6=0+0|gid3=2+1083|gid6=2+0|gid2=4+528|gid2=5+528|gid5=6+528|gid6=6+0|gid5=8+528|gid6=8+0|gid2=10+528|gid2=11+528]
-fonts/sha1sum/56cfd0e18d07f41c38e9598545a6d369127fc6f9.ttf::U+0058,U+0303,U+0078,U+0303,U+006A,U+006A,U+006A,U+0303,U+006A,U+0303,U+006A,U+006A:[gid1=0+1200|gid6=0@-1029,340+0|gid3=2+1083|gid6=2@-992,0+0|gid2=4+528|gid2=5+528|gid5=6+528|gid6=6@-693,0+0|gid5=8+528|gid6=8@-693,0+0|gid2=10+528|gid2=11+528]
-fonts/sha1sum/a98e908e2ed21b22228ea59ebcc0f05034c86f2e.ttf::U+0041,U+0042,U+0041:[A=0+1368|B=1+0|A=2+1368]
+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-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/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/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-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-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-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-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/abbreviation-mark.txt b/test/shaping/texts/in-tree/shaper-arabic/script-syriac/misc/abbreviation-mark.txt
deleted file mode 100644 (file)
index a450678..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-ܐܒ 
-ܐ܏ 
-ܐ܏ܒ 
-ܐ܏ܒܓ 
-ܐ܏ܒܓܕ 
-ܐ܏ܒܓܕܐ 
-ܐ܏ܒܓܕܐܐܐܐܐܐܐܐܐ 
-ܐ܏ܒܓܕܐ܏ܐܐܐ܏ܐ܏ܐܐܐܐ 
-ܐ܏ܒܓܕܓܓܓܓܓܓ 
-ܐ܏ܒܓ 
-܏ܫܘabcܒ.
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-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-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-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-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-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-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-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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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-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-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-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-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-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-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/contractions.txt b/test/shaping/texts/in-tree/shaper-tibetan/script-tibetan/misc/contractions.txt
deleted file mode 100644 (file)
index 46da1af..0000000
+++ /dev/null
@@ -1,612 +0,0 @@
-ཀི་ཀང་
-ཀྐིང་
-ཀི་ཀི་སྭོ་སྭོ་
-ཀིི་སྭོོ་
-ཀུན་དཀྲིས་
-ཀིུས་
-ཀུན་མཁྱེན་
-ཀེུན་
-ཀུན་དགའ་
-ཀུནའ་
-ཀུན་འཇོམས་
-ཀུནོམས་
-ཀུན་བརྡུངས་
-ཀུནྡུང་
-ཀུན་ནས་
-ཀུནྶ་
-ཀུན་རྫོབ་
-ཀོུབ༹་
-ཀུན་གཟིགས་
-ཀིུགས་
-ཀུན་བཟང་
-ཀུན༹ང་
-ཀུན་ཤེས་
-ཀེུས་
-ཀླུ་ཐེབས་
-ཀླེུབས་
-ཀླུ་ཟློག་
-ཀློུག་
-དཀར་པོ་
-དཀརོ་
-དཀར་ཡོལ་
-དཀོལ་
-དཀོན་མཆོག་
-དཀོོག་
-དཀོར་ནོར་
-དཀོོར་
-དཀྱིལ་འཁོར་
-དཀྱོིར་
-བཀའ་དྲིན་
-བཀྲིན་
-བཀྲ་ཤིས་
-བཀྲིས་
-བཀྲ་ཤིས་ཉི་མ་
-བཀྲིསྙི་
-སྐལ་བཟང་
-སྐལ༹ང་
-སྐུ་གསུང་ཐུགས་
-སྐུགས་
-སྐྱེ་རྒུ་
-སྐྱེུ་
-སྐྱེ་མཆེད་
-སྐྱེདེ་
-བསྐྱེད་བསྐྱེད་
-བསྐྱེེད་
-བསྐྱེད་བསྐྱེད་བསྐྱེད་
-བསྐྱེེེད་
-ཁམས་གསུམ་
-ཁམསུཾ་
-ཁུར་ཚོས་
-ཁོུས༹་
-ཁྱད་པར་
-ཁྱདར་
-ཁྱབ་བདག་
-ཁྱབདག་
-ཁྱུ་མཆོག་
-ཁྱོུག་
-ཁྲུན་མེད་
-ཁྲེུད་
-ཁྲུན་རིང་
-ཁྲིུང་
-ཁྲུམས་སྟོད་
-ཁྲོུད་
-ཁྲུམས་སྨད་
-ཁྲུཾད་
-མཁའ་འགྲོ་
-མཁའགྲོ་
-མཁྱེན་མཁྱེན་མཁྱེན་
-མཁྱེེེན་
-འཁོར་འདས་
-འཁོརས་
-འཁོར་བཅས་
-འཁོརས་
-འཁོར་ལོ་
-འཁོོར་
-གུར་ཐོག་
-གོུག་
-གྱུར་ཅིག་
-གྱིུག་
-གྲུ་འཛིན་
-གྲིུན་
-གྲུ་བཞི་
-གྲིུ་
-གྲུ་ཡོན་
-གྲོུན་
-གྲུབ་ཉི་
-གྲུབྙི་
-གྲུབ་ཐོབ་
-གྲོུབ་
-གྲོ་བཞིན་
-གྲོིན་
-གྲོང་ཁྱེར་
-གྲོེར་
-གླང་པོ་
-གླངོ་
-གླེགས་བམ་
-གླེམ་
-དགུང་ཐིག་
-དགིུག་
-དགེ་འདུན་
-དགེུན་
-དགེ་ལུགས་
-དགེུགས་
-དགེ་སློང་
-དགློེང་
-དགྲ་བགེགས་
-དགྲེགས་
-དགྲ་བཅོམ་
-དགྲོམ་
-མགོན་པོ་
-མགོོན་
-འགྲུབ་བྱ་
-འགྲུབྱ་
-འགྲུབ་སྦྱོར་
-འགྲུབྱོར་
-རྒ་ཤི་
-རྒི་
-རྒུན་འབྲུམ་
-རྒྲུམ་
-རྒྱ་མཚོ་
-རྪོ་
-རྒྱལ་པོ་
-རྒྱོལ་
-རྒྱལ་བློན་
-རྒྱལོན་
-རྒྱལ་མཚན་
-རྒྱལ༹ན་
-ངན་ཀྱང་
-ངནྱང་
-ངུར་སྨྲིག་
-ངིུག་
-དངོས་གྲུབ་
-དགྲོུབ་
-གཅུ་གལ་
-གཅུལ་
-བཅུ་གཅིག་
-བཅིུག་
-བཅུ་གཉིས་
-བཅིུས་
-བཅུ་དྲུག་
-བཅྲུག་
-བཅུ་བདུན་
-བཅུན་
-བཅུ་བཞི་
-བཅིུ་
-བཅུ་གསུམ་
-བཅུཾ་
-བཅོ་བརྒྱད་
-བཅྱོད་
-བཅོམ་ལྡན་
-བཅོནཾ་
-བཅོམ་ལྡན་འདས་
-བཅོནྡས་
-ལྕགས་
-ལྕཊ་
-ལྕགས་སྒྲོག་
-ལྕགསྒྲོག་
-ཆ་ཤེས་
-ཆེས་
-ཆགས་ཐོགས་
-ཆཊ་ཐོཊ་
-ཆད་
-ཆྡ་
-ཆུ་དཀྱིལ་
-ཆིུལ་
-ཆུ་སྟོད་
-ཆོུད་
-ཆུ་སྣོད་
-ཆོུད་
-ཆུ་སྨད་
-ཆུཾད་
-ཆུ་ཚོད་
-ཆོུ༹ད་
-ཆུ་སྲིན་
-ཆྲིུན་
-ཆུབ་ཉི་
-ཆུབྙི་
-ཆོ་འཕྲུལ་
-ཆྲོུལ་
-ཆོས་སྤྱོད་
-ཆོསྤྱོད་
-མཆོད་རྟེན་
-མཆོེན་
-འཆི་བདག་
-འཆྡིག་
-འཆི་སྦྱོར་
-འཆྱོིར་
-ཇོ་བོ་
-ཇོོ་
-ཇོ་མོ་
-ཇོོ་
-ཇོ་ཇོ་
-ཇོོ་
-འཇིག་ཉི་
-འཇིགྙི་
-འཇིག་རྟེན་
-འཇིགེན་
-རྗེ་བཙུན་
-རྗེུན༹་
-ཉན་ཐོས་
-ཉནོས་
-ཉི་ཤུ་
-ཉིུ་
-ཉིན་གུང་
-ཉིུང་
-ཉིན་ནག་
-ཉིནག་
-ཉིན་ཚད་
-ཉིན༹ད་
-ཉིན་མཚན་
-ཉི༹ན་
-ཉེར་གཅིག་
-ཉྲེ་གཅིག་
-ཉོན་མོངས་
-ཉོནོངས་
-མཉན་ཡོད་
-མཉོད་
-མཉམ་ཉིད་
-མཉིཾད་
-མཉམ་བཞག་
-མཉཾག་
-སྙིང་རྗེ་
-སྙིངེ་
-བསྙེན་བཀུར་
-བསྙུར་
-ཏིང་འཛིན་
-ཏིངི༹ན་
-གཏི་མུག་
-གཏིུག་
-གཏུན་ཤིང་
-་གཏུནིང་
-གཏུམ་མོ་
-གཏུམོ་
-བཏང་སྙོམས་
-བཏངོཾས་
-རྟག་ཏུ་
-རྟགྟུ་
-སྟག་སྨྱོས་
-སྟྱོས་
-སྟོབས་རྒྱས་
-སྟོབྱས་
-བསྟན་འཛིན་
-བསྟི༹ན་
-ཐམ་པ་
-ཐཾ་པ་
-ཐམས་ཅད་
-ཐཾད་
-ཐུགས་རྗེ་
-ཐུཊེ་
-ཐུགས་བརྩེ་
-ཐེུ༹ཊ་
-ཐུན་མོང་
-ཐུནོང་
-ཐུན་བཞི་
-ཐིུན་
-ཐེག་ཆེན་
-ཐེགེན་
-མཐའ་འཁོབ་
-མཐོབ་
-མཐའ་དག་
-མཐྡག་
-མཐར་ཕྱིན་
-མཐྱིན་
-མཐུན་མོང་
-མཐོུང་
-མཐེ་བོང་
-མཐོེང་
-མཐོ་རིས་
-མཐོིས་
-དུར་ཁྲོད་
-དུརྲོད་
-དུས་དབྱིགས་
-དུསྱིགས་
-དུས་སུ་
-དུསུ་
-དེ་བཞིན་གཤེགས་པ་
-དེནིཊེ་པ་
-དྲག་པོ་
-དྲགོ་
-དྲག་ཤོས་
-དྲགོས་
-དྲང་སྲོང་
-དྲོང་
-དྲུང་དུ་
-དྲུངྡུ་
-དྲུང་ཡིག་
-དྲིུག་
-གདུང་རྟེན་
-གདེུན་
-གདུང་འཛིན་
-གདིུ༹ན་
-གདུབ་བུ་
-གདུབུ་
-བདུག་སྤོས་
-བདོུས་
-བདུད་རྒྱལ་
-བདུདྱལ་
-བདུད་ཉི་
-བདུདྙི་
-བདུད་རྩི་
-བདུདི༹་
-བདེ་ཆེན་
-བདེནེ་
-བདེ་གཤེགས་
-བདཻགས་
-འདུ་བྱེད་
-འདེུད་
-རྡོ་རྗེ་
-རྡོེ་
-སྡིག་སྲིན་
-སྡིན་
-སྡིགས་མཛུབ་
-སྡིུབ་
-སྡུག་བསྔལ་
-སྡུགལ་
-ནབས་སོ་
-ནབསོ་
-ནམ་མཁའ་
-ནམཁའ་
-ནམ་གྲུ་
-ནམྲུ་
-ནུབ་ཕྱོགས་
-ནོུགས་
-ནོར་བུ་
-ནོུར་
-གནམ་སྦྱོར་
-གནྱོཾར་
-གནས་སྐབས་
-གནསྐབས་
-རྣམ་གྲངས་
-རྣངཾས་
-རྣམ་ཤེས་
-རྣཾསེ་
-རྣམས་
-རྣཾས་
-རྣལ་འབྱོར་
-རྣལྱོར་
-སྣ་ཚོགས་
-སྣོ༹གས་
-པི་ལིང་
-པླིང་
-དཔག་མེད་
-དཔགེད་
-དཔལ་ལྡན་
-དཔལྡན་
-དཔལ་བེའུ་
-དཔལེ་
-དཔལ་འབྱོར་
-དཔལྱོར་
-དཔུང་ཚོགས་
-དཔོུགས་
-དཔེ་བྱད་
-དཔྱེད་
-སྤྱན་རས་གཟིགས་
-སྤྱས་གཟིགས་
-སྤྲོས་བྲལ་
-སྤྲོལ་
-ཕན་གནོད་
-ཕནོད་
-ཕུན་ཚོགས་
-ཕུགས་
-ཕོ་ཉ་
-ཕྙོ་
-ཕོ་རོལ་
-ཕརོལ་
-ཕྱག་འཚལ་ལོ་
-ཕྱ༹ལོ་
-ཕྲག་དོག་
-ཕྲོག་
-ཕྲིན་ལས་
-ཕྲིས་
-འཕེལ་ཉི་
-འཕེལྙི་
-འཕྲིན་ལས་
-ཕྲིས་
-བར་ཆད་
-བརད་
-བུ་མོ་
-བོུ་
-བུད་མེད་
-བེུད་
-བུད་ཤིང་
-བིུང་
-བོང་བུ་
-བོུང་
-བྱ་ཚོགས་
-བྱོ༹གས་
-བྱ་རོག་
-བྱོག་
-བྱང་ཆུབ་
-བྱུཾབ་
-བྱང་ཕྱོགས་
-བྱོགས་
-བྱི་བཞིན་
-བྱིནི་
-བྱོལ་སོང་
-བྱོང་
-བྲམ་ཟེ་
-བྲེམ་
-བླུན་པོ་
-བློུན་
-བློ་གྲོས་
-བློས་
-བློན་པོ་
-བློོན་
-དབང་པོ་
-དབངོ་
-དབང་ཕྱུག་
-དབྱུག་
-དབུ་ཐོད་
-དབོུད་
-དབུགས་ཐོབ་
-དབོུབས་
-དབྱེར་མེད་
-དབྱེརེད་
-འབྲས་བུ་
-འབྲུས་
-སྦྱོར་ཉི་
-སྦྱོརྙི་
-སྦྲང་རྩི་
-སྦྲིང༹་
-མ་རིག་
-མྲིག་
-མི་འཕྲོད་ཉི་
-མི་འཕྲོདྙི་
-མིག་དམར་
-མིར་
-མིང་གཟུགས་
-མིངུགས་
-མུ་གེ་
-མེུ་
-མུ་སྙེགས་
-མེུགས་
-མུ་ཏིག་
-མིུག་
-མུ་སྟེགས་
-མེུགས་
-མུ་མེན་
-མེུན་
-མེ་ཏོག་
-མྟོེག་
-མེ་ལོང་
-མོེང་
-མོན་གྲུ་
-མོནྲུ་
-མོན་དྲེ་
-མོནྲེ་
-མྱ་ངན་
-མྱན་
-དམག་དཔུང་
-དམུང་
-དམག་དཔོན་
-དམོན་
-སྨིན་དྲུག་
-སྨིནྲུག་
-ཙན་དན་
-ཙྡན་
-གཙུག་ཏོར་
-གཙོུར་
-རྩ་བཏོན་
-རྩོན་
-བརྩོན་འགྲུས་
-བརྩུས་
-ཚུལ་ཁྲིམས་
-ཚུལྲིམས་
-ཚུལ་ལྡན་
-ཚུལྡན་
-ཚེ་ལྡན་
-ཚྡེན་
-མཚན་ཉིད་
-མཚིད་
-མཚན་ཚད་
-མཚན༹ད་
-མཚམས་ཞུས་
-མཚྮུཾས་
-རྫུ་འཕྲུལ་
-རྫྲུལ་
-རྫུས་སྐྱེས་
-རྫེུས་
-རྫེ་བཙུན་
-རྫེུན་
-ཞུ་གསོལ་
-ཞོུལ་
-གཞལ་སྒང་
-གཞལྒང་
-གཞུ་ཐོག་
-གཞོུག་
-གཞུ་འདོམས་
-གཞོུམས་
-གཞོན་ནུ་
-གཞོནུ་
-གཟུ་བོ་
-གཟོུ་
-གཟུ་ཤིང་
-གཟིུང་
-གཟུག་གིན་འདུག་
-གཟུགིན་འདུག་
-གཟུག་ཟེར་
-གཟེུར་
-གཟུག་གཟེར་
-གཟེུར་
-གཟུགས་སྐུ་
-གཟུགསྐུ་
-གཟུགས་སྡུག་
-གཟུགསྡུག་
-གཟུགས་མེད་
-གཟེུད་
-འོད་དཀར་
-འོདཀར་
-འོད་ཟེར་
-འོེར་
-ཡན་ལག་
-ཡནག་
-ཡི་གེ་
-ཡིེ་
-ཡིན་ནམ་
-ཡིནམ་
-ཡེ་ཤེས་
-ཡེེས་
-ཡོན་ཏན་
-ཡྟོན་
-རབ་བྱུང་
-རབྱུང་
-རལ་གྲི་
-རལྲི་
-རིན་ཆེན་
-རིནེ་
-རིན་པོ་ཆེ་
-རིནོེ་
-རོང་ཡུལ་
-རོུལ་
-ལང་འཚོ་
-ལངོ༹་
-ལས་བཟང་
-ལསང་
-ལེགས་སྦྱར་
-ལེགསྦྱར་
-ལོངས་སྐུ་
-ལོངསྐུ་
-ལོངས་སྤྱོད་
-ལོངསྤྱོད་
-ཤ་འཁོན་
-ཤྑོན་
-ཤིན་ཏུ་
-ཤིནྟུ་
-ཤེས་བྱ་
-ཤྱེས་
-ཤེས་རབ་
-ཤེབ་
-ས་བོན་
-སོན་
-སངས་རྒྱས་
-སངྱས་
-སེང་གེ་
-སེངྒེ་
-སེམས་
-སྶེ་
-སེམས་ཅན་
-སེཾན་
-སེམས་དཔའ་
-སེཾདའ་
-སོ་སོ་བ་
-སོོབ་
-སོ་སོར་
-སོོར་
-སོགས་
-སོཊ་
-སོམས་ཤིག་
-སོསཾ་ཤིག་
-སྲེག་སྦྱོར་
-སྲེགྱོར་
-སྲེག་ཚེས་
-སྲོེས་
-སློབ་འདོད་
-སློོད་
-སློབ་དཔོན་
-སློོན་
-གསུང་རབ་
-གསུབ་
-བསོད་སྙོམས་
-བསྙོཾདས་
-བསོད་ནམས་
-བསོདཾས་
-ལྷ་ཚོགས་
-ལྷོ༹གས་
-ལྷ་མཚམས་
-ལྷ༹ཾས་
-ལྷག་
-ལྷྒ་
-ལྷན་རྒྱས་
-ལྷྱས་
-ལྷན་ཅིག་
-ལྷིག་
-ལྷན་གཅིག་
-ལྷིག་
-ལྷན་ཚོགས་
-ལྷནོ༹ཊ་
-ལྷུན་གྲུབ་
-ལྷུནྲུབ་
-ལྷོ་ཕྱོགས་
-ལྷྱོགས་
-ཨོ་རྒྱན་
-ཨྱོན་
diff --git a/test/shaping/texts/in-tree/shaper-use/script-batak/misc.txt b/test/shaping/texts/in-tree/shaper-use/script-batak/misc.txt
deleted file mode 100644 (file)
index c8ae04b..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-ᯂᯩ
-ᯄ᯦ᯩ
-ᯇᯪᯰ
-ᯓᯩᯰ
-ᯄᯮ
-ᯃᯮ
-ᯎᯮ
-ᯞᯮ
-ᯖᯪᯇ᯲
diff --git a/test/shaping/texts/in-tree/shaper-use/script-buginese/misc.txt b/test/shaping/texts/in-tree/shaper-use/script-buginese/misc.txt
deleted file mode 100644 (file)
index fe1b76d..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-ᨒᨚᨈᨑ
-ᨔᨑ
-ᨅᨔ ᨈᨚ ᨅᨙᨀ
-ᨕᨒᨚ ᨆᨒᨗᨕᨘ ᨅᨛᨈᨘᨕᨊ
-ᨕᨗᨉᨚ ᨔᨘᨑᨛ
-ᨕᨗᨊ ᨔᨘᨑᨛ
-ᨕᨊ ᨔᨘᨑᨛ
-
-ᨊᨀᨚ      ᨕᨛᨃ       ᨈᨕᨘᨄᨔᨒ᨞   ᨕᨍ  ᨆᨘᨄᨈᨒᨒᨚᨓᨗ     ᨄᨌᨒᨆᨘ ᨑᨗᨈᨚᨄᨔᨒᨕᨙ᨞
-ᨄᨔᨗᨈᨘᨍᨘᨓᨗᨆᨘᨈᨚᨓᨗᨔ       ᨕᨔᨒᨊ    ᨄᨌᨒᨆᨘ᨞      ᨕᨄ  ᨕᨗᨀᨚᨊᨈᨘ   ᨊᨁᨗᨒᨗ ᨉᨙᨓᨈᨕᨙ᨞
-ᨊᨀᨚ      ᨅᨕᨗᨌᨘᨆᨘᨄᨗ     ᨕᨔᨒᨊ    ᨈᨕᨘᨓᨙ᨞      ᨆᨘᨄᨙᨑᨍᨕᨗᨔ     ᨄᨉᨈᨚᨓᨗ᨞
-ᨊᨀᨚ      ᨄᨔᨒᨕᨗ ᨈᨕᨘᨓᨙ᨞      ᨕᨍ  ᨈᨗᨆᨘᨌᨒᨕᨗ        ᨑᨗᨔᨗᨈᨗᨊᨍᨊᨕᨙᨈᨚᨔ      ᨕᨔᨒᨊ᨞
-
-ᨕᨛᨛᨃ   ᨕᨛᨃ       ᨄ ᨙᨑ᨞   ᨕᨛᨃ        ᨙᨔᨕᨘᨓ        ᨓᨛᨈᨘ᨞
-ᨕᨛᨃ       ᨙᨔᨕᨘᨓ        ᨕᨑᨘ       ᨆᨀᨘᨋᨕᨗ      ᨑᨗ  ᨒᨘᨓᨘ᨞ ᨆᨔᨒ       ᨕᨘᨒᨗ᨞
-
-ᨄᨘᨑᨊᨗᨀᨚ  ᨆᨙᨋ?
-ᨉᨙᨄ
-
-ᨆᨙᨒᨚ ᨀ ᨌᨛᨙᨆ
-ᨔᨙᨉᨗ   
-ᨉᨘᨓ      
-ᨈᨛᨒᨘ   
-ᨕᨛᨄ      
-ᨒᨗᨆ      
-ᨕᨛᨊᨛ   
-ᨄᨗᨈᨘ   
-ᨕᨑᨘᨓ   
-ᨕᨙᨔᨑ   
-ᨔᨄᨘᨒᨚ        
-ᨉᨘᨓᨄᨘᨒᨚ  
-ᨈᨛᨒᨘᨄᨘᨒᨚ       
-ᨄᨈᨄᨘᨒᨚ     
-ᨒᨗᨆᨄᨘᨒᨚ  
-ᨕᨛᨊᨛᨄᨘᨒᨚᨊ    
-ᨄᨗᨈᨘᨄᨘᨒᨚ       
-ᨕᨑᨘᨓᨄᨘᨒᨚᨊ    
-ᨕᨙᨔᨑᨄᨘᨒᨚᨊ    
-ᨔᨗᨑᨈᨘ        
-ᨔᨗᨔᨛᨅᨘ     
-ᨔᨗᨒᨔ   
-ᨔᨗᨀᨚᨈᨗ     
-
-ᨅᨔ ᨕᨘᨁᨗ
-
-ᨅᨔ ᨆᨀᨔᨑ
-ᨅᨒ 
-ᨅᨚᨒᨚ   
-ᨅᨅ 
-ᨌᨗᨄᨘᨑᨘ     
-ᨉᨚᨕᨙ   
-ᨕᨗᨐᨚ   
-ᨒᨚᨄᨚ   
-ᨔᨒᨚ      
-ᨈ ᨅᨙᨙ  
-ᨈᨙᨊ      
-ᨀᨑᨕᨙ   
-ᨕᨄ ᨀᨑᨙᨅ?   
-ᨒᨀᨙᨀᨚ ᨆᨕᨙ?     
-ᨅᨒ 
-ᨅᨚᨈᨚ   
-ᨑᨈᨔ      
-ᨅᨈᨒ      
-ᨅᨗᨒ      
-ᨁᨙᨒᨙ ᨁᨙᨒᨙ      
-ᨀᨚᨀᨚ   
-ᨍᨑ 
-ᨅᨙᨅᨙ   
-ᨆᨚᨈᨙᨑᨙ     
-ᨂᨑᨙ      
diff --git a/test/shaping/texts/in-tree/shaper-use/script-kaithi/misc.txt b/test/shaping/texts/in-tree/shaper-use/script-kaithi/misc.txt
deleted file mode 100644 (file)
index 5503298..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-𑂍   𑂎 𑂍𑂹𑂎 𑂍𑂹𑂎𑂱 𑂍𑂹𑂍𑂹𑂎𑂱 𑂍𑂹𑂎𑂹𑂎𑂱 𑂍𑂱 𑂍𑂹𑂍𑂹𑂎𑂱 𑂍𑂹𑂎𑂹𑂎𑂱𑂁 𑂍𑂹𑂎𑂹𑂎𑂱𑂀 𑂎𑂱𑂁
-𑂩𑂍 𑂩𑂹𑂍 𑂩𑂹𑂞 𑂩𑂹𑂍𑂹𑂍 𑂩𑂹𑂍
-𑂩𑂹𑂍𑂵 𑂩𑂹𑂍𑂵
-𑂩𑂍 𑂩𑂹𑂍 𑂩𑂹𑂞 𑂩𑂹𑂍𑂹𑂍 𑂩𑂹𑂍
-𑂩𑂹𑂍𑂵 𑂩𑂹𑂍𑂵
-𑂩𑂍 𑂩𑂹𑂍𑂱  𑂩𑂹𑂍𑂹𑂍𑂱  𑂩𑂹𑂍𑂹𑂍𑂵  𑂩𑂹𑂔𑂹𑂍𑂹𑂍𑂱 𑂩𑂹𑂞
diff --git a/test/shaping/texts/in-tree/shaper-use/script-kharoshti/misc.txt b/test/shaping/texts/in-tree/shaper-use/script-kharoshti/misc.txt
deleted file mode 100644 (file)
index 5a563c1..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-𐨤𐨪𐨌𐨪𐨿𐨗𐨸𐨅𐨌𐨏
-𐨀𐨁
-𐨐𐨁
-𐨠𐨁
-𐨀𐨂
-𐨱𐨂
-𐨨𐨂
-𐨀𐨃
-𐨨𐨃
-𐨀𐨅
-𐨐𐨅
-𐨠𐨅
-𐨡𐨅
-𐨀𐨆
-𐨤𐨆
-𐨨𐨌
-𐨯𐨍
-𐨀𐨎
-𐨐𐨏
-𐨗𐨸
-𐨒𐨹
-𐨨𐨺
-𐨢𐨁𐨐𐨿
-𐨐𐨿𐨮
-𐨨𐨿𐨪
-𐨬𐨿𐨱
-𐨯𐨿𐨟
-𐨯𐨿𐨩
-𐨪𐨿𐨟
-𐨟𐨿𐨪
-𐨫𐨿𐨤
-𐨤𐨿𐨫
-𐨐𐨿𐨫
-𐨟𐨿𐨬
-𐨐𐨿𐨟
-𐨑𐨿𐨐𐨿𐨮
index 2543a60..3f23bab 100644 (file)
@@ -1,12 +1,11 @@
 # Process this file with automake to produce Makefile.in
 
+NULL =
 EXTRA_DIST =
 CLEANFILES =
 DISTCLEANFILES =
 MAINTAINERCLEANFILES =
 
-include Makefile.sources
-
 # Convenience targets:
 lib:
        @$(MAKE) $(AM_MAKEFLAGS) -C $(top_builddir)/src lib
@@ -32,7 +31,21 @@ if HAVE_GLIB
 
 if HAVE_FREETYPE
 if HAVE_CAIRO_FT
-hb_view_SOURCES = $(HB_VIEW_sources)
+hb_view_SOURCES = \
+       hb-view.cc \
+       options.cc \
+       options.hh \
+       main-font-text.hh \
+       shape-consumer.hh \
+       ansi-print.cc \
+       ansi-print.hh \
+       helper-cairo.cc \
+       helper-cairo.hh \
+       helper-cairo-ansi.cc \
+       helper-cairo-ansi.hh \
+       view-cairo.cc \
+       view-cairo.hh \
+       $(NULL)
 hb_view_LDADD = \
        $(LDADD) \
        $(CAIRO_LIBS) \
@@ -42,29 +55,25 @@ bin_PROGRAMS += hb-view
 endif # HAVE_CAIRO_FT
 endif # HAVE_FREETYPE
 
-hb_shape_SOURCES = $(HB_SHAPE_sources)
+hb_shape_SOURCES = \
+       hb-shape.cc \
+       options.cc \
+       options.hh \
+       main-font-text.hh \
+       shape-consumer.hh \
+       $(NULL)
 bin_PROGRAMS += hb-shape
 
 if HAVE_OT
-hb_ot_shape_closure_SOURCES = $(HB_OT_SHAPE_CLOSURE_sources)
+hb_ot_shape_closure_SOURCES = \
+       hb-ot-shape-closure.cc \
+       options.cc \
+       options.hh \
+       main-font-text.hh \
+       $(NULL)
 bin_PROGRAMS += hb-ot-shape-closure
 endif # HAVE_OT
 
 endif # HAVE_GLIB
 
-#if HAVE_OT
-#if HAVE_FONTCONFIG
-#hb_fc_list_SOURCES = \
-#      hb-fc.cc \
-#      hb-fc.h \
-#      hb-fc-list.c \
-#      $(NULL)
-#hb_fc_list_LDADD = \
-#      $(LDADD) \
-#      $(FONTCONFIG_LIBS) \
-#      $(NULL)
-#bin_PROGRAMS += hb-fc-list
-#endif # HAVE_FONTCONFIG
-#endif # HAVE_OT
-
 -include $(top_srcdir)/git.mk
index f6fe331..6fecdd0 100644 (file)
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.14 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994-2013 Free Software Foundation, Inc.
@@ -80,13 +80,13 @@ PRE_UNINSTALL = :
 POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
-DIST_COMMON = $(srcdir)/Makefile.sources $(srcdir)/Makefile.in \
-       $(srcdir)/Makefile.am $(top_srcdir)/depcomp
 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_GLIB_TRUE@am__append_2 = hb-shape
 @HAVE_GLIB_TRUE@@HAVE_OT_TRUE@am__append_3 = hb-ot-shape-closure
 subdir = util
+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 \
        $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/libtool.m4 \
@@ -108,10 +108,10 @@ 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__objects_2 = hb-ot-shape-closure.$(OBJEXT) options.$(OBJEXT) \
-       $(am__objects_1)
 @HAVE_GLIB_TRUE@@HAVE_OT_TRUE@am_hb_ot_shape_closure_OBJECTS =  \
-@HAVE_GLIB_TRUE@@HAVE_OT_TRUE@ $(am__objects_2)
+@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 =
@@ -124,8 +124,8 @@ 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__objects_3 = hb-shape.$(OBJEXT) options.$(OBJEXT) $(am__objects_1)
-@HAVE_GLIB_TRUE@am_hb_shape_OBJECTS = $(am__objects_3)
+@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 \
@@ -136,11 +136,13 @@ am__hb_view_SOURCES_DIST = hb-view.cc options.cc options.hh \
        ansi-print.hh helper-cairo.cc helper-cairo.hh \
        helper-cairo-ansi.cc helper-cairo-ansi.hh view-cairo.cc \
        view-cairo.hh
-am__objects_4 = hb-view.$(OBJEXT) options.$(OBJEXT) \
-       ansi-print.$(OBJEXT) helper-cairo.$(OBJEXT) \
-       helper-cairo-ansi.$(OBJEXT) view-cairo.$(OBJEXT) \
-       $(am__objects_1)
-@HAVE_CAIRO_FT_TRUE@@HAVE_FREETYPE_TRUE@@HAVE_GLIB_TRUE@am_hb_view_OBJECTS = $(am__objects_4)
+@HAVE_CAIRO_FT_TRUE@@HAVE_FREETYPE_TRUE@@HAVE_GLIB_TRUE@am_hb_view_OBJECTS = hb-view.$(OBJEXT) \
+@HAVE_CAIRO_FT_TRUE@@HAVE_FREETYPE_TRUE@@HAVE_GLIB_TRUE@       options.$(OBJEXT) \
+@HAVE_CAIRO_FT_TRUE@@HAVE_FREETYPE_TRUE@@HAVE_GLIB_TRUE@       ansi-print.$(OBJEXT) \
+@HAVE_CAIRO_FT_TRUE@@HAVE_FREETYPE_TRUE@@HAVE_GLIB_TRUE@       helper-cairo.$(OBJEXT) \
+@HAVE_CAIRO_FT_TRUE@@HAVE_FREETYPE_TRUE@@HAVE_GLIB_TRUE@       helper-cairo-ansi.$(OBJEXT) \
+@HAVE_CAIRO_FT_TRUE@@HAVE_FREETYPE_TRUE@@HAVE_GLIB_TRUE@       view-cairo.$(OBJEXT) \
+@HAVE_CAIRO_FT_TRUE@@HAVE_FREETYPE_TRUE@@HAVE_GLIB_TRUE@       $(am__objects_1)
 hb_view_OBJECTS = $(am_hb_view_OBJECTS)
 am__DEPENDENCIES_2 = $(top_builddir)/src/libharfbuzz.la \
        $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
@@ -256,8 +258,6 @@ CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
-DIRECTWRITE_CXXFLAGS = @DIRECTWRITE_CXXFLAGS@
-DIRECTWRITE_LIBS = @DIRECTWRITE_LIBS@
 DLLTOOL = @DLLTOOL@
 DSYMUTIL = @DSYMUTIL@
 DUMPBIN = @DUMPBIN@
@@ -267,20 +267,15 @@ ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
 FGREP = @FGREP@
-FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@
-FONTCONFIG_LIBS = @FONTCONFIG_LIBS@
 FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
-FREETYPE_DEPS = @FREETYPE_DEPS@
 FREETYPE_LIBS = @FREETYPE_LIBS@
 GIT = @GIT@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_DEPS = @GLIB_DEPS@
 GLIB_LIBS = @GLIB_LIBS@
 GLIB_MKENUMS = @GLIB_MKENUMS@
 GOBJECT_CFLAGS = @GOBJECT_CFLAGS@
 GOBJECT_LIBS = @GOBJECT_LIBS@
 GRAPHITE2_CFLAGS = @GRAPHITE2_CFLAGS@
-GRAPHITE2_DEPS = @GRAPHITE2_DEPS@
 GRAPHITE2_LIBS = @GRAPHITE2_LIBS@
 GREP = @GREP@
 GTKDOC_CHECK = @GTKDOC_CHECK@
@@ -403,42 +398,11 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
+NULL = 
 EXTRA_DIST = 
 CLEANFILES = 
 DISTCLEANFILES = 
 MAINTAINERCLEANFILES = 
-NULL = 
-HB_VIEW_sources = \
-       hb-view.cc \
-       options.cc \
-       options.hh \
-       main-font-text.hh \
-       shape-consumer.hh \
-       ansi-print.cc \
-       ansi-print.hh \
-       helper-cairo.cc \
-       helper-cairo.hh \
-       helper-cairo-ansi.cc \
-       helper-cairo-ansi.hh \
-       view-cairo.cc \
-       view-cairo.hh \
-       $(NULL)
-
-HB_SHAPE_sources = \
-       hb-shape.cc \
-       options.cc \
-       options.hh \
-       main-font-text.hh \
-       shape-consumer.hh \
-       $(NULL)
-
-HB_OT_SHAPE_CLOSURE_sources = \
-       hb-ot-shape-closure.cc \
-       options.cc \
-       options.hh \
-       main-font-text.hh \
-       $(NULL)
-
 AM_CPPFLAGS = \
        -DHB_DISABLE_DEPRECATED \
        -I$(top_srcdir)/src/ \
@@ -455,20 +419,48 @@ LDADD = \
        $(FREETYPE_LIBS) \
        $(NULL)
 
-@HAVE_CAIRO_FT_TRUE@@HAVE_FREETYPE_TRUE@@HAVE_GLIB_TRUE@hb_view_SOURCES = $(HB_VIEW_sources)
+@HAVE_CAIRO_FT_TRUE@@HAVE_FREETYPE_TRUE@@HAVE_GLIB_TRUE@hb_view_SOURCES = \
+@HAVE_CAIRO_FT_TRUE@@HAVE_FREETYPE_TRUE@@HAVE_GLIB_TRUE@       hb-view.cc \
+@HAVE_CAIRO_FT_TRUE@@HAVE_FREETYPE_TRUE@@HAVE_GLIB_TRUE@       options.cc \
+@HAVE_CAIRO_FT_TRUE@@HAVE_FREETYPE_TRUE@@HAVE_GLIB_TRUE@       options.hh \
+@HAVE_CAIRO_FT_TRUE@@HAVE_FREETYPE_TRUE@@HAVE_GLIB_TRUE@       main-font-text.hh \
+@HAVE_CAIRO_FT_TRUE@@HAVE_FREETYPE_TRUE@@HAVE_GLIB_TRUE@       shape-consumer.hh \
+@HAVE_CAIRO_FT_TRUE@@HAVE_FREETYPE_TRUE@@HAVE_GLIB_TRUE@       ansi-print.cc \
+@HAVE_CAIRO_FT_TRUE@@HAVE_FREETYPE_TRUE@@HAVE_GLIB_TRUE@       ansi-print.hh \
+@HAVE_CAIRO_FT_TRUE@@HAVE_FREETYPE_TRUE@@HAVE_GLIB_TRUE@       helper-cairo.cc \
+@HAVE_CAIRO_FT_TRUE@@HAVE_FREETYPE_TRUE@@HAVE_GLIB_TRUE@       helper-cairo.hh \
+@HAVE_CAIRO_FT_TRUE@@HAVE_FREETYPE_TRUE@@HAVE_GLIB_TRUE@       helper-cairo-ansi.cc \
+@HAVE_CAIRO_FT_TRUE@@HAVE_FREETYPE_TRUE@@HAVE_GLIB_TRUE@       helper-cairo-ansi.hh \
+@HAVE_CAIRO_FT_TRUE@@HAVE_FREETYPE_TRUE@@HAVE_GLIB_TRUE@       view-cairo.cc \
+@HAVE_CAIRO_FT_TRUE@@HAVE_FREETYPE_TRUE@@HAVE_GLIB_TRUE@       view-cairo.hh \
+@HAVE_CAIRO_FT_TRUE@@HAVE_FREETYPE_TRUE@@HAVE_GLIB_TRUE@       $(NULL)
+
 @HAVE_CAIRO_FT_TRUE@@HAVE_FREETYPE_TRUE@@HAVE_GLIB_TRUE@hb_view_LDADD = \
 @HAVE_CAIRO_FT_TRUE@@HAVE_FREETYPE_TRUE@@HAVE_GLIB_TRUE@       $(LDADD) \
 @HAVE_CAIRO_FT_TRUE@@HAVE_FREETYPE_TRUE@@HAVE_GLIB_TRUE@       $(CAIRO_LIBS) \
 @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_GLIB_TRUE@hb_shape_SOURCES = $(HB_SHAPE_sources)
-@HAVE_GLIB_TRUE@@HAVE_OT_TRUE@hb_ot_shape_closure_SOURCES = $(HB_OT_SHAPE_CLOSURE_sources)
+@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
 
 .SUFFIXES:
 .SUFFIXES: .cc .lo .o .obj
-$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am $(srcdir)/Makefile.sources $(am__configure_deps)
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
        @for dep in $?; do \
          case '$(am__configure_deps)' in \
            *$$dep*) \
@@ -489,7 +481,6 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
            echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
            cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
        esac;
-$(srcdir)/Makefile.sources:
 
 $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
        cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
@@ -833,21 +824,6 @@ uninstall-am: uninstall-binPROGRAMS
 lib:
        @$(MAKE) $(AM_MAKEFLAGS) -C $(top_builddir)/src lib
 
-#if HAVE_OT
-#if HAVE_FONTCONFIG
-#hb_fc_list_SOURCES = \
-#      hb-fc.cc \
-#      hb-fc.h \
-#      hb-fc-list.c \
-#      $(NULL)
-#hb_fc_list_LDADD = \
-#      $(LDADD) \
-#      $(FONTCONFIG_LIBS) \
-#      $(NULL)
-#bin_PROGRAMS += hb-fc-list
-#endif # HAVE_FONTCONFIG
-#endif # HAVE_OT
-
 -include $(top_srcdir)/git.mk
 
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
diff --git a/util/Makefile.sources b/util/Makefile.sources
deleted file mode 100644 (file)
index 368fdb0..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-NULL =
-
-HB_VIEW_sources = \
-       hb-view.cc \
-       options.cc \
-       options.hh \
-       main-font-text.hh \
-       shape-consumer.hh \
-       ansi-print.cc \
-       ansi-print.hh \
-       helper-cairo.cc \
-       helper-cairo.hh \
-       helper-cairo-ansi.cc \
-       helper-cairo-ansi.hh \
-       view-cairo.cc \
-       view-cairo.hh \
-       $(NULL)
-
-HB_SHAPE_sources = \
-       hb-shape.cc \
-       options.cc \
-       options.hh \
-       main-font-text.hh \
-       shape-consumer.hh \
-       $(NULL)
-
-HB_OT_SHAPE_CLOSURE_sources = \
-       hb-ot-shape-closure.cc \
-       options.cc \
-       options.hh \
-       main-font-text.hh \
-       $(NULL)
index e0ce7b3..0fc3719 100644 (file)
@@ -41,7 +41,7 @@
 #include <unistd.h> /* for isatty() */
 #endif
 
-#if defined (_MSC_VER) && (_MSC_VER < 1800)
+#ifdef _MSC_VER
 static inline long int
 lround (double x)
 {
@@ -52,8 +52,6 @@ lround (double x)
 }
 #endif
 
-#define ESC_E (char)27
-
 #define MIN(a,b) ((a) < (b) ? (a) : (b))
 
 #define CELL_W 8
@@ -224,12 +222,11 @@ struct biimage_t
 };
 
 const char *
-block_best (const biimage_t &bi, bool *inverse)
+block_best (const biimage_t &bi, unsigned int *score, bool *inverse)
 {
   assert (bi.width  <= CELL_W);
   assert (bi.height <= CELL_H);
 
-  unsigned int score = (unsigned int) -1;
   unsigned int row_sum[CELL_H] = {0};
   unsigned int col_sum[CELL_W] = {0};
   unsigned int row_sum_i[CELL_H] = {0};
@@ -265,14 +262,14 @@ block_best (const biimage_t &bi, bool *inverse)
   const char *best_c = " ";
 
   /* Maybe empty is better! */
-  if (total < score) {
-    score = total;
+  if (total < *score) {
+    *score = total;
     *inverse = false;
     best_c = " ";
   }
   /* Maybe full is better! */
-  if (total_i < score) {
-    score = total_i;
+  if (total_i < *score) {
+    *score = total_i;
     *inverse = true;
     best_c = " ";
   }
@@ -298,11 +295,11 @@ block_best (const biimage_t &bi, bool *inverse)
        best_inv = true;
       }
     }
-    if (best_s < score) {
+    if (best_s < *score) {
       static const char *lower[7] = {"▁", "▂", "▃", "▄", "▅", "▆", "▇"};
-      unsigned int which = lround ((double) ((best_i + 1) * 8) / bi.height);
+      unsigned int which = lround (((best_i + 1) * 8) / bi.height);
       if (1 <= which && which <= 7) {
-       score = best_s;
+       *score = best_s;
        *inverse = best_inv;
        best_c = lower[7 - which];
       }
@@ -330,11 +327,11 @@ block_best (const biimage_t &bi, bool *inverse)
        best_inv = false;
       }
     }
-    if (best_s < score) {
+    if (best_s < *score) {
       static const char *left [7] = {"▏", "▎", "▍", "▌", "▋", "▊", "▉"};
-      unsigned int which = lround ((double) ((best_i + 1) * 8) / bi.width);
+      unsigned int which = lround (((best_i + 1) * 8) / bi.width);
       if (1 <= which && which <= 7) {
-       score = best_s;
+       *score = best_s;
        *inverse = best_inv;
        best_c = left[which - 1];
       }
@@ -352,7 +349,7 @@ block_best (const biimage_t &bi, bool *inverse)
          qs += quad_i[i][j];
        } else
          qs += quad[i][j];
-    if (qs < score) {
+    if (qs < *score) {
       const char *c = NULL;
       bool inv = false;
       switch (q) {
@@ -368,7 +365,7 @@ block_best (const biimage_t &bi, bool *inverse)
        case 14: c = "▟"; inv = true;  break;
       }
       if (c) {
-       score = qs;
+       *score = qs;
        *inverse = inv;
        best_c = c;
       }
@@ -397,23 +394,24 @@ ansi_print_image_rgb24 (const uint32_t *data,
       bi.set (cell);
       if (bi.unicolor) {
         if (last_bg != bi.bg) {
-         printf ("%c[%dm", ESC_E, 40 + bi.bg);
+         printf ("\e[%dm", 40 + bi.bg);
          last_bg = bi.bg;
        }
        printf (" ");
       } else {
         /* Figure out the closest character to the biimage */
+        unsigned int score = (unsigned int) -1;
        bool inverse = false;
-        const char *c = block_best (bi, &inverse);
+        const char *c = block_best (bi, &score, &inverse);
        if (inverse) {
          if (last_bg != bi.fg || last_fg != bi.bg) {
-           printf ("%c[%d;%dm", ESC_E, 30 + bi.bg, 40 + bi.fg);
+           printf ("\e[%d;%dm", 30 + bi.bg, 40 + bi.fg);
            last_bg = bi.fg;
            last_fg = bi.bg;
          }
        } else {
          if (last_bg != bi.bg || last_fg != bi.fg) {
-           printf ("%c[%d;%dm", ESC_E, 40 + bi.bg, 30 + bi.fg);
+           printf ("\e[%d;%dm", 40 + bi.bg, 30 + bi.fg);
            last_bg = bi.bg;
            last_fg = bi.fg;
          }
@@ -421,7 +419,7 @@ ansi_print_image_rgb24 (const uint32_t *data,
        printf ("%s", c);
       }
     }
-    printf ("%c[0m\n", ESC_E); /* Reset */
+    printf ("\e[0m\n"); /* Reset */
     last_bg = last_fg = -1;
   }
 }
index 3bd2184..f38f387 100644 (file)
@@ -70,8 +70,6 @@ struct output_buffer_t
       flags |= HB_BUFFER_SERIALIZE_FLAG_NO_CLUSTERS;
     if (!format.show_positions)
       flags |= HB_BUFFER_SERIALIZE_FLAG_NO_POSITIONS;
-    if (format.show_extents)
-      flags |= HB_BUFFER_SERIALIZE_FLAG_GLYPH_EXTENTS;
     format_flags = (hb_buffer_serialize_flags_t) flags;
   }
   void new_line (void)
index 8f30eea..d576c3f 100644 (file)
@@ -75,9 +75,7 @@ helper_cairo_create_scaled_font (const font_options_t *font_opts)
   hb_font_t *font = hb_font_reference (font_opts->get_font ());
 
   cairo_font_face_t *cairo_face;
-  /* We cannot use the FT_Face from hb_font_t, as doing so will confuse hb_font_t because
-   * cairo will reset the face size.  As such, create new face... */
-  FT_Face ft_face = NULL;//hb_ft_font_get_face (font);
+  FT_Face ft_face = hb_ft_font_get_face (font);
   if (!ft_face)
   {
     if (!ft_library)
@@ -130,22 +128,6 @@ helper_cairo_create_scaled_font (const font_options_t *font_opts)
   return scaled_font;
 }
 
-bool
-helper_cairo_scaled_font_has_color (cairo_scaled_font_t *scaled_font)
-{
-  bool ret = false;
-#ifdef FT_HAS_COLOR
-  FT_Face ft_face = cairo_ft_scaled_font_lock_face (scaled_font);
-  if (ft_face)
-  {
-    if (FT_HAS_COLOR (ft_face))
-      ret = true;
-    cairo_ft_scaled_font_unlock_face (scaled_font);
-  }
-#endif
-  return ret;
-}
-
 
 struct finalize_closure_t {
   void (*callback)(finalize_closure_t *);
@@ -313,8 +295,7 @@ const char *helper_cairo_supported_formats[] =
 cairo_t *
 helper_cairo_create_context (double w, double h,
                             view_options_t *view_opts,
-                            output_options_t *out_opts,
-                            cairo_content_t content)
+                            output_options_t *out_opts)
 {
   cairo_surface_t *(*constructor) (cairo_write_func_t write_func,
                                   void *closure,
@@ -343,47 +324,42 @@ helper_cairo_create_context (double w, double h,
   }
   if (0)
     ;
-    else if (0 == g_ascii_strcasecmp (extension, "ansi"))
+    else if (0 == strcasecmp (extension, "ansi"))
       constructor2 = _cairo_ansi_surface_create_for_stream;
   #ifdef CAIRO_HAS_PNG_FUNCTIONS
-    else if (0 == g_ascii_strcasecmp (extension, "png"))
+    else if (0 == strcasecmp (extension, "png"))
       constructor2 = _cairo_png_surface_create_for_stream;
   #endif
   #ifdef CAIRO_HAS_SVG_SURFACE
-    else if (0 == g_ascii_strcasecmp (extension, "svg"))
+    else if (0 == strcasecmp (extension, "svg"))
       constructor = cairo_svg_surface_create_for_stream;
   #endif
   #ifdef CAIRO_HAS_PDF_SURFACE
-    else if (0 == g_ascii_strcasecmp (extension, "pdf"))
+    else if (0 == strcasecmp (extension, "pdf"))
       constructor = cairo_pdf_surface_create_for_stream;
   #endif
   #ifdef CAIRO_HAS_PS_SURFACE
-    else if (0 == g_ascii_strcasecmp (extension, "ps"))
+    else if (0 == strcasecmp (extension, "ps"))
       constructor = cairo_ps_surface_create_for_stream;
    #ifdef HAS_EPS
-    else if (0 == g_ascii_strcasecmp (extension, "eps"))
+    else if (0 == strcasecmp (extension, "eps"))
       constructor = _cairo_eps_surface_create_for_stream;
    #endif
   #endif
 
 
   unsigned int fr, fg, fb, fa, br, bg, bb, ba;
-  const char *color;
   br = bg = bb = 0; ba = 255;
-  color = view_opts->back ? view_opts->back : DEFAULT_BACK;
-  sscanf (color + (*color=='#'), "%2x%2x%2x%2x", &br, &bg, &bb, &ba);
+  sscanf (view_opts->back + (*view_opts->back=='#'), "%2x%2x%2x%2x", &br, &bg, &bb, &ba);
   fr = fg = fb = 0; fa = 255;
-  color = view_opts->fore ? view_opts->fore : DEFAULT_FORE;
-  sscanf (color + (*color=='#'), "%2x%2x%2x%2x", &fr, &fg, &fb, &fa);
+  sscanf (view_opts->fore + (*view_opts->fore=='#'), "%2x%2x%2x%2x", &fr, &fg, &fb, &fa);
 
-  if (content == CAIRO_CONTENT_ALPHA)
-  {
-    if (view_opts->annotate ||
-       br != bg || bg != bb ||
-       fr != fg || fg != fb)
-      content = CAIRO_CONTENT_COLOR;
-  }
-  if (ba != 255)
+  cairo_content_t content;
+  if (!view_opts->annotate && ba == 255 && br == bg && bg == bb && fr == fg && fg == fb)
+    content = CAIRO_CONTENT_ALPHA;
+  else if (ba == 255)
+    content = CAIRO_CONTENT_COLOR;
+  else
     content = CAIRO_CONTENT_COLOR_ALPHA;
 
   cairo_surface_t *surface;
@@ -480,16 +456,16 @@ helper_cairo_line_from_buffer (helper_cairo_line_t *l,
   for (i = 0; i < (int) l->num_glyphs; i++)
   {
     l->glyphs[i].index = hb_glyph[i].codepoint;
-    l->glyphs[i].x = scalbn ((double)  hb_position->x_offset + x, scale_bits);
-    l->glyphs[i].y = scalbn ((double) -hb_position->y_offset + y, scale_bits);
+    l->glyphs[i].x = scalbn ( hb_position->x_offset + x, scale_bits);
+    l->glyphs[i].y = scalbn (-hb_position->y_offset + y, scale_bits);
     x +=  hb_position->x_advance;
     y += -hb_position->y_advance;
 
     hb_position++;
   }
   l->glyphs[i].index = -1;
-  l->glyphs[i].x = scalbn ((double) x, scale_bits);
-  l->glyphs[i].y = scalbn ((double) y, scale_bits);
+  l->glyphs[i].x = scalbn (x, scale_bits);
+  l->glyphs[i].y = scalbn (y, scale_bits);
 
   if (l->num_clusters) {
     memset ((void *) l->clusters, 0, l->num_clusters * sizeof (l->clusters[0]));
index 27b6eb3..ed55a45 100644 (file)
 cairo_scaled_font_t *
 helper_cairo_create_scaled_font (const font_options_t *font_opts);
 
-bool
-helper_cairo_scaled_font_has_color (cairo_scaled_font_t *scaled_font);
-
 extern const char *helper_cairo_supported_formats[];
 
 cairo_t *
 helper_cairo_create_context (double w, double h,
                             view_options_t *view_opts,
-                            output_options_t *out_opts,
-                            cairo_content_t content);
+                            output_options_t *out_opts);
 
 void
 helper_cairo_destroy_context (cairo_t *cr);
index 55de567..628cdf9 100644 (file)
 
 /* main() body for utilities taking font and processing text.*/
 
-static char *
-locale_to_utf8 (char *s)
-{
-  char *t;
-  GError *error = NULL;
-
-  t = g_locale_to_utf8 (s, -1, NULL, NULL, &error);
-  if (!t)
-  {
-     fail (true, "Failed converting text to UTF-8");
-  }
-
-  return t;
-}
-
-static hb_bool_t
-message_func (hb_buffer_t *buffer,
-             hb_font_t *font,
-             const char *message,
-             void *user_data)
-{
-  fprintf (stderr, "HB: %s\n", message);
-  char buf[4096];
-  hb_buffer_serialize_glyphs (buffer, 0, hb_buffer_get_length (buffer),
-                             buf, sizeof (buf), NULL,
-                             font,
-                             HB_BUFFER_SERIALIZE_FORMAT_TEXT,
-                             HB_BUFFER_SERIALIZE_FLAG_DEFAULT);
-  fprintf (stderr, "HB: buffer [%s]\n", buf);
-  return true;
-}
-
 template <typename consumer_t, int default_font_size, int subpixel_bits>
 struct main_font_text_t
 {
@@ -78,20 +46,18 @@ struct main_font_text_t
     options.parse (&argc, &argv);
 
     argc--, argv++;
-    if (argc && !font_opts.font_file) font_opts.font_file = locale_to_utf8 (argv[0]), argc--, argv++;
-    if (argc && !input.text && !input.text_file) input.text = locale_to_utf8 (argv[0]), argc--, argv++;
+    if (argc && !font_opts.font_file) font_opts.font_file = argv[0], argc--, argv++;
+    if (argc && !input.text && !input.text_file) input.text = argv[0], argc--, argv++;
     if (argc)
       fail (true, "Too many arguments on the command line");
     if (!font_opts.font_file)
       options.usage ();
     if (!input.text && !input.text_file)
-      input.text_file = g_strdup ("-");
+      input.text_file = "-";
 
     consumer.init (&font_opts);
 
     hb_buffer_t *buffer = hb_buffer_create ();
-    if (debug)
-      hb_buffer_set_message_func (buffer, message_func, NULL, NULL);
     unsigned int text_len;
     const char *text;
     while ((text = input.get_line (&text_len)))
index bc699c1..7387a56 100644 (file)
@@ -30,7 +30,7 @@
 #include <hb-ft.h>
 #endif
 #ifdef HAVE_OT
-#include <hb-ot.h>
+#include <hb-ot-font.h>
 #endif
 
 struct supported_font_funcs_t {
@@ -174,7 +174,7 @@ parse_margin (const char *name G_GNUC_UNUSED,
 {
   view_options_t *view_opts = (view_options_t *) data;
   view_options_t::margin_t &m = view_opts->margin;
-  switch (sscanf (arg, "%lf%*[ ,]%lf%*[ ,]%lf%*[ ,]%lf", &m.t, &m.r, &m.b, &m.l)) {
+  switch (sscanf (arg, "%lf %lf %lf %lf", &m.t, &m.r, &m.b, &m.l)) {
     case 1: m.r = m.t;
     case 2: m.b = m.t;
     case 3: m.l = m.r;
@@ -291,7 +291,6 @@ shape_options_t::add_options (option_parser_t *parser)
     {"eot",            0, 0, G_OPTION_ARG_NONE,        &this->eot,                     "Treat text as end-of-paragraph",       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},
-    {"cluster-level",  0, 0, G_OPTION_ARG_INT,         &this->cluster_level,           "Cluster merging level (default: 0)",   "0/1/2"},
     {"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}
@@ -362,7 +361,7 @@ parse_font_size (const char *name G_GNUC_UNUSED,
     font_opts->font_size_y = font_opts->font_size_x = FONT_SIZE_UPEM;
     return true;
   }
-  switch (sscanf (arg, "%lf%*[ ,]%lf", &font_opts->font_size_x, &font_opts->font_size_y)) {
+  switch (sscanf (arg, "%lf %lf", &font_opts->font_size_x, &font_opts->font_size_y)) {
     case 1: font_opts->font_size_y = font_opts->font_size_x;
     case 2: return true;
     default:
@@ -441,7 +440,7 @@ output_options_t::add_options (option_parser_t *parser)
   const char *text;
 
   if (NULL == supported_formats)
-    text = "Set output serialization format";
+    text = "Set output format";
   else
   {
     char *items = g_strjoinv ("/", const_cast<char **> (supported_formats));
@@ -458,8 +457,8 @@ output_options_t::add_options (option_parser_t *parser)
   };
   parser->add_group (entries,
                     "output",
-                    "Output destination & format options:",
-                    "Options controlling the destination and form of the output",
+                    "Output options:",
+                    "Options controlling the output",
                     this);
 }
 
@@ -490,7 +489,7 @@ font_options_t::get_font (void) const
       GString *gs = g_string_new (NULL);
       char buf[BUFSIZ];
 #if defined(_WIN32) || defined(__CYGWIN__)
-      setmode (fileno (stdin), O_BINARY);
+      setmode (fileno (stdin), _O_BINARY);
 #endif
       while (!feof (stdin)) {
        size_t ret = fread (buf, 1, sizeof (buf), stdin);
@@ -538,9 +537,6 @@ font_options_t::get_font (void) const
       }
     }
 
-    if (debug)
-      mm = HB_MEMORY_MODE_DUPLICATE;
-
     blob = hb_blob_create (font_data, len, mm, user_data, destroy);
   }
 
@@ -569,7 +565,7 @@ font_options_t::get_font (void) const
   else
   {
     for (unsigned int i = 0; i < ARRAY_LENGTH (supported_font_funcs); i++)
-      if (0 == g_ascii_strcasecmp (font_funcs, supported_font_funcs[i].name))
+      if (0 == strcasecmp (font_funcs, supported_font_funcs[i].name))
       {
        set_font_funcs = supported_font_funcs[i].func;
        break;
@@ -601,26 +597,25 @@ const char *
 text_options_t::get_line (unsigned int *len)
 {
   if (text) {
-    if (!line) line = text;
-    if (line_len == (unsigned int) -1)
-      line_len = strlen (line);
+    if (text_len == (unsigned int) -1)
+      text_len = strlen (text);
 
-    if (!line_len) {
+    if (!text_len) {
       *len = 0;
       return NULL;
     }
 
-    const char *ret = line;
-    const char *p = (const char *) memchr (line, '\n', line_len);
+    const char *ret = text;
+    const char *p = (const char *) memchr (text, '\n', text_len);
     unsigned int ret_len;
     if (!p) {
-      ret_len = line_len;
-      line += ret_len;
-      line_len = 0;
+      ret_len = text_len;
+      text += ret_len;
+      text_len = 0;
     } else {
       ret_len = p - ret;
-      line += ret_len + 1;
-      line_len -= ret_len + 1;
+      text += ret_len + 1;
+      text_len -= ret_len + 1;
     }
 
     *len = ret_len;
@@ -672,7 +667,7 @@ output_options_t::get_file_handle (void)
     fp = fopen (output_file, "wb");
   else {
 #if defined(_WIN32) || defined(__CYGWIN__)
-    setmode (fileno (stdout), O_BINARY);
+    setmode (fileno (stdout), _O_BINARY);
 #endif
     fp = stdout;
   }
@@ -699,27 +694,19 @@ format_options_t::add_options (option_parser_t *parser)
 {
   GOptionEntry entries[] =
   {
-    {"show-text",      0, 0, G_OPTION_ARG_NONE,        &this->show_text,               "Prefix each line of output with its corresponding input text",         NULL},
-    {"show-unicode",   0, 0, G_OPTION_ARG_NONE,        &this->show_unicode,            "Prefix each line of output with its corresponding input codepoint(s)", NULL},
-    {"show-line-num",  0, 0, G_OPTION_ARG_NONE,        &this->show_line_num,           "Prefix each line of output with its corresponding input line number",  NULL},
-    {"verbose",                0, G_OPTION_FLAG_NO_ARG,
-                             G_OPTION_ARG_CALLBACK,    (gpointer) &parse_verbose,      "Prefix each line of output with all of the above",                     NULL},
-    {"no-glyph-names", 0, G_OPTION_FLAG_REVERSE,
-                             G_OPTION_ARG_NONE,        &this->show_glyph_names,        "Output glyph indices instead of names",                                NULL},
-    {"no-positions",   0, G_OPTION_FLAG_REVERSE,
-                             G_OPTION_ARG_NONE,        &this->show_positions,          "Do not output glyph positions",                                        NULL},
-    {"no-clusters",    0, G_OPTION_FLAG_REVERSE,
-                             G_OPTION_ARG_NONE,        &this->show_clusters,           "Do not output cluster indices",                                        NULL},
-    {"show-extents",   0, 0, G_OPTION_ARG_NONE,        &this->show_extents,            "Output glyph extents",                                                 NULL},
+    {"no-glyph-names", 0, G_OPTION_FLAG_REVERSE, G_OPTION_ARG_NONE,    &this->show_glyph_names,        "Use glyph indices instead of names",   NULL},
+    {"no-positions",   0, G_OPTION_FLAG_REVERSE, G_OPTION_ARG_NONE,    &this->show_positions,          "Do not show glyph positions",          NULL},
+    {"no-clusters",    0, G_OPTION_FLAG_REVERSE, G_OPTION_ARG_NONE,    &this->show_clusters,           "Do not show cluster mapping",          NULL},
+    {"show-text",      0, 0,                     G_OPTION_ARG_NONE,    &this->show_text,               "Show input text",                      NULL},
+    {"show-unicode",   0, 0,                     G_OPTION_ARG_NONE,    &this->show_unicode,            "Show input Unicode codepoints",        NULL},
+    {"show-line-num",  0, 0,                     G_OPTION_ARG_NONE,    &this->show_line_num,           "Show line numbers",                    NULL},
+    {"verbose",                0, G_OPTION_FLAG_NO_ARG,  G_OPTION_ARG_CALLBACK,(gpointer) &parse_verbose,      "Show everything",                      NULL},
     {NULL}
   };
   parser->add_group (entries,
-                    "output-syntax",
-                    "Output syntax:\n"
-         "    text: [<glyph name or index>=<glyph cluster index within input>@<horizontal displacement>,<vertical displacement>+<horizontal advance>,<vertical advance>|...]\n"
-         "    json: [{\"g\": <glyph name or index>, \"ax\": <horizontal advance>, \"ay\": <vertical advance>, \"dx\": <horizontal displacement>, \"dy\": <vertical displacement>, \"cl\": <glyph cluster index within input>}, ...]\n"
-         "\nOutput syntax options:",
-                    "Options controlling the syntax of the output",
+                    "format",
+                    "Format options:",
+                    "Options controlling the formatting of buffer contents",
                     this);
 }
 
index 919e4f8..8b9b10e 100644 (file)
@@ -150,24 +150,19 @@ struct view_options_t : option_group_t
 {
   view_options_t (option_parser_t *parser) {
     annotate = false;
-    fore = NULL;
-    back = NULL;
+    fore = DEFAULT_FORE;
+    back = DEFAULT_BACK;
     line_space = 0;
     margin.t = margin.r = margin.b = margin.l = DEFAULT_MARGIN;
 
     add_options (parser);
   }
-  ~view_options_t (void)
-  {
-    g_free (fore);
-    g_free (back);
-  }
 
   void add_options (option_parser_t *parser);
 
   hb_bool_t annotate;
-  char *fore;
-  char *back;
+  const char *fore;
+  const char *back;
   double line_space;
   struct margin_t {
     double t, r, b, l;
@@ -185,7 +180,6 @@ struct shape_options_t : option_group_t
     num_features = 0;
     shapers = NULL;
     utf8_clusters = false;
-    cluster_level = HB_BUFFER_CLUSTER_LEVEL_DEFAULT;
     normalize_glyphs = false;
     num_iterations = 1;
 
@@ -193,9 +187,6 @@ struct shape_options_t : option_group_t
   }
   ~shape_options_t (void)
   {
-    g_free (direction);
-    g_free (language);
-    g_free (script);
     free (features);
     g_strfreev (shapers);
   }
@@ -211,7 +202,6 @@ struct shape_options_t : option_group_t
                         (bot ? HB_BUFFER_FLAG_BOT : 0) |
                         (eot ? HB_BUFFER_FLAG_EOT : 0) |
                         (preserve_default_ignorables ? HB_BUFFER_FLAG_PRESERVE_DEFAULT_IGNORABLES : 0)));
-    hb_buffer_set_cluster_level (buffer, cluster_level);
     hb_buffer_guess_segment_properties (buffer);
   }
 
@@ -262,9 +252,9 @@ struct shape_options_t : option_group_t
   }
 
   /* Buffer properties */
-  char *direction;
-  char *language;
-  char *script;
+  const char *direction;
+  const char *language;
+  const char *script;
 
   /* Buffer flags */
   hb_bool_t bot;
@@ -275,7 +265,6 @@ struct shape_options_t : option_group_t
   unsigned int num_features;
   char **shapers;
   hb_bool_t utf8_clusters;
-  hb_buffer_cluster_level_t cluster_level;
   hb_bool_t normalize_glyphs;
   unsigned int num_iterations;
 };
@@ -298,8 +287,6 @@ struct font_options_t : option_group_t
     add_options (parser);
   }
   ~font_options_t (void) {
-    g_free (font_file);
-    g_free (font_funcs);
     hb_font_destroy (font);
   }
 
@@ -307,13 +294,13 @@ struct font_options_t : option_group_t
 
   hb_font_t *get_font (void) const;
 
-  char *font_file;
+  const char *font_file;
   int face_index;
   int default_font_size;
   unsigned int subpixel_bits;
   mutable double font_size_x;
   mutable double font_size_y;
-  char *font_funcs;
+  const char *font_funcs;
 
   private:
   mutable hb_font_t *font;
@@ -331,16 +318,11 @@ struct text_options_t : option_group_t
 
     fp = NULL;
     gs = NULL;
-    line = NULL;
-    line_len = (unsigned int) -1;
+    text_len = (unsigned int) -1;
 
     add_options (parser);
   }
   ~text_options_t (void) {
-    g_free (text_before);
-    g_free (text_after);
-    g_free (text);
-    g_free (text_file);
     if (gs)
       g_string_free (gs, true);
     if (fp)
@@ -354,21 +336,21 @@ struct text_options_t : option_group_t
       g_set_error (error,
                   G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE,
                   "Only one of text and text-file can be set");
+
   };
 
   const char *get_line (unsigned int *len);
 
-  char *text_before;
-  char *text_after;
+  const char *text_before;
+  const char *text_after;
 
-  char *text;
-  char *text_file;
+  const char *text;
+  const char *text_file;
 
   private:
   FILE *fp;
   GString *gs;
-  char *line;
-  unsigned int line_len;
+  unsigned int text_len;
 };
 
 struct output_options_t : option_group_t
@@ -385,8 +367,6 @@ struct output_options_t : option_group_t
     add_options (parser);
   }
   ~output_options_t (void) {
-    g_free (output_file);
-    g_free (output_format);
     if (fp)
       fclose (fp);
   }
@@ -401,10 +381,7 @@ struct output_options_t : option_group_t
     if (output_file && !output_format) {
       output_format = strrchr (output_file, '.');
       if (output_format)
-      {
          output_format++; /* skip the dot */
-         output_format = strdup (output_format);
-      }
     }
 
     if (output_file && 0 == strcmp (output_file, "-"))
@@ -413,8 +390,8 @@ struct output_options_t : option_group_t
 
   FILE *get_file_handle (void);
 
-  char *output_file;
-  char *output_format;
+  const char *output_file;
+  const char *output_format;
   const char **supported_formats;
   bool explicit_output_format;
 
@@ -430,7 +407,6 @@ struct format_options_t : option_group_t
     show_text = false;
     show_unicode = false;
     show_line_num = false;
-    show_extents = false;
 
     add_options (parser);
   }
@@ -471,25 +447,7 @@ struct format_options_t : option_group_t
   hb_bool_t show_text;
   hb_bool_t show_unicode;
   hb_bool_t show_line_num;
-  hb_bool_t show_extents;
 };
 
-/* fallback implementation for scalbn()/scalbnf() for pre-2013 MSVC */
-#if defined (_MSC_VER) && (_MSC_VER < 1800)
-
-#ifndef FLT_RADIX
-#define FLT_RADIX 2
-#endif
-
-__inline long double scalbn (long double x, int exp)
-{
-  return x * (pow ((long double) FLT_RADIX, exp));
-}
-
-__inline float scalbnf (float x, int exp)
-{
-  return x * (pow ((float) FLT_RADIX, exp));
-}
-#endif
 
 #endif
index f4f2bc5..160250e 100644 (file)
 
 #include "view-cairo.hh"
 
-#include <assert.h>
-
-
 void
-view_cairo_t::render (const font_options_t *font_opts)
+view_cairo_t::get_surface_size (cairo_scaled_font_t *scaled_font,
+                               double *w, double *h)
 {
-  bool vertical = HB_DIRECTION_IS_VERTICAL (direction);
-  int vert  = vertical ? 1 : 0;
-  int horiz = vertical ? 0 : 1;
+  cairo_font_extents_t font_extents;
 
-  int x_sign = font_opts->font_size_x < 0 ? -1 : +1;
-  int y_sign = font_opts->font_size_y < 0 ? -1 : +1;
+  cairo_scaled_font_extents (scaled_font, &font_extents);
 
-  hb_font_t *font = font_opts->get_font();
-  hb_font_extents_t extents;
-  hb_font_get_extents_for_direction (font, direction, &extents);
-
-  double ascent = y_sign * scalbn ((double) extents.ascender, scale_bits);
-  double descent = y_sign * -scalbn ((double) extents.descender, scale_bits);
-  double font_height = y_sign * scalbn ((double) extents.ascender - extents.descender + extents.line_gap, scale_bits);
-  double leading = font_height + view_options.line_space;
-
-  /* Calculate surface size. */
-  double w, h;
-  (vertical ? w : h) = (int) lines->len * leading - view_options.line_space;
-  (vertical ? h : w) = 0;
+  bool vertical = HB_DIRECTION_IS_VERTICAL (direction);
+  (vertical ? *w : *h) = (int) lines->len * (font_extents.height + view_options.line_space) - view_options.line_space;
+  (vertical ? *h : *w) = 0;
   for (unsigned int i = 0; i < lines->len; i++) {
     helper_cairo_line_t &line = g_array_index (lines, helper_cairo_line_t, i);
     double x_advance, y_advance;
     line.get_advance (&x_advance, &y_advance);
     if (vertical)
-      h =  MAX (h, y_sign * y_advance);
+      *h =  MAX (*h, y_advance);
     else
-      w =  MAX (w, x_sign * x_advance);
+      *w =  MAX (*w, x_advance);
   }
 
+  *w += view_options.margin.l + view_options.margin.r;
+  *h += view_options.margin.t + view_options.margin.b;
+}
+
+void
+view_cairo_t::render (const font_options_t *font_opts)
+{
   cairo_scaled_font_t *scaled_font = helper_cairo_create_scaled_font (font_opts);
+  double w, h;
+  get_surface_size (scaled_font, &w, &h);
+  cairo_t *cr = helper_cairo_create_context (w, h, &view_options, &output_options);
+  cairo_set_scaled_font (cr, scaled_font);
+  cairo_scaled_font_destroy (scaled_font);
 
-  /* See if font needs color. */
-  cairo_content_t content = CAIRO_CONTENT_ALPHA;
-  if (helper_cairo_scaled_font_has_color (scaled_font))
-    content = CAIRO_CONTENT_COLOR;
+  draw (cr);
 
-  /* Create surface. */
-  cairo_t *cr = helper_cairo_create_context (w + view_options.margin.l + view_options.margin.r,
-                                            h + view_options.margin.t + view_options.margin.b,
-                                            &view_options, &output_options, content);
-  cairo_set_scaled_font (cr, scaled_font);
+  helper_cairo_destroy_context (cr);
+}
 
-  /* Setup coordinate system. */
+void
+view_cairo_t::draw (cairo_t *cr)
+{
+  cairo_save (cr);
+
+  bool vertical = HB_DIRECTION_IS_VERTICAL (direction);
+  int v = vertical ? 1 : 0;
+  int h = vertical ? 0 : 1;
+  cairo_font_extents_t font_extents;
+  cairo_font_extents (cr, &font_extents);
   cairo_translate (cr, view_options.margin.l, view_options.margin.t);
+  double descent;
   if (vertical)
-    cairo_translate (cr,
-                    w /* We stack lines right to left */
-                    -font_height * .5 /* "ascent" for vertical */,
-                    y_sign < 0 ? h : 0);
+    descent = font_extents.height * (lines->len + .5);
   else
-   {
-    cairo_translate (cr,
-                    x_sign < 0 ? w : 0,
-                    y_sign < 0 ? descent : ascent);
-   }
-
-  /* Draw. */
-  cairo_translate (cr, +vert * leading, -horiz * leading);
+    descent = font_extents.height - font_extents.ascent;
+  cairo_translate (cr, v * descent, h * -descent);
   for (unsigned int i = 0; i < lines->len; i++)
   {
     helper_cairo_line_t &l = g_array_index (lines, helper_cairo_line_t, i);
 
-    cairo_translate (cr, -vert * leading, +horiz * leading);
+    if (i)
+      cairo_translate (cr, v * -view_options.line_space, h * view_options.line_space);
+
+    cairo_translate (cr, v * -font_extents.height, h * font_extents.height);
 
     if (view_options.annotate) {
       cairo_save (cr);
@@ -127,7 +122,5 @@ view_cairo_t::render (const font_options_t *font_opts)
       cairo_show_glyphs (cr, l.glyphs, l.num_glyphs);
   }
 
-  /* Clean up. */
-  helper_cairo_destroy_context (cr);
-  cairo_scaled_font_destroy (scaled_font);
+  cairo_restore (cr);
 }
index f55d4bb..cb52373 100644 (file)
@@ -95,6 +95,8 @@ struct view_cairo_t
   view_options_t view_options;
 
   void render (const font_options_t *font_opts);
+  void get_surface_size (cairo_scaled_font_t *scaled_font, double *w, double *h);
+  void draw (cairo_t *cr);
 
   hb_direction_t direction; // Remove this, make segment_properties accessible
   GArray *lines;
diff --git a/win32/Makefile.am b/win32/Makefile.am
deleted file mode 100644 (file)
index 63ba468..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-EXTRA_DIST = \
-       build-rules-msvc.mak \
-       config-msvc.mak \
-       config.h.win32 \
-       create-lists.bat \
-       create-lists-msvc.mak \
-       detectenv-msvc.mak \
-       generate-msvc.mak \
-       hb-introspection-msvc.mak \
-       info-msvc.mak \
-       install.mak \
-       introspection-msvc.mak \
-       Makefile.vc \
-       README.txt
-
--include $(top_srcdir)/git.mk
diff --git a/win32/Makefile.in b/win32/Makefile.in
deleted file mode 100644 (file)
index f7a08c2..0000000
+++ /dev/null
@@ -1,501 +0,0 @@
-# Makefile.in generated by automake 1.14.1 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 = win32
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-       $(srcdir)/config.h.win32.in
-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.h.win32
-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@
-DIRECTWRITE_CXXFLAGS = @DIRECTWRITE_CXXFLAGS@
-DIRECTWRITE_LIBS = @DIRECTWRITE_LIBS@
-DLLTOOL = @DLLTOOL@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-FGREP = @FGREP@
-FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@
-FONTCONFIG_LIBS = @FONTCONFIG_LIBS@
-FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
-FREETYPE_DEPS = @FREETYPE_DEPS@
-FREETYPE_LIBS = @FREETYPE_LIBS@
-GIT = @GIT@
-GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_DEPS = @GLIB_DEPS@
-GLIB_LIBS = @GLIB_LIBS@
-GLIB_MKENUMS = @GLIB_MKENUMS@
-GOBJECT_CFLAGS = @GOBJECT_CFLAGS@
-GOBJECT_LIBS = @GOBJECT_LIBS@
-GRAPHITE2_CFLAGS = @GRAPHITE2_CFLAGS@
-GRAPHITE2_DEPS = @GRAPHITE2_DEPS@
-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@
-EXTRA_DIST = \
-       build-rules-msvc.mak \
-       config-msvc.mak \
-       config.h.win32 \
-       create-lists.bat \
-       create-lists-msvc.mak \
-       detectenv-msvc.mak \
-       generate-msvc.mak \
-       hb-introspection-msvc.mak \
-       info-msvc.mak \
-       install.mak \
-       introspection-msvc.mak \
-       Makefile.vc \
-       README.txt
-
-all: all-am
-
-.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 win32/Makefile'; \
-       $(am__cd) $(top_srcdir) && \
-         $(AUTOMAKE) --gnits win32/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):
-config.h.win32: $(top_builddir)/config.status $(srcdir)/config.h.win32.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
-check-am: all-am
-check: check-am
-all-am: Makefile
-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 mostlyclean-am
-
-distclean: distclean-am
-       -rm -f Makefile
-distclean-am: clean-am distclean-generic
-
-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 -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am:
-
-.MAKE: install-am install-strip
-
-.PHONY: all all-am check 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 mostlyclean-libtool pdf pdf-am ps ps-am \
-       tags-am 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/win32/Makefile.vc b/win32/Makefile.vc
deleted file mode 100644 (file)
index fdde7a7..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-# NMake Makefile for building HarfBuzz as a DLL on Windows
-
-# The items below this line should not be changed, unless one is maintaining
-# the NMake Makefiles.  Customizations can be done in the following NMake Makefile
-# portions (please see comments in the these files to see what can be customized):
-#
-# detectenv-msvc.mak
-# config-msvc.mak
-
-!include detectenv-msvc.mak
-
-# Include the Makefile portions with the source listings
-!include ..\src\Makefile.sources
-!include ..\src\hb-ucdn\Makefile.sources
-!include ..\util\Makefile.sources
-
-# Include the Makefile portion that enables features based on user input
-!include config-msvc.mak
-
-!if "$(VALID_CFGSET)" == "TRUE"
-
-# Include the Makefile portion to convert the source and header lists
-# into the lists we need for compilation and introspection
-!include create-lists-msvc.mak
-
-all: $(HB_LIBS) $(HB_UTILS) $(EXTRA_TARGETS) all-build-info
-
-tests: all $(HB_TESTS)
-
-# Include the build rules for sources, DLLs and executables
-!include build-rules-msvc.mak
-
-# Include the rules for build directory creation and code generation
-!include generate-msvc.mak
-
-# Generate the introspection files
-
-!if "$(INTROSPECTION)" == "1"
-# Include the rules for building the introspection files
-!include introspection-msvc.mak
-!include hb-introspection-msvc.mak
-!endif
-
-!include install.mak
-
-!else
-all: help
-       @echo You need to specify a valid configuration, via
-       @echo CFG=release or CFG=debug
-!endif
-
-!include info-msvc.mak
diff --git a/win32/README.txt b/win32/README.txt
deleted file mode 100644 (file)
index e2ead01..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-Instructions for building HarfBuzz on Visual Studio\r
-===================================================\r
-Building the HarfBuzz DLL on Windows is now also supported using Visual Studio\r
-versions 2008 through 2015, in both 32-bit and 64-bit (x64) flavors, via NMake\r
-Makefiles.\r
-\r
-The following are instructions for performing such a build, as there is a\r
-number of build configurations supported for the build.  Note that for all\r
-build configurations, the OpenType and Simple TrueType layout (fallback)\r
-backends are enabled, as well as the Uniscribe platform shaper, and this\r
-is the base configuration that is built if no options (see below) are\r
-specified.  A 'clean' target is provided-it is recommended that one cleans\r
-the build and redo the build if any configuration option changed.  An\r
-'install' target is also provided to copy the built items in their appropriate\r
-locations under $(PREFIX), which is described below.\r
-\r
-Invoke the build by issuing the command:\r
-nmake /f Makefile.vc CFG=[release|debug] [PREFIX=...] <option1=1 option2=1 ...>\r
-where:\r
-\r
-CFG: Required.  Choose from a release or debug build.  Note that \r
-     all builds generate a .pdb file for each .dll and .exe built--this refers\r
-     to the C/C++ runtime that the build uses.\r
-\r
-PREFIX: Optional.  Base directory of where the third-party headers, libraries\r
-        and needed tools can be found, i.e. headers in $(PREFIX)\include,\r
-        libraries in $(PREFIX)\lib and tools in $(PREFIX)\bin.  If not\r
-        specified, $(PREFIX) is set as $(srcroot)\..\vs$(X)\$(platform), where\r
-        $(platform) is win32 for 32-bit builds or x64 for 64-bit builds, and\r
-        $(X) is the short version of the Visual Studio used, as follows:\r
-        2008: 9\r
-        2010: 10\r
-        2012: 11\r
-        2013: 12\r
-        2015: 14\r
-\r
-Explanation of options, set by <option>=1:\r
-------------------------------------------\r
-GLIB: Enable GLib support in HarfBuzz, which also uses the GLib unicode\r
-      callback instead of the bundled UCDN unicode callback.  This requires the\r
-      GLib libraries, and is required for building all tool and test programs.\r
-\r
-GOBJECT: Enable building the HarfBuzz-GObject DLL, and thus implies GLib\r
-         support.  This requires the GObject libraries and glib-mkenums script,\r
-         along with PERL to generate the enum sources and headers, which is\r
-         required for the build.\r
-\r
-INTROSPECTION: Enable build of introspection files, for making HarfBuzz\r
-               bindings for other programming languages available, such as\r
-               Python, available.  This requires the GObject-Introspection\r
-               libraries and tools, along with the Python interpretor that was\r
-               used during the build of GObject-Introspection.  Please see\r
-               $(srcroot)\README.python for more related details.  This implies\r
-               the build of the HarfBuzz-GObject DLL, along with GLib support.\r
-\r
-FREETYPE: Enable the FreeType font callbacks.  Requires the FreeType2 library.\r
-\r
-CAIRO: Enable Cairo support.  Requires the Cairo library.\r
-\r
-CAIRO_FT: Enable the build of the hb-view tool, which makes use of Cairo, and\r
-          thus implies FreeType font callback support and Cairo support.\r
-          Requires Cairo libraries built with FreeType support.  Note that the\r
-          hb-view tool requires GLib support as well.\r
-\r
-GRAPHITE2: Enable the Graphite2 shaper, requires the SIL Graphite2 library.\r
-\r
-ICU: Enables the build HarfBuzz-ICU, which is now the recommended layout engine\r
-     for ICU (International Components for Unicode), which deprecated ICU LE.\r
-     Requires the ICU libraries.\r
-\r
-DIRECTWRITE: Enable (experimental) DirectWrite platform shaper support,\r
-             requires a rather recent Windows SDK, and at least Windows Vista/\r
-             Server 2008 with SP2 and platform update.\r
-\r
-PYTHON: Full path to the Python interpretor to be used, if it is not in %PATH%.\r
-\r
-PERL: Full path to the PERL interpretor to be used, if it is not in %PATH%.\r
-\r
-LIBTOOL_DLL_NAME: Enable libtool-style DLL names.
\ No newline at end of file
diff --git a/win32/build-rules-msvc.mak b/win32/build-rules-msvc.mak
deleted file mode 100644 (file)
index 03b3833..0000000
+++ /dev/null
@@ -1,140 +0,0 @@
-# NMake Makefile portion for compilation rules
-# Items in here should not need to be edited unless
-# one is maintaining the NMake build files.  The format
-# of NMake Makefiles here are different from the GNU
-# Makefiles.  Please see the comments about these formats.
-
-# Inference rules for compiling the .obj files.
-# Used for libs and programs with more than a single source file.
-# Format is as follows
-# (all dirs must have a trailing '\'):
-#
-# {$(srcdir)}.$(srcext){$(destdir)}.obj::
-#      $(CC)|$(CXX) $(cflags) /Fo$(destdir) /c @<<
-# $<
-# <<
-{..\src\}.cc{$(CFG)\$(PLAT)\harfbuzz\}.obj::
-       $(CXX) $(CFLAGS) $(HB_DEFINES) $(HB_LIB_CFLAGS) /Fo$(CFG)\$(PLAT)\harfbuzz\ /c @<<
-$<
-<<
-
-{..\src\hb-ucdn\}.c{$(CFG)\$(PLAT)\harfbuzz\}.obj::
-       $(CC) $(CFLAGS) /Fo$(CFG)\$(PLAT)\harfbuzz\ /c @<<
-$<
-<<
-
-{..\src\}.cc{$(CFG)\$(PLAT)\harfbuzz-icu\}.obj::
-       $(CXX) $(CFLAGS) $(HB_LIB_CFLAGS) $(HB_ICU_CFLAGS) /Fo$(CFG)\$(PLAT)\harfbuzz-icu\ /c @<<
-$<
-<<
-
-{..\util\}.cc{$(CFG)\$(PLAT)\util\}.obj::
-       $(CXX) $(CFLAGS) $(HB_DEFINES) $(HB_CFLAGS) /Fo$(CFG)\$(PLAT)\util\ /c @<<
-$<
-<<
-
-# Inference rules for building the test programs
-# Used for programs with a single source file.
-# Format is as follows
-# (all dirs must have a trailing '\'):
-#
-# {$(srcdir)}.$(srcext){$(destdir)}.exe::
-#      $(CC)|$(CXX) $(cflags) $< /Fo$*.obj  /Fe$@ [/link $(linker_flags) $(dep_libs)]
-{..\src\}.cc{$(CFG)\$(PLAT)\}.exe:
-       $(CXX) $(CFLAGS) $(HB_DEFINES) $(HB_CFLAGS) $< /Fo$*.obj  /Fe$@ /link $(LDFLAGS) $(CFG)\$(PLAT)\harfbuzz.lib $(HB_TESTS_DEP_LIBS)
-
-{..\test\api\}.c{$(CFG)\$(PLAT)\}.exe:
-       $(CXX) $(CFLAGS) $(HB_DEFINES) $(HB_CFLAGS) /DSRCDIR="\"../../../test/api\"" $< /Fo$*.obj /Fe$@ /link $(LDFLAGS) $(CFG)\$(PLAT)\harfbuzz.lib $(HB_TESTS_DEP_LIBS)
-
-# Rules for building .lib files
-$(CFG)\$(PLAT)\harfbuzz.lib: $(HARFBUZZ_DLL_FILENAME).dll
-$(CFG)\$(PLAT)\harfbuzz-icu.lib: $(HARFBUZZ_ICU_DLL_FILENAME).dll
-$(CFG)\$(PLAT)\harfbuzz-gobject.lib: $(HARFBUZZ_GOBJECT_DLL_FILENAME).dll
-
-# Rules for linking DLLs
-# Format is as follows (the mt command is needed for MSVC 2005/2008 builds):
-# $(dll_name_with_path): $(dependent_libs_files_objects_and_items)
-#      link /DLL [$(linker_flags)] [$(dependent_libs)] [/def:$(def_file_if_used)] [/implib:$(lib_name_if_needed)] -out:$@ @<<
-# $(dependent_objects)
-# <<
-#      @-if exist $@.manifest mt /manifest $@.manifest /outputresource:$@;2
-$(HARFBUZZ_DLL_FILENAME).dll: config.h $(harfbuzz_dll_OBJS) $(CFG)\$(PLAT)\harfbuzz
-       link /DLL $(LDFLAGS) $(HB_DEP_LIBS) /implib:$(CFG)\$(PLAT)\harfbuzz.lib -out:$@ @<<
-$(harfbuzz_dll_OBJS)
-<<
-       @-if exist $@.manifest mt /manifest $@.manifest /outputresource:$@;2
-
-$(HARFBUZZ_ICU_DLL_FILENAME).dll: $(CFG)\$(PLAT)\harfbuzz.lib $(harfbuzz_icu_OBJS) $(CFG)\$(PLAT)\harfbuzz-icu
-       link /DLL $(LDFLAGS) $(CFG)\$(PLAT)\harfbuzz.lib $(HB_ICU_DEP_LIBS) /implib:$(CFG)\$(PLAT)\harfbuzz-icu.lib -out:$@ @<<
-$(harfbuzz_icu_OBJS)
-<<
-       @-if exist $@.manifest mt /manifest $@.manifest /outputresource:$@;2
-
-$(HARFBUZZ_GOBJECT_DLL_FILENAME).dll: $(CFG)\$(PLAT)\harfbuzz.lib $(harfbuzz_gobject_OBJS) $(CFG)\$(PLAT)\harfbuzz-gobject
-       link /DLL $(LDFLAGS) $(CFG)\$(PLAT)\harfbuzz.lib $(HB_GOBJECT_DEP_LIBS) /implib:$(CFG)\$(PLAT)\harfbuzz-gobject.lib -out:$@ @<<
-$(harfbuzz_gobject_OBJS)
-<<
-       @-if exist $@.manifest mt /manifest $@.manifest /outputresource:$@;2
-
-# Rules for linking Executables
-# Format is as follows (the mt command is needed for MSVC 2005/2008 builds):
-# $(dll_name_with_path): $(dependent_libs_files_objects_and_items)
-#      link [$(linker_flags)] [$(dependent_libs)] -out:$@ @<<
-# $(dependent_objects)
-# <<
-#      @-if exist $@.manifest mt /manifest $@.manifest /outputresource:$@;1
-$(CFG)\$(PLAT)\hb-view.exe: $(CFG)\$(PLAT)\harfbuzz.lib $(CFG)\$(PLAT)\util $(hb_view_OBJS)
-       link $(LDFLAGS) $(CFG)\$(PLAT)\harfbuzz.lib $(HB_UTILS_DEP_LIBS) -out:$@ @<<
-$(hb_view_OBJS)
-<<
-       @-if exist $@.manifest mt /manifest $@.manifest /outputresource:$@;1
-
-$(CFG)\$(PLAT)\hb-shape.exe: $(CFG)\$(PLAT)\harfbuzz.lib $(CFG)\$(PLAT)\util $(hb_shape_OBJS)
-       link $(LDFLAGS) $(CFG)\$(PLAT)\harfbuzz.lib $(HB_UTILS_DEP_LIBS) -out:$@ @<<
-$(hb_shape_OBJS)
-<<
-       @-if exist $@.manifest mt /manifest $@.manifest /outputresource:$@;1
-
-$(CFG)\$(PLAT)\hb-ot-shape-closure.exe: $(CFG)\$(PLAT)\harfbuzz.lib $(CFG)\$(PLAT)\util $(hb_ot_shape_closure_OBJS)
-       link $(LDFLAGS) $(CFG)\$(PLAT)\harfbuzz.lib $(HB_UTILS_DEP_LIBS) -out:$@ @<<
-$(hb_ot_shape_closure_OBJS)
-<<
-       @-if exist $@.manifest mt /manifest $@.manifest /outputresource:$@;1
-
-# Other .obj files requiring individual attention, that could not be covered by the inference rules.
-# Format is as follows (all dirs must have a trailing '\'):
-#
-# $(obj_file):
-#      $(CC)|$(CXX) $(cflags) /Fo$(obj_destdir) /c @<<
-# $(srcfile)
-# <<
-$(CFG)\$(PLAT)\harfbuzz-gobject\hb-gobject-structs.obj:        $(CFG)\$(PLAT)\harfbuzz-gobject $(HB_GOBJECT_ENUM_GENERATED_SOURCES)
-       $(CXX) $(CFLAGS) $(HB_DEFINES) $(HB_LIB_CFLAGS) /I$(CFG)\$(PLAT)\harfbuzz-gobject /Fo$(CFG)\$(PLAT)\harfbuzz-gobject\ /c @<<
-..\src\hb-gobject-structs.cc
-<<
-
-$(CFG)\$(PLAT)\harfbuzz-gobject\hb-gobject-enums.obj: $(CFG)\$(PLAT)\harfbuzz-gobject $(HB_GOBJECT_ENUM_GENERATED_SOURCES)
-       $(CXX) $(CFLAGS) $(HB_DEFINES) $(HB_LIB_CFLAGS) /I$(CFG)\$(PLAT)\harfbuzz-gobject /Fo$(CFG)\$(PLAT)\harfbuzz-gobject\ /c @<<
-$(CFG)\$(PLAT)\harfbuzz-gobject\hb-gobject-enums.cc
-<<
-
-clean:
-       @-if exist $(CFG)\$(PLAT)\HarfBuzz-0.0.typelib del /f /q $(CFG)\$(PLAT)\HarfBuzz-0.0.typelib
-       @-if exist $(CFG)\$(PLAT)\HarfBuzz-0.0.gir del /f /q $(CFG)\$(PLAT)\HarfBuzz-0.0.gir
-       @-if exist $(CFG)\$(PLAT)\hb_list del /f /q $(CFG)\$(PLAT)\hb_list
-       @-del /f /q $(CFG)\$(PLAT)\*.pdb
-       @-if exist $(CFG)\$(PLAT)\.exe.manifest del /f /q $(CFG)\$(PLAT)\*.exe.manifest
-       @-if exist $(CFG)\$(PLAT)\.exe del /f /q $(CFG)\$(PLAT)\*.exe
-       @-del /f /q $(CFG)\$(PLAT)\*.dll.manifest
-       @-del /f /q $(CFG)\$(PLAT)\*.dll
-       @-del /f /q $(CFG)\$(PLAT)\*.ilk
-       @-del /f /q $(CFG)\$(PLAT)\*.obj
-       @-if exist $(CFG)\$(PLAT)\util del /f /q $(CFG)\$(PLAT)\util\*.obj
-       @-if exist $(CFG)\$(PLAT)\harfbuzz-gobject del /f /q $(CFG)\$(PLAT)\harfbuzz-gobject\*.obj
-       @-if exist $(CFG)\$(PLAT)\harfbuzz-icu del /f /q $(CFG)\$(PLAT)\harfbuzz-icu\*.obj
-       @-del /f /q $(CFG)\$(PLAT)\harfbuzz\*.obj
-       @-rmdir /s /q $(CFG)\$(PLAT)
-       @-if exist $(CFG)\$(PLAT)\harfbuzz-gobject\hb-gobject-enums.h del $(CFG)\$(PLAT)\harfbuzz-gobject\hb-gobject-enums.h
-       @-if exist $(CFG)\$(PLAT)\harfbuzz-gobject\hb-gobject-enums.cc del $(CFG)\$(PLAT)\harfbuzz-gobject\hb-gobject-enums.cc
-       @-del vc$(VSVER)0.pdb
-       @-del config.h
diff --git a/win32/config-msvc.mak b/win32/config-msvc.mak
deleted file mode 100644 (file)
index e0c6468..0000000
+++ /dev/null
@@ -1,198 +0,0 @@
-# NMake Makefile portion for enabling features for Windows builds
-
-# You may change these lines to customize the .lib files that will be linked to
-# Additional Libraries for building HarfBuzz-ICU
-# icudt.lib may be required for static ICU builds
-HB_ICU_DEP_LIBS = icuuc.lib
-
-# GLib is required for all utility programs and tests
-HB_GLIB_LIBS = glib-2.0.lib
-
-# Needed for building HarfBuzz-GObject
-HB_GOBJECT_DEP_LIBS = gobject-2.0.lib $(HB_GLIB_LIBS)
-
-# Freetype is needed for building FreeType support and hb-view
-FREETYPE_LIB = freetype.lib
-
-# Cairo is needed for building hb-view
-CAIRO_LIB = cairo.lib
-
-# Graphite2 is needed for building SIL Graphite2 support
-GRAPHITE2_LIB = graphite2.lib
-
-# Directwrite is needed for DirectWrite shaping support
-DIRECTWRITE_LIB = dwrite.lib
-
-# Please do not change anything beneath this line unless maintaining the NMake Makefiles
-# Bare minimum features and sources built into HarfBuzz on Windows
-HB_DEFINES =
-HB_CFLAGS = /DHAVE_CONFIG_H
-HB_UCDN_CFLAGS = /I..\src\hb-ucdn
-HB_SOURCES =   \
-       $(HB_BASE_sources)              \
-       $(HB_FALLBACK_sources)  \
-       $(HB_OT_sources)                \
-       $(HB_UNISCRIBE_sources) \
-
-HB_HEADERS =   \
-       $(HB_BASE_headers)              \
-       $(HB_NODIST_headers)    \
-       $(HB_OT_headers)                \
-       $(HB_UNISCRIBE_headers)
-
-# Minimal set of (system) libraries needed for the HarfBuzz DLL
-HB_DEP_LIBS = usp10.lib gdi32.lib rpcrt4.lib user32.lib
-
-# We build the HarfBuzz DLL/LIB at least
-HB_LIBS = $(CFG)\$(PLAT)\harfbuzz.lib
-
-# Note: All the utility and test programs require GLib support to be present!
-HB_UTILS =
-HB_UTILS_DEP_LIBS = $(HB_GLIB_LIBS)
-HB_TESTS =
-HB_TESTS_DEP_LIBS = $(HB_GLIB_LIBS)
-
-# Use libtool-style DLL names, if desired
-!if "$(LIBTOOL_DLL_NAME)" == "1"
-HARFBUZZ_DLL_FILENAME = $(CFG)\$(PLAT)\libharfbuzz-0
-HARFBUZZ_ICU_DLL_FILENAME = $(CFG)\$(PLAT)\libharfbuzz-icu-0
-HARFBUZZ_GOBJECT_DLL_FILENAME = $(CFG)\$(PLAT)\libharfbuzz-gobject-0
-!else
-HARFBUZZ_DLL_FILENAME = $(CFG)\$(PLAT)\harfbuzz-vs$(VSVER)
-HARFBUZZ_ICU_DLL_FILENAME = $(CFG)\$(PLAT)\harfbuzz-icu-vs$(VSVER)
-HARFBUZZ_GOBJECT_DLL_FILENAME = $(CFG)\$(PLAT)\harfbuzz-gobject-vs$(VSVER)
-!endif
-
-# Enable HarfBuzz-ICU, if desired
-!if "$(ICU)" == "1"
-HB_ICU_CFLAGS =
-HB_LIBS =      \
-       $(HB_LIBS)      \
-       $(CFG)\$(PLAT)\harfbuzz-icu.lib
-
-# We don't want to re-define int8_t Visual Studio 2008, will cause build breakage
-# as we define it in hb-common.h, and we ought to use the definitions there.
-!if "$(VSVER)" == "9"
-HB_ICU_CFLAGS = /DU_HAVE_INT8_T
-!endif
-
-!endif
-
-# Enable Introspection (enables HarfBuzz-Gobject as well)
-!if "$(INTROSPECTION)" == "1"
-GOBJECT = 1
-CHECK_PACKAGE = gobject-2.0
-EXTRA_TARGETS = $(CFG)\$(PLAT)\HarfBuzz-0.0.gir $(CFG)\$(PLAT)\HarfBuzz-0.0.typelib
-!else
-EXTRA_TARGETS =
-!endif
-
-# Enable HarfBuzz-GObject (enables GLib support as well)
-!if "$(GOBJECT)" == "1"
-GLIB = 1
-HB_LIBS =      \
-       $(HB_LIBS)      \
-       $(CFG)\$(PLAT)\harfbuzz-gobject.lib
-
-HB_GOBJECT_ENUM_GENERATED_SOURCES = \
-       $(CFG)\$(PLAT)\harfbuzz-gobject\hb-gobject-enums.cc     \
-       $(CFG)\$(PLAT)\harfbuzz-gobject\hb-gobject-enums.h
-
-!endif
-
-# Enable cairo-ft (enables cairo and freetype as well)
-!if "$(CAIRO_FT)" == "1"
-HB_DEFINES = $(HB_DEFINES) /DHAVE_CAIRO_FT=1
-CAIRO = 1
-FREETYPE = 1
-!if "$(GLIB)" == "1"
-HB_UTILS = \
-       $(HB_UTILS)     \
-       $(CFG)\$(PLAT)\hb-view.exe
-
-HB_UTILS_DEP_LIBS = $(HB_UTILS_DEP_LIBS) $(CAIRO_LIB) $(FREETYPE_LIB)
-!else
-!if [echo Warning: GLib support not enabled, hb-view not built]
-!endif
-!endif
-!endif
-
-# Enable cairo
-!if "$(CAIRO)" == "1"
-HB_DEFINES = $(HB_DEFINES) /DHAVE_CAIRO=1
-!endif
-
-# Enable freetype if desired
-!if "$(FREETYPE)" == "1"
-HB_DEFINES = $(HB_DEFINES) /DHAVE_FREETYPE=1
-HB_SOURCES = $(HB_SOURCES) $(HB_FT_sources)
-HB_HEADERS = $(HB_HEADERS) $(HB_FT_headers)
-HB_DEP_LIBS = $(HB_DEP_LIBS) $(FREETYPE_LIB)
-!endif
-
-# Enable graphite2 if desired
-!if "$(GRAPHITE2)" == "1"
-HB_DEFINES = $(HB_DEFINES) /DHAVE_GRAPHITE2=1
-HB_SOURCES = $(HB_SOURCES) $(HB_GRAPHITE2_sources)
-HB_HEADERS = $(HB_HEADERS) $(HB_GRAPHITE2_headers)
-HB_DEP_LIBS = $(HB_DEP_LIBS) $(GRAPHITE2_LIB)
-!endif
-
-# Enable GLib if desired
-!if "$(GLIB)" == "1"
-HB_DEFINES = $(HB_DEFINES) /DHAVE_GLIB=1
-HB_CFLAGS =    \
-       $(HB_CFLAGS)                                    \
-       /FImsvc_recommended_pragmas.h   \
-       /I$(PREFIX)\include\glib-2.0    \
-       /I$(PREFIX)\lib\glib-2.0\include
-
-HB_SOURCES = $(HB_SOURCES) $(HB_GLIB_sources)
-HB_HEADERS = $(HB_HEADERS) $(HB_GLIB_headers)
-HB_DEP_LIBS = $(HB_DEP_LIBS) $(HB_GLIB_LIBS)
-
-HB_UTILS = \
-       $(HB_UTILS)                                     \
-       $(CFG)\$(PLAT)\hb-shape.exe     \
-       $(CFG)\$(PLAT)\hb-ot-shape-closure.exe
-
-HB_TESTS = \
-       $(HB_TESTS)     \
-       $(CFG)\$(PLAT)\main.exe                                         \
-       $(CFG)\$(PLAT)\test.exe                                         \
-       $(CFG)\$(PLAT)\test-buffer-serialize.exe        \
-       $(CFG)\$(PLAT)\test-size-params.exe                     \
-       $(CFG)\$(PLAT)\test-would-substitute.exe        \
-       $(CFG)\$(PLAT)\test-blob.exe                            \
-       $(CFG)\$(PLAT)\test-buffer.exe                          \
-       $(CFG)\$(PLAT)\test-common.exe                          \
-       $(CFG)\$(PLAT)\test-font.exe                            \
-       $(CFG)\$(PLAT)\test-object.exe                          \
-       $(CFG)\$(PLAT)\test-set.exe                                     \
-       $(CFG)\$(PLAT)\test-shape.exe                           \
-       $(CFG)\$(PLAT)\test-unicode.exe                         \
-       $(CFG)\$(PLAT)\test-version.exe
-
-!else
-# If there is no GLib support, use the built-in UCDN
-# and define some of the macros in GLib's msvc_recommended_pragmas.h
-# to reduce some unneeded build-time warnings
-HB_DEFINES = $(HB_DEFINES) /DHAVE_UCDN=1
-HB_CFLAGS =    \
-       $(HB_CFLAGS)                                    \
-       $(HB_UCDN_CFLAGS)                               \
-       /wd4244                                                 \
-       /D_CRT_SECURE_NO_WARNINGS               \
-       /D_CRT_NONSTDC_NO_WARNINGS
-
-HB_SOURCES = $(HB_SOURCES) $(LIBHB_UCDN_sources) $(HB_UCDN_sources)
-!endif
-
-!if "$(DIRECTWRITE)" == "1"
-HB_CFLAGS = $(HB_CFLAGS) /DHAVE_DIRECTWRITE
-HB_SOURCES = $(HB_SOURCES) $(HB_DIRECTWRITE_sources)
-HB_HEADERS = $(HB_HEADERS) $(HB_DIRECTWRITE_headers)
-HB_DEP_LIBS = $(HB_DEP_LIBS) $(DIRECTWRITE_LIB)
-!endif
-
-HB_LIB_CFLAGS = $(HB_CFLAGS) /DHB_EXTERN="__declspec (dllexport) extern"
diff --git a/win32/config.h.win32 b/win32/config.h.win32
deleted file mode 100644 (file)
index 522b9e1..0000000
+++ /dev/null
@@ -1,158 +0,0 @@
-/* config.h.in.  Generated from configure.ac by autoheader.  */
-
-/* The normal alignment of `struct{char;}', in bytes. */
-#define ALIGNOF_STRUCT_CHAR__ 1
-
-/* Define to 1 if you have the `atexit' function. */
-#define HAVE_ATEXIT 1
-
-/* Have cairo graphics library */
-/* #undef HAVE_CAIRO */
-
-/* Have cairo-ft support in cairo graphics library */
-/* #undef HAVE_CAIRO_FT */
-
-/* Have Core Text backend */
-/* #undef HAVE_CORETEXT */
-
-/* Define to 1 if you have the <dlfcn.h> header file. */
-/* #undef HAVE_DLFCN_H */
-
-/* Have DirectWrite Library */
-/* #undef HAVE_DIRECTWRITE */
-
-/* Have simple TrueType Layout backend */
-#define HAVE_FALLBACK 1
-
-/* Have fontconfig library */
-/* #undef HAVE_FONTCONFIG */
-
-/* Have FreeType 2 library */
-/* #undef HAVE_FREETYPE */
-
-/* Define to 1 if you have the `getpagesize' function. */
-/* #undef HAVE_GETPAGESIZE */
-
-/* Have glib2 library */
-/* #undef HAVE_GLIB */
-
-/* Have gobject2 library */
-/* #undef HAVE_GOBJECT */
-
-/* Have Graphite2 library */
-/* #undef HAVE_GRAPHITE2 */
-
-/* Have ICU library */
-/* #undef HAVE_ICU */
-
-/* Have Intel __sync_* atomic primitives */
-/* #undef HAVE_INTEL_ATOMIC_PRIMITIVES */
-
-/* Define to 1 if you have the <inttypes.h> header file. */
-#if !defined (_MSC_VER) || (_MSC_VER >= 1800)
-#define HAVE_INTTYPES_H 1
-#endif
-
-/* Define to 1 if you have the `isatty' function. */
-#define HAVE_ISATTY 1
-
-/* Define to 1 if you have the <memory.h> header file. */
-#define HAVE_MEMORY_H 1
-
-/* Define to 1 if you have the `mmap' function. */
-/* #undef HAVE_MMAP */
-
-/* Define to 1 if you have the `mprotect' function. */
-/* #undef HAVE_MPROTECT */
-
-/* Have native OpenType Layout backend */
-#define HAVE_OT 1
-
-/* Have POSIX threads */
-/* #undef HAVE_PTHREAD */
-
-/* Have PTHREAD_PRIO_INHERIT. */
-/* #undef HAVE_PTHREAD_PRIO_INHERIT */
-
-/* Define to 1 if you have the <sched.h> header file. */
-/* #undef HAVE_SCHED_H */
-
-/* Have sched_yield */
-/* #undef HAVE_SCHED_YIELD */
-
-/* Have Solaris __machine_*_barrier and atomic_* operations */
-/* #undef HAVE_SOLARIS_ATOMIC_OPS */
-
-/* Define to 1 if you have the <stdint.h> header file. */
-#if !defined (_MSC_VER) || (_MSC_VER >= 1600)
-#define HAVE_STDINT_H 1
-#endif
-
-/* Define to 1 if you have the <stdlib.h> header file. */
-#define HAVE_STDLIB_H 1
-
-/* Define to 1 if you have the <strings.h> header file. */
-#ifndef _MSC_VER
-#define HAVE_STRINGS_H 1
-#endif
-
-/* Define to 1 if you have the <string.h> header file. */
-#define HAVE_STRING_H 1
-
-/* Define to 1 if you have the `sysconf' function. */
-/* #undef HAVE_SYSCONF */
-
-/* Define to 1 if you have the <sys/mman.h> header file. */
-/* #undef HAVE_SYS_MMAN_H */
-
-/* Define to 1 if you have the <sys/stat.h> header file. */
-#define HAVE_SYS_STAT_H 1
-
-/* Define to 1 if you have the <sys/types.h> header file. */
-#define HAVE_SYS_TYPES_H 1
-
-/* Have UCDN Unicode functions */
-#define HAVE_UCDN 1
-
-/* Have Uniscribe library */
-#define HAVE_UNISCRIBE 1
-
-/* Define to 1 if you have the <unistd.h> header file. */
-#ifndef _MSC_VER
-#define HAVE_UNISTD_H 1
-#endif
-
-/* Define to 1 if you have the <usp10.h> header file. */
-#define HAVE_USP10_H 1
-
-/* Define to 1 if you have the <windows.h> header file. */
-#define HAVE_WINDOWS_H 1
-
-/* Define to the sub-directory in which libtool stores uninstalled libraries.
-   */
-#define LT_OBJDIR ".libs/"
-
-/* Define to the address where bug reports for this package should be sent. */
-#define PACKAGE_BUGREPORT "http://bugs.freedesktop.org/enter_bug.cgi?product=harfbuzz"
-
-/* Define to the full name of this package. */
-#define PACKAGE_NAME "HarfBuzz"
-
-/* Define to the full name and version of this package. */
-#define PACKAGE_STRING "HarfBuzz 1.2.7"
-
-/* Define to the one symbol short name of this package. */
-#define PACKAGE_TARNAME "harfbuzz"
-
-/* Define to the home page for this package. */
-#define PACKAGE_URL "http://harfbuzz.org/"
-
-/* Define to the version of this package. */
-#define PACKAGE_VERSION "1.2.7"
-
-/* Define to necessary symbol if this constant uses a non-standard name on
-   your system. */
-/* #undef PTHREAD_CREATE_JOINABLE */
-
-/* Define to 1 if you have the ANSI C header files. */
-#define STDC_HEADERS 1
diff --git a/win32/config.h.win32.in b/win32/config.h.win32.in
deleted file mode 100644 (file)
index 73ad205..0000000
+++ /dev/null
@@ -1,158 +0,0 @@
-/* config.h.in.  Generated from configure.ac by autoheader.  */
-
-/* The normal alignment of `struct{char;}', in bytes. */
-#define ALIGNOF_STRUCT_CHAR__ 1
-
-/* Define to 1 if you have the `atexit' function. */
-#define HAVE_ATEXIT 1
-
-/* Have cairo graphics library */
-/* #undef HAVE_CAIRO */
-
-/* Have cairo-ft support in cairo graphics library */
-/* #undef HAVE_CAIRO_FT */
-
-/* Have Core Text backend */
-/* #undef HAVE_CORETEXT */
-
-/* Define to 1 if you have the <dlfcn.h> header file. */
-/* #undef HAVE_DLFCN_H */
-
-/* Have DirectWrite Library */
-/* #undef HAVE_DIRECTWRITE */
-
-/* Have simple TrueType Layout backend */
-#define HAVE_FALLBACK 1
-
-/* Have fontconfig library */
-/* #undef HAVE_FONTCONFIG */
-
-/* Have FreeType 2 library */
-/* #undef HAVE_FREETYPE */
-
-/* Define to 1 if you have the `getpagesize' function. */
-/* #undef HAVE_GETPAGESIZE */
-
-/* Have glib2 library */
-/* #undef HAVE_GLIB */
-
-/* Have gobject2 library */
-/* #undef HAVE_GOBJECT */
-
-/* Have Graphite2 library */
-/* #undef HAVE_GRAPHITE2 */
-
-/* Have ICU library */
-/* #undef HAVE_ICU */
-
-/* Have Intel __sync_* atomic primitives */
-/* #undef HAVE_INTEL_ATOMIC_PRIMITIVES */
-
-/* Define to 1 if you have the <inttypes.h> header file. */
-#if !defined (_MSC_VER) || (_MSC_VER >= 1800)
-#define HAVE_INTTYPES_H 1
-#endif
-
-/* Define to 1 if you have the `isatty' function. */
-#define HAVE_ISATTY 1
-
-/* Define to 1 if you have the <memory.h> header file. */
-#define HAVE_MEMORY_H 1
-
-/* Define to 1 if you have the `mmap' function. */
-/* #undef HAVE_MMAP */
-
-/* Define to 1 if you have the `mprotect' function. */
-/* #undef HAVE_MPROTECT */
-
-/* Have native OpenType Layout backend */
-#define HAVE_OT 1
-
-/* Have POSIX threads */
-/* #undef HAVE_PTHREAD */
-
-/* Have PTHREAD_PRIO_INHERIT. */
-/* #undef HAVE_PTHREAD_PRIO_INHERIT */
-
-/* Define to 1 if you have the <sched.h> header file. */
-/* #undef HAVE_SCHED_H */
-
-/* Have sched_yield */
-/* #undef HAVE_SCHED_YIELD */
-
-/* Have Solaris __machine_*_barrier and atomic_* operations */
-/* #undef HAVE_SOLARIS_ATOMIC_OPS */
-
-/* Define to 1 if you have the <stdint.h> header file. */
-#if !defined (_MSC_VER) || (_MSC_VER >= 1600)
-#define HAVE_STDINT_H 1
-#endif
-
-/* Define to 1 if you have the <stdlib.h> header file. */
-#define HAVE_STDLIB_H 1
-
-/* Define to 1 if you have the <strings.h> header file. */
-#ifndef _MSC_VER
-#define HAVE_STRINGS_H 1
-#endif
-
-/* Define to 1 if you have the <string.h> header file. */
-#define HAVE_STRING_H 1
-
-/* Define to 1 if you have the `sysconf' function. */
-/* #undef HAVE_SYSCONF */
-
-/* Define to 1 if you have the <sys/mman.h> header file. */
-/* #undef HAVE_SYS_MMAN_H */
-
-/* Define to 1 if you have the <sys/stat.h> header file. */
-#define HAVE_SYS_STAT_H 1
-
-/* Define to 1 if you have the <sys/types.h> header file. */
-#define HAVE_SYS_TYPES_H 1
-
-/* Have UCDN Unicode functions */
-#define HAVE_UCDN 1
-
-/* Have Uniscribe library */
-#define HAVE_UNISCRIBE 1
-
-/* Define to 1 if you have the <unistd.h> header file. */
-#ifndef _MSC_VER
-#define HAVE_UNISTD_H 1
-#endif
-
-/* Define to 1 if you have the <usp10.h> header file. */
-#define HAVE_USP10_H 1
-
-/* Define to 1 if you have the <windows.h> header file. */
-#define HAVE_WINDOWS_H 1
-
-/* Define to the sub-directory in which libtool stores uninstalled libraries.
-   */
-#define LT_OBJDIR ".libs/"
-
-/* Define to the address where bug reports for this package should be sent. */
-#define PACKAGE_BUGREPORT "@PACKAGE_BUGREPORT@"
-
-/* Define to the full name of this package. */
-#define PACKAGE_NAME "@PACKAGE_NAME@"
-
-/* Define to the full name and version of this package. */
-#define PACKAGE_STRING "@PACKAGE_NAME@ @PACKAGE_VERSION@"
-
-/* Define to the one symbol short name of this package. */
-#define PACKAGE_TARNAME "@PACKAGE_TARNAME@"
-
-/* Define to the home page for this package. */
-#define PACKAGE_URL "@PACKAGE_URL@"
-
-/* Define to the version of this package. */
-#define PACKAGE_VERSION "@PACKAGE_VERSION@"
-
-/* Define to necessary symbol if this constant uses a non-standard name on
-   your system. */
-/* #undef PTHREAD_CREATE_JOINABLE */
-
-/* Define to 1 if you have the ANSI C header files. */
-#define STDC_HEADERS 1
diff --git a/win32/create-lists-msvc.mak b/win32/create-lists-msvc.mak
deleted file mode 100644 (file)
index 9b5574b..0000000
+++ /dev/null
@@ -1,151 +0,0 @@
-# Convert the source listing to object (.obj) listing in
-# another NMake Makefile module, include it, and clean it up.
-# This is a "fact-of-life" regarding NMake Makefiles...
-# This file does not need to be changed unless one is maintaining the NMake Makefiles
-
-# For those wanting to add things here:
-# To add a list, do the following:
-# # $(description_of_list)
-# if [call create-lists.bat header $(makefile_snippet_file) $(variable_name)]
-# endif
-#
-# if [call create-lists.bat file $(makefile_snippet_file) $(file_name)]
-# endif
-#
-# if [call create-lists.bat footer $(makefile_snippet_file)]
-# endif
-# ... (repeat the if [call ...] lines in the above order if needed)
-# !include $(makefile_snippet_file)
-#
-# (add the following after checking the entries in $(makefile_snippet_file) is correct)
-# (the batch script appends to $(makefile_snippet_file), you will need to clear the file unless the following line is added)
-#!if [del /f /q $(makefile_snippet_file)]
-#!endif
-
-# In order to obtain the .obj filename that is needed for NMake Makefiles to build DLLs/static LIBs or EXEs, do the following
-# instead when doing 'if [call create-lists.bat file $(makefile_snippet_file) $(file_name)]'
-# (repeat if there are multiple $(srcext)'s in $(source_list), ignore any headers):
-# !if [for %c in ($(source_list)) do @if "%~xc" == ".$(srcext)" @call create-lists.bat file $(makefile_snippet_file) $(intdir)\%~nc.obj]
-#
-# $(intdir)\%~nc.obj needs to correspond to the rules added in build-rules-msvc.mak
-# %~xc gives the file extension of a given file, %c in this case, so if %c is a.cc, %~xc means .cc
-# %~nc gives the file name of a given file without extension, %c in this case, so if %c is a.cc, %~nc means a
-
-NULL=
-
-# For HarfBuzz
-!if [call create-lists.bat header hb_objs.mak harfbuzz_dll_OBJS]
-!endif
-
-!if [for %c in ($(HB_SOURCES)) do @if "%~xc" == ".cc" @call create-lists.bat file hb_objs.mak ^$(CFG)\^$(PLAT)\harfbuzz\%~nc.obj]
-!endif
-
-!if [for %c in ($(HB_SOURCES)) do @if "%~xc" == ".c" @call create-lists.bat file hb_objs.mak ^$(CFG)\^$(PLAT)\harfbuzz\%~nc.obj]
-!endif
-
-!if [call create-lists.bat footer hb_objs.mak]
-!endif
-
-# For HarfBuzz-GObject
-!if "$(GOBJECT)" == "1"
-
-!if [call create-lists.bat header hb_objs.mak harfbuzz_gobject_OBJS]
-!endif
-
-!if [for %c in ($(HB_GOBJECT_sources) $(HB_GOBJECT_ENUM_sources)) do @if "%~xc" == ".cc" @call create-lists.bat file hb_objs.mak ^$(CFG)\^$(PLAT)\harfbuzz-gobject\%~nc.obj]
-!endif
-
-!if [call create-lists.bat footer hb_objs.mak]
-!endif
-!endif
-
-# For HarfBuzz-ICU
-!if "$(ICU)" == "1"
-
-!if [call create-lists.bat header hb_objs.mak harfbuzz_icu_OBJS]
-!endif
-
-!if [for %c in ($(HB_ICU_sources)) do @if "%~xc" == ".cc" @call create-lists.bat file hb_objs.mak ^$(CFG)\^$(PLAT)\harfbuzz-icu\%~nc.obj]
-!endif
-
-!if [call create-lists.bat footer hb_objs.mak]
-!endif
-!endif
-
-# For the utility programs (GLib support is required)
-!if "$(GLIB)" == "1"
-
-# For hb-view, Cairo-FT support is required
-!if "$(CAIRO_FT)" == "1"
-
-!if [call create-lists.bat header hb_objs.mak hb_view_OBJS]
-!endif
-
-!if [for %c in ($(HB_VIEW_sources)) do @if "%~xc" == ".cc" @call create-lists.bat file hb_objs.mak ^$(CFG)\^$(PLAT)\util\%~nc.obj]
-!endif
-
-!if [call create-lists.bat footer hb_objs.mak]
-!endif
-!endif
-
-# For hb-shape
-!if [call create-lists.bat header hb_objs.mak hb_shape_OBJS]
-!endif
-
-!if [for %c in ($(HB_SHAPE_sources)) do @if "%~xc" == ".cc" @call create-lists.bat file hb_objs.mak ^$(CFG)\^$(PLAT)\util\%~nc.obj]
-!endif
-
-!if [call create-lists.bat footer hb_objs.mak]
-!endif
-
-# For hb-ot-shape-closure
-
-!if [call create-lists.bat header hb_objs.mak hb_ot_shape_closure_OBJS]
-!endif
-
-!if [for %c in ($(HB_OT_SHAPE_CLOSURE_sources)) do @if "%~xc" == ".cc" @call create-lists.bat file hb_objs.mak ^$(CFG)\^$(PLAT)\util\%~nc.obj]
-!endif
-
-!if [call create-lists.bat footer hb_objs.mak]
-!endif
-
-!endif
-
-!include hb_objs.mak
-
-!if [del /f /q hb_objs.mak]
-!endif
-
-# Gather the list of headers and sources for introspection and glib-mkenums
-!if [call create-lists.bat header hb_srcs.mak HB_ACTUAL_HEADERS]
-!endif
-
-!if [for %h in ($(HB_HEADERS)) do @call create-lists.bat file hb_srcs.mak ..\src\%h]
-!endif
-
-!if [call create-lists.bat footer hb_srcs.mak]
-!endif
-
-# Gather the lists of sources for introspection
-!if [call create-lists.bat header hb_srcs.mak HB_ACTUAL_SOURCES]
-!endif
-
-!if [for %s in ($(HB_SOURCES)) do @call create-lists.bat file hb_srcs.mak ..\src\%s]
-!endif
-
-!if [call create-lists.bat footer hb_srcs.mak]
-!endif
-
-!if [call create-lists.bat header hb_srcs.mak HB_GOBJECT_ACTUAL_SOURCES]
-!endif
-
-!if [for %s in ($(HB_GOBJECT_sources) $(HB_GOBJECT_STRUCTS_headers)) do @call create-lists.bat file hb_srcs.mak ..\src\%s]
-!endif
-
-!if [call create-lists.bat footer hb_srcs.mak]
-!endif
-
-!include hb_srcs.mak
-
-!if [del /f /q hb_srcs.mak]
-!endif
diff --git a/win32/create-lists.bat b/win32/create-lists.bat
deleted file mode 100644 (file)
index ef60d5c..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-@echo off
-rem Simple .bat script for creating the NMake Makefile snippets.
-
-if not "%1" == "header" if not "%1" == "file" if not "%1" == "footer" goto :error_cmd
-if "%2" == "" goto error_no_destfile
-
-if "%1" == "header" goto :header
-if "%1" == "file" goto :addfile
-if "%1" == "footer" goto :footer
-
-:header
-if "%3" == "" goto error_var
-echo %3 =      \>>%2
-goto done
-
-:addfile
-if "%3" == "" goto error_file
-echo.  %3      \>>%2
-goto done
-
-:footer
-echo.  $(NULL)>>%2
-echo.>>%2
-goto done
-
-:error_cmd
-echo Specified command '%1' was invalid.  Valid commands are: header file footer.
-goto done
-
-:error_no_destfile
-echo Destination NMake snippet file must be specified
-goto done
-
-:error_var
-echo A name must be specified for using '%1'.
-goto done
-
-:error_file
-echo A file must be specified for using '%1'.
-goto done
-
-:done
\ No newline at end of file
diff --git a/win32/detectenv-msvc.mak b/win32/detectenv-msvc.mak
deleted file mode 100644 (file)
index a94ab84..0000000
+++ /dev/null
@@ -1,136 +0,0 @@
-# Change this (or specify PREFIX= when invoking this NMake Makefile) if
-# necessary, so that the libs and headers of the dependent third-party
-# libraries can be located.  For instance, if building from GLib's
-# included Visual Studio projects, this should be able to locate the GLib
-# build out-of-the-box if they were not moved.  GLib's headers will be
-# found in $(GLIB_PREFIX)\include\glib-2.0 and
-# $(GLIB_PREFIX)\lib\glib-2.0\include and its import library will be found
-# in $(GLIB_PREFIX)\lib.
-
-!if "$(PREFIX)" == ""
-PREFIX = ..\..\vs$(VSVER)\$(PLAT)
-!endif
-
-# Location of the PERL interpretor, for running glib-mkenums.  glib-mkenums
-# needs to be found in $(PREFIX)\bin.  Using either a 32-bit or x64 PERL
-# interpretor are supported for either a 32-bit or x64 build.
-
-!if "$(PERL)" == ""
-PERL = perl
-!endif
-
-# Location of the Python interpretor, for building introspection.  The complete set
-# of Python Modules for introspection (the giscanner Python scripts and the _giscanner.pyd
-# compiled module) needs to be found in $(PREFIX)\lib\gobject-introspection\giscanner, and
-# the g-ir-scanner Python script and g-ir-compiler utility program needs to be found
-# in $(PREFIX)\bin, together with any DLLs they will depend on, if those DLLs are not already
-# in your PATH.
-# Note that the Python interpretor and the introspection modules and utility progam must
-# correspond to the build type (i.e. 32-bit Release for 32-bit Release builds, and so on).
-#
-# For introspection, currently only Python 2.7.x is supported.  This may change when Python 3.x
-# support is added upstream in gobject-introspection--when this happens, the _giscanner.pyd must
-# be the one that is built against the release series of Python that is used here.
-
-!if "$(PYTHON)" == ""
-PYTHON = python
-!endif
-
-# Location of the pkg-config utility program, for building introspection.  It needs to be able
-# to find the pkg-config (.pc) files so that the correct libraries and headers for the needed libraries
-# can be located, using PKG_CONFIG_PATH.  Using either a 32-bit or x64 pkg-config are supported for
-# either a 32-bit or x64 build.
-
-!if "$(PKG_CONFIG)" == ""
-PKG_CONFIG = pkg-config
-!endif
-
-# The items below this line should not be changed, unless one is maintaining
-# the NMake Makefiles.  The exception is for the CFLAGS_ADD line(s) where one
-# could use his/her desired compiler optimization flags, if he/she knows what is
-# being done.
-
-# Check to see we are configured to build with MSVC (MSDEVDIR, MSVCDIR or
-# VCINSTALLDIR) or with the MS Platform SDK (MSSDK or WindowsSDKDir)
-!if !defined(VCINSTALLDIR) && !defined(WINDOWSSDKDIR)
-MSG = ^
-This Makefile is only for Visual Studio 2008 and later.^
-You need to ensure that the Visual Studio Environment is properly set up^
-before running this Makefile.
-!error $(MSG)
-!endif
-
-ERRNUL  = 2>NUL
-_HASH=^#
-
-!if ![echo VCVERSION=_MSC_VER > vercl.x] \
-    && ![echo $(_HASH)if defined(_M_IX86) >> vercl.x] \
-    && ![echo PLAT=Win32 >> vercl.x] \
-    && ![echo $(_HASH)elif defined(_M_AMD64) >> vercl.x] \
-    && ![echo PLAT=x64 >> vercl.x] \
-    && ![echo $(_HASH)endif >> vercl.x] \
-    && ![cl -nologo -TC -P vercl.x $(ERRNUL)]
-!include vercl.i
-!if ![echo VCVER= ^\> vercl.vc] \
-    && ![set /a $(VCVERSION) / 100 - 6 >> vercl.vc]
-!include vercl.vc
-!endif
-!endif
-!if ![del $(ERRNUL) /q/f vercl.x vercl.i vercl.vc]
-!endif
-
-!if $(VCVERSION) > 1499 && $(VCVERSION) < 1600
-VSVER = 9
-!elseif $(VCVERSION) > 1599 && $(VCVERSION) < 1700
-VSVER = 10
-!elseif $(VCVERSION) > 1699 && $(VCVERSION) < 1800
-VSVER = 11
-!elseif $(VCVERSION) > 1799 && $(VCVERSION) < 1900
-VSVER = 12
-!elseif $(VCVERSION) > 1899 && $(VCVERSION) < 2000
-VSVER = 14
-!else
-VSVER = 0
-!endif
-
-!if "$(VSVER)" == "0"
-MSG = ^
-This NMake Makefile set supports Visual Studio^
-9 (2008) through 14 (2015).  Your Visual Studio^
-version is not supported.
-!error $(MSG)
-!endif
-
-VALID_CFGSET = FALSE
-!if "$(CFG)" == "release" || "$(CFG)" == "debug"
-VALID_CFGSET = TRUE
-!endif
-
-# One may change these items, but be sure to test
-# the resulting binaries
-!if "$(CFG)" == "release"
-CFLAGS_ADD = /MD /O2 /GL /MP
-!if "$(VSVER)" != "9"
-CFLAGS_ADD = $(CFLAGS_ADD) /d2Zi+
-!endif
-!else
-CFLAGS_ADD = /MDd /Od
-!endif
-
-!if "$(PLAT)" == "x64"
-LDFLAGS_ARCH = /machine:x64
-!else
-LDFLAGS_ARCH = /machine:x86
-!endif
-
-!if "$(VALID_CFGSET)" == "TRUE"
-CFLAGS = $(CFLAGS_ADD) /W3 /Zi /I.. /I..\src /I. /I$(PREFIX)\include
-
-LDFLAGS_BASE = $(LDFLAGS_ARCH) /libpath:$(PREFIX)\lib /DEBUG
-
-!if "$(CFG)" == "debug"
-LDFLAGS = $(LDFLAGS_BASE)
-!else
-LDFLAGS = $(LDFLAGS_BASE) /opt:ref /LTCG
-!endif
-!endif
diff --git a/win32/generate-msvc.mak b/win32/generate-msvc.mak
deleted file mode 100644 (file)
index 48bd9f0..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-# NMake Makefile portion for code generation and
-# intermediate build directory creation
-# Items in here should not need to be edited unless
-# one is maintaining the NMake build files.
-
-# Copy the pre-defined config.h.win32
-config.h: config.h.win32
-       @-copy $@.win32 $@
-
-# Generate the enumeration sources and headers
-# sed is not normally available on Windows, but since
-# we are already using PERL, use PERL one-liners.
-!if "$(GOBJECT)" == "1"
-$(HB_GOBJECT_ENUM_GENERATED_SOURCES): ..\src\hb-gobject-enums.h.tmpl ..\src\hb-gobject-enums.cc.tmpl $(HB_ACTUAL_HEADERS)
-       $(PERL) $(PREFIX)\bin\glib-mkenums \
-               --identifier-prefix hb_ --symbol-prefix hb_gobject \
-               --template ..\src\$(@F).tmpl  $(HB_ACTUAL_HEADERS) > $@
-       $(PERL) -p -i.tmp1 -e "s/_t_get_type/_get_type/g" $@
-       $(PERL) -p -i.tmp2 -e "s/_T \(/ (/g" $@
-       @-del $@.tmp1
-       @-del $@.tmp2
-!endif
-
-# Create the build directories
-$(CFG)\$(PLAT)\harfbuzz $(CFG)\$(PLAT)\harfbuzz-icu $(CFG)\$(PLAT)\harfbuzz-gobject $(CFG)\$(PLAT)\util:
-       @-mkdir $@
diff --git a/win32/hb-introspection-msvc.mak b/win32/hb-introspection-msvc.mak
deleted file mode 100644 (file)
index 67a0c5e..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-
-!if "$(BUILD_INTROSPECTION)" == "TRUE"
-# Create the file list for introspection (to avoid the dreaded command-line-too-long problem on Windows)
-$(CFG)\$(PLAT)\hb_list: $(HB_ACTUAL_HEADERS) $(HB_ACTUAL_SOURCES) $(HB_GOBJECT_ENUM_GENERATED_SOURCES) $(HB_GOBJECT_ACTUAL_SOURCES)
-       @for %f in ($(HB_ACTUAL_HEADERS) $(HB_ACTUAL_SOURCES) $(HB_GOBJECT_ENUM_GENERATED_SOURCES) $(HB_GOBJECT_ACTUAL_SOURCES)) do @echo %f >> $@
-
-$(CFG)\$(PLAT)\HarfBuzz-0.0.gir: $(CFG)\$(PLAT)\harfbuzz-gobject.lib $(CFG)\$(PLAT)\hb_list
-       @set LIB=$(CFG)\$(PLAT);$(PREFIX)\lib;$(LIB)
-       @set PATH=$(CFG)\$(PLAT);$(PREFIX)\bin;$(PATH)
-       @-echo Generating $@...
-       $(PYTHON) $(G_IR_SCANNER)       \
-       --verbose -no-libtool   \
-       -I..\src -n hb --identifier-prefix=hb_ --warn-all       \
-       --namespace=HarfBuzz    \
-       --nsversion=0.0 \
-       --include=GObject-2.0   \
-       --library=harfbuzz-gobject      \
-       --library=harfbuzz      \
-       --add-include-path=$(G_IR_INCLUDEDIR)   \
-       --pkg-export=harfbuzz   \
-       --cflags-begin  \
-       $(CFLAGS) $(HB_DEFINES) $(HB_CFLAGS)    \
-       -DHB_H \
-       -DHB_H_IN \
-       -DHB_OT_H \
-       -DHB_OT_H_IN \
-       -DHB_GOBJECT_H \
-       -DHB_GOBJECT_H_IN \
-       --cflags-end    \
-       --filelist=$(CFG)\$(PLAT)\hb_list       \
-       -o $@
-
-$(CFG)\$(PLAT)\HarfBuzz-0.0.typelib: $(CFG)\$(PLAT)\HarfBuzz-0.0.gir
-       @copy $*.gir $(@B).gir
-       $(PREFIX)\bin\g-ir-compiler     \
-       --includedir=$(CFG)\$(PLAT) --debug --verbose   \
-       $(@B).gir       \
-       -o $@
-       @del $(@B).gir
-!else
-!error $(ERROR_MSG)
-!endif
diff --git a/win32/info-msvc.mak b/win32/info-msvc.mak
deleted file mode 100644 (file)
index bc85dc9..0000000
+++ /dev/null
@@ -1,137 +0,0 @@
-# NMake Makefile portion for displaying config info
-
-INC_FEATURES = Uniscribe Fallback OT
-BUILT_TOOLS =
-BUILT_LIBRARIES = HarfBuzz
-
-!if "$(GLIB)" == "1"
-UNICODE_IMPL = GLib
-INC_FEATURES = $(INC_FEATURES) GLib
-BUILT_TOOLS = hb-shape.exe hb-ot-shape-closure.exe
-!if "$(CAIRO_FT)" == "1"
-BUILT_TOOLS = hb-view.exe $(BUILT_TOOLS)
-!endif
-!else
-UNICODE_IMPL = ucdn
-!endif
-
-!if "$(FREETYPE)" == "1"
-INC_FEATURES = $(INC_FEATURES) FreeType
-!endif
-
-!if "$(GRAPHITE2)" == "1"
-INC_FEATURES = $(INC_FEATURES) Graphite2
-!endif
-
-!if "$(DIRECTWRITE)" == "1"
-INC_FEATURES = $(INC_FEATURES) DirectWrite
-!endif
-
-!if "$(ICU)" == "1"
-BUILT_LIBRARIES = $(BUILT_LIBRARIES) HarfBuzz-ICU
-!endif
-
-!if "$(GOBJECT)" == "1"
-BUILT_LIBRARIES = $(BUILT_LIBRARIES) HarfBuzz-GObject
-!endif
-
-!if "$(INTROSPECTION)" == "1"
-BUILD_INTROSPECTION = yes
-!else
-BUILD_INTROSPECTION = no
-!endif
-
-build-info-hb:
-       @echo.
-       @echo ==================================
-       @echo Configuration for HarfBuzz Library
-       @echo ==================================
-       @echo Unicode Implementation: $(UNICODE_IMPL)
-       @echo Enabled Features: $(INC_FEATURES)
-
-all-build-info: build-info-hb
-       @echo.
-       @echo ----------------
-       @echo Other build info
-       @echo ----------------
-       @echo Built Libraries: $(BUILT_LIBRARIES)
-       @echo Built Tools: $(BUILT_TOOLS)
-       @echo Introspection: $(BUILD_INTROSPECTION)
-
-help:
-       @echo.
-       @echo =============================
-       @echo Building HarfBuzz Using NMake
-       @echo =============================
-       @echo nmake /f Makefile.vc CFG=[release^|debug] ^<PREFIX=PATH^> OPTION=1 ...
-       @echo.
-       @echo Where:
-       @echo ------
-       @echo CFG: Required, use CFG=release for an optimized build and CFG=debug
-       @echo for a debug build.  PDB files are generated for all builds.
-       @echo.
-       @echo PREFIX: Optional, the path where dependent libraries and tools may be
-       @echo found, default is ^$(srcrootdir)\..\vs^$(short_vs_ver)\^$(platform),
-       @echo where ^$(short_vs_ver) is 9 for VS 2008, 10 for VS 2010 and so on; and
-       @echo ^$(platform) is Win32 for 32-bit builds and x64 for x64 builds.
-       @echo.
-       @echo OPTION: Optional, may be any of the following, use OPTION=1 to enable;
-       @echo multiple OPTION's may be used.  If no OPTION is specified, a default
-       @echo HarfBuzz DLL is built with OpenType, fallback and Uniscribe support
-       @echo with a bundled Unicode implementation (UCDN).
-       @echo ======
-       @echo DIRECTWRITE:
-       @echo Enable DirectWrite support, requires a recent enough Windows SDK.
-       @echo.
-       @echo GRAPHITE2:
-       @echo Enable graphite2 support, requires the SIL Graphite2 library
-       @echo.
-       @echo FREETYPE:
-       @echo Enable FreeType2 support, requires the FreeType2 library
-       @echo.
-       @echo GLIB:
-       @echo Enable GLib2 support, with GLib Unicode support, requires the GNOME GLib2
-       @echo library.  Enables the build of utility programs.
-       @echo.
-       @echo ICU:
-       @echo Enable the HarfBuzz-ICU layout library, requires the International
-       @echo Components for Unicode (ICU) libraries.
-       @echo.
-       @echo GOBJECT:
-       @echo Enable the HarfBuzz-GObject library, also implies GLib2 support,
-       @echo requires the GNOME GLib2 libraries and tools, notably the glib-mkenums
-       @echo tool script, which will require a PERL interpretor (use
-       @echo PERL=^$(PATH_TO_PERL_INTERPRETOR)) if it is not already in your PATH).
-       @echo.
-       @echo INTROSPECTION:
-       @echo Enable the build of introspection files, also implies GObject/GLib2 support,
-       @echo requires the GNOME gobject-introspection libraries and tools.  You will need
-       @echo to ensure the pkg-config (.pc) files can be found for GObject-2.0 and the
-       @echo Python interpretor (that was used to build the gobject-introsoection tools)
-       @echo can be found by setting PKG_CONFIG_PATH beforehand, and passing in PYTHON=
-       @echo ^$(PATH_TO_PYTHON_INTERPRETOR) respectively, if python.exe is not already
-       @echo in your PATH.
-       @echo.
-       @echo CAIRO_FT:
-       @echo Enables Cairo-Freetype support, needed for the build of the hb-view utility.
-       @echo Implies FreeType2 support and also requires Cairo built with FreeType2
-       @echo support; GLib2 support must also be enabled.
-       @echo.
-       @echo LIBTOOL_DLL_NAME:
-       @echo Use a libtool-style DLL name to mimic the DLL file naming generated by
-       @echo MinGW builds.
-       @echo.
-       @echo Note that GLib2 support is required for all utility and test programs.
-       @echo ======
-       @echo A 'clean' target is supported to remove all generated files, intermediate
-       @echo object files and binaries for the specified configuration.
-       @echo.
-       @echo A 'tests' target is supported to build the test programs, if GLib2 support
-       @echo is enabled.  Use after building the libraries and utilities.
-       @echo.
-       @echo An 'install' target is supported to copy the build (DLLs, utility programs,
-       @echo LIBs, along with the introspection files if applicable) to appropriate
-       @echo locations under ^$(PREFIX).
-       @echo ======
-       @echo.
-       
diff --git a/win32/install.mak b/win32/install.mak
deleted file mode 100644 (file)
index fa239ea..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-# NMake Makefile snippet for copying the built libraries, utilities and headers to
-# a path under $(PREFIX).
-
-install: all
-       @if not exist $(PREFIX)\bin\ mkdir $(PREFIX)\bin
-       @if not exist $(PREFIX)\lib\ mkdir $(PREFIX)\lib
-       @if not exist $(PREFIX)\include\harfbuzz\ mkdir $(PREFIX)\include\harfbuzz
-       @copy /b $(HARFBUZZ_DLL_FILENAME).dll $(PREFIX)\bin
-       @copy /b $(HARFBUZZ_DLL_FILENAME).pdb $(PREFIX)\bin
-       @copy /b $(CFG)\$(PLAT)\harfbuzz.lib $(PREFIX)\lib
-       @if exist $(HARFBUZZ_ICU_DLL_FILENAME).dll copy /b $(HARFBUZZ_ICU_DLL_FILENAME).dll $(PREFIX)\bin
-       @if exist $(HARFBUZZ_ICU_DLL_FILENAME).dll copy /b $(HARFBUZZ_ICU_DLL_FILENAME).pdb $(PREFIX)\bin
-       @if exist $(HARFBUZZ_ICU_DLL_FILENAME).dll copy /b $(CFG)\$(PLAT)\harfbuzz-icu.lib $(PREFIX)\lib
-       @if exist $(HARFBUZZ_GOBJECT_DLL_FILENAME).dll copy /b $(HARFBUZZ_GOBJECT_DLL_FILENAME).dll $(PREFIX)\bin
-       @if exist $(HARFBUZZ_GOBJECT_DLL_FILENAME).dll copy /b $(HARFBUZZ_GOBJECT_DLL_FILENAME).pdb $(PREFIX)\bin
-       @if exist $(HARFBUZZ_GOBJECT_DLL_FILENAME).dll copy /b $(CFG)\$(PLAT)\harfbuzz-gobject.lib $(PREFIX)\lib
-       @if exist $(CFG)\$(PLAT)\hb-view.exe copy /b $(CFG)\$(PLAT)\hb-view.exe $(PREFIX)\bin
-       @if exist $(CFG)\$(PLAT)\hb-view.exe copy /b $(CFG)\$(PLAT)\hb-view.pdb $(PREFIX)\bin
-       @if exist $(CFG)\$(PLAT)\hb-ot-shape-closure.exe copy /b $(CFG)\$(PLAT)\hb-ot-shape-closure.exe $(PREFIX)\bin
-       @if exist $(CFG)\$(PLAT)\hb-ot-shape-closure.exe copy /b $(CFG)\$(PLAT)\hb-ot-shape-closure.pdb $(PREFIX)\bin
-       @if exist $(CFG)\$(PLAT)\hb-shape.exe copy /b $(CFG)\$(PLAT)\hb-shape.exe $(PREFIX)\bin
-       @if exist $(CFG)\$(PLAT)\hb-shape.exe copy /b $(CFG)\$(PLAT)\hb-shape.pdb $(PREFIX)\bin
-       @for %h in ($(HB_ACTUAL_HEADERS)) do @copy %h $(PREFIX)\include\harfbuzz
-       @if exist $(HARFBUZZ_ICU_DLL_FILENAME).dll for %h in ($(HB_ICU_headers)) do @copy ..\src\%h $(PREFIX)\include\harfbuzz
-       @if exist $(HARFBUZZ_GOBJECT_DLL_FILENAME).dll for %h in ($(HB_GOBJECT_headers)) do @copy ..\src\%h $(PREFIX)\include\harfbuzz
-       @if exist $(HARFBUZZ_GOBJECT_DLL_FILENAME).dll copy $(CFG)\$(PLAT)\harfbuzz-gobject\hb-gobject-enums.h $(PREFIX)\include\harfbuzz
-       @rem Copy the generated introspection files
-       @if exist $(CFG)\$(PLAT)\HarfBuzz-0.0.gir copy $(CFG)\$(PLAT)\HarfBuzz-0.0.gir $(PREFIX)\share\gir-1.0
-       @if exist $(CFG)\$(PLAT)\HarfBuzz-0.0.typelib copy /b $(CFG)\$(PLAT)\HarfBuzz-0.0.typelib $(PREFIX)\lib\girepository-1.0
diff --git a/win32/introspection-msvc.mak b/win32/introspection-msvc.mak
deleted file mode 100644 (file)
index d32f7cf..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-# Common NMake Makefile module for checking the build environment is sane
-# for building introspection files under MSVC/NMake.
-# This can be copied from $(gi_srcroot)\build\win32 for GNOME items
-# that support MSVC builds and introspection under MSVC.
-
-# Can override with env vars as needed
-# You will need to have built gobject-introspection for this to work.
-# Change or pass in or set the following to suit your environment
-
-!if "$(PREFIX)" == ""
-PREFIX = ..\..\..\vs$(VSVER)\$(PLAT)
-!endif
-
-# Note: The PYTHON must be the Python release series that was used to build
-# the GObject-introspection scanner Python module!
-# Either having python.exe your PATH will work or passing in
-# PYTHON=<full path to your Python interpretor> will do
-
-# This is required, and gobject-introspection needs to be built
-# before this can be successfully run.
-!if "$(PYTHON)" == ""
-PYTHON=python
-!endif
-
-# Don't change anything following this line!
-
-GIR_SUBDIR = share\gir-1.0
-GIR_TYPELIBDIR = lib\girepository-1.0
-G_IR_SCANNER = $(PREFIX)\bin\g-ir-scanner
-G_IR_COMPILER = $(PREFIX)\bin\g-ir-compiler.exe
-G_IR_INCLUDEDIR = $(PREFIX)\$(GIR_SUBDIR)
-G_IR_TYPELIBDIR = $(PREFIX)\$(GIR_TYPELIBDIR)
-
-VALID_PKG_CONFIG_PATH = FALSE
-
-MSG_INVALID_PKGCONFIG = You must set or specifiy a valid PKG_CONFIG_PATH
-MSG_INVALID_CFG = You need to specify or set CFG to be release or debug to use this Makefile to build the Introspection Files
-
-ERROR_MSG =
-
-BUILD_INTROSPECTION = TRUE
-
-!if ![pkg-config --print-errors --errors-to-stdout $(CHECK_PACKAGE) > pkgconfig.x]     \
-       && ![setlocal]  \
-       && ![set file="pkgconfig.x"]    \
-       && ![FOR %A IN (%file%) DO @echo PKG_CHECK_SIZE=%~zA > pkgconfig.chksize]       \
-       && ![del $(ERRNUL) /q/f pkgconfig.x]
-!endif
-
-!include pkgconfig.chksize
-!if "$(PKG_CHECK_SIZE)" == "0"
-VALID_PKG_CONFIG_PATH = TRUE
-!else
-VALID_PKG_CONFIG_PATH = FALSE
-!endif
-
-!if ![del $(ERRNUL) /q/f pkgconfig.chksize]
-!endif
-
-VALID_CFGSET = FALSE
-!if "$(CFG)" == "release" || "$(CFG)" == "debug"
-VALID_CFGSET = TRUE
-!endif
-
-!if "$(VALID_PKG_CONFIG_PATH)" != "TRUE"
-BUILD_INTROSPECTION = FALSE
-ERROR_MSG = $(MSG_INVALID_PKGCONFIG)
-!endif
-
-!if "$(VALID_CFGSET)" != "TRUE"
-BUILD_INTROSPECTION = FALSE
-ERROR_MSG = $(MSG_INVALID_CFG)
-!endif