summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYoungbok Shin <youngb.shin@samsung.com>2015-11-03 20:24:15 +0900
committerYoungbok Shin <youngb.shin@samsung.com>2015-11-03 20:49:45 +0900
commit4b524cd9449699e546a0991326d12ee2c915fab3 (patch)
treee6ce432188d6fe2b0b4bee6ddad34e7977c26a44
parent4a63fee1394ef6d952890db5d6cf4b664f19da2e (diff)
downloadharfbuzz-4b524cd9449699e546a0991326d12ee2c915fab3.tar.gz
harfbuzz-4b524cd9449699e546a0991326d12ee2c915fab3.tar.bz2
harfbuzz-4b524cd9449699e546a0991326d12ee2c915fab3.zip
Imported Upstream version 0.9.40upstream/0.9.40
Change-Id: Ifcc6c10a445fb0c0cc5bfee7638d67eb05a63a4c
-rw-r--r--Android.mk3
-rw-r--r--ChangeLog2249
-rw-r--r--Makefile.am2
-rw-r--r--Makefile.in2
-rw-r--r--NEWS61
-rw-r--r--README3
-rw-r--r--README.python26
-rwxr-xr-xautogen.sh9
-rw-r--r--config.h.in3
-rwxr-xr-xconfigure60
-rw-r--r--configure.ac14
-rw-r--r--docs/Makefile.am2
-rw-r--r--docs/Makefile.in2
-rw-r--r--docs/reference/html/annotation-glossary.html9
-rw-r--r--docs/reference/html/ch01.html2
-rw-r--r--docs/reference/html/harfbuzz-hb-blob.html94
-rw-r--r--docs/reference/html/harfbuzz-hb-buffer.html130
-rw-r--r--docs/reference/html/harfbuzz-hb-common.html34
-rw-r--r--docs/reference/html/harfbuzz-hb-coretext.html4
-rw-r--r--docs/reference/html/harfbuzz-hb-face.html54
-rw-r--r--docs/reference/html/harfbuzz-hb-font.html180
-rw-r--r--docs/reference/html/harfbuzz-hb-ft.html12
-rw-r--r--docs/reference/html/harfbuzz-hb-glib.html6
-rw-r--r--docs/reference/html/harfbuzz-hb-graphite2.html4
-rw-r--r--docs/reference/html/harfbuzz-hb-icu.html6
-rw-r--r--docs/reference/html/harfbuzz-hb-ot-layout.html40
-rw-r--r--docs/reference/html/harfbuzz-hb-ot-tag.html6
-rw-r--r--docs/reference/html/harfbuzz-hb-set.html76
-rw-r--r--docs/reference/html/harfbuzz-hb-shape-plan.html30
-rw-r--r--docs/reference/html/harfbuzz-hb-shape.html16
-rw-r--r--docs/reference/html/harfbuzz-hb-unicode.html84
-rw-r--r--docs/reference/html/harfbuzz-hb-uniscribe.html4
-rw-r--r--docs/reference/html/harfbuzz-hb-version.html8
-rw-r--r--docs/reference/html/harfbuzz.devhelp22
-rw-r--r--docs/reference/html/index.html2
-rw-r--r--docs/reference/html/index.sgml2
-rw-r--r--docs/reference/version.xml2
-rw-r--r--src/Makefile.am46
-rw-r--r--src/Makefile.in56
-rwxr-xr-xsrc/check-defs.sh2
-rwxr-xr-xsrc/check-libstdc++.sh14
-rwxr-xr-xsrc/check-static-inits.sh4
-rwxr-xr-xsrc/check-symbols.sh10
-rwxr-xr-xsrc/gen-indic-table.py2
-rw-r--r--src/hb-blob.cc9
-rw-r--r--src/hb-buffer-deserialize-json.hh62
-rw-r--r--src/hb-buffer-deserialize-json.rl4
-rw-r--r--src/hb-buffer-deserialize-text.hh72
-rw-r--r--src/hb-buffer.cc42
-rw-r--r--src/hb-buffer.h8
-rw-r--r--src/hb-common.cc5
-rw-r--r--src/hb-coretext.cc75
-rw-r--r--src/hb-face-private.hh2
-rw-r--r--src/hb-ft.cc77
-rw-r--r--src/hb-ft.h59
-rw-r--r--src/hb-glib.cc11
-rw-r--r--src/hb-glib.h3
-rw-r--r--src/hb-icu.cc4
-rw-r--r--src/hb-mutex-private.hh4
-rw-r--r--src/hb-object-private.hh107
-rw-r--r--src/hb-open-file-private.hh17
-rw-r--r--src/hb-open-type-private.hh176
-rw-r--r--src/hb-ot-cmap-table.hh35
-rw-r--r--src/hb-ot-font.cc205
-rw-r--r--src/hb-ot-head-table.hh6
-rw-r--r--src/hb-ot-hhea-table.hh68
-rw-r--r--src/hb-ot-hmtx-table.hh40
-rw-r--r--src/hb-ot-layout-common-private.hh97
-rw-r--r--src/hb-ot-layout-gdef-table.hh30
-rw-r--r--src/hb-ot-layout-gpos-table.hh301
-rw-r--r--src/hb-ot-layout-gsub-table.hh185
-rw-r--r--src/hb-ot-layout-gsubgpos-private.hh465
-rw-r--r--src/hb-ot-layout-jstf-table.hh12
-rw-r--r--src/hb-ot-layout-private.hh8
-rw-r--r--src/hb-ot-layout.cc109
-rw-r--r--src/hb-ot-maxp-table.hh6
-rw-r--r--src/hb-ot-name-table.hh8
-rw-r--r--src/hb-ot-shape-complex-arabic-fallback.hh4
-rw-r--r--src/hb-ot-shape-complex-arabic-win1256.hh6
-rw-r--r--src/hb-ot-shape-complex-indic-machine.hh2620
-rw-r--r--src/hb-ot-shape-complex-indic-machine.rl2
-rw-r--r--src/hb-ot-shape-complex-indic-table.cc36
-rw-r--r--src/hb-ot-shape-complex-myanmar-machine.hh38
-rw-r--r--src/hb-ot-shape-complex-private.hh2
-rw-r--r--src/hb-ot-shape-complex-sea-machine.hh34
-rw-r--r--src/hb-ot-shape-fallback.cc4
-rw-r--r--src/hb-ot-shape-normalize.cc9
-rw-r--r--src/hb-ot-shape.cc2
-rw-r--r--src/hb-private.hh145
-rw-r--r--src/hb-set-private.hh59
-rw-r--r--src/hb-shape.cc6
-rw-r--r--src/hb-shaper-private.hh7
-rw-r--r--src/hb-shaper.cc4
-rw-r--r--src/hb-unicode.cc2
-rw-r--r--src/hb-uniscribe.cc6
-rw-r--r--src/hb-utf-private.hh57
-rw-r--r--src/hb-version.h4
-rw-r--r--test/api/test-blob.c3
-rw-r--r--test/shaping/Makefile.am1
-rw-r--r--test/shaping/Makefile.in4
-rw-r--r--test/shaping/fonts/sha1sum/5028afb650b1bb718ed2131e872fbcce57828fff.ttfbin0 -> 4720 bytes
-rw-r--r--test/shaping/fonts/sha1sum/MANIFEST1
-rw-r--r--test/shaping/hb_test_tools.py2
-rw-r--r--test/shaping/tests/arabic-fallback-shaping.tests2
-rw-r--r--test/shaping/tests/hangul-jamo.tests9
-rw-r--r--test/shaping/tests/indic-joiner-candrabindu.tests2
-rw-r--r--util/Makefile.am4
-rw-r--r--util/Makefile.in4
-rw-r--r--util/hb-ot-shape-closure.cc2
-rw-r--r--util/hb-shape.cc2
-rw-r--r--util/hb-view.cc5
-rw-r--r--util/helper-cairo-ansi.cc4
-rw-r--r--util/helper-cairo.cc16
-rw-r--r--util/helper-cairo.hh5
-rw-r--r--util/main-font-text.hh4
-rw-r--r--util/options.cc47
-rw-r--r--util/options.hh16
-rw-r--r--util/view-cairo.cc2
-rw-r--r--util/view-cairo.hh8
119 files changed, 5682 insertions, 3197 deletions
diff --git a/Android.mk b/Android.mk
index 07dfa5b..0552507 100644
--- a/Android.mk
+++ b/Android.mk
@@ -99,8 +99,7 @@ LOCAL_SHARED_LIBRARIES := \
libutils \
liblog
LOCAL_C_INCLUDES += \
- $(LOCAL_PATH)/src \
- external/icu/icu4c/source/common
+ $(LOCAL_PATH)/src
LOCAL_CFLAGS += -DHB_NO_MT -DHAVE_OT -DHAVE_ICU -DHAVE_ICU_BUILTIN
LOCAL_MODULE:= libharfbuzz_ng
include $(BUILD_SHARED_LIBRARY)
diff --git a/ChangeLog b/ChangeLog
index 909fdf0..2ef17b2 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,16 +1,1903 @@
+commit 9e401f6890f2bea1d11914bca436c2230f8d0f1b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Mar 20 16:08:38 2015 -0400
+
+ Fix reverse_range() for empty range
+
+ Fixes coretext notdef loop consisting of all default_ignorable glyphs
+
+ https://code.google.com/p/chromium/issues/detail?id=464755
+
+ src/hb-buffer.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 7481bd49d56d4e814ab1f85fc2df8bf934d520f4
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Mar 4 15:47:25 2015 -0800
+
+ Fix previous commit
+
+ I misunderstood how which works.
+
+ autogen.sh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 6763e21afb77b250ad4416ff921d46c63ea12443
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Mar 4 15:43:05 2015 -0800
+
+ Accept glibtoolize as libtoolize
+
+ Of course, we don't really run it, autoreconf does. We just
+ err if neither is available. glibtoolize is the name it is
+ shipped under on OS X. Reported by Adam.
+
+ autogen.sh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 02a04e6afb1a76894f3723a467716607970d95d3
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Mar 4 12:32:03 2015 -0800
+
+ 0.9.39
+
+ 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
+
+ Fix hb-uniscribe build
+
+ src/hb-ot-name-table.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 8ac345e5c0ed0aad6547592ea0839aabfb4ba980
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Mon Mar 2 16:06:55 2015 -0800
+
+ Fix reverse_range() to only reverse alt array if positions are used
+
+ In hb-coretext, when we were using scratch buffer for book-keeping,
+ a reverse_range() caused by the notdef-insertion loop could mess up
+ our log_clusters. Ouch!
+
+ src/hb-buffer.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 1e03d7ac83f3e17aafed1e37390d9ff8394e36da
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Feb 26 13:58:32 2015 -0800
+
+ Better error message if libtool is not installed
+
+ Fixes https://github.com/behdad/harfbuzz/pull/88
+
+ autogen.sh | 9 +++++++--
+ 1 file changed, 7 insertions(+), 2 deletions(-)
+
+commit 6c918e2997fb82e89485f2b50bee2bf4fcd70592
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Feb 26 13:55:34 2015 -0800
+
+ Clean up gtk-doc.make
+
+ Makefile.am | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 5ec5875acb12cf07447c9ebfb03212601368dfc4
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Feb 26 13:53:05 2015 -0800
+
+ Install git.mk in docs/
+
+ docs/Makefile.am | 2 ++
+ 1 file changed, 2 insertions(+)
+
+commit d146678d103425b3da7ef393bc6d66f6ba4c5593
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Feb 26 13:52:50 2015 -0800
+
+ Update git.mk from upstream
+
+ git.mk | 35 ++++++++++++++++++++++++++++-------
+ 1 file changed, 28 insertions(+), 7 deletions(-)
+
+commit 5f541f8f7be82f29b77b481827deb212e12d53e4
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sat Feb 21 16:51:17 2015 +0300
+
+ Minor refactoring
+
+ src/hb-private.hh | 44 ++++++++++++++++++++++++++++----------------
+ 1 file changed, 28 insertions(+), 16 deletions(-)
+
+commit ef79bdf73bbfde1bfaa222834809d105ab7755b3
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sat Feb 21 16:49:15 2015 +0300
+
+ Minor
+
+ src/hb-ot-layout-common-private.hh | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+commit 68e04afbb1e1073c47474f7a4d6d2cacf7057f6f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sat Feb 21 16:30:28 2015 +0300
+
+ Typo
+
+ src/hb-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 55553699b38d6481fbfacd0a32fc266e55553b34
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sat Feb 21 16:29:08 2015 +0300
+
+ Minor
+
+ src/hb-private.hh | 2 --
+ 1 file changed, 2 deletions(-)
+
+commit 5175300fbaf4ff19b7d38c14c86331bb614b0390
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sat Feb 21 12:50:01 2015 +0300
+
+ [layout] Fix comparison of GlyphID and hb_codepoint_t
+
+ Before, the IntType::cmp functions providing this and was truncating
+ the hb_codepoint_t to 16bits before comparison. I have no idea how
+ this was never discovered, and I'm too lazy to try to reproduce this
+ with Pango (which uses non-16bit codepoint numbers for missing
+ glyphs).
+
+ src/hb-open-type-private.hh | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+commit 7cce809cb11e0ce65dbdab899779ece3dc337763
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sat Feb 21 12:41:08 2015 +0300
+
+ Remove unused (and wrong as of a few commits ago) cmp() function
+
+ src/hb-open-type-private.hh | 1 -
+ 1 file changed, 1 deletion(-)
+
+commit 8e3d4bae033bdec649676da26cfc3eb7610832a8
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sat Feb 21 12:31:59 2015 +0300
+
+ Minor
+
+ src/hb-ot-layout-common-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit f47cf1f12dd1fa3cd3aa84502139caca9d469af8
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sat Feb 21 11:45:22 2015 +0300
+
+ Minor
+
+ src/hb-ot-layout.cc | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 640b66c6348653bfd7cf88ea9caa2133c0eb949f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Feb 19 17:30:05 2015 +0300
+
+ [layout] If lookup has only one subtable, move the forward loop down
+ to subtable
+
+ I was hoping to see a nice speedup, but it resulted in a very
+ minor one.
+
+ src/hb-ot-layout.cc | 33 ++++++++++++++++++++++++++++++++-
+ 1 file changed, 32 insertions(+), 1 deletion(-)
+
+commit e2f50f2a7ebf9882ea89dc3f0c740e7fce964e37
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Feb 19 17:15:05 2015 +0300
+
+ [layout] Add apply_forward / apply_backward
+
+ src/hb-ot-layout.cc | 69
+ +++++++++++++++++++++++++++++++++++------------------
+ 1 file changed, 46 insertions(+), 23 deletions(-)
+
+commit 1d4a328472f094c0d75a062f6e176c6b1875cfdc
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Feb 19 11:33:30 2015 +0300
+
+ [layout] Remove unneeded return value from apply()
+
+ src/hb-ot-layout.cc | 12 +++++-------
+ 1 file changed, 5 insertions(+), 7 deletions(-)
+
+commit bbdd6fd21cc2e079defff7cb17c3eb8eff3f9e09
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Feb 19 17:03:02 2015 +0300
+
+ Minor simpilfy BEInt
+
+ src/hb-open-type-private.hh | 25 ++-----------------------
+ 1 file changed, 2 insertions(+), 23 deletions(-)
+
+commit 88a399acdc0fcb060803da0e7db56de2866981e3
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Feb 19 16:57:12 2015 +0300
+
+ Optimize IntType comparison to avoid branches for 16bit numbers
+
+ src/hb-open-type-private.hh | 9 ++++++++-
+ 1 file changed, 8 insertions(+), 1 deletion(-)
+
+commit 37de2d533126245774417234e3536fcfb24f3a6b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Feb 19 16:55:51 2015 +0300
+
+ Minor simplify IntType
+
+ src/hb-open-type-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit bd047d3b7f04d551c0a26bc0ce9b9d61481e34e1
+Author: Behdad Esfahbod <behdad@behdad.org>
+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 ++--
+ 3 files changed, 14 insertions(+), 2 deletions(-)
+
+commit b9d3f60520c022dc952e65a66eb138d1f7cae2e1
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Feb 19 10:42:41 2015 +0300
+
+ [layout] Minor
+
+ src/hb-ot-layout.cc | 15 ++++-----------
+ 1 file changed, 4 insertions(+), 11 deletions(-)
+
+commit 1a2322134a5d7bba990da28baf893b35879a5a7a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Feb 19 10:40:23 2015 +0300
+
+ [layout] Don't check glyph props against lookup flags when recursing
+
+ Shouldn't be needed. I have a hard time imagining this breaking any
+ legitimate use case.
+
+ src/hb-ot-layout-gpos-table.hh | 10 +---------
+ src/hb-ot-layout-gsub-table.hh | 10 +---------
+ 2 files changed, 2 insertions(+), 18 deletions(-)
+
+commit 095a1257cc3cc56b044b4cd842a92f0d0f933a50
+Author: Behdad Esfahbod <behdad@behdad.org>
+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-ot-layout-gpos-table.hh | 82
+ +----------------------------------
+ src/hb-ot-layout-gsub-table.hh | 72 ++-----------------------------
+ src/hb-ot-layout-gsubgpos-private.hh | 84
+ ++++++++++++------------------------
+ 4 files changed, 37 insertions(+), 206 deletions(-)
+
+commit 758fb20630f84c3d373cda37974b88f16c02995e
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Feb 18 13:45:03 2015 +0300
+
+ Remove unused macro
+
+ src/hb-ot-shape-complex-arabic-win1256.hh | 1 -
+ 1 file changed, 1 deletion(-)
+
+commit 40c58923cbf689c465f9b65334c455a9b7f71ab0
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Feb 18 13:18:46 2015 +0300
+
+ [layout] Refactor Lookup::dispatch()
+
+ src/hb-ot-layout-common-private.hh | 20 ++++++++++++++++++++
+ src/hb-ot-layout-gpos-table.hh | 12 +-----------
+ src/hb-ot-layout-gsub-table.hh | 12 +-----------
+ src/hb-ot-layout-gsubgpos-private.hh | 6 ------
+ 4 files changed, 22 insertions(+), 28 deletions(-)
+
+commit 70366f5d19df2e654f0933474fecf1aa16e27812
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Feb 18 13:09:54 2015 +0300
+
+ [layout] Refactor get_subtable()
+
+ src/hb-ot-layout-common-private.hh | 12 ++++++++++++
+ src/hb-ot-layout-gpos-table.hh | 4 ++--
+ src/hb-ot-layout-gsub-table.hh | 6 +++---
+ 3 files changed, 17 insertions(+), 5 deletions(-)
+
+commit f72f326aea6d1e93f63040730f7aecd401676c1c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Tue Feb 17 19:18:07 2015 +0300
+
+ Minor
+
+ src/hb-ot-layout-gpos-table.hh | 1 -
+ 1 file changed, 1 deletion(-)
+
+commit 8e36ccfd4f076888076ca176c055c18104af03b6
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Tue Feb 17 19:15:34 2015 +0300
+
+ [layout] Use dispatch() for add_coverage()
+
+ src/hb-ot-layout-gpos-table.hh | 12 ++----------
+ src/hb-ot-layout-gsub-table.hh | 12 ++----------
+ src/hb-ot-layout-gsubgpos-private.hh | 12 ++++++++++--
+ 3 files changed, 14 insertions(+), 22 deletions(-)
+
+commit 50b8dc79daffc7ef671dd5eedfea47f8d5e946f4
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Tue Feb 17 18:14:17 2015 +0300
+
+ [layout] Add may_dispatch()
+
+ No functional change right now.
+
+ src/hb-ot-layout-gpos-table.hh | 7 +++++++
+ src/hb-ot-layout-gsub-table.hh | 6 ++++++
+ src/hb-ot-layout-gsubgpos-private.hh | 12 ++++++++++++
+ 3 files changed, 25 insertions(+)
+
+commit de2118ed7a998a1df9b28fd1be96b4af89ed82c3
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Tue Feb 17 17:27:44 2015 +0300
+
+ Make sanitize() a const method
+
+ This makes a lot of code safer. We only try modifying the object
+ in one
+ 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-ot-layout-common-private.hh | 58 ++++++++++++-------
+ src/hb-ot-layout-gdef-table.hh | 30 ++++++----
+ src/hb-ot-layout-gpos-table.hh | 108
+ +++++++++++++++++++++++------------
+ 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 +-
+ 14 files changed, 296 insertions(+), 160 deletions(-)
+
+commit 6759ed95a3bec2874826376b68ebff19ba277ef2
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Tue Feb 17 16:05:30 2015 +0300
+
+ Minor
+
+ src/hb-ot-layout-gpos-table.hh | 6 ++----
+ src/hb-ot-layout-gsub-table.hh | 6 ++----
+ 2 files changed, 4 insertions(+), 8 deletions(-)
+
+commit 6b599dac1f814a3c900300241d4c492a8f8b66d2
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Tue Feb 17 16:04:07 2015 +0300
+
+ Remove unnecessary check in sanitize
+
+ src/hb-ot-layout-gpos-table.hh | 2 --
+ src/hb-ot-layout-gsub-table.hh | 2 --
+ 2 files changed, 4 deletions(-)
+
+commit 365576d246949f9d587e90cf0539dc0381e4d0a3
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Jan 29 13:59:42 2015 +0100
+
+ [layout] Allocate iters in the context
+
+ Can be further optimized, but I think I didn't break anything.
+
+ Saves another 3% off Roboto shaping.
+
+ src/hb-ot-layout-gpos-table.hh | 18 ++++++------------
+ src/hb-ot-layout-gsubgpos-private.hh | 21 +++++++++++++--------
+ 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
+
+ [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 ++-
+ 3 files changed, 29 insertions(+), 20 deletions(-)
+
+commit b051be542a8945ec14b0192bbc285f3e1a78c8f1
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Jan 29 13:40:39 2015 +0100
+
+ [lookup] Add skippy_iter.reset()
+
+ Towards reducing the cost of initializing skippy_iter()
+
+ src/hb-ot-layout-gpos-table.hh | 18 ++++++++++++------
+ src/hb-ot-layout-gsubgpos-private.hh | 27 ++++++++++++++++++---------
+ 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
+
+ [layout] Shuffle code around
+
+ src/hb-ot-layout-gsubgpos-private.hh | 111
+ ++++++++++++++++++-----------------
+ 1 file changed, 56 insertions(+), 55 deletions(-)
+
+commit 696266981df5ef6c62ad0115133dad1d6c1d9acc
+Author: Behdad Esfahbod <behdad@behdad.org>
+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 +-
+ 3 files changed, 23 insertions(+), 62 deletions(-)
+
+commit 1f038eec3c0dd6331036f795614fe1ddcbf613b0
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Jan 29 13:05:25 2015 +0100
+
+ [layout] Fix backward reject()
+
+ Has no functional effect since reject was never used with
+ match_glyph_data.
+
+ src/hb-ot-layout-gsubgpos-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 37d13acd8d414a4b53fac0152addfadecf755cd4
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Jan 29 11:38:01 2015 +0100
+
+ [layout] Remove some unnecessary checks in skippy
+
+ src/hb-ot-layout-gpos-table.hh | 3 ---
+ src/hb-ot-layout-gsubgpos-private.hh | 9 ++-------
+ 2 files changed, 2 insertions(+), 10 deletions(-)
+
+commit baa14e18148d3f5493f78b4fe9e0c835a01f50f7
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Jan 29 11:08:43 2015 +0100
+
+ [lookup] Don't initialize skippy if coverage match fails
+
+ Currently:
+
+ - Initializing skippy is very expensive,
+
+ - Our lookup accelerator (using set-digests) can be very ineffecite,
+
+ As such, we end up many times initializing skippy but then failing
+ coverage check. Reordering fixes that.
+
+ When, later, we fix our accelerator to have truly small false-positive
+ rate (for example by using the frozen-sets), then we might want to
+ reorder these checks such that we wouldn't calculate coverage number
+ if skippy is going to fail.
+
+ This shows a 5% speedup with Roboto already.
+
+ src/hb-ot-layout-gpos-table.hh | 15 ++++++---------
+ 1 file changed, 6 insertions(+), 9 deletions(-)
+
+commit 7788993bc19bf122f1e143ab64cc1da2ed1865a3
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Jan 28 23:01:12 2015 -0800
+
+ [layout] Use setter method to set c->lookup_props
+
+ src/hb-ot-layout-gpos-table.hh | 2 +-
+ src/hb-ot-layout-gsub-table.hh | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+commit f4ee48fd7b312550faf9b0be4cd1b2f2849dd08d
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Jan 28 22:53:54 2015 -0800
+
+ [layout] Remove unused wrapper method
+
+ src/hb-ot-layout-gsubgpos-private.hh | 2 --
+ 1 file changed, 2 deletions(-)
+
+commit 7b7129c7a997def599fb4d2ba05fda40d27aed20
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Jan 28 21:46:07 2015 -0800
+
+ Add hb_frozen_set_t
+
+ I experimented with replacing use of hb_set_digest_t with this new
+ hb_frozen_set_t, hoping to get a huge speedup for busy lookups
+ (like kern lookup in Roboto), but I only got 6% speendup in Roboto
+ and 4% in NotoNastaliqUrduDraft :(.
+
+ src/hb-set-private.hh | 57
+ ++++++++++++++++++++++++++++++++++++++++++++++++++-
+ 1 file changed, 56 insertions(+), 1 deletion(-)
+
+commit 241eac9559465fa79f396570af4e87f455b7e9d5
+Author: Behdad Esfahbod <behdad@behdad.org>
+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 +++---
+ 3 files changed, 11 insertions(+), 5 deletions(-)
+
+commit e2d4e8480d85436a3acad8145acac345ed593f5a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Jan 28 20:29:48 2015 -0800
+
+ [util] Add convenience "make lib" target
+
+ util/Makefile.am | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+commit faaae64bf28abdcdd15185374bc09a3809794118
+Merge: 7888a6b 9768e65
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Feb 25 15:34:34 2015 -0800
+
+ Merge pull request #85 from KonstantinRitt/define_inline
+
+ Fix build with MSVC on CE
+
+commit 9768e651be0561f07d6f38c3ed8bc5ee04882990
+Author: Konstantin Ritt <ritt.ks@gmail.com>
+Date: Sat Feb 14 00:58:51 2015 +0400
+
+ Fix build with MSVC on CE
+
+ This code is C++ only. There isn't a single C++ compiler that fails to
+ understand the "inline" keyword, since it's required by C++98. Any
+ compiler older than C++98 is likely to choke on the template usage
+ further down, so this isn't necessary.
+
+ Moreover, the C++ standard says you cannot define macros.
+ [lib.macro.names] says "Nor shall such a translation unit define
+ macros
+ for names lexically identical to keywords." -- technically, it's a
+ promise that the Standard Library headers won't do it, the wording
+ means
+ that the entire translation unit won't do it, which implies no source
+ can do it.
+
+ MSVC complains about it:
+ fatal error C1189: #error : The C++ Standard Library forbids
+ macroizing
+ keywords. Enable warning C4005 to find the forbidden macro.
+
+ Author: Thiago Macieira <thiago.macieira@intel.com>
+
+ src/hb-private.hh | 10 ----------
+ 1 file changed, 10 deletions(-)
+
+commit 7888a6b07a9922cedd3e0d235959058e0011357b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Jan 28 12:40:40 2015 -0800
+
+ [ft] Handle negative scales with vertical writing
+
+ src/hb-ft.cc | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+commit 982d94eaa2a377616f22f39427e5ed9f1ce43263
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Jan 28 10:51:33 2015 -0800
+
+ [coretext] Don't generate notdef glyph for default-ignorables
+
+ As discovered on Chrome Mac:
+ https://code.google.com/p/chromium/issues/detail?id=452326
+
+ src/hb-coretext.cc | 2 ++
+ src/hb-ot-shape.cc | 2 +-
+ 2 files changed, 3 insertions(+), 1 deletion(-)
+
+commit 6917a045fd8d16952cad75fda8b291b11e1d3564
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Jan 28 10:43:32 2015 -0800
+
+ [coretext] Unbreak glyph positioning in presence of notdef runs
+
+ As discovered on Chrome Mac:
+ https://code.google.com/p/chromium/issues/detail?id=452326
+
+ This was originally broken in:
+
+ commit 5a0eed3b50629be4826e4e9428f2c3255195395d
+ Author: Behdad Esfahbod <behdad@behdad.org>
+ Date: Mon Aug 11 23:47:16 2014 -0400
+
+ [coretext] Implement vertical shaping
+
+ src/hb-coretext.cc | 35 +++++++++++++++++++++++++++--------
+ 1 file changed, 27 insertions(+), 8 deletions(-)
+
+commit 1eff4350239b0768e1042b52db9fb1c0d266f96a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Tue Jan 27 12:26:04 2015 -0800
+
+ Minor optimization
+
+ src/hb-ot-shape-normalize.cc | 9 +++++----
+ 1 file changed, 5 insertions(+), 4 deletions(-)
+
+commit 675956aca01fc4e005a338af43d1c1f4f938abd1
+Author: Konstantin Ritt <ritt.ks@gmail.com>
+Date: Tue Jan 27 11:23:07 2015 +0400
+
+ Do not leak hb_language_t on hb_language_item_t destruction
+
+ src/hb-common.cc | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit b306f9674a599da50754d24fa5aefcb6bba04420
+Author: Konstantin Ritt <ritt.ks@gmail.com>
+Date: Tue Jan 27 20:08:41 2015 +0400
+
+ Minor improvement to HB_SHAPER_DATA_DESTROY
+
+ src/hb-shaper-private.hh | 7 +++----
+ 1 file changed, 3 insertions(+), 4 deletions(-)
+
+commit 61820bc4ca1f02433db4be7c81f27cf97e2bd519
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Mon Jan 26 14:25:52 2015 -0800
+
+ [API] Add hb_buffer_add_latin1()
+
+ This is by no ways to promote non-Unicode encodings. This is an entry
+ point that takes Unicode codepoints that happen to all be the first
+ 256 characters and hence fit in 8bit strings. This is useful eg
+ in Chrome
+ where strings that can fit in 8bit are implemented that way, and this
+ avoids copying into UTF-8 or UTF-16.
+
+ Perhaps we should rename this to hb_buffer_add_codepoints8().
+ I'm also
+ curious if anyone would be really interested in
+ hb_buffer_add_codepoints16().
+
+ Please discuss!
+
+ src/hb-buffer.cc | 36 +++++++++++++++++++++++++-------
+ src/hb-buffer.h | 8 ++++++++
+ src/hb-utf-private.hh | 57
+ ++++++++++++++++++++++++++++++++++++++-------------
+ 3 files changed, 80 insertions(+), 21 deletions(-)
+
+commit 78c6e86c04f12154c88b9f9264d0bd50b721699b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Mon Jan 26 14:08:36 2015 -0800
+
+ Fix hb_buffer_add_codepoints to actually NOT validate
+
+ src/hb-buffer.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 70c25ee215635db23eb0757641bd372940c0d85d
+Merge: 28f5e0b f3537b6
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sun Jan 25 13:06:03 2015 -0800
+
+ Merge pull request #81 from KonstantinRitt/fixes/build/win8phone
+
+ winrt_buildfixes
+
+commit f3537b620b0a7392ea27f01f465c5ba79459c858
+Author: Konstantin Ritt <ritt.ks@gmail.com>
+Date: Sun Jan 25 09:50:51 2015 +0400
+
+ Move some code around
+
+ Just to keep Windows specific workarounds in a single place.
+
+ src/hb-private.hh | 25 ++++++++++++-------------
+ 1 file changed, 12 insertions(+), 13 deletions(-)
+
+commit afb62d88d78cacb6b881aaf329a654fd32f5ae29
+Author: Konstantin Ritt <ritt.ks@gmail.com>
+Date: Sun Jan 25 08:16:26 2015 +0400
+
+ Do not define MemoryBarrier on WinCE
+
+ There is a _HBMemoryBarrier() wrapper function that emulates
+ MemoryBarrier() behavior when it is not defined.
+
+ src/hb-private.hh | 1 -
+ 1 file changed, 1 deletion(-)
+
+commit 7db326a15b173c0d101adc608bf551a628c65dcd
+Author: Konstantin Ritt <ritt.ks@gmail.com>
+Date: Sun Jan 25 08:13:24 2015 +0400
+
+ Fix build on WinRT
+
+ There is no environment (like WinCE) and the basic version
+ of InitializeCriticalSection is unsupported.
+
+ https://codereview.qt-project.org/#/c/92496/
+
+ src/hb-mutex-private.hh | 4 ++++
+ src/hb-private.hh | 2 ++
+ 2 files changed, 6 insertions(+)
+
+commit 28f5e0b2f41670617bd778660364bbd58b1b68f2
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Jan 23 12:45:35 2015 -0800
+
+ 0.9.38
+
+ NEWS | 23 +++++++++++++++++++++++
+ configure.ac | 2 +-
+ 2 files changed, 24 insertions(+), 1 deletion(-)
+
+commit a319d0777b746a2bbe5cd5a206172f1580da3379
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Jan 23 12:44:24 2015 -0800
+
+ [ft] Handle negative x_scale / y_scale
+
+ src/hb-ft.cc | 12 ++++++++++--
+ 1 file changed, 10 insertions(+), 2 deletions(-)
+
+commit b0b38bb892473d9a65e06dd3b4713da39f92bef9
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Jan 21 19:19:33 2015 -0800
+
+ [coretext] Fix positioning of notdef
+
+ src/hb-coretext.cc | 19 ++++++++++---------
+ 1 file changed, 10 insertions(+), 9 deletions(-)
+
+commit 70622e5089c01ea16fd9deed11cb39d43145c121
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Jan 21 18:50:57 2015 -0800
+
+ [coretext] Fix scaling
+
+ Before we were not accounting for possible differences in x_scale and
+ y_scale, as well as the signs of those. All should be in good shape
+ now.
+
+ src/hb-coretext.cc | 26 +++++++++++++++++++-------
+ 1 file changed, 19 insertions(+), 7 deletions(-)
+
+commit 221ba02b0816584a02471037edae7cec9c1b8acc
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Jan 21 16:42:09 2015 -0800
+
+ [coretext] Use vertical advance for notdef in vertical direction
+
+ src/hb-coretext.cc | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+commit 7988da24c507ee310772f72cc5bcfd3c0a1187a0
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Jan 21 18:33:50 2015 -0800
+
+ Add convenience make target "make lib" in src/
+
+ src/Makefile.am | 3 +++
+ 1 file changed, 3 insertions(+)
+
+commit 31d48dd919e3b4a0bec5ede384f76db9b44f4d71
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Jan 21 01:57:44 2015 -0800
+
+ Add README.python
+
+ README.python | 26 ++++++++++++++++++++++++++
+ 1 file changed, 26 insertions(+)
+
+commit ca1c2813dd0b082a8c418bd3edd3f6cba97bd5f0
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Jan 21 01:51:48 2015 -0800
+
+ [bindings] Add README.python
+
+ Makefile.am | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit cd4eb96abb90a84b42e9b288e39bad759e4411a0
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Tue Jan 20 12:30:45 2015 -0800
+
+ [util] Add --font-size to hb-shape
+
+ Also makes hb-view to use 8 bits of subpixel precision and shape at
+ requested size, instead of always shaping at upem and scaling results.
+
+ util/hb-ot-shape-closure.cc | 2 +-
+ util/hb-shape.cc | 2 +-
+ util/hb-view.cc | 5 ++++-
+ util/helper-cairo.cc | 16 ++++++++--------
+ util/helper-cairo.hh | 5 ++---
+ util/main-font-text.hh | 4 ++--
+ util/options.cc | 44
+ +++++++++++++++++++++++++++++++++++++++++---
+ util/options.hh | 16 ++++++++++++----
+ util/view-cairo.cc | 2 +-
+ util/view-cairo.hh | 8 ++++----
+ 10 files changed, 76 insertions(+), 28 deletions(-)
+
+commit 5789ca69d7464bab5fa0c5bdf404f3afaa490faf
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Jan 9 14:22:01 2015 -0800
+
+ [util] Minor
+
+ util/options.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 67dfa8c7c2f2e9040a9c60c680f739ada4a35fb5
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Mon Jan 19 17:00:31 2015 -0800
+
+ When matching second glyph of kerning pairs, use bsearch
+
+ Roboto has glyphs (like 'F') that have 200 kerning pairs.
+ Add a handcoded bsearch instead of previous linear search.
+
+ This doesn't show much speedup though, apparently we spend the
+ bulk of the time somewhere before here.
+
+ src/hb-ot-layout-gpos-table.hh | 21 ++++++++++++++++-----
+ 1 file changed, 16 insertions(+), 5 deletions(-)
+
+commit e9f5c65be027eb7759ab819e267e24dff3b017b6
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Mon Jan 19 14:42:11 2015 -0800
+
+ [bindings] Minor
+
+ src/sample.py | 2 ++
+ 1 file changed, 2 insertions(+)
+
+commit 3704628d1f124234324b5f2bdd5fdd61c14c7801
+Merge: 1aaa7d6 5eb939d
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Mon Jan 19 16:15:00 2015 -0800
+
+ Merge pull request #77 from roozbehp/master
+
+ Change New Tai Lue shaping engine from SEA to default
+
+commit 5eb939ddfe9ef217da2e48d7d0f1f4b7501714ad
+Author: Roozbeh Pournader <roozbeh@google.com>
+Date: Sun Jan 18 14:30:08 2015 -0800
+
+ Change New Tai Lue shaping engine from SEA to default
+
+ This is to reflect the UTC decision to change the encoding model of
+ New Tai Lue from logical to visual to be similar to Thai, Lao, and
+ Tai Viet: http://www.unicode.org/L2/L2014/14250.htm#141-C26
+
+ The visual encoding is already the current practice of encoding New
+ Tai Lue on the web anyway:
+ http://www.unicode.org/L2/L2014/14195-newtailue.txt
+
+ Fixes behdad/harfbuzz#66.
+
+ src/hb-ot-shape-complex-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 1aaa7d6799b42b392dd191d3c12011721ef99e74
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sat Jan 17 20:16:56 2015 -0800
+
+ [indic] Fix out-of-bounds access
+
+ src/gen-indic-table.py | 2 +-
+ src/hb-ot-shape-complex-indic-table.cc | 36
+ +++++++++++++++++-----------------
+ 2 files changed, 19 insertions(+), 19 deletions(-)
+
+commit 238d6a38f2ceb7d8dceec9365a823f032b3b9f7d
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Jan 7 10:51:44 2015 -0800
+
+ [bindings] Update sample.py
+
+ src/sample.py | 9 ++++++---
+ 1 file changed, 6 insertions(+), 3 deletions(-)
+
+commit 2cd5323531dcd800549b2cb1cb51d708e72ab2d8
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Tue Jan 6 19:16:38 2015 -0800
+
+ [bindings] Use hb_glib_blob_create() in sample
+
+ hb_blob_create() is considered C-only API.
+
+ src/hb-blob.cc | 8 ++++----
+ src/sample.py | 19 +++++++++----------
+ 2 files changed, 13 insertions(+), 14 deletions(-)
+
+commit 0ef179e2dc040c13497af847b8c1cec846dbdbf9
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Tue Jan 6 16:58:33 2015 -0800
+
+ [glib] Add hb_glib_blob_create() that takes GBytes
+
+ src/hb-glib.cc | 11 +++++++++++
+ src/hb-glib.h | 3 +++
+ 2 files changed, 14 insertions(+)
+
+commit b91904a40da6287f84bc79de60674fa57232ec09
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Tue Jan 6 15:43:14 2015 -0800
+
+ [bindings] Replace deprecated allow-none with optional and nullable
+
+ src/hb-blob.cc | 4 ++--
+ src/hb-shape.cc | 2 +-
+ src/hb-unicode.cc | 2 +-
+ 3 files changed, 4 insertions(+), 4 deletions(-)
+
+commit 81a31f3eff44a85bb2160d51156a01a18f0a97df
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Tue Jan 6 15:37:31 2015 -0800
+
+ [bindings] Make sample Python 2/3 compatible
+
+ src/sample.py | 15 ++++++++++++++-
+ 1 file changed, 14 insertions(+), 1 deletion(-)
+
+commit b632e7997d9cb6e4782cab6d8c62e8e5edaa4cb0
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Tue Jan 6 14:05:26 2015 -0800
+
+ Fix up gobject-introspection a bit
+
+ Minimal shaping works now!
+
+ src/hb-blob.cc | 6 +++---
+ src/hb-buffer.cc | 2 +-
+ src/sample.py | 34 ++++++++++++++++++++++++++++------
+ 3 files changed, 32 insertions(+), 10 deletions(-)
+
+commit 3d1a666a8629a8502a2bcf23ab943e2b39a0da92
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Mon Jan 5 14:43:13 2015 -0800
+
+ Remove hardcoded ICU include paths.
+
+ ICU exports them using LOCAL_EXPORT_C_INCLUDE_DIRS.
+
+ https://android-review.googlesource.com/#/c/121311/
+
+ Android.mk | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+commit 8cb41cb9508eb1bb6319e92f900cfe5e8a131be3
+Merge: 365c03f fb85d61
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sun Jan 4 20:32:18 2015 -0800
+
+ Merge pull request #76 from cpeterso/cpeterso/Wunused-function
+
+ Add #ifdef HB_USE_ATEXIT to fix -Wunused-function warnings
+
+commit fb85d618f5883458bacf0ecb0894772291a2d738
+Author: Chris Peterson <cpeterson@mozilla.com>
+Date: Sun Jan 4 19:31:10 2015 -0800
+
+ Add #ifdef HB_USE_ATEXIT to fix -Wunused-function warnings
+
+ src/hb-common.cc | 2 +-
+ src/hb-ft.cc | 4 +++-
+ src/hb-shape.cc | 4 +++-
+ src/hb-shaper.cc | 4 +++-
+ 4 files changed, 10 insertions(+), 4 deletions(-)
+
+commit 365c03fc2bcdb4098314a0e123c46018fb882586
+Merge: c36c4a9 d1897a9
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sat Jan 3 21:55:30 2015 -0800
+
+ Merge pull request #75 from cpeterso/cpeterso/Wunused-value
+
+ Fix hb_atomic_ptr_cmpexch -Wunused-value warnings
+
+commit d1897a98d8da40cffb57c07099a9a93cfeaacc36
+Author: Chris Peterson <cpeterson@mozilla.com>
+Date: Sat Jan 3 19:46:19 2015 -0800
+
+ Fix hb_atomic_ptr_cmpexch -Wunused-value warnings
+
+ src/hb-common.cc | 2 +-
+ src/hb-icu.cc | 4 +---
+ 2 files changed, 2 insertions(+), 4 deletions(-)
+
+commit c36c4a9924609df648e62e47fa017b19b844fd98
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Jan 2 14:09:23 2015 -0800
+
+ Add missing va_end()
+
+ Fixes https://github.com/behdad/harfbuzz/pull/74
+
+ util/options.cc | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit f34aaba8687a20794835e2dc878c52d1b53e6f85
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sun Dec 28 18:56:15 2014 -0800
+
+ [ft] Don't set font ppem
+
+ For discussion see:
+
+ http://lists.freedesktop.org/archives/harfbuzz/2012-April/001905.html
+
+ Over time we have had added NO_HINTING all over the place in hb-ft.
+ Finish it off.
+ Not setting ppem on hb-font disables get_contour_point() calls which
+ is good anyway.
+
+ See comments in the commit.
+
+ src/hb-ft.cc | 9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+commit 350f3a02ce225e5d78db8ac96de1351ff9f96dd5
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sun Dec 28 17:44:26 2014 -0800
+
+ [ft] Add hb_ft_face_create_referenced() and
+ hb_ft_font_create_referenced()
+
+ When I originally wrote hb-ft, FreeType objects did not support
+ reference
+ counting. As such, hb_ft_face_create() and hb_ft_font_create() had a
+ "destroy" callback and client was responsible for making sure
+ FT_Face is
+ kept around as long as the hb-font/face are alive.
+
+ However, since this was not clearly documented, some clienets didn't
+ correctly did that. In particular, some clients assumed that
+ it's safe
+ to destroy FT_Face and then hb_face_t. This, indeed, used to work,
+ until
+ 45fd9424c723f115ca98995b8f8a25185a6fc71d, which make face destroy
+ access
+ font tables.
+
+ Now, I fixed that issue in 395b35903e052aecc97d0807e4f813c64c0d2b0b
+ since
+ the access was not needed, but the problem remains that not all
+ clients
+ handle this correctly. See:
+
+ https://bugs.freedesktop.org/show_bug.cgi?id=86300
+
+ Fortunately, FT_Reference_Face() was added to FreeType in 2010,
+ and so we
+ can use it now. Originally I wanted to change hb_ft_face_create() and
+ hb_ft_font_create() to reference the face if destroy==NULL was
+ passed in.
+ That would improve pretty much all clients, with little undesired
+ effects.
+ Except that FreeType itself, when compiled with HarfBuzz support,
+ calls
+ hb_ft_font_create() with destroy==NULL and saves the resulting
+ hb-font on
+ the ft-face (why does it not free it immediately?). Making hb-face
+ reference ft-face causes a cycling reference there. At least,
+ that's my
+ current understanding.
+
+ At any rate, a cleaner approach, even if it means all clients will
+ need a
+ change, is to introduce brand new API. Which this commit does.
+
+ Some comments added to hb-ft.h, hoping to make future clients
+ make better
+ choices.
+
+ Fixes https://bugs.freedesktop.org/show_bug.cgi?id=75299
+
+ configure.ac | 4 ++--
+ src/hb-ft.cc | 32 ++++++++++++++++++++++++++++++++
+ src/hb-ft.h | 59
+ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
+ 3 files changed, 92 insertions(+), 3 deletions(-)
+
+commit 9a3b74884b2e41c7040611030f4336f13d18fd3e
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sun Dec 28 17:27:39 2014 -0800
+
+ Remove redundant check for FT_Face_GetCharVariantIndex
+
+ We require FreeType >= 2.8.3. This symbol was introduced earlier
+ than that.
+
+ configure.ac | 9 +--------
+ src/hb-ft.cc | 2 --
+ 2 files changed, 1 insertion(+), 10 deletions(-)
+
+commit 1226b2e930aa456cc05bbe621c96f4286a95cff6
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sun Dec 28 17:04:23 2014 -0800
+
+ Fix FreeType version check
+
+ configure.ac | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+commit affacf2f37db767ab8df7f2db6cd9e0e9b0a2b8a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sun Dec 28 16:20:31 2014 -0800
+
+ [ft] Open blob in READONLY mode
+
+ HB_MEMORY_MODE_READONLY_MAY_MAKE_WRITABLE is deprecated and fairly
+ useless now.
+
+ src/hb-ft.cc | 6 +-----
+ 1 file changed, 1 insertion(+), 5 deletions(-)
+
+commit 395b35903e052aecc97d0807e4f813c64c0d2b0b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sun Dec 28 16:03:26 2014 -0800
+
+ Avoid accessing layout tables at face destruction
+
+ "Fixes" https://bugs.freedesktop.org/show_bug.cgi?id=86300
+
+ Based on discussion someone else who had a similar issue, most
+ probably
+ the user is releasing FT_Face before destructing hb_face_t /
+ hb_font_t.
+ While that's a client bug, and while we can (and should) use FreeType
+ refcounting to help avoid that, it happens that we were accessing
+ the table when we didn't really have to. Avoid that.
+
+ src/hb-ot-layout-private.hh | 3 +--
+ src/hb-ot-layout.cc | 4 ++--
+ src/hb-ot-shape-complex-arabic-fallback.hh | 2 +-
+ 3 files changed, 4 insertions(+), 5 deletions(-)
+
+commit 7d5e7613ced3dd39d05df83ca7e8952cbecd68f6
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Dec 18 18:22:21 2014 -0800
+
+ Fail blob creation if length overflows or is too large
+
+ Fail if blob start plus length overflows; or if blob length
+ is greater than 2GB. It takes a while for fonts to get to that
+ size. In the mean time, it protects against bugs like this:
+
+ http://www.icu-project.org/trac/ticket/11450
+
+ Also avoids some weird issues with 32bit vs 64bit systems
+ as we accept length as unsigned int. As such, a length of
+ -1 will cause overflow on 32bit machines, but happily
+ accepted on a 64bit machine. Avoid that.
+
+ src/hb-blob.cc | 5 ++++-
+ test/api/test-blob.c | 3 +++
+ 2 files changed, 7 insertions(+), 1 deletion(-)
+
+commit d5a5052098b0aa79ff55c235e61a9db477c4120f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Dec 18 18:09:41 2014 -0800
+
+ Assert that blob length doesn't overflow address.
+
+ This will crash now, if blob was created with wrong length.
+ Check for that coming next commit.
+
+ src/hb-open-type-private.hh | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 66e37409b3bc1eddc86704ae26d9176677ce6aa6
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Dec 17 12:09:17 2014 -0800
+
+ 0.9.37
+
+ NEWS | 8 ++++++++
+ configure.ac | 2 +-
+ 2 files changed, 9 insertions(+), 1 deletion(-)
+
+commit 093c520de506aec74f3fb1e195c0ca85813424dd
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Dec 12 21:07:53 2014 -0800
+
+ [otlayout] Mark variables that are C arrays as opposed to OT::ArrayOf
+
+ src/hb-ot-layout-gpos-table.hh | 24 +++++++--------
+ src/hb-ot-layout-gsubgpos-private.hh | 60
+ ++++++++++++++++++------------------
+ 2 files changed, 42 insertions(+), 42 deletions(-)
+
+commit 9df0a520306a491f973d42965597bfda6023e508
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Dec 12 20:54:28 2014 -0800
+
+ [otlayout] Avoid invalid access with Context format 3
+
+ src/hb-ot-layout-gsubgpos-private.hh | 2 ++
+ 1 file changed, 2 insertions(+)
+
+commit 295ef1dd5229f47d8e0eb5b4eb48c90a6b470073
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Dec 12 20:43:18 2014 -0800
+
+ [ot] Debug get_coverage
+
+ src/hb-ot-layout-gsubgpos-private.hh | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+commit 00f6a8e334ec4c586e4e633a95b411ccb50306d3
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Dec 12 20:36:49 2014 -0800
+
+ [ot] Print format in dispatch trace
+
+ src/hb-ot-layout-gpos-table.hh | 16 ++++++++--------
+ src/hb-ot-layout-gsub-table.hh | 14 +++++++-------
+ src/hb-ot-layout-gsubgpos-private.hh | 8 ++++----
+ 3 files changed, 19 insertions(+), 19 deletions(-)
+
+commit 5c7d6f02d71362c2b192a7d96e6181977682921c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Dec 12 20:28:49 2014 -0800
+
+ Minor
+
+ src/hb-private.hh | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+commit 153beebba9b76901b8b62b90ba0dc69462ae2090
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Dec 12 19:46:09 2014 -0800
+
+ [ot] Make sure all toplevel tables have tableTag
+
+ src/hb-open-file-private.hh | 2 ++
+ src/hb-ot-hhea-table.hh | 2 ++
+ src/hb-ot-hmtx-table.hh | 2 ++
+ 3 files changed, 6 insertions(+)
+
+commit 282b13f9b4d86b091714de7fbddc94b3e3ff3d91
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Dec 12 19:32:46 2014 -0800
+
+ [sanitize] Improve debug output some more
+
+ src/hb-open-type-private.hh | 30 ++++++++++++++++--------------
+ 1 file changed, 16 insertions(+), 14 deletions(-)
+
+commit 0766ee1f4e6046598a2e8fb1b167c3942b4a87a0
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Dec 12 18:23:20 2014 -0800
+
+ [sanitize] Improve debug output
+
+ src/hb-open-type-private.hh | 20 ++++++++++----------
+ 1 file changed, 10 insertions(+), 10 deletions(-)
+
+commit e6f80fa1044243898c402ec6a59d6c1b5420be53
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Dec 10 12:05:24 2014 -0800
+
+ [indic] Allow ZWJ/ZWNJ before SM
+
+ In Oriya, a ZWJ/ZWNJ might be added before candrabindu to encourage
+ or stop ligation of the candrabindu. This is clearly specified in
+ the Unicode section on Oriya. Allow it there. Note that Uniscribe
+ doesn't allow this.
+
+ Micro tests added using Noto Sans Oriya draft.
+
+ No changes in numbers. Currently at:
+
+ 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: 1048147 out of 1048334 tests passed. 187 failed
+ (0.0178378%)
+ ORIYA: 42320 out of 42329 tests passed. 9 failed (0.021262%)
+ SINHALA: 271662 out of 271847 tests passed. 185 failed (0.068053%)
+ TAMIL: 1091753 out of 1091754 tests passed. 1 failed (9.15957e-05%)
+ TELUGU: 970555 out of 970573 tests passed. 18 failed (0.00185457%)
+
+ src/hb-ot-shape-complex-indic-machine.rl | 2 +-
+ test/shaping/Makefile.am | 1 +
+ .../sha1sum/5028afb650b1bb718ed2131e872fbcce57828fff.ttf | Bin 0 ->
+ 4720 bytes
+ test/shaping/fonts/sha1sum/MANIFEST | 1 +
+ test/shaping/tests/MANIFEST | 1 +
+ test/shaping/tests/indic-joiner-candrabindu.tests | 2 ++
+ 6 files changed, 6 insertions(+), 1 deletion(-)
+
+commit c0e95abc5f3f14121483b71f10837828a3a1d73a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Nov 20 14:42:24 2014 -0800
+
+ 0.9.36
+
+ NEWS | 12 ++++++++++++
+ configure.ac | 2 +-
+ 2 files changed, 13 insertions(+), 1 deletion(-)
+
+commit fde3e4a423871463c883cb969e99c29cb6f69f6b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Oct 29 11:23:08 2014 -0700
+
+ In hb_ot_collect_glyphs(), don't recurse to a lookup more than once
+
+ Otherwise, we might process a lookup thousands of times, with no
+ benefit. This pathological case was hit by Noto Nastaliq Urdu Draft
+ in Firefox's code to determine whether space glyph is involved in
+ any GSUB/GPOS rules. A test page is at http://behdad.org/urdu
+
+ See:
+ https://bugzilla.mozilla.org/show_bug.cgi?id=1090869
+
+ src/hb-ot-layout-gsubgpos-private.hh | 17 ++++++++++++++++-
+ 1 file changed, 16 insertions(+), 1 deletion(-)
+
+commit 5a5640d8506ccfc99fd119e89e829170d1fea421
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Tue Oct 14 21:26:13 2014 -0700
+
+ Move code around
+
+ src/hb-open-type-private.hh | 50
+ ++++++++++++++++++++++-----------------------
+ 1 file changed, 25 insertions(+), 25 deletions(-)
+
+commit 666b42f73bd1f516657b206ef738108825bf239f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Tue Oct 14 21:24:59 2014 -0700
+
+ Move macros around
+
+ Fixes https://bugs.freedesktop.org/show_bug.cgi?id=84491
+
+ src/hb-open-type-private.hh | 63
+ ++++++++++++++++++++++++++++++++++++++-------
+ src/hb-private.hh | 41 -----------------------------
+ src/hb-uniscribe.cc | 6 +++++
+ 3 files changed, 60 insertions(+), 50 deletions(-)
+
+commit 5c87120b8178566ddae99d9825edc24f9b87ea3d
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Tue Oct 14 20:07:31 2014 -0700
+
+ Fix misc warnings
+
+ Fixes https://github.com/behdad/harfbuzz/pull/51
+
+ src/hb-buffer-deserialize-json.rl | 4 ++--
+ src/hb-ot-layout-gsub-table.hh | 2 +-
+ src/hb-private.hh | 6 +++---
+ 3 files changed, 6 insertions(+), 6 deletions(-)
+
+commit a1f27ac3c48cfe6d532dc422cf256952fea472ed
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Oct 2 16:54:33 2014 -0400
+
+ Update test expectation for previous commit
+
+ test/shaping/tests/arabic-fallback-shaping.tests | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 8afaf096870d7895cf2fffb6438b02c0ad1b6c52
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Oct 2 16:40:41 2014 -0400
+
+ [ft] Add NO_HINTING in a couple other places
+
+ src/hb-ft.cc | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 7228011411f0e490ad1ba9894dd0d576823903ea
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Oct 1 18:58:43 2014 -0400
+
+ [travis] Fix clang again
+
+ .travis.yml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 406a020e5228d4a04da6282f5a75165bab7a483e
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Oct 1 18:54:55 2014 -0400
+
+ [travis] Fail build if coveralls fails
+
+ .travis.yml | 15 ++-------------
+ 1 file changed, 2 insertions(+), 13 deletions(-)
+
+commit a8aa20260dbd9af9cbcc7d545fa8b41b07aae276
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Oct 1 18:48:40 2014 -0400
+
+ [travis] Only run coveralls under gcc
+
+ .travis.yml | 5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
+
+commit 5de0407337d630117e424b7c715b7cbd432f4ef9
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Oct 1 18:18:25 2014 -0400
+
+ Help clang with gcov
+
+ src/check-defs.sh | 2 +-
+ src/check-symbols.sh | 6 +++---
+ 2 files changed, 4 insertions(+), 4 deletions(-)
+
+commit ef40ca8e5e830231539dc61088b58e907a840629
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Oct 1 18:07:27 2014 -0400
+
+ [travis] Try to make coverage work with clang
+
+ .travis.yml | 11 ++++++-----
+ 1 file changed, 6 insertions(+), 5 deletions(-)
+
+commit 52784da17b7278f2587168234878bb15d918c9fe
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Oct 1 17:57:43 2014 -0400
+
+ [travis] Minor
+
+ README | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+commit f2c9005f5123c7f9b227fd9ac9a3438c5fe4cf47
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Oct 1 17:45:17 2014 -0400
+
+ Add README.md symlink to make github happy
+
+ README.md | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 40987e8aaca4155d9cff211549e8d23f24c334e5
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Oct 1 17:44:30 2014 -0400
+
+ [travis] Re-enable clang
+
+ .travis.yml | 8 +-------
+ 1 file changed, 1 insertion(+), 7 deletions(-)
+
+commit 5400ac476e5a5bcc66559fcfb05a683a6b433ea1
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Oct 1 17:41:41 2014 -0400
+
+ Add build and coverage status links
+
+ README | 3 +++
+ 1 file changed, 3 insertions(+)
+
+commit 19360e0a5609c65842a989587b01a4dc7c9eae36
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Oct 1 17:35:03 2014 -0400
+
+ [travis] Report matrix settings to help debugging
+
+ .travis.yml | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+commit 9b89fc52f49b80df1f27ac7de69e0152bdcc94d6
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Oct 1 17:20:31 2014 -0400
+
+ [travis] More coveralls
+
+ .travis.yml | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+commit a68f2b62c1f24009993911b1dbcb76b821e58c51
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Oct 1 17:05:58 2014 -0400
+
+ [travis] Give coveralls a hand
+
+ .travis.yml | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 5194d647e13aa5ba2cfcdbdcd4a659dc5bd11418
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Oct 1 17:03:26 2014 -0400
+
+ [travis] Disable clang for now
+
+ .travis.yml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 715f27f85f97fee13b119f60037db5c139489ee6
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Oct 1 16:53:00 2014 -0400
+
+ [test] Fixup test
+
+ test/shaping/tests/hangul-jamo.tests | 9 ---------
+ 1 file changed, 9 deletions(-)
+
+commit 2a508ddae5de3852243725ce22caa3dcffccb83e
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Oct 1 16:49:22 2014 -0400
+
+ [travis] Another try at coveralls.io
+
+ .travis.yml | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+commit dfe8078e5be46cab5e67aed977749c1d6725e6a7
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Oct 1 16:38:47 2014 -0400
+
+ [travis] First try to hookup coveralls.io code coverage tracking
+
+ .travis.yml | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+commit 1b387571e4d0eed883f1ae8ec85cf0e818b4a7f9
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Oct 1 16:14:59 2014 -0400
+
+ [travis] Unbreak
+
+ .travis.yml | 8 +-------
+ 1 file changed, 1 insertion(+), 7 deletions(-)
+
+commit e281ed360dfdf803aea87b6078983867d08e07a7
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Oct 1 16:09:08 2014 -0400
+
+ [travis] Minor
+
+ .travis.yml | 23 +++++++++++++++++++++--
+ 1 file changed, 21 insertions(+), 2 deletions(-)
+
+commit c0b82ba32a1987902a3b9c05b46f8be6b121883a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Oct 1 14:24:07 2014 -0400
+
+ Create ragel-generated files in srcdir
+
+ src/Makefile.am | 25 ++++++++++---------------
+ 1 file changed, 10 insertions(+), 15 deletions(-)
+
+commit 79bbb10b0da49ace763a50f259c2ea687143f7ea
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Oct 1 13:33:21 2014 -0400
+
+ Clean ragel-generated headers in maintainercleanfiles
+
+ src/Makefile.am | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+commit 8971cac83eb4f06847abfa3eaa15857d27141810
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Oct 1 12:41:03 2014 -0400
+
+ Don't use tmp files in Makefile
+
+ Useful for code-coverage generation of the ragel-generated files
+ as they will now contain the correct .hh filename in them.
+
+ src/Makefile.am | 27 +++++++++++++--------------
+ 1 file changed, 13 insertions(+), 14 deletions(-)
+
+commit 22723186652224a635f1dad5cda0f753e78c301d
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Oct 1 11:56:07 2014 -0400
+
+ check-static-inits: Filter out zero-length sections
+
+ When compiling with -O0, zero-sized constructors were showing up
+ and confusing the test.
+
+ src/check-static-inits.sh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit b695a3dc2300ed970a4154ad8b997407b3cb4faf
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Oct 1 11:55:14 2014 -0400
+
+ check-static-inits: check for static finalizers
+
+ src/check-static-inits.sh | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 250398b1e4f102e4e44eeb9e2aebf0cd2d397344
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Oct 1 11:28:01 2014 -0400
+
+ Hide other bubble-sort
+
+ src/hb-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit c1e87442621beff98791ce56cfd1ccee506c4ee6
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Oct 1 11:07:08 2014 -0400
+
+ Hide bubble-sort!
+
+ src/hb-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 80f77282264afb1356351024b1f062b2824bba3b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Sep 25 17:59:46 2014 +0300
+
+ [util] Fix ansi output when surface is empty
+
+ util/helper-cairo-ansi.cc | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 156852991e18e5ac256ee4d6b2916931cc274977
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Sep 25 17:45:49 2014 +0300
+
+ [ot-font] Add hb_ot_face_cmap_accelerator_t
+
+ src/hb-ot-font.cc | 113
+ +++++++++++++++++++++++++++++++-----------------------
+ 1 file changed, 66 insertions(+), 47 deletions(-)
+
+commit d088ccaf11d9475fe0d269ce130b1793b8a1ffbf
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Sep 25 17:26:56 2014 +0300
+
+ [ot-font] Minor
+
+ src/hb-ot-font.cc | 23 ++++++++++++-----------
+ 1 file changed, 12 insertions(+), 11 deletions(-)
+
+commit d7c160a1530adabbcf33725b105072293115a34c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Sep 25 17:15:35 2014 +0300
+
+ [ot-font] Handle missing vertical metrics tables
+
+ src/hb-ot-font.cc | 26 +++++++++++++++++++-------
+ 1 file changed, 19 insertions(+), 7 deletions(-)
+
+commit be1cca270257bfdfee3fbe821175269713acf408
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Sep 25 16:53:24 2014 +0300
+
+ [ot-font] Add metrics_accel_t
+
+ src/hb-ot-font.cc | 111
+ ++++++++++++++++++++++--------------------------
+ src/hb-ot-hhea-table.hh | 2 +-
+ src/hb-ot-hmtx-table.hh | 4 +-
+ 3 files changed, 54 insertions(+), 63 deletions(-)
+
+commit d41b809e9d21e655129a97c600d28f278fd7e62c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Sep 25 13:04:08 2014 +0300
+
+ [ot-font] Start adding vertical support
+
+ src/hb-ot-font.cc | 57 ++++++++++++++++++++++++++++++++++----------
+ src/hb-ot-hhea-table.hh | 63
+ ++++++++++++++++++++++++++-----------------------
+ src/hb-ot-hmtx-table.hh | 35 +++++++++++++++++----------
+ 3 files changed, 100 insertions(+), 55 deletions(-)
+
+commit 22f0de5025aeeef4c8b3ca876d291d4c8e558d94
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Mon Aug 25 12:54:57 2014 -0400
+
+ Fix build
+
+ src/hb-ot-shape-complex-arabic-win1256.hh | 3 +++
+ 1 file changed, 3 insertions(+)
+
+commit d457e3f0ff9b27616a34e4cc110d3edbf8796841
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Mon Aug 25 12:31:19 2014 -0400
+
+ [arabic] Don't #include __FILE__
+
+ Fine!
+
+ https://code.google.com/p/chromium/issues/detail?id=406957
+
+ src/hb-ot-shape-complex-arabic-win1256.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 9ceb673d9c35bb28c9b2ed5359bdd8b23fda0019
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Mon Aug 25 11:48:12 2014 -0400
+
+ [arabic] Allow disabling win1256 fallback code
+
+ By defining HB_NO_WIN1256.
+
+ src/hb-ot-shape-complex-arabic-fallback.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 8a9319502141c09695461c386e54f998250420e9
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Aug 22 12:06:57 2014 -0400
+
+ [ot] Prefer Windows platform cmap tables / accept all Unicode
+ encodingIDs
+
+ Some fonts on the Mac ship with (0,1).
+
+ src/hb-ot-font.cc | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+commit 270971a0fccdf4964fd3e8ab8e5cf53037a3518d
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Aug 15 14:28:04 2014 -0400
+
+ [win32] Avoid preprocessor warnings re macros
+
+ src/hb-private.hh | 8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
+
+commit 8c6bd34d38fb3007c3d660fce0095cc5c7e9962e
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Aug 14 13:33:37 2014 -0400
+
+ Fix check-symbols on OS X
+
+ src/check-libstdc++.sh | 14 +++++++-------
+ src/check-symbols.sh | 8 +++++++-
+ 2 files changed, 14 insertions(+), 8 deletions(-)
+
+commit 522b1cc5261c1419166bfb90d2ff634b684be66a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Aug 14 13:29:30 2014 -0400
+
+ [coretext] Hide feature_mappings
+
+ src/hb-coretext.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 0d2c2f238bf0a847ecd55a70cc0f081f18a053ac
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Aug 14 13:25:55 2014 -0400
+
+ Simplify hb-object
+
+ src/hb-object-private.hh | 118
+ +++++++++++++++--------------------------------
+ 1 file changed, 36 insertions(+), 82 deletions(-)
+
+commit 9d861b81f349188a4507350398786a6e94038095
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Aug 14 13:15:21 2014 -0400
+
+ Really fix clang build this time
+
+ src/hb-object-private.hh | 141
+ +++++++++++++++++++++++------------------------
+ 1 file changed, 68 insertions(+), 73 deletions(-)
+
+commit 272226f294382b0c6921b36e0e67fc53daa765d3
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Aug 14 13:11:33 2014 -0400
+
+ Revert "Fix build on clang after previous commit"
+
+ This reverts commit 9c80cbc87f23040a334e30c750f64523d9ef10c8.
+
+ src/hb-object-private.hh | 34 +++++++++++++---------------------
+ 1 file changed, 13 insertions(+), 21 deletions(-)
+
+commit 9c80cbc87f23040a334e30c750f64523d9ef10c8
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Aug 14 13:09:52 2014 -0400
+
+ Fix build on clang after previous commit
+
+ src/hb-object-private.hh | 34 +++++++++++++++++++++-------------
+ 1 file changed, 21 insertions(+), 13 deletions(-)
+
+commit a5a27073cfff91c4f80209ca8462543130af61dd
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Aug 14 13:05:36 2014 -0400
+
+ Rewrite this==NULL checks to avoid undefined behavior
+
+ Fixes https://code.google.com/p/chromium/issues/detail?id=403594
+
+ src/hb-object-private.hh | 18 ++++++++----------
+ 1 file changed, 8 insertions(+), 10 deletions(-)
+
+commit cc3b2d432b02f9381cdf19e2dd5fbbdd002a750c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Aug 14 12:59:16 2014 -0400
+
+ Remove this==NULL check from face->reference_table()
+
+ Not supposed to happen, and apparently this is undefined in C++.
+ https://code.google.com/p/chromium/issues/detail?id=403594
+
+ src/hb-face-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit cd7ea4f791dc41d62ad238673e2ea0107883c9e3
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Aug 14 12:57:02 2014 -0400
+
+ Make hb_object_t members private
+
+ In preparation for fixing:
+ https://code.google.com/p/chromium/issues/detail?id=403594
+
+ src/hb-object-private.hh | 26 +++++++++++++++++++++-----
+ src/hb-set-private.hh | 2 +-
+ 2 files changed, 22 insertions(+), 6 deletions(-)
+
+commit c4308f895aef93ed884fd54e4ebc65b6d2cfc94a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Aug 13 19:42:01 2014 -0400
+
+ Minor
+
+ test/shaping/hb_test_tools.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
commit cd5a1149d980dc3c17b6bb9d961c761b2671ba1b
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Wed Aug 13 12:39:34 2014 -0400
+Date: Wed Aug 13 12:39:34 2014 -0400
0.9.35
- NEWS | 29 +++++++++++++++++++++++++++++
+ NEWS | 29 +++++++++++++++++++++++++++++
configure.ac | 2 +-
2 files changed, 30 insertions(+), 1 deletion(-)
commit 20076cc41e673c31305fcb58d37b3b292fd35f83
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Tue Aug 12 19:26:35 2014 -0400
+Date: Tue Aug 12 19:26:35 2014 -0400
[coretext] Add version guards for kCTLanguageAttributeName
@@ -19,7 +1906,7 @@ Date: Tue Aug 12 19:26:35 2014 -0400
commit 1b3011c27df531875d432e909ae6b77f115c5017
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Tue Aug 12 19:17:19 2014 -0400
+Date: Tue Aug 12 19:17:19 2014 -0400
[coretext] Pass buffer language to CoreText
@@ -28,7 +1915,7 @@ Date: Tue Aug 12 19:17:19 2014 -0400
commit 3eb6a4dbf25b11fce5e0e426e89f7457887aeca0
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Tue Aug 12 19:10:33 2014 -0400
+Date: Tue Aug 12 19:10:33 2014 -0400
[coretext] Minor
@@ -37,7 +1924,7 @@ Date: Tue Aug 12 19:10:33 2014 -0400
commit 08acfe0d3a1d8223a9fa0696703fff63d6c2ea8b
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Tue Aug 12 18:57:08 2014 -0400
+Date: Tue Aug 12 18:57:08 2014 -0400
[hb-coretext] Fix cluster order of notdef runs in RTL text
@@ -46,7 +1933,7 @@ Date: Tue Aug 12 18:57:08 2014 -0400
commit 30eed75de24ac0b6648a72d98d10bb24a563d7ef
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Tue Aug 12 17:15:09 2014 -0400
+Date: Tue Aug 12 17:15:09 2014 -0400
[shape-plan] Fix typo!
@@ -59,7 +1946,7 @@ Date: Tue Aug 12 17:15:09 2014 -0400
commit dc9aba6fc53898acd7281b118cec0355d61b1df2
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Tue Aug 12 17:14:36 2014 -0400
+Date: Tue Aug 12 17:14:36 2014 -0400
[shape-plan] Better debug messages
@@ -68,7 +1955,7 @@ Date: Tue Aug 12 17:14:36 2014 -0400
commit e956c65bf724a8403471362288d2361361b6ac58
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Tue Aug 12 17:03:27 2014 -0400
+Date: Tue Aug 12 17:03:27 2014 -0400
[shape-plan] Simplify macro
@@ -77,7 +1964,7 @@ Date: Tue Aug 12 17:03:27 2014 -0400
commit 29e25550ce8fee3fecc42d20a45ce9c212dc59df
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Tue Aug 12 17:02:59 2014 -0400
+Date: Tue Aug 12 17:02:59 2014 -0400
Fix gcc warning
@@ -86,7 +1973,7 @@ Date: Tue Aug 12 17:02:59 2014 -0400
commit 8d5eebc0c6ada01128c6ee384340efdbef7ba29d
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Tue Aug 12 16:50:22 2014 -0400
+Date: Tue Aug 12 16:50:22 2014 -0400
[shape-plan] Fix shape-plan caching with more than one requested
shaper
@@ -100,7 +1987,7 @@ Date: Tue Aug 12 16:50:22 2014 -0400
commit bc3d0dc60104f1cda465a5e8ba5b40ed5bec70b9
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Tue Aug 12 16:49:18 2014 -0400
+Date: Tue Aug 12 16:49:18 2014 -0400
[shape-plan] Add debug tracing
@@ -109,7 +1996,7 @@ Date: Tue Aug 12 16:49:18 2014 -0400
commit 81b8d9777b9c38c7e6408591763a4cac6de18e4b
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Tue Aug 12 15:49:47 2014 -0400
+Date: Tue Aug 12 15:49:47 2014 -0400
[coretext] Fix buffer resizing
@@ -120,7 +2007,7 @@ Date: Tue Aug 12 15:49:47 2014 -0400
commit c3e924fb9e0e2d4003790817655efd9c5688c7e1
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Tue Aug 12 14:25:11 2014 -0400
+Date: Tue Aug 12 14:25:11 2014 -0400
[coretext] Rewind scratch-allocated arrays when not needed anymore
@@ -129,7 +2016,7 @@ Date: Tue Aug 12 14:25:11 2014 -0400
commit 8fd4d70b1450d7261a35ab3dea1c70baea2e5c99
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Tue Aug 12 13:12:31 2014 -0400
+Date: Tue Aug 12 13:12:31 2014 -0400
[wince] Two more Windows CE fixes
@@ -138,12 +2025,12 @@ Date: Tue Aug 12 13:12:31 2014 -0400
https://codereview.qt-project.org/#/c/92087/
src/hb-mutex-private.hh | 2 +-
- src/hb-private.hh | 2 ++
+ src/hb-private.hh | 2 ++
2 files changed, 3 insertions(+), 1 deletion(-)
commit fd0001d7dbe6ede99a9f87f96f231ffb53303be8
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Tue Aug 12 10:32:41 2014 -0400
+Date: Tue Aug 12 10:32:41 2014 -0400
[coretext] Compare CGFont and PS name, if CTFont didn't match
@@ -163,7 +2050,7 @@ Date: Tue Aug 12 10:32:41 2014 -0400
commit 5a0eed3b50629be4826e4e9428f2c3255195395d
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Mon Aug 11 23:47:16 2014 -0400
+Date: Mon Aug 11 23:47:16 2014 -0400
[coretext] Implement vertical shaping
@@ -177,7 +2064,7 @@ Date: Mon Aug 11 23:47:16 2014 -0400
commit 1b55077f03758e49f93b8bc1de678e96ea58718c
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Mon Aug 11 20:45:12 2014 -0400
+Date: Mon Aug 11 20:45:12 2014 -0400
[coretext] Remove unnecessary alt_size
@@ -188,7 +2075,7 @@ Date: Mon Aug 11 20:45:12 2014 -0400
commit 10b1104d791a0b0103c6bbb083b5819f2b7d328d
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Mon Aug 11 20:02:45 2014 -0400
+Date: Mon Aug 11 20:02:45 2014 -0400
[coretext] Use CFRunStatus
@@ -200,7 +2087,7 @@ Date: Mon Aug 11 20:02:45 2014 -0400
commit fd1a6aa8d029c701b1532efa59ce901109cfc216
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Mon Aug 11 20:01:37 2014 -0400
+Date: Mon Aug 11 20:01:37 2014 -0400
[coretext] Minor
@@ -209,7 +2096,7 @@ Date: Mon Aug 11 20:01:37 2014 -0400
commit 130856c705641aa681307b5b51b5fb84e295f382
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Mon Aug 11 19:16:26 2014 -0400
+Date: Mon Aug 11 19:16:26 2014 -0400
[coretext] Remove debug printf!
@@ -218,7 +2105,7 @@ Date: Mon Aug 11 19:16:26 2014 -0400
commit b5fbc3b8f560235d014c62e49220574ffcf89349
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Mon Aug 11 18:40:01 2014 -0400
+Date: Mon Aug 11 18:40:01 2014 -0400
API: Do not clear buffer-flags in hb_buffer_clear_contents()
@@ -231,13 +2118,13 @@ Date: Mon Aug 11 18:40:01 2014 -0400
Tests updated.
src/hb-buffer-private.hh | 4 +---
- src/hb-buffer.cc | 4 ++--
+ src/hb-buffer.cc | 4 ++--
test/api/test-buffer.c | 15 ++++++++++++---
3 files changed, 15 insertions(+), 8 deletions(-)
commit 104484cefeca03d95837bba5f39178693c86ce8a
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Mon Aug 11 18:23:43 2014 -0400
+Date: Mon Aug 11 18:23:43 2014 -0400
Minor
@@ -246,7 +2133,7 @@ Date: Mon Aug 11 18:23:43 2014 -0400
commit 4acce77db7dd588ba277779c4997b0256ebe426e
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Mon Aug 11 17:46:50 2014 -0400
+Date: Mon Aug 11 17:46:50 2014 -0400
[coretext] Pass buffer direction to CoreText
@@ -257,7 +2144,7 @@ Date: Mon Aug 11 17:46:50 2014 -0400
commit 5ec45dd37caa8a87ce2689a66272ba8a343fe6ba
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Mon Aug 11 17:46:12 2014 -0400
+Date: Mon Aug 11 17:46:12 2014 -0400
[coretext] Minor
@@ -269,7 +2156,7 @@ Date: Mon Aug 11 17:46:12 2014 -0400
commit 624a299b829ccf9864dd2f3001b1a49476e96b4a
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Mon Aug 11 15:29:18 2014 -0400
+Date: Mon Aug 11 15:29:18 2014 -0400
[coretext] Attach marks to base clusters
@@ -281,7 +2168,7 @@ Date: Mon Aug 11 15:29:18 2014 -0400
commit 3c41ccb5358b0be6cc68d49f436d2cb1792cd5e5
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Mon Aug 11 15:11:59 2014 -0400
+Date: Mon Aug 11 15:11:59 2014 -0400
[coretext] Use input clusters
@@ -295,7 +2182,7 @@ Date: Mon Aug 11 15:11:59 2014 -0400
commit a6b8dc87421de33746b0b14d86d2d1532aec02af
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Mon Aug 11 15:08:19 2014 -0400
+Date: Mon Aug 11 15:08:19 2014 -0400
[coretext] Fix buffer resize handling
@@ -304,13 +2191,13 @@ Date: Mon Aug 11 15:08:19 2014 -0400
shaper to retry from (almost) scratch.
src/hb-buffer-private.hh | 3 +
- src/hb-coretext.cc | 428
+ src/hb-coretext.cc | 428
++++++++++++++++++++++++++---------------------
2 files changed, 238 insertions(+), 193 deletions(-)
commit 9b3c60c88b118f01610ae7a608b138f79f2dc7be
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Mon Aug 11 13:25:43 2014 -0400
+Date: Mon Aug 11 13:25:43 2014 -0400
[coretext] Always compute log_clusters
@@ -321,7 +2208,7 @@ Date: Mon Aug 11 13:25:43 2014 -0400
commit 15c633dd1f412f9ef839d80a8f7af35e7ea48fbc
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Mon Aug 11 13:42:42 2014 -0400
+Date: Mon Aug 11 13:42:42 2014 -0400
Minor
@@ -331,7 +2218,7 @@ Date: Mon Aug 11 13:42:42 2014 -0400
commit 9ce067c77524a9ffc77ceabcba5e7dab36fd39de
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Mon Aug 11 02:04:38 2014 -0400
+Date: Mon Aug 11 02:04:38 2014 -0400
[coretext] Simplify cluster mapping
@@ -340,7 +2227,7 @@ Date: Mon Aug 11 02:04:38 2014 -0400
commit 49f7fb63761e4ca9936990fb90a77fd3600f5ad2
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Sun Aug 10 19:19:38 2014 -0400
+Date: Sun Aug 10 19:19:38 2014 -0400
[coretext] Minor
@@ -349,7 +2236,7 @@ Date: Sun Aug 10 19:19:38 2014 -0400
commit 25f4fb9b56bb3f8bec821571c78f8829e40daa54
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Sun Aug 10 19:05:25 2014 -0400
+Date: Sun Aug 10 19:05:25 2014 -0400
[coretext] Fix fallback detection
@@ -360,7 +2247,7 @@ Date: Sun Aug 10 19:05:25 2014 -0400
commit 77a7a53acef7de355116d488e7d64ff1d7e9e9e1
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Sun Aug 10 18:59:47 2014 -0400
+Date: Sun Aug 10 18:59:47 2014 -0400
[coretext] Fix last range
@@ -374,7 +2261,7 @@ Date: Sun Aug 10 18:59:47 2014 -0400
commit c2b151d95262a8dc2d2ce94e19ab0ef5b0c8f98d
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Sun Aug 10 18:52:07 2014 -0400
+Date: Sun Aug 10 18:52:07 2014 -0400
Fix hb_in_range() for types smaller than int
@@ -385,7 +2272,7 @@ Date: Sun Aug 10 18:52:07 2014 -0400
commit 26a963b9cb4af3119177f277a2d48a5d537458fb
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Sun Aug 10 18:04:50 2014 -0400
+Date: Sun Aug 10 18:04:50 2014 -0400
[wince] Try to fix some stuff on Windows CE
@@ -399,7 +2286,7 @@ Date: Sun Aug 10 18:04:50 2014 -0400
commit 92aeee3f040c2c32cbf70b27bd6954535388c870
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Sun Aug 10 17:42:19 2014 -0400
+Date: Sun Aug 10 17:42:19 2014 -0400
Minor
@@ -409,7 +2296,7 @@ Date: Sun Aug 10 17:42:19 2014 -0400
commit b9993d8d6d332994dfbd29e99ff8043622003417
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Sun Aug 10 17:40:24 2014 -0400
+Date: Sun Aug 10 17:40:24 2014 -0400
[coretext] Fix assert on Yosemite
@@ -423,7 +2310,7 @@ Date: Sun Aug 10 17:40:24 2014 -0400
commit 087733dd66e17297ef0e53680fafe42c84884104
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Fri Apr 18 11:21:08 2014 -0700
+Date: Fri Apr 18 11:21:08 2014 -0700
[coretext] Use CGFont as face_data
@@ -432,7 +2319,7 @@ Date: Fri Apr 18 11:21:08 2014 -0700
commit d277c3d7eee1fd4fb41c38255e5c4df539353e89
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Thu Aug 7 15:38:52 2014 -0400
+Date: Thu Aug 7 15:38:52 2014 -0400
[arabic] Bug 82306 - Mandaic had errors in its Unicode Joining_Type
@@ -443,7 +2330,7 @@ Date: Thu Aug 7 15:38:52 2014 -0400
commit 38fb30d7420a4b01f99cee31baa8c3990a1d1c5f
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Wed Aug 6 13:34:49 2014 -0400
+Date: Wed Aug 6 13:34:49 2014 -0400
Use atexit() only if it's safe to call from shared library
@@ -454,17 +2341,17 @@ Date: Wed Aug 6 13:34:49 2014 -0400
https://bugs.freedesktop.org/show_bug.cgi?id=82246
- src/hb-common.cc | 4 ++--
- src/hb-ft.cc | 2 +-
+ src/hb-common.cc | 4 ++--
+ src/hb-ft.cc | 2 +-
src/hb-private.hh | 25 +++++++++++++++++++++++++
- src/hb-shape.cc | 2 +-
- src/hb-shaper.cc | 2 +-
- src/hb-uniscribe.cc | 2 +-
+ src/hb-shape.cc | 2 +-
+ src/hb-shaper.cc | 2 +-
+ src/hb-uniscribe.cc | 2 +-
6 files changed, 31 insertions(+), 6 deletions(-)
commit d5e61470fa8e5046c35a79988e00e012ae4fff0f
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Tue Aug 5 14:19:01 2014 -0400
+Date: Tue Aug 5 14:19:01 2014 -0400
[arabic] Fix fallback shaping regression
@@ -474,28 +2361,28 @@ Date: Tue Aug 5 14:19:01 2014 -0400
Micro-test added.
- src/hb-ot-shape-complex-arabic.cc | 4 ++--
- test/shaping/Makefile.am | 1 +
- test/shaping/fonts/sha1sum/MANIFEST | 1 +
+ src/hb-ot-shape-complex-arabic.cc | 4 ++--
+ test/shaping/Makefile.am | 1 +
+ test/shaping/fonts/sha1sum/MANIFEST | 1 +
.../sha1sum/df768b9c257e0c9c35786c47cae15c46571d56be.ttf | Bin 0 ->
6332 bytes
- test/shaping/tests/MANIFEST | 1 +
- test/shaping/tests/arabic-fallback-shaping.tests | 1 +
+ test/shaping/tests/MANIFEST | 1 +
+ test/shaping/tests/arabic-fallback-shaping.tests | 1 +
6 files changed, 6 insertions(+), 2 deletions(-)
commit 91c2c0fd2b0f660d79744b3dfaf39ab86883e96b
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Sat Aug 2 19:24:55 2014 -0400
+Date: Sat Aug 2 19:24:55 2014 -0400
0.9.34
- NEWS | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++
+ NEWS | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++
configure.ac | 2 +-
2 files changed, 54 insertions(+), 1 deletion(-)
commit d7c850f8037d2701366008eb8c2a527c9d40abde
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Sat Aug 2 17:46:38 2014 -0400
+Date: Sat Aug 2 17:46:38 2014 -0400
[uniscribe] Minor
@@ -504,29 +2391,29 @@ Date: Sat Aug 2 17:46:38 2014 -0400
commit 8f3eebf7ee4005f9a8efaafcb7f4058cc0a3756e
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Sat Aug 2 17:18:46 2014 -0400
+Date: Sat Aug 2 17:18:46 2014 -0400
Make sure gsubgpos buffer vars are available during fallback_position
Add buffer var allocation asserts to a few key places.
- src/hb-ot-layout-gpos-table.hh | 4 ++--
- src/hb-ot-layout-gsub-table.hh | 2 +-
- src/hb-ot-layout-private.hh | 15 +++++++++++++++
+ src/hb-ot-layout-gpos-table.hh | 4 ++--
+ src/hb-ot-layout-gsub-table.hh | 2 +-
+ src/hb-ot-layout-private.hh | 15 +++++++++++++++
src/hb-ot-shape-complex-arabic-fallback.hh | 2 +-
- src/hb-ot-shape-fallback.cc | 2 ++
- src/hb-ot-shape-normalize.cc | 2 ++
- src/hb-ot-shape.cc | 3 +++
+ src/hb-ot-shape-fallback.cc | 2 ++
+ src/hb-ot-shape-normalize.cc | 2 ++
+ src/hb-ot-shape.cc | 3 +++
7 files changed, 26 insertions(+), 4 deletions(-)
commit 2053f369f84676f197ac41ea654a318c48922abd
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Sat Aug 2 16:31:16 2014 -0400
+Date: Sat Aug 2 16:31:16 2014 -0400
Disable 'liga' for vertical text
The reason we turned it on is because Kazuraki uses it. But that's
- not reason enough. Until the OpenType spec gets its act together re
+ not reason enough. Until the OpenType spec gets its act together re
adding design-direction to lookups, this is better user experience.
src/hb-ot-shape.cc | 2 +-
@@ -534,7 +2421,7 @@ Date: Sat Aug 2 16:31:16 2014 -0400
commit 763e5466c0a03a7c27020e1e2598e488612529a7
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Sat Aug 2 16:17:44 2014 -0400
+Date: Sat Aug 2 16:17:44 2014 -0400
Make it easier to use HB_BUFFER_FLAG_BOT/EOT
@@ -544,23 +2431,23 @@ Date: Sat Aug 2 16:17:44 2014 -0400
had code like this:
hb_buffer_set_flags (hb_buffer,
- (item_offset == 0 ? HB_BUFFER_FLAG_BOT : 0) |
- (item_offset + item_length == paragraph_length
- ?
- HB_BUFFER_FLAG_EOT : 0));
+ (item_offset == 0 ? HB_BUFFER_FLAG_BOT : 0) |
+ (item_offset + item_length == paragraph_length
+ ?
+ HB_BUFFER_FLAG_EOT : 0));
hb_buffer_add_utf8 (hb_buffer,
- paragraph_text, paragraph_length,
- item_offset, item_length);
+ paragraph_text, paragraph_length,
+ item_offset, item_length);
After this change such clients can simply say:
hb_buffer_set_flags (hb_buffer,
- HB_BUFFER_FLAG_BOT | HB_BUFFER_FLAG_EOT);
+ HB_BUFFER_FLAG_BOT | HB_BUFFER_FLAG_EOT);
hb_buffer_add_utf8 (hb_buffer,
- paragraph_text, paragraph_length,
- item_offset, item_length);
+ paragraph_text, paragraph_length,
+ item_offset, item_length);
Ie, HarfBuzz itself checks whether the segment is at the beginning/end
of the paragraph. Clients that only pass item-at-a-time to HarfBuzz
@@ -572,19 +2459,19 @@ Date: Sat Aug 2 16:17:44 2014 -0400
src/hb-ot-shape-complex-arabic.cc | 40
+++++++++++++++++++--------------------
- src/hb-ot-shape.cc | 1 +
+ src/hb-ot-shape.cc | 1 +
2 files changed, 20 insertions(+), 21 deletions(-)
commit 0a5ae9336231c4d189e1682e4fd9c9c4552b8bbf
Merge: ac53443 6ab6be3
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Sat Aug 2 15:00:34 2014 -0400
+Date: Sat Aug 2 15:00:34 2014 -0400
Merge branch 'win1256'
commit 6ab6be32c5857ce3344021ad2996e80b2a8c8f99
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Sat Aug 2 14:58:38 2014 -0400
+Date: Sat Aug 2 14:58:38 2014 -0400
[arabic/win1256] Remove unused MultipleSubst macros
@@ -593,7 +2480,7 @@ Date: Sat Aug 2 14:58:38 2014 -0400
commit abfa4252cce1c56c472693dcd8400cd97ededd2f
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Fri Aug 1 19:05:33 2014 -0400
+Date: Fri Aug 1 19:05:33 2014 -0400
[arabic/win1256] Really fix lam-alef this time
@@ -607,7 +2494,7 @@ Date: Fri Aug 1 19:05:33 2014 -0400
commit 55977f2a462b7fa1248eab3787053dc82320d3e5
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Fri Aug 1 16:14:33 2014 -0400
+Date: Fri Aug 1 16:14:33 2014 -0400
[arabic/win1256] Hook up lamMedi lookup
@@ -622,7 +2509,7 @@ Date: Fri Aug 1 16:14:33 2014 -0400
commit e839e2523e64fd0cf21929f6a45e2facd59c7917
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Fri Aug 1 16:09:31 2014 -0400
+Date: Fri Aug 1 16:09:31 2014 -0400
[arabic/win1256] Fix TEH MARBUTA final form
@@ -633,7 +2520,7 @@ Date: Fri Aug 1 16:09:31 2014 -0400
commit a2de193220ee2839125594bd1a60b5b66ab4598e
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Thu Jul 31 18:21:05 2014 -0400
+Date: Thu Jul 31 18:21:05 2014 -0400
[arabic/win1256] Fix shaping of JEEM, HAH, and KHAH
@@ -644,7 +2531,7 @@ Date: Thu Jul 31 18:21:05 2014 -0400
commit 1789ccb1dd56af6117eac00e633eff94860ba252
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Thu Jul 31 11:04:00 2014 -0400
+Date: Thu Jul 31 11:04:00 2014 -0400
[arabic/win1256] Remove GCC'ism
@@ -662,14 +2549,14 @@ Date: Thu Jul 31 11:04:00 2014 -0400
See:
https://github.com/behdad/harfbuzz/commit/a97f537cec209649302899975d76ca2b2661da7a#commitcomment-7218736
- src/hb-ot-shape-complex-arabic-fallback.hh | 4 +-
+ src/hb-ot-shape-complex-arabic-fallback.hh | 4 +-
src/hb-ot-shape-complex-arabic-win1256.hh | 123
+++++++++++++++++------------
2 files changed, 75 insertions(+), 52 deletions(-)
commit f28b1c823db2ad56fed356ef864a7508d23048b8
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Wed Jul 30 02:15:44 2014 -0400
+Date: Wed Jul 30 02:15:44 2014 -0400
[arabic] Implement Windows-1256 private shaping
@@ -678,7 +2565,7 @@ Date: Wed Jul 30 02:15:44 2014 -0400
https://bugzilla.mozilla.org/show_bug.cgi?id=1045139
This is only enabled on Windows platforms, and requires support from
- Uniscribe to work. But for clients that do hook up to Uniscribe, this
+ Uniscribe to work. But for clients that do hook up to Uniscribe, this
fixes shaping of Windows-1256-encoded bitmap fonts like "MS Sans
Serif".
@@ -687,8 +2574,8 @@ Date: Wed Jul 30 02:15:44 2014 -0400
UNTESTED. I might even have broken regular Arabic fallback shaping.
- src/Makefile.am | 1 +
- src/check-includes.sh | 2 +-
+ src/Makefile.am | 1 +
+ src/check-includes.sh | 2 +-
src/hb-ot-shape-complex-arabic-fallback.hh | 125 +++++++++--
src/hb-ot-shape-complex-arabic-win1256.hh | 328
+++++++++++++++++++++++++++++
@@ -696,7 +2583,7 @@ Date: Wed Jul 30 02:15:44 2014 -0400
commit ac53443f1cea83ed43a4e41a9fdb91902f7fae7b
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Thu Jul 31 18:51:37 2014 -0400
+Date: Thu Jul 31 18:51:37 2014 -0400
[hangul] Don't apply 'calt'
@@ -704,22 +2591,22 @@ Date: Thu Jul 31 18:51:37 2014 -0400
Micro-test added.
- src/hb-ot-shape-complex-hangul.cc | 11
+ src/hb-ot-shape-complex-hangul.cc | 11
++++++++++-
- test/shaping/Makefile.am | 1 +
+ test/shaping/Makefile.am | 1 +
.../sha1sum/757ebd573617a24aa9dfbf0b885c54875c6fe06b.ttf | Bin 0 ->
1804 bytes
.../sha1sum/7e14e7883ed152baa158b80e207b66114c823a8b.ttf | Bin 0 ->
1644 bytes
- test/shaping/fonts/sha1sum/MANIFEST | 2 ++
- test/shaping/tests/MANIFEST | 1 +
- test/shaping/tests/hangul-jamo.tests | 11
+ test/shaping/fonts/sha1sum/MANIFEST | 2 ++
+ test/shaping/tests/MANIFEST | 1 +
+ test/shaping/tests/hangul-jamo.tests | 11
+++++++++++
7 files changed, 25 insertions(+), 1 deletion(-)
commit 8292f96b2be173ebceb1b54426c271cfeaecd633
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Thu Jul 31 18:33:11 2014 -0400
+Date: Thu Jul 31 18:33:11 2014 -0400
[test] Fix record-test.sh
@@ -728,7 +2615,7 @@ Date: Thu Jul 31 18:33:11 2014 -0400
commit 88911e8cc765c26e502503a3a00ac7f17973f3d9
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Tue Jul 29 19:47:26 2014 -0400
+Date: Tue Jul 29 19:47:26 2014 -0400
Minor
@@ -737,7 +2624,7 @@ Date: Tue Jul 29 19:47:26 2014 -0400
commit 9e834e29e0b657f0555df1ab9cea79ff7abcf08d
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Sat Jul 26 20:34:01 2014 -0400
+Date: Sat Jul 26 20:34:01 2014 -0400
[hebrew] Zero mark advance by GDEF late
@@ -751,16 +2638,16 @@ Date: Sat Jul 26 20:34:01 2014 -0400
Micro-test added.
- src/hb-ot-shape-complex-hebrew.cc | 2 +-
+ src/hb-ot-shape-complex-hebrew.cc | 2 +-
.../sha1sum/8454d22037f892e76614e1645d066689a0200e61.ttf | Bin 0 ->
6068 bytes
- test/shaping/fonts/sha1sum/MANIFEST | 1 +
- test/shaping/tests/zero-width-marks.tests | 1 +
+ test/shaping/fonts/sha1sum/MANIFEST | 1 +
+ test/shaping/tests/zero-width-marks.tests | 1 +
4 files changed, 3 insertions(+), 1 deletion(-)
commit 6f2d9ba52a6d1e3fc200da1ef0e85ba020fcd0dc
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Sat Jul 26 19:17:44 2014 -0400
+Date: Sat Jul 26 19:17:44 2014 -0400
Add old-Myanmar shaper
@@ -773,30 +2660,30 @@ Date: Sat Jul 26 19:17:44 2014 -0400
Micro-test added based on Padauk.
- src/hb-ot-shape-complex-myanmar.cc | 18
+ src/hb-ot-shape-complex-myanmar.cc | 18
++++++++++++++++++
- src/hb-ot-shape-complex-private.hh | 5 +++--
- test/shaping/Makefile.am | 1 +
- test/shaping/fonts/sha1sum/MANIFEST | 1 +
+ src/hb-ot-shape-complex-private.hh | 5 +++--
+ test/shaping/Makefile.am | 1 +
+ test/shaping/fonts/sha1sum/MANIFEST | 1 +
.../bb9473d2403488714043bcfb946c9f78b86ad627.ttf | Bin 0 ->
3440 bytes
- test/shaping/tests/MANIFEST | 1 +
- test/shaping/tests/zero-width-marks.tests | 1 +
+ test/shaping/tests/MANIFEST | 1 +
+ test/shaping/tests/zero-width-marks.tests | 1 +
7 files changed, 25 insertions(+), 2 deletions(-)
commit 595d2b96c37de8147489dc5e0ddcc4ab1ad3eea9
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Sat Jul 26 18:44:15 2014 -0400
+Date: Sat Jul 26 18:44:15 2014 -0400
Minor
src/hb-ot-shape-complex-indic.cc | 1 +
- src/hb-ot-shape.cc | 2 +-
+ src/hb-ot-shape.cc | 2 +-
2 files changed, 2 insertions(+), 1 deletion(-)
commit fe6788bc570d77d5b3aafc68efd51ca6b80499b1
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Fri Jul 25 12:40:56 2014 -0400
+Date: Fri Jul 25 12:40:56 2014 -0400
Typo
@@ -805,7 +2692,7 @@ Date: Fri Jul 25 12:40:56 2014 -0400
commit 0de25d4184d2d92b1a2ebb6fa054275aaae4c316
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Fri Jul 25 12:35:03 2014 -0400
+Date: Fri Jul 25 12:35:03 2014 -0400
[util] Note CSS compatibility in --help-features
@@ -814,7 +2701,7 @@ Date: Fri Jul 25 12:35:03 2014 -0400
commit 6e69200a2aadbc6bba35ffb4a058c14286b84f46
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Fri Jul 25 12:30:47 2014 -0400
+Date: Fri Jul 25 12:30:47 2014 -0400
Fix snprintf() format
@@ -826,7 +2713,7 @@ Date: Fri Jul 25 12:30:47 2014 -0400
commit 5c5cdbbdf8be231c433e21b050a6c6991d327b61
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Fri Jul 25 12:21:49 2014 -0400
+Date: Fri Jul 25 12:21:49 2014 -0400
Make sure broken feature strings are not partially parsed
@@ -838,7 +2725,7 @@ Date: Fri Jul 25 12:21:49 2014 -0400
commit a795fe637846e0d9561d2f7cdd84cfafd58b23a7
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Fri Jul 25 12:15:33 2014 -0400
+Date: Fri Jul 25 12:15:33 2014 -0400
Allow quotation marks around feature tag in hb_feature_from_string()
@@ -849,7 +2736,7 @@ Date: Fri Jul 25 12:15:33 2014 -0400
commit 3f6461847412e78bcddc8eba97200f3afcde869a
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Fri Jul 25 12:04:27 2014 -0400
+Date: Fri Jul 25 12:04:27 2014 -0400
Allow space at the end of feature string with values, eg 'dlig=1 '
@@ -858,7 +2745,7 @@ Date: Fri Jul 25 12:04:27 2014 -0400
commit f31f7d2259dd8edffc070af55938cb7aa23514c1
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Fri Jul 25 12:03:52 2014 -0400
+Date: Fri Jul 25 12:03:52 2014 -0400
Minor
@@ -867,7 +2754,7 @@ Date: Fri Jul 25 12:03:52 2014 -0400
commit 60cb18a5dea2d30793f89e80995bb729c014864a
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Fri Jul 25 12:01:22 2014 -0400
+Date: Fri Jul 25 12:01:22 2014 -0400
Allow on/off in hb_feature_from_string()
@@ -878,7 +2765,7 @@ Date: Fri Jul 25 12:01:22 2014 -0400
commit d9e618eca9e01c2eb6db65504af3f73be370a1e7
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Fri Jul 25 11:56:01 2014 -0400
+Date: Fri Jul 25 11:56:01 2014 -0400
Remove duplicate definition of ISALNUM
@@ -889,7 +2776,7 @@ Date: Fri Jul 25 11:56:01 2014 -0400
commit 2ee5f665ded86147acedc400153c0b3a90fe07c6
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Fri Jul 25 11:53:46 2014 -0400
+Date: Fri Jul 25 11:53:46 2014 -0400
Fix parsing of features like "- liga" (with the space)
@@ -898,7 +2785,7 @@ Date: Fri Jul 25 11:53:46 2014 -0400
commit e15fa7a8cffbe6a67b1048d7b87b7df77d8b1686
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Fri Jul 25 11:44:35 2014 -0400
+Date: Fri Jul 25 11:44:35 2014 -0400
Do not require the '=' in hb_feature_from_string()
@@ -909,7 +2796,7 @@ Date: Fri Jul 25 11:44:35 2014 -0400
commit f4fe9baefdb7e0ff9946f88b6f4b55738fa30cdf
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Fri Jul 25 11:39:55 2014 -0400
+Date: Fri Jul 25 11:39:55 2014 -0400
Reject tags longer than 4 chars in hb_feature_from_string()
@@ -918,22 +2805,22 @@ Date: Fri Jul 25 11:39:55 2014 -0400
commit 7e8c38954649c0bf2e6051d84ca08dce090ec169
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Fri Jul 25 11:18:11 2014 -0400
+Date: Fri Jul 25 11:18:11 2014 -0400
Minor warnings fixes
Some systems insist on -Wmissing-field-initializers. We have
too many,
- by design. Fix a few easy ones.
+ by design. Fix a few easy ones.
src/hb-open-type-private.hh | 2 +-
src/hb-ot-layout-private.hh | 2 +-
- src/hb-private.hh | 2 +-
+ src/hb-private.hh | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
commit fc0daafab0336b847ac14682e581a8838f36a0bf
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Wed Jul 23 16:48:51 2014 -0400
+Date: Wed Jul 23 16:48:51 2014 -0400
[indic] Handle old-spec Malayalam reordering with final Halant
@@ -941,20 +2828,20 @@ Date: Wed Jul 23 16:48:51 2014 -0400
Micro-tests added.
- src/hb-ot-shape-complex-indic.cc | 28
+ src/hb-ot-shape-complex-indic.cc | 28
+++++++++++++++++----
- test/shaping/Makefile.am | 1 +
+ test/shaping/Makefile.am | 1 +
.../270b89df543a7e48e206a2d830c0e10e5265c630.ttf | Bin 0 -> 3428 bytes
.../57a9d9f83020155cbb1d2be1f43d82388cbecc88.ttf | Bin 0 -> 2272 bytes
- test/shaping/fonts/sha1sum/MANIFEST | 2 ++
- test/shaping/tests/MANIFEST | 1 +
- test/shaping/tests/indic-old-spec.tests | 2 ++
- .../indic/script-malayalam/misc/misc.txt | 1 +
+ test/shaping/fonts/sha1sum/MANIFEST | 2 ++
+ test/shaping/tests/MANIFEST | 1 +
+ test/shaping/tests/indic-old-spec.tests | 2 ++
+ .../indic/script-malayalam/misc/misc.txt | 1 +
8 files changed, 30 insertions(+), 5 deletions(-)
commit d6d349d17898529ecdf8217a54987a3e9f81ce05
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Wed Jul 23 11:38:49 2014 -0400
+Date: Wed Jul 23 11:38:49 2014 -0400
Give CC to gir-scanner
@@ -966,17 +2853,17 @@ Date: Wed Jul 23 11:38:49 2014 -0400
commit 8c1bdb46facb79cfca5ebfea9a7e467b40337f47
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Tue Jul 22 17:56:43 2014 -0400
+Date: Tue Jul 22 17:56:43 2014 -0400
0.9.33
- NEWS | 10 ++++++++++
+ NEWS | 10 ++++++++++
configure.ac | 2 +-
2 files changed, 11 insertions(+), 1 deletion(-)
commit d218bdb26b226fbf68331eb586b24460c061313d
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Tue Jul 22 18:01:46 2014 -0400
+Date: Tue Jul 22 18:01:46 2014 -0400
Fix test runner under Windows
@@ -985,7 +2872,7 @@ Date: Tue Jul 22 18:01:46 2014 -0400
commit 3f310dc0cae9015c45ba642b9b83d5695c807aad
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Tue Jul 22 16:26:27 2014 -0400
+Date: Tue Jul 22 16:26:27 2014 -0400
Disallow changing settings on immutable face
@@ -998,7 +2885,7 @@ Date: Tue Jul 22 16:26:27 2014 -0400
commit 0fc0a1022854324261fea8893678a3e9fd9443eb
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Mon Jul 21 11:12:54 2014 -0400
+Date: Mon Jul 21 11:12:54 2014 -0400
[win] Fix Cygwin build
@@ -1009,7 +2896,7 @@ Date: Mon Jul 21 11:12:54 2014 -0400
commit 1132a7dd0ecf1c425078e39e5471330bace42659
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Sun Jul 20 01:17:40 2014 -0400
+Date: Sun Jul 20 01:17:40 2014 -0400
Add HB_TAG_MAX_SIGNED / _HB_SCRIPT_MAX_VALUE_SIGNED
@@ -1020,7 +2907,7 @@ Date: Sun Jul 20 01:17:40 2014 -0400
commit df99976398a53521e0228541055dcaee8f5ba87f
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Sat Jul 19 17:31:23 2014 -0400
+Date: Sat Jul 19 17:31:23 2014 -0400
[gobject] Skip _HB_SCRIPT_MAX_VALUE
@@ -1031,7 +2918,7 @@ Date: Sat Jul 19 17:31:23 2014 -0400
commit f1a8d50a87edfb8147aa1bec732ed7ccbfef2877
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Sat Jul 19 16:52:32 2014 -0400
+Date: Sat Jul 19 16:52:32 2014 -0400
[win] Don't define visibility attribtue under Cygwin
@@ -1040,7 +2927,7 @@ Date: Sat Jul 19 16:52:32 2014 -0400
commit 9c77027d645142794c3ff1590a96bb151c3f2e91
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Sat Jul 19 16:37:22 2014 -0400
+Date: Sat Jul 19 16:37:22 2014 -0400
[win] Turn STRICT on for including windows.h
@@ -1049,20 +2936,20 @@ Date: Sat Jul 19 16:37:22 2014 -0400
commit db308280488c2ee11ba865a9922eb6a0c1abeef3
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Sat Jul 19 16:32:04 2014 -0400
+Date: Sat Jul 19 16:32:04 2014 -0400
[win] Consolidate windows.h include tips and tricks
src/hb-atomic-private.hh | 4 ----
src/hb-mutex-private.hh | 1 -
- src/hb-private.hh | 12 ++++++++++++
- src/hb-uniscribe.cc | 3 ---
- src/hb-uniscribe.h | 3 ---
+ src/hb-private.hh | 12 ++++++++++++
+ src/hb-uniscribe.cc | 3 ---
+ src/hb-uniscribe.h | 3 ---
5 files changed, 12 insertions(+), 11 deletions(-)
commit f26d59d4684be3419c976d781b6dbc956248e3bb
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Sat Jul 19 16:10:21 2014 -0400
+Date: Sat Jul 19 16:10:21 2014 -0400
More fixing MemoryBarrier() on Mingw32
@@ -1075,37 +2962,37 @@ Date: Sat Jul 19 16:10:21 2014 -0400
commit 00a57eb4b50fd894dc68c6525a5bbebf0ebc30e4
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Fri Jul 18 14:42:50 2014 -0400
+Date: Fri Jul 18 14:42:50 2014 -0400
[test] Remove unused micro-font
- .../9d64156923a1b9fed1e05f74599c16563eca42d9.ttf | Bin 81968 ->
+ .../9d64156923a1b9fed1e05f74599c16563eca42d9.ttf | Bin 81968 ->
0 bytes
- test/shaping/fonts/sha1sum/MANIFEST | 1 -
+ test/shaping/fonts/sha1sum/MANIFEST | 1 -
2 files changed, 1 deletion(-)
commit ed29b15f5d0d9e7b40143926ca7d40bf645f67e9
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Fri Jul 18 14:37:49 2014 -0400
+Date: Fri Jul 18 14:37:49 2014 -0400
[test] Add more Mongolian variation selector tests
From
https://code.google.com/p/chromium/issues/detail?id=393896
- .../9d64156923a1b9fed1e05f74599c16563eca42d9.ttf | Bin 0 ->
+ .../9d64156923a1b9fed1e05f74599c16563eca42d9.ttf | Bin 0 ->
81968 bytes
- test/shaping/fonts/sha1sum/MANIFEST | 2 ++
- .../bb29ce50df2bdba2d10726427c6b7609bf460e04.ttf | Bin 0 ->
+ test/shaping/fonts/sha1sum/MANIFEST | 2 ++
+ .../bb29ce50df2bdba2d10726427c6b7609bf460e04.ttf | Bin 0 ->
74856 bytes
- test/shaping/tests/mongolian-variation-selector.tests | 1 +
- .../shaper-arabic/script-mongolian/misc/MANIFEST | 1 +
- .../script-mongolian/misc/variation-selectors.txt | 8 ++++++++
+ test/shaping/tests/mongolian-variation-selector.tests | 1 +
+ .../shaper-arabic/script-mongolian/misc/MANIFEST | 1 +
+ .../script-mongolian/misc/variation-selectors.txt | 8 ++++++++
6 files changed, 12 insertions(+)
commit 385cf37cf084198e3aedb4354a7b025938a9f11b
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Thu Jul 17 18:22:07 2014 -0400
+Date: Thu Jul 17 18:22:07 2014 -0400
Fix hb_in_range() unused-var warning on Windows
@@ -1114,7 +3001,7 @@ Date: Thu Jul 17 18:22:07 2014 -0400
commit e3b42f1af409c073b819bfc696024ccb1f1da63f
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Thu Jul 17 17:13:54 2014 -0400
+Date: Thu Jul 17 17:13:54 2014 -0400
[arabic] Disable 'cswh' again
@@ -1125,17 +3012,17 @@ Date: Thu Jul 17 17:13:54 2014 -0400
commit 66f30915b185727a0041c998641edb550eb8a7fc
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Thu Jul 17 16:05:47 2014 -0400
+Date: Thu Jul 17 16:05:47 2014 -0400
0.9.32
- NEWS | 12 ++++++++++++
+ NEWS | 12 ++++++++++++
configure.ac | 2 +-
2 files changed, 13 insertions(+), 1 deletion(-)
commit 82f4d9d53f348f41b14b877c1ac77c0372c49caa
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Thu Jul 17 15:57:37 2014 -0400
+Date: Thu Jul 17 15:57:37 2014 -0400
[arabic] Add note re disabled 'cswh'
@@ -1144,7 +3031,7 @@ Date: Thu Jul 17 15:57:37 2014 -0400
commit 615d00ea252739da57edbd980ff27e573f88ee7e
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Thu Jul 17 13:36:09 2014 -0400
+Date: Thu Jul 17 13:36:09 2014 -0400
[arabic] Apply init/medi/isol/fini/... in separate stages
@@ -1153,20 +3040,20 @@ Date: Thu Jul 17 13:36:09 2014 -0400
Micro-tests for Arabic and Mongolian added for the latter.
- src/hb-ot-shape-complex-arabic.cc | 56
+ src/hb-ot-shape-complex-arabic.cc | 56
+++++++++++++--------
- test/shaping/Makefile.am | 2 +
+ test/shaping/Makefile.am | 2 +
.../813c2f8e5512187fd982417a7fb4286728e6f4a8.ttf | Bin 0 -> 3428 bytes
.../8a9fea2a7384f2116e5b84a9b31f83be7850ce21.ttf | Bin 0 -> 3428 bytes
- test/shaping/fonts/sha1sum/MANIFEST | 3 ++
+ test/shaping/fonts/sha1sum/MANIFEST | 3 ++
.../a919b33197965846f21074b24e30250d67277bce.ttf | Bin 0 -> 12560 bytes
- test/shaping/tests/MANIFEST | 1 +
- test/shaping/tests/arabic-feature-order.tests | 3 ++
+ test/shaping/tests/MANIFEST | 1 +
+ test/shaping/tests/arabic-feature-order.tests | 3 ++
8 files changed, 43 insertions(+), 22 deletions(-)
commit d21e997035b16e9807dfb29c3605abb93f92f1ee
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Thu Jul 17 15:27:46 2014 -0400
+Date: Thu Jul 17 15:27:46 2014 -0400
[test] Make record_test understand cmdline args to hb-shape
@@ -1175,23 +3062,23 @@ Date: Thu Jul 17 15:27:46 2014 -0400
commit 7cd33f230441093dbfb1fec48f8c580ee8d9ef71
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Thu Jul 17 14:22:11 2014 -0400
+Date: Thu Jul 17 14:22:11 2014 -0400
Micro optimization
- src/hb-fallback-shape.cc | 36
+ src/hb-fallback-shape.cc | 36
+++++++++++++++++++-----------------
src/hb-ot-shape-complex-arabic.cc | 19 +++++++++++--------
src/hb-ot-shape-complex-indic.cc | 15 ++++++++++-----
src/hb-ot-shape-complex-myanmar.cc | 7 +++++--
src/hb-ot-shape-complex-sea.cc | 7 +++++--
- src/hb-ot-shape-fallback.cc | 30 ++++++++++++++++--------------
- src/hb-ot-shape.cc | 18 ++++++++++++------
+ src/hb-ot-shape-fallback.cc | 30 ++++++++++++++++--------------
+ src/hb-ot-shape.cc | 18 ++++++++++++------
7 files changed, 78 insertions(+), 54 deletions(-)
commit 164c13d73f67fdddba28e6409d76b4903e8ffab3
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Thu Jul 17 14:16:38 2014 -0400
+Date: Thu Jul 17 14:16:38 2014 -0400
Another try to fix Mongolian free variation selectors
@@ -1203,23 +3090,23 @@ Date: Thu Jul 17 14:16:38 2014 -0400
https://code.google.com/p/chromium/issues/detail?id=393896
- src/hb-ot-shape-complex-arabic.cc | 24
+ src/hb-ot-shape-complex-arabic.cc | 24
+++++++++++++++------
- src/hb-unicode-private.hh | 3 ++-
- test/shaping/fonts/sha1sum/MANIFEST | 1 +
+ src/hb-unicode-private.hh | 3 ++-
+ test/shaping/fonts/sha1sum/MANIFEST | 1 +
.../ef86fe710cfea877bbe0dbb6946a1f88d0661031.ttf | Bin 0 -> 2748 bytes
- .../tests/mongolian-variation-selector.tests | 1 +
+ .../tests/mongolian-variation-selector.tests | 1 +
5 files changed, 22 insertions(+), 7 deletions(-)
commit 5209c505061130854a2bfea8849928ade3ee92f3
Author: Behdad Esfahbod <behdad@behdad.org>
-Date: Thu Jul 17 12:23:44 2014 -0400
+Date: Thu Jul 17 12:23:44 2014 -0400
Revert "Show U+FFFD REPLACEMENT CHARACTER for invalid Unicode
codepoints"
We now handle U+FFFD replacement in hb_buffer_add_utf*(). Any other
- manipulation can happen in user callbacks. No need for this.
+ manipulation can happen in user callbacks. No need for this.
https://github.com/behdad/harfbuzz/commit/efe74214bbb68eaa3d7621e73869b5d58210107e#commitcomment-7039404
diff --git a/Makefile.am b/Makefile.am
index fa87114..47aeb97 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -10,6 +10,7 @@ EXTRA_DIST = \
autogen.sh \
harfbuzz.doap \
Android.mk \
+ README.python \
$(NULL)
MAINTAINERCLEANFILES = \
@@ -18,6 +19,7 @@ MAINTAINERCLEANFILES = \
$(GITIGNORE_MAINTAINERCLEANFILES_MAKEFILE_IN) \
$(srcdir)/INSTALL \
$(srcdir)/ChangeLog \
+ $(srcdir)/gtk-doc.make \
$(NULL)
diff --git a/Makefile.in b/Makefile.in
index 61de622..badd4c0 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -371,6 +371,7 @@ EXTRA_DIST = \
autogen.sh \
harfbuzz.doap \
Android.mk \
+ README.python \
$(NULL)
MAINTAINERCLEANFILES = \
@@ -379,6 +380,7 @@ MAINTAINERCLEANFILES = \
$(GITIGNORE_MAINTAINERCLEANFILES_MAKEFILE_IN) \
$(srcdir)/INSTALL \
$(srcdir)/ChangeLog \
+ $(srcdir)/gtk-doc.make \
$(NULL)
diff --git a/NEWS b/NEWS
index adc8f69..c4950e2 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,64 @@
+Overview of changes leading to 0.9.40
+Friday, March 20, 2015
+=====================================
+
+- Another hb-coretext crasher fix. Ouch!
+- Happy Norouz!
+
+
+Overview of changes leading to 0.9.39
+Wednesday, March 4, 2015
+=====================================
+
+- Critical hb-coretext fixes.
+- Optimizations and refactoring; no functional change
+ expected.
+- Misc build fixes.
+
+
+Overview of changes leading to 0.9.38
+Friday, January 23, 2015
+=====================================
+
+- Fix minor out-of-bounds access in Indic shaper.
+- Change New Tai Lue shaping engine from South-East Asian to default,
+ reflecting change in Unicode encoding model.
+- Add hb-shape --font-size. Can take up to two numbers for separate
+ x / y size.
+- Fix CoreText and FreeType scale issues with negative scales.
+- Reject blobs larger than 2GB. This might break some icu-le-hb clients
+ that need security fixes. See:
+ http://www.icu-project.org/trac/ticket/11450
+- Avoid accessing font tables during face destruction, in casce rogue
+ clients released face data already.
+- Fix up gobject-introspection a bit. Python bindings kinda working.
+ See README.python.
+- Misc fixes.
+- API additions:
+ hb_ft_face_create_referenced()
+ hb_ft_font_create_referenced()
+
+
+Overview of changes leading to 0.9.37
+Wednesday, December 17, 2014
+=====================================
+
+- Fix out-of-bounds access in Context lookup format 3.
+- Indic: Allow ZWJ/ZWNJ before syllable modifiers.
+
+
+Overview of changes leading to 0.9.36
+Thursday, November 20, 2014
+=====================================
+
+- First time that three months went by without a release since
+ 0.9.2 was released on August 10, 2012!
+- Fix performance bug in hb_ot_collect_glyphs():
+ https://bugzilla.mozilla.org/show_bug.cgi?id=1090869
+- Add basic vertical-text support to hb-ot-font.
+- Misc build fixes.
+
+
Overview of changes leading to 0.9.35
Saturday, August 13, 2014
=====================================
diff --git a/README b/README
index 74e739d..d34bc74 100644
--- a/README
+++ b/README
@@ -1,3 +1,6 @@
+[![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)
+
This is HarfBuzz, a text shaping library.
For bug reports, mailing list, and other information please visit:
diff --git a/README.python b/README.python
new file mode 100644
index 0000000..eabdf5b
--- /dev/null
+++ b/README.python
@@ -0,0 +1,26 @@
+To enable HarfBuzz bindings for Python among other languages, make sure
+you have latest version of gobject-introspection compiled, and then
+run autogen.sh (if building from git), and then:
+
+ ./configure --with-gobject --enable-introspection
+
+Make sure that gobject-introspection is enabled then in the final report.
+
+Compile and install.
+
+Make sure you have the installation lib dir in LD_LIBRARY_PATH, as needed
+for the linker to find the library.
+
+Then make sure you also have GI_TYPELIB_PATH pointing to the resulting
+$prefix/lib/girepository-* directory.
+
+Make sure you have pygobject installed. Then check that the following
+import works in your Python interpretter:
+
+ from gi.repository import HarfBuzz
+
+If it does, you are ready to call HarfBuzz from Python! Congratulations.
+See src/sample.py.
+
+The Python API will change. Let us know on the mailing list if you are
+using it, and send lots of feedback.
diff --git a/autogen.sh b/autogen.sh
index a267f29..ff1b0c0 100755
--- a/autogen.sh
+++ b/autogen.sh
@@ -19,17 +19,22 @@ which pkg-config || {
exit 1
}
+echo -n "checking for libtoolize... "
+which glibtoolize || which libtoolize || {
+ echo "*** No libtoolize (libtool) found, please install it ***"
+ exit 1
+}
echo -n "checking for gtkdocize... "
if which gtkdocize ; then
gtkdocize --copy || exit 1
else
- echo "*** No gtkdocize found, skipping documentation ***"
+ echo "*** No gtkdocize (gtk-doc) found, skipping documentation ***"
echo "EXTRA_DIST = " > gtk-doc.make
fi
echo -n "checking for autoreconf... "
which autoreconf || {
- echo "*** No autoreconf found, please install it ***"
+ echo "*** No autoreconf (autoconf) found, please install it ***"
exit 1
}
diff --git a/config.h.in b/config.h.in
index 491e7f4..35395c3 100644
--- a/config.h.in
+++ b/config.h.in
@@ -24,9 +24,6 @@
/* Have FreeType 2 library */
#undef HAVE_FREETYPE
-/* Define to 1 if you have the `FT_Face_GetCharVariantIndex' function. */
-#undef HAVE_FT_FACE_GETCHARVARIANTINDEX
-
/* Define to 1 if you have the `getpagesize' function. */
#undef HAVE_GETPAGESIZE
diff --git a/configure b/configure
index 84e04c7..1c08cae 100755
--- 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 0.9.35.
+# 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='0.9.35'
-PACKAGE_STRING='HarfBuzz 0.9.35'
+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/'
@@ -1445,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 0.9.35 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]...
@@ -1515,7 +1515,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of HarfBuzz 0.9.35:";;
+ short | recursive ) echo "Configuration of HarfBuzz 0.9.40:";;
esac
cat <<\_ACEOF
@@ -1674,7 +1674,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-HarfBuzz configure 0.9.35
+HarfBuzz configure 0.9.40
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2401,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 0.9.35, 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 $@
@@ -3270,7 +3270,7 @@ fi
# Define the identity of the package.
PACKAGE='harfbuzz'
- VERSION='0.9.35'
+ VERSION='0.9.40'
# Some tools Automake needs.
@@ -16813,8 +16813,8 @@ GIT=${GIT-"${am_missing_run}git"}
HB_VERSION_MAJOR=0
HB_VERSION_MINOR=9
-HB_VERSION_MICRO=35
-HB_VERSION=0.9.35
+HB_VERSION_MICRO=40
+HB_VERSION=0.9.40
@@ -16825,7 +16825,7 @@ HB_VERSION=0.9.35
-HB_LIBTOOL_VERSION_INFO=935:0:935
+HB_LIBTOOL_VERSION_INFO=940:0:940
# Documentation
@@ -18618,6 +18618,7 @@ fi
have_freetype=false
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_failed=no
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for FREETYPE" >&5
@@ -18628,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 \"freetype2 >= 2.3.8\""; } >&5
- ($PKG_CONFIG --exists --print-errors "freetype2 >= 2.3.8") 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 "freetype2 >= 2.3.8" 2>/dev/null`
+ pkg_cv_FREETYPE_CFLAGS=`$PKG_CONFIG --cflags "freetype2 >= 12.0.6" 2>/dev/null`
else
pkg_failed=yes
fi
@@ -18646,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 \"freetype2 >= 2.3.8\""; } >&5
- ($PKG_CONFIG --exists --print-errors "freetype2 >= 2.3.8") 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 "freetype2 >= 2.3.8" 2>/dev/null`
+ pkg_cv_FREETYPE_LIBS=`$PKG_CONFIG --libs "freetype2 >= 12.0.6" 2>/dev/null`
else
pkg_failed=yes
fi
@@ -18670,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 "freetype2 >= 2.3.8"`
+ 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 "freetype2 >= 2.3.8"`
+ 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
@@ -18697,23 +18698,6 @@ if $have_freetype; then
$as_echo "#define HAVE_FREETYPE 1" >>confdefs.h
- _save_libs="$LIBS"
- _save_cflags="$CFLAGS"
- LIBS="$LIBS $FREETYPE_LIBS"
- CFLAGS="$CFLAGS $FREETYPE_CFLAGS"
- for ac_func in FT_Face_GetCharVariantIndex
-do :
- ac_fn_c_check_func "$LINENO" "FT_Face_GetCharVariantIndex" "ac_cv_func_FT_Face_GetCharVariantIndex"
-if test "x$ac_cv_func_FT_Face_GetCharVariantIndex" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_FT_FACE_GETCHARVARIANTINDEX 1
-_ACEOF
-
-fi
-done
-
- LIBS="$_save_libs"
- CFLAGS="$_save_cflags"
fi
if $have_freetype; then
HAVE_FREETYPE_TRUE=
@@ -19622,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 0.9.35, 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
@@ -19689,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 0.9.35
+HarfBuzz config.status 0.9.40
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
diff --git a/configure.ac b/configure.ac
index b9e82d9..5baad1f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,6 +1,6 @@
AC_PREREQ([2.64])
AC_INIT([HarfBuzz],
- [0.9.35],
+ [0.9.40],
[http://bugs.freedesktop.org/enter_bug.cgi?product=harfbuzz],
[harfbuzz],
[http://harfbuzz.org/])
@@ -285,7 +285,7 @@ if test "x$with_graphite2" = "xyes" -a "x$have_graphite2" != "xtrue"; then
AC_MSG_ERROR([graphite2 support requested but libgraphite2 not found])
fi
if $have_graphite2; then
- AC_DEFINE(HAVE_GRAPHITE2, 1, [Have Graphite2 library])
+ AC_DEFINE(HAVE_GRAPHITE2, 1, [Have Graphite2 library])
fi
AM_CONDITIONAL(HAVE_GRAPHITE2, $have_graphite2)
@@ -297,20 +297,14 @@ AC_ARG_WITH(freetype,
[with_freetype=auto])
have_freetype=false
if test "x$with_freetype" = "xyes" -o "x$with_freetype" = "xauto"; then
- PKG_CHECK_MODULES(FREETYPE, freetype2 >= 2.3.8, have_freetype=true, :)
+ # See freetype/docs/VERSION.DLL; 12.0.6 means freetype-2.4.2
+ 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])
fi
if $have_freetype; then
AC_DEFINE(HAVE_FREETYPE, 1, [Have FreeType 2 library])
- _save_libs="$LIBS"
- _save_cflags="$CFLAGS"
- LIBS="$LIBS $FREETYPE_LIBS"
- CFLAGS="$CFLAGS $FREETYPE_CFLAGS"
- AC_CHECK_FUNCS(FT_Face_GetCharVariantIndex)
- LIBS="$_save_libs"
- CFLAGS="$_save_cflags"
fi
AM_CONDITIONAL(HAVE_FREETYPE, $have_freetype)
diff --git a/docs/Makefile.am b/docs/Makefile.am
index f3ddc22..034926c 100644
--- a/docs/Makefile.am
+++ b/docs/Makefile.am
@@ -1 +1,3 @@
SUBDIRS = reference
+
+-include $(top_srcdir)/git.mk
diff --git a/docs/Makefile.in b/docs/Makefile.in
index 615c464..f8fe860 100644
--- a/docs/Makefile.in
+++ b/docs/Makefile.in
@@ -650,6 +650,8 @@ uninstall-am:
ps ps-am tags 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/docs/reference/html/annotation-glossary.html b/docs/reference/html/annotation-glossary.html
index a78200e..1afb91d 100644
--- a/docs/reference/html/annotation-glossary.html
+++ b/docs/reference/html/annotation-glossary.html
@@ -18,6 +18,8 @@
 <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>
@@ -35,9 +37,6 @@
<a name="annotation-glossary"></a>Annotation Glossary</h2></div></div></div>
<a name="glsA"></a><h3 class="title">A</h3>
<dt>
-<a name="annotation-glossterm-allow-none"></a>allow-none</dt>
-<dd><p>NULL is ok, both for passing and for returning.</p></dd>
-<dt>
<a name="annotation-glossterm-array"></a>array</dt>
<dd><p>Parameter points to an array of items.</p></dd>
<a name="glsC"></a><h3 class="title">C</h3>
@@ -48,6 +47,10 @@
<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>
diff --git a/docs/reference/html/ch01.html b/docs/reference/html/ch01.html
index 58329ec..a86abae 100644
--- a/docs/reference/html/ch01.html
+++ b/docs/reference/html/ch01.html
@@ -21,7 +21,7 @@
</tr></table>
<div class="chapter">
<div class="titlepage"><div><div><h2 class="title">
-<a name="idp8266576"></a>[Insert title here]</h2></div></div></div>
+<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>
diff --git a/docs/reference/html/harfbuzz-hb-blob.html b/docs/reference/html/harfbuzz-hb-blob.html
index 00f828d..b7f9a12 100644
--- a/docs/reference/html/harfbuzz-hb-blob.html
+++ b/docs/reference/html/harfbuzz-hb-blob.html
@@ -179,12 +179,60 @@ hb_blob_create (<em class="parameter"><code>const <span class="type">char</span>
<em class="parameter"><code><a class="link" href="harfbuzz-hb-blob.html#hb-memory-mode-t" title="enum hb_memory_mode_t"><span class="type">hb_memory_mode_t</span></a> mode</code></em>,
<em class="parameter"><code><span class="type">void</span> *user_data</code></em>,
<em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-destroy-func-t" title="hb_destroy_func_t ()"><span class="type">hb_destroy_func_t</span></a> destroy</code></em>);</pre>
-<p>
-</p>
+<p>Creates a new "blob" object wrapping <em class="parameter"><code>data</code></em>
+. The <em class="parameter"><code>mode</code></em>
+ parameter is used
+to negotiate ownership and lifecycle of <em class="parameter"><code>data</code></em>
+.</p>
+<div class="refsect3">
+<a name="idp17456912"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>data</p></td>
+<td class="parameter_description"><p>Pointer to blob data.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>length</p></td>
+<td class="parameter_description"><p>Length of <em class="parameter"><code>data</code></em>
+in bytes.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>mode</p></td>
+<td class="parameter_description"><p>Memory mode for <em class="parameter"><code>data</code></em>
+.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>user_data</p></td>
+<td class="parameter_description"><p>Data parameter to pass to <em class="parameter"><code>destroy</code></em>
+.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>destroy</p></td>
+<td class="parameter_description"><p>Callback to call when <em class="parameter"><code>data</code></em>
+is not needed anymore.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
<div class="refsect3">
-<a name="idp8155232"></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 1.0</p>
</div>
<hr>
<div class="refsect2">
@@ -202,7 +250,7 @@ is.</p>
<p>Makes <em class="parameter"><code>parent</code></em>
immutable.</p>
<div class="refsect3">
-<a name="idp17402736"></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">
@@ -230,7 +278,7 @@ is.</p>
</table></div>
</div>
<div class="refsect3">
-<a name="idp17140192"></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>
@@ -253,7 +301,7 @@ hb_blob_destroy (<em class="parameter"><code><a class="link" href="harfbuzz-hb-b
was created for if it has not been called already.</p>
<p>See TODO:link object types for more information.</p>
<div class="refsect3">
-<a name="idp18089520"></a><h4>Parameters</h4>
+<a name="idp21977536"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -276,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="idp21534832"></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">
@@ -298,7 +346,7 @@ hb_blob_get_data (<em class="parameter"><code><a class="link" href="harfbuzz-hb-
</table></div>
</div>
<div class="refsect3">
-<a name="idp21133808"></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>
@@ -315,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="idp21147760"></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">
@@ -337,7 +385,7 @@ fails.</p>
</table></div>
</div>
<div class="refsect3">
-<a name="idp21159888"></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>
@@ -352,7 +400,7 @@ 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="idp21172704"></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>
@@ -364,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="idp21183504"></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">
@@ -379,7 +427,7 @@ hb_blob_get_length (<em class="parameter"><code><a class="link" href="harfbuzz-h
</table></div>
</div>
<div class="refsect3">
-<a name="idp21191904"></a><h4>Returns</h4>
+<a name="idp22065712"></a><h4>Returns</h4>
<p> the length of blob data in bytes.</p>
<p></p>
</div>
@@ -392,7 +440,7 @@ hb_blob_get_length (<em class="parameter"><code><a class="link" href="harfbuzz-h
hb_blob_get_user_data (<em class="parameter"><code><a class="link" href="harfbuzz-hb-blob.html#hb-blob-t"><span class="type">hb_blob_t</span></a> *blob</code></em>,
<em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-user-data-key-t"><span class="type">hb_user_data_key_t</span></a> *key</code></em>);</pre>
<div class="refsect3">
-<a name="idp21203104"></a><h4>Parameters</h4>
+<a name="idp22076912"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -414,7 +462,7 @@ hb_blob_get_user_data (<em class="parameter"><code><a class="link" href="harfbuz
</table></div>
</div>
<div class="refsect3">
-<a name="idp21214112"></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>
@@ -426,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="idp21224768"></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">
@@ -441,7 +489,7 @@ hb_blob_is_immutable (<em class="parameter"><code><a class="link" href="harfbuzz
</table></div>
</div>
<div class="refsect3">
-<a name="idp21233168"></a><h4>Returns</h4>
+<a name="idp21531488"></a><h4>Returns</h4>
<p> TODO</p>
<p></p>
</div>
@@ -453,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="idp21242720"></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">
@@ -478,7 +526,7 @@ hb_blob_reference (<em class="parameter"><code><a class="link" href="harfbuzz-hb
.</p>
<p>See TODO:link object types for more information.</p>
<div class="refsect3">
-<a name="idp21260576"></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">
@@ -493,7 +541,7 @@ hb_blob_reference (<em class="parameter"><code><a class="link" href="harfbuzz-hb
</table></div>
</div>
<div class="refsect3">
-<a name="idp21268976"></a><h4>Returns</h4>
+<a name="idp21567296"></a><h4>Returns</h4>
<p> <em class="parameter"><code>blob</code></em>
.</p>
<p></p>
@@ -510,7 +558,7 @@ hb_blob_set_user_data (<em class="parameter"><code><a class="link" href="harfbuz
<em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-destroy-func-t" title="hb_destroy_func_t ()"><span class="type">hb_destroy_func_t</span></a> destroy</code></em>,
<em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="type">hb_bool_t</span></a> replace</code></em>);</pre>
<div class="refsect3">
-<a name="idp21285920"></a><h4>Parameters</h4>
+<a name="idp21584240"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -548,7 +596,7 @@ is not needed anymore.</p></td>
</table></div>
</div>
<div class="refsect3">
-<a name="idp21305600"></a><h4>Returns</h4>
+<a name="idp21603920"></a><h4>Returns</h4>
<p></p>
</div>
<p class="since">Since 1.0</p>
@@ -569,7 +617,7 @@ is not needed anymore.</p></td>
<p>
</p>
<div class="refsect3">
-<a name="idp21317472"></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">
diff --git a/docs/reference/html/harfbuzz-hb-buffer.html b/docs/reference/html/harfbuzz-hb-buffer.html
index a4214dd..0c32fc8 100644
--- a/docs/reference/html/harfbuzz-hb-buffer.html
+++ b/docs/reference/html/harfbuzz-hb-buffer.html
@@ -482,7 +482,7 @@ hb_buffer_add (<em class="parameter"><code><a class="link" href="harfbuzz-hb-buf
<em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> codepoint</code></em>,
<em class="parameter"><code>unsigned <span class="type">int</span> cluster</code></em>);</pre>
<div class="refsect3">
-<a name="idp20929456"></a><h4>Parameters</h4>
+<a name="idp20358224"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -508,7 +508,7 @@ hb_buffer_add_utf16 (<em class="parameter"><code><a class="link" href="harfbuzz-
<em class="parameter"><code>unsigned <span class="type">int</span> item_offset</code></em>,
<em class="parameter"><code><span class="type">int</span> item_length</code></em>);</pre>
<div class="refsect3">
-<a name="idp20952352"></a><h4>Parameters</h4>
+<a name="idp20381120"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -541,7 +541,7 @@ hb_buffer_add_utf32 (<em class="parameter"><code><a class="link" href="harfbuzz-
<em class="parameter"><code>unsigned <span class="type">int</span> item_offset</code></em>,
<em class="parameter"><code><span class="type">int</span> item_length</code></em>);</pre>
<div class="refsect3">
-<a name="idp20978960"></a><h4>Parameters</h4>
+<a name="idp20407728"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -574,7 +574,7 @@ hb_buffer_add_utf8 (<em class="parameter"><code><a class="link" href="harfbuzz-h
<em class="parameter"><code>unsigned <span class="type">int</span> item_offset</code></em>,
<em class="parameter"><code><span class="type">int</span> item_length</code></em>);</pre>
<div class="refsect3">
-<a name="idp21005488"></a><h4>Parameters</h4>
+<a name="idp20434256"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -590,7 +590,7 @@ hb_buffer_add_utf8 (<em class="parameter"><code><a class="link" href="harfbuzz-h
<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>
+<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>
@@ -614,7 +614,7 @@ hb_buffer_add_codepoints (<em class="parameter"><code><a class="link" href="harf
<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="returnvalue">hb_bool_t</span></a>
hb_buffer_allocation_successful (<em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>);</pre>
<div class="refsect3">
-<a name="idp21039872"></a><h4>Parameters</h4>
+<a name="idp20469136"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -629,7 +629,7 @@ hb_buffer_allocation_successful (<em class="parameter"><code><a class="link" hre
</table></div>
</div>
<div class="refsect3">
-<a name="idp21048272"></a><h4>Returns</h4>
+<a name="idp20477536"></a><h4>Returns</h4>
<p></p>
</div>
<p class="since">Since 1.0</p>
@@ -640,7 +640,7 @@ hb_buffer_allocation_successful (<em class="parameter"><code><a class="link" hre
<pre class="programlisting"><span class="returnvalue">void</span>
hb_buffer_clear_contents (<em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>);</pre>
<div class="refsect3">
-<a name="idp21057392"></a><h4>Parameters</h4>
+<a name="idp20486656"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -664,7 +664,7 @@ hb_buffer_create (<em class="parameter"><code><span class="type">void</span></co
<p>
</p>
<div class="refsect3">
-<a name="idp21072704"></a><h4>Returns</h4>
+<a name="idp20501968"></a><h4>Returns</h4>
<p></p>
</div>
</div>
@@ -679,7 +679,7 @@ hb_buffer_deserialize_glyphs (<em class="parameter"><code><a class="link" href="
<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-t"><span class="type">hb_font_t</span></a> *font</code></em>,
<em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-serialize-format-t" title="enum hb_buffer_serialize_format_t"><span class="type">hb_buffer_serialize_format_t</span></a> format</code></em>);</pre>
<div class="refsect3">
-<a name="idp21089760"></a><h4>Parameters</h4>
+<a name="idp20519024"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -706,7 +706,7 @@ hb_buffer_deserialize_glyphs (<em class="parameter"><code><a class="link" href="
</table></div>
</div>
<div class="refsect3">
-<a name="idp22503936"></a><h4>Returns</h4>
+<a name="idp22130896"></a><h4>Returns</h4>
<p></p>
</div>
<p class="since">Since 1.0</p>
@@ -717,7 +717,7 @@ hb_buffer_deserialize_glyphs (<em class="parameter"><code><a class="link" href="
<pre class="programlisting"><span class="returnvalue">void</span>
hb_buffer_destroy (<em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>);</pre>
<div class="refsect3">
-<a name="idp22511728"></a><h4>Parameters</h4>
+<a name="idp22138688"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -739,7 +739,7 @@ hb_buffer_destroy (<em class="parameter"><code><a class="link" href="harfbuzz-hb
<pre class="programlisting"><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-content-type-t" title="enum hb_buffer_content_type_t"><span class="returnvalue">hb_buffer_content_type_t</span></a>
hb_buffer_get_content_type (<em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>);</pre>
<div class="refsect3">
-<a name="idp22525760"></a><h4>Parameters</h4>
+<a name="idp22152720"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -754,7 +754,7 @@ hb_buffer_get_content_type (<em class="parameter"><code><a class="link" href="ha
</table></div>
</div>
<div class="refsect3">
-<a name="idp22533264"></a><h4>Returns</h4>
+<a name="idp22160224"></a><h4>Returns</h4>
<p></p>
</div>
<p class="since">Since 1.0</p>
@@ -765,7 +765,7 @@ hb_buffer_get_content_type (<em class="parameter"><code><a class="link" href="ha
<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-direction-t" title="enum hb_direction_t"><span class="returnvalue">hb_direction_t</span></a>
hb_buffer_get_direction (<em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>);</pre>
<div class="refsect3">
-<a name="idp22541056"></a><h4>Parameters</h4>
+<a name="idp22168016"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -780,7 +780,7 @@ hb_buffer_get_direction (<em class="parameter"><code><a class="link" href="harfb
</table></div>
</div>
<div class="refsect3">
-<a name="idp22548560"></a><h4>Returns</h4>
+<a name="idp22175520"></a><h4>Returns</h4>
<p></p>
</div>
<p class="since">Since 1.0</p>
@@ -791,7 +791,7 @@ hb_buffer_get_direction (<em class="parameter"><code><a class="link" href="harfb
<pre class="programlisting"><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t"><span class="returnvalue">hb_buffer_t</span></a> *
hb_buffer_get_empty (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
<div class="refsect3">
-<a name="idp22555808"></a><h4>Returns</h4>
+<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>
@@ -803,7 +803,7 @@ hb_buffer_get_empty (<em class="parameter"><code><span class="type">void</span><
<pre class="programlisting"><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-flags-t" title="enum hb_buffer_flags_t"><span class="returnvalue">hb_buffer_flags_t</span></a>
hb_buffer_get_flags (<em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>);</pre>
<div class="refsect3">
-<a name="idp22565008"></a><h4>Parameters</h4>
+<a name="idp22191968"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -818,7 +818,7 @@ hb_buffer_get_flags (<em class="parameter"><code><a class="link" href="harfbuzz-
</table></div>
</div>
<div class="refsect3">
-<a name="idp22572512"></a><h4>Returns</h4>
+<a name="idp22199472"></a><h4>Returns</h4>
<p></p>
</div>
<p class="since">Since 1.0</p>
@@ -832,7 +832,7 @@ hb_buffer_get_glyph_infos (<em class="parameter"><code><a class="link" href="har
<p>Returns buffer glyph information array. Returned pointer
is valid as long as buffer contents are not modified.</p>
<div class="refsect3">
-<a name="idp22582256"></a><h4>Parameters</h4>
+<a name="idp22209216"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -854,7 +854,7 @@ is valid as long as buffer contents are not modified.</p>
</table></div>
</div>
<div class="refsect3">
-<a name="idp22593088"></a><h4>Returns</h4>
+<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>
@@ -869,7 +869,7 @@ hb_buffer_get_glyph_positions (<em class="parameter"><code><a class="link" href=
<p>Returns buffer glyph position array. Returned pointer
is valid as long as buffer contents are not modified.</p>
<div class="refsect3">
-<a name="idp22604800"></a><h4>Parameters</h4>
+<a name="idp22231760"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -891,7 +891,7 @@ is valid as long as buffer contents are not modified.</p>
</table></div>
</div>
<div class="refsect3">
-<a name="idp22615632"></a><h4>Returns</h4>
+<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>
@@ -903,7 +903,7 @@ is valid as long as buffer contents are not modified.</p>
<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-language-t"><span class="returnvalue">hb_language_t</span></a>
hb_buffer_get_language (<em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>);</pre>
<div class="refsect3">
-<a name="idp22625264"></a><h4>Parameters</h4>
+<a name="idp22252224"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -918,7 +918,7 @@ hb_buffer_get_language (<em class="parameter"><code><a class="link" href="harfbu
</table></div>
</div>
<div class="refsect3">
-<a name="idp22632768"></a><h4>Returns</h4>
+<a name="idp22259728"></a><h4>Returns</h4>
<p></p>
</div>
<p class="since">Since 1.0</p>
@@ -930,7 +930,7 @@ hb_buffer_get_language (<em class="parameter"><code><a class="link" href="harfbu
hb_buffer_get_length (<em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>);</pre>
<p>Returns the number of items in the buffer.</p>
<div class="refsect3">
-<a name="idp22641136"></a><h4>Parameters</h4>
+<a name="idp22268096"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -945,7 +945,7 @@ hb_buffer_get_length (<em class="parameter"><code><a class="link" href="harfbuzz
</table></div>
</div>
<div class="refsect3">
-<a name="idp22648640"></a><h4>Returns</h4>
+<a name="idp22275600"></a><h4>Returns</h4>
<p> buffer length.</p>
<p></p>
</div>
@@ -964,7 +964,7 @@ hb_buffer_get_replacement_codepoint (<em class="parameter"><code><a class="link"
<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-script-t" title="enum hb_script_t"><span class="returnvalue">hb_script_t</span></a>
hb_buffer_get_script (<em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>);</pre>
<div class="refsect3">
-<a name="idp22663392"></a><h4>Parameters</h4>
+<a name="idp22290352"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -979,7 +979,7 @@ hb_buffer_get_script (<em class="parameter"><code><a class="link" href="harfbuzz
</table></div>
</div>
<div class="refsect3">
-<a name="idp22670896"></a><h4>Returns</h4>
+<a name="idp22297856"></a><h4>Returns</h4>
<p></p>
</div>
<p class="since">Since 1.0</p>
@@ -991,7 +991,7 @@ hb_buffer_get_script (<em class="parameter"><code><a class="link" href="harfbuzz
hb_buffer_get_segment_properties (<em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>,
<em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-segment-properties-t"><span class="type">hb_segment_properties_t</span></a> *props</code></em>);</pre>
<div class="refsect3">
-<a name="idp22680064"></a><h4>Parameters</h4>
+<a name="idp22307024"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -1013,7 +1013,7 @@ hb_buffer_get_segment_properties (<em class="parameter"><code><a class="link" hr
<pre class="programlisting"><a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-t"><span class="returnvalue">hb_unicode_funcs_t</span></a> *
hb_buffer_get_unicode_funcs (<em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>);</pre>
<div class="refsect3">
-<a name="idp22694096"></a><h4>Parameters</h4>
+<a name="idp22321056"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -1028,7 +1028,7 @@ hb_buffer_get_unicode_funcs (<em class="parameter"><code><a class="link" href="h
</table></div>
</div>
<div class="refsect3">
-<a name="idp22701600"></a><h4>Returns</h4>
+<a name="idp22328560"></a><h4>Returns</h4>
<p></p>
</div>
<p class="since">Since 1.0</p>
@@ -1040,7 +1040,7 @@ hb_buffer_get_unicode_funcs (<em class="parameter"><code><a class="link" href="h
hb_buffer_get_user_data (<em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>,
<em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-user-data-key-t"><span class="type">hb_user_data_key_t</span></a> *key</code></em>);</pre>
<div class="refsect3">
-<a name="idp22710768"></a><h4>Parameters</h4>
+<a name="idp22337728"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -1055,7 +1055,7 @@ hb_buffer_get_user_data (<em class="parameter"><code><a class="link" href="harfb
</table></div>
</div>
<div class="refsect3">
-<a name="idp22718272"></a><h4>Returns</h4>
+<a name="idp22345232"></a><h4>Returns</h4>
<p></p>
</div>
<p class="since">Since 1.0</p>
@@ -1080,7 +1080,7 @@ it will be set to the process's default language as returned by
<a class="link" href="harfbuzz-hb-common.html#hb-language-get-default" title="hb_language_get_default ()"><code class="function">hb_language_get_default()</code></a>. This may change in the future by
taking buffer script into consideration when choosing a language.</p>
<div class="refsect3">
-<a name="idp22738080"></a><h4>Parameters</h4>
+<a name="idp22365040"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -1102,7 +1102,7 @@ taking buffer script into consideration when choosing a language.</p>
<pre class="programlisting"><span class="returnvalue">void</span>
hb_buffer_normalize_glyphs (<em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>);</pre>
<div class="refsect3">
-<a name="idp22752112"></a><h4>Parameters</h4>
+<a name="idp22379072"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -1125,7 +1125,7 @@ hb_buffer_normalize_glyphs (<em class="parameter"><code><a class="link" href="ha
hb_buffer_pre_allocate (<em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>,
<em class="parameter"><code>unsigned <span class="type">int</span> size</code></em>);</pre>
<div class="refsect3">
-<a name="idp22767664"></a><h4>Parameters</h4>
+<a name="idp22394624"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -1140,7 +1140,7 @@ hb_buffer_pre_allocate (<em class="parameter"><code><a class="link" href="harfbu
</table></div>
</div>
<div class="refsect3">
-<a name="idp22775168"></a><h4>Returns</h4>
+<a name="idp22402128"></a><h4>Returns</h4>
<p></p>
</div>
<p class="since">Since 1.0</p>
@@ -1151,7 +1151,7 @@ hb_buffer_pre_allocate (<em class="parameter"><code><a class="link" href="harfbu
<pre class="programlisting"><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t"><span class="returnvalue">hb_buffer_t</span></a> *
hb_buffer_reference (<em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>);</pre>
<div class="refsect3">
-<a name="idp22782960"></a><h4>Parameters</h4>
+<a name="idp22409920"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -1166,7 +1166,7 @@ hb_buffer_reference (<em class="parameter"><code><a class="link" href="harfbuzz-
</table></div>
</div>
<div class="refsect3">
-<a name="idp22790464"></a><h4>Returns</h4>
+<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>
@@ -1178,7 +1178,7 @@ hb_buffer_reference (<em class="parameter"><code><a class="link" href="harfbuzz-
<pre class="programlisting"><span class="returnvalue">void</span>
hb_buffer_reset (<em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>);</pre>
<div class="refsect3">
-<a name="idp22799664"></a><h4>Parameters</h4>
+<a name="idp22426624"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -1201,7 +1201,7 @@ hb_buffer_reset (<em class="parameter"><code><a class="link" href="harfbuzz-hb-b
hb_buffer_reverse (<em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>);</pre>
<p>Reverses buffer contents.</p>
<div class="refsect3">
-<a name="idp22814128"></a><h4>Parameters</h4>
+<a name="idp22441088"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -1226,7 +1226,7 @@ hb_buffer_reverse_clusters (<em class="parameter"><code><a class="link" href="ha
reversed, then each cluster (consecutive items having the
same cluster number) are reversed again.</p>
<div class="refsect3">
-<a name="idp22828768"></a><h4>Parameters</h4>
+<a name="idp22455728"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -1250,7 +1250,7 @@ hb_buffer_serialize_format_from_string
(<em class="parameter"><code>const <span class="type">char</span> *str</code></em>,
<em class="parameter"><code><span class="type">int</span> len</code></em>);</pre>
<div class="refsect3">
-<a name="idp22844320"></a><h4>Returns</h4>
+<a name="idp22471280"></a><h4>Returns</h4>
<p></p>
</div>
<p class="since">Since 1.0</p>
@@ -1261,7 +1261,7 @@ hb_buffer_serialize_format_from_string
<pre class="programlisting">const <span class="returnvalue">char</span> *
hb_buffer_serialize_format_to_string (<em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-serialize-format-t" title="enum hb_buffer_serialize_format_t"><span class="type">hb_buffer_serialize_format_t</span></a> format</code></em>);</pre>
<div class="refsect3">
-<a name="idp22852256"></a><h4>Returns</h4>
+<a name="idp22479216"></a><h4>Returns</h4>
<p></p>
</div>
<p class="since">Since 1.0</p>
@@ -1280,7 +1280,7 @@ hb_buffer_serialize_glyphs (<em class="parameter"><code><a class="link" href="ha
<em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-serialize-format-t" title="enum hb_buffer_serialize_format_t"><span class="type">hb_buffer_serialize_format_t</span></a> format</code></em>,
<em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-serialize-flags-t" title="enum hb_buffer_serialize_flags_t"><span class="type">hb_buffer_serialize_flags_t</span></a> flags</code></em>);</pre>
<div class="refsect3">
-<a name="idp22871776"></a><h4>Parameters</h4>
+<a name="idp22498736"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -1307,7 +1307,7 @@ hb_buffer_serialize_glyphs (<em class="parameter"><code><a class="link" href="ha
</table></div>
</div>
<div class="refsect3">
-<a name="idp22885936"></a><h4>Returns</h4>
+<a name="idp22512896"></a><h4>Returns</h4>
<p></p>
</div>
<p class="since">Since 1.0</p>
@@ -1318,7 +1318,7 @@ hb_buffer_serialize_glyphs (<em class="parameter"><code><a class="link" href="ha
<pre class="programlisting">const <span class="returnvalue">char</span> **
hb_buffer_serialize_list_formats (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
<div class="refsect3">
-<a name="idp22893328"></a><h4>Returns</h4>
+<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>
@@ -1331,7 +1331,7 @@ hb_buffer_serialize_list_formats (<em class="parameter"><code><span class="type"
hb_buffer_set_content_type (<em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>,
<em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-content-type-t" title="enum hb_buffer_content_type_t"><span class="type">hb_buffer_content_type_t</span></a> content_type</code></em>);</pre>
<div class="refsect3">
-<a name="idp22903904"></a><h4>Parameters</h4>
+<a name="idp22530864"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -1354,7 +1354,7 @@ hb_buffer_set_content_type (<em class="parameter"><code><a class="link" href="ha
hb_buffer_set_direction (<em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>,
<em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-direction-t" title="enum hb_direction_t"><span class="type">hb_direction_t</span></a> direction</code></em>);</pre>
<div class="refsect3">
-<a name="idp22919312"></a><h4>Parameters</h4>
+<a name="idp22546272"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -1377,7 +1377,7 @@ hb_buffer_set_direction (<em class="parameter"><code><a class="link" href="harfb
hb_buffer_set_flags (<em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>,
<em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-flags-t" title="enum hb_buffer_flags_t"><span class="type">hb_buffer_flags_t</span></a> flags</code></em>);</pre>
<div class="refsect3">
-<a name="idp22934720"></a><h4>Parameters</h4>
+<a name="idp22561680"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -1400,7 +1400,7 @@ hb_buffer_set_flags (<em class="parameter"><code><a class="link" href="harfbuzz-
hb_buffer_set_language (<em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>,
<em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-language-t"><span class="type">hb_language_t</span></a> language</code></em>);</pre>
<div class="refsect3">
-<a name="idp22950128"></a><h4>Parameters</h4>
+<a name="idp22577088"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -1423,7 +1423,7 @@ hb_buffer_set_language (<em class="parameter"><code><a class="link" href="harfbu
hb_buffer_set_length (<em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>,
<em class="parameter"><code>unsigned <span class="type">int</span> length</code></em>);</pre>
<div class="refsect3">
-<a name="idp22965680"></a><h4>Parameters</h4>
+<a name="idp22592640"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -1438,7 +1438,7 @@ hb_buffer_set_length (<em class="parameter"><code><a class="link" href="harfbuzz
</table></div>
</div>
<div class="refsect3">
-<a name="idp22973184"></a><h4>Returns</h4>
+<a name="idp22600400"></a><h4>Returns</h4>
<p></p>
</div>
<p class="since">Since 1.0</p>
@@ -1458,7 +1458,7 @@ hb_buffer_set_replacement_codepoint (<em class="parameter"><code><a class="link"
hb_buffer_set_script (<em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>,
<em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-script-t" title="enum hb_script_t"><span class="type">hb_script_t</span></a> script</code></em>);</pre>
<div class="refsect3">
-<a name="idp22990256"></a><h4>Parameters</h4>
+<a name="idp22621216"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -1481,7 +1481,7 @@ hb_buffer_set_script (<em class="parameter"><code><a class="link" href="harfbuzz
hb_buffer_set_segment_properties (<em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>,
<em class="parameter"><code>const <a class="link" href="harfbuzz-hb-buffer.html#hb-segment-properties-t"><span class="type">hb_segment_properties_t</span></a> *props</code></em>);</pre>
<div class="refsect3">
-<a name="idp23005808"></a><h4>Parameters</h4>
+<a name="idp22639536"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -1504,7 +1504,7 @@ hb_buffer_set_segment_properties (<em class="parameter"><code><a class="link" hr
hb_buffer_set_unicode_funcs (<em class="parameter"><code><a class="link" href="harfbuzz-hb-buffer.html#hb-buffer-t"><span class="type">hb_buffer_t</span></a> *buffer</code></em>,
<em class="parameter"><code><a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-t"><span class="type">hb_unicode_funcs_t</span></a> *unicode_funcs</code></em>);</pre>
<div class="refsect3">
-<a name="idp23021216"></a><h4>Parameters</h4>
+<a name="idp22657648"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -1530,7 +1530,7 @@ hb_buffer_set_user_data (<em class="parameter"><code><a class="link" href="harfb
<em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-destroy-func-t" title="hb_destroy_func_t ()"><span class="type">hb_destroy_func_t</span></a> destroy</code></em>,
<em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="type">hb_bool_t</span></a> replace</code></em>);</pre>
<div class="refsect3">
-<a name="idp23040752"></a><h4>Parameters</h4>
+<a name="idp22680784"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -1545,7 +1545,7 @@ hb_buffer_set_user_data (<em class="parameter"><code><a class="link" href="harfb
</table></div>
</div>
<div class="refsect3">
-<a name="idp23048256"></a><h4>Returns</h4>
+<a name="idp22689184"></a><h4>Returns</h4>
<p></p>
</div>
<p class="since">Since 1.0</p>
@@ -1559,7 +1559,7 @@ hb_segment_properties_equal (<em class="parameter"><code>const <a class="link" h
<p>
</p>
<div class="refsect3">
-<a name="idp23057632"></a><h4>Returns</h4>
+<a name="idp22700656"></a><h4>Returns</h4>
<p></p>
</div>
</div>
@@ -1571,7 +1571,7 @@ hb_segment_properties_hash (<em class="parameter"><code>const <a class="link" hr
<p>
</p>
<div class="refsect3">
-<a name="idp23065088"></a><h4>Returns</h4>
+<a name="idp22709792"></a><h4>Returns</h4>
<p></p>
</div>
</div>
@@ -1590,7 +1590,7 @@ hb_segment_properties_hash (<em class="parameter"><code>const <a class="link" hr
<p>
</p>
<div class="refsect3">
-<a name="idp23074720"></a><h4>Members</h4>
+<a name="idp22721776"></a><h4>Members</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
@@ -1623,7 +1623,7 @@ hb_segment_properties_hash (<em class="parameter"><code>const <a class="link" hr
<p>
</p>
<div class="refsect3">
-<a name="idp23090928"></a><h4>Members</h4>
+<a name="idp22740960"></a><h4>Members</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
@@ -1661,7 +1661,7 @@ hb_segment_properties_hash (<em class="parameter"><code>const <a class="link" hr
<p>
</p>
<div class="refsect3">
-<a name="idp23110400"></a><h4>Members</h4>
+<a name="idp22763504"></a><h4>Members</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
@@ -1699,7 +1699,7 @@ hb_segment_properties_hash (<em class="parameter"><code>const <a class="link" hr
<p>
</p>
<div class="refsect3">
-<a name="idp23132992"></a><h4>Members</h4>
+<a name="idp22786240"></a><h4>Members</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
diff --git a/docs/reference/html/harfbuzz-hb-common.html b/docs/reference/html/harfbuzz-hb-common.html
index 47aedb6..e2b1a8b 100644
--- a/docs/reference/html/harfbuzz-hb-common.html
+++ b/docs/reference/html/harfbuzz-hb-common.html
@@ -311,7 +311,7 @@
hb_direction_from_string (<em class="parameter"><code>const <span class="type">char</span> *str</code></em>,
<em class="parameter"><code><span class="type">int</span> len</code></em>);</pre>
<div class="refsect3">
-<a name="idp18987296"></a><h4>Parameters</h4>
+<a name="idp17685104"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -326,7 +326,7 @@ hb_direction_from_string (<em class="parameter"><code>const <span class="type">c
</table></div>
</div>
<div class="refsect3">
-<a name="idp18996800"></a><h4>Returns</h4>
+<a name="idp17694608"></a><h4>Returns</h4>
<p></p>
</div>
<p class="since">Since 1.0</p>
@@ -337,7 +337,7 @@ 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="idp19006032"></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>
@@ -350,7 +350,7 @@ hb_direction_to_string (<em class="parameter"><code><a class="link" href="harfbu
hb_language_from_string (<em class="parameter"><code>const <span class="type">char</span> *str</code></em>,
<em class="parameter"><code><span class="type">int</span> len</code></em>);</pre>
<div class="refsect3">
-<a name="idp19018560"></a><h4>Parameters</h4>
+<a name="idp17716368"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -365,7 +365,7 @@ hb_language_from_string (<em class="parameter"><code>const <span class="type">ch
</table></div>
</div>
<div class="refsect3">
-<a name="idp19028064"></a><h4>Returns</h4>
+<a name="idp17725872"></a><h4>Returns</h4>
<p></p>
</div>
<p class="since">Since 1.0</p>
@@ -376,7 +376,7 @@ hb_language_from_string (<em class="parameter"><code>const <span class="type">ch
<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-language-t"><span class="returnvalue">hb_language_t</span></a>
hb_language_get_default (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
<div class="refsect3">
-<a name="idp19036576"></a><h4>Returns</h4>
+<a name="idp17734384"></a><h4>Returns</h4>
<p></p>
</div>
<p class="since">Since 1.0</p>
@@ -387,7 +387,7 @@ hb_language_get_default (<em class="parameter"><code><span class="type">void</sp
<pre class="programlisting">const <span class="returnvalue">char</span> *
hb_language_to_string (<em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-language-t"><span class="type">hb_language_t</span></a> language</code></em>);</pre>
<div class="refsect3">
-<a name="idp19045808"></a><h4>Returns</h4>
+<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>
@@ -399,7 +399,7 @@ hb_language_to_string (<em class="parameter"><code><a class="link" href="harfbuz
<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-script-t" title="enum hb_script_t"><span class="returnvalue">hb_script_t</span></a>
hb_script_from_iso15924_tag (<em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-tag-t" title="hb_tag_t"><span class="type">hb_tag_t</span></a> tag</code></em>);</pre>
<div class="refsect3">
-<a name="idp19056528"></a><h4>Returns</h4>
+<a name="idp17754336"></a><h4>Returns</h4>
<p></p>
</div>
<p class="since">Since 1.0</p>
@@ -411,7 +411,7 @@ hb_script_from_iso15924_tag (<em class="parameter"><code><a class="link" href="h
hb_script_from_string (<em class="parameter"><code>const <span class="type">char</span> *s</code></em>,
<em class="parameter"><code><span class="type">int</span> len</code></em>);</pre>
<div class="refsect3">
-<a name="idp19067392"></a><h4>Parameters</h4>
+<a name="idp17765200"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -426,7 +426,7 @@ hb_script_from_string (<em class="parameter"><code>const <span class="type">char
</table></div>
</div>
<div class="refsect3">
-<a name="idp19076896"></a><h4>Returns</h4>
+<a name="idp17774704"></a><h4>Returns</h4>
<p></p>
</div>
<p class="since">Since 1.0</p>
@@ -437,7 +437,7 @@ hb_script_from_string (<em class="parameter"><code>const <span class="type">char
<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-direction-t" title="enum hb_direction_t"><span class="returnvalue">hb_direction_t</span></a>
hb_script_get_horizontal_direction (<em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-script-t" title="enum hb_script_t"><span class="type">hb_script_t</span></a> script</code></em>);</pre>
<div class="refsect3">
-<a name="idp19086016"></a><h4>Returns</h4>
+<a name="idp17783824"></a><h4>Returns</h4>
<p></p>
</div>
<p class="since">Since 1.0</p>
@@ -448,7 +448,7 @@ hb_script_get_horizontal_direction (<em class="parameter"><code><a class="link"
<pre class="programlisting"><a class="link" href="harfbuzz-hb-common.html#hb-tag-t" title="hb_tag_t"><span class="returnvalue">hb_tag_t</span></a>
hb_script_to_iso15924_tag (<em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-script-t" title="enum hb_script_t"><span class="type">hb_script_t</span></a> script</code></em>);</pre>
<div class="refsect3">
-<a name="idp19095136"></a><h4>Returns</h4>
+<a name="idp17792944"></a><h4>Returns</h4>
<p></p>
</div>
<p class="since">Since 1.0</p>
@@ -460,7 +460,7 @@ hb_script_to_iso15924_tag (<em class="parameter"><code><a class="link" href="har
hb_tag_from_string (<em class="parameter"><code>const <span class="type">char</span> *str</code></em>,
<em class="parameter"><code><span class="type">int</span> len</code></em>);</pre>
<div class="refsect3">
-<a name="idp19105952"></a><h4>Parameters</h4>
+<a name="idp17803760"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -475,7 +475,7 @@ hb_tag_from_string (<em class="parameter"><code>const <span class="type">char</s
</table></div>
</div>
<div class="refsect3">
-<a name="idp19115456"></a><h4>Returns</h4>
+<a name="idp17813264"></a><h4>Returns</h4>
<p></p>
</div>
<p class="since">Since 1.0</p>
@@ -487,7 +487,7 @@ hb_tag_from_string (<em class="parameter"><code>const <span class="type">char</s
hb_tag_to_string (<em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-tag-t" title="hb_tag_t"><span class="type">hb_tag_t</span></a> tag</code></em>,
<em class="parameter"><code><span class="type">char</span> *buf</code></em>);</pre>
<div class="refsect3">
-<a name="idp19126096"></a><h4>Parameters</h4>
+<a name="idp17823904"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -581,7 +581,7 @@ hb_tag_to_string (<em class="parameter"><code><a class="link" href="harfbuzz-hb-
<p>
</p>
<div class="refsect3">
-<a name="idp19182160"></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">
@@ -648,7 +648,7 @@ hb_tag_to_string (<em class="parameter"><code><a class="link" href="harfbuzz-hb-
<p>
</p>
<div class="refsect3">
-<a name="idp19220528"></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">
diff --git a/docs/reference/html/harfbuzz-hb-coretext.html b/docs/reference/html/harfbuzz-hb-coretext.html
index 939d711..8d3ab15 100644
--- a/docs/reference/html/harfbuzz-hb-coretext.html
+++ b/docs/reference/html/harfbuzz-hb-coretext.html
@@ -105,7 +105,7 @@ hb_coretext_face_get_cg_font (<em class="parameter"><code><a class="link" href="
<p>
</p>
<div class="refsect3">
-<a name="idp19763168"></a><h4>Returns</h4>
+<a name="idp14032320"></a><h4>Returns</h4>
<p></p>
</div>
</div>
@@ -117,7 +117,7 @@ hb_coretext_font_get_ct_font (<em class="parameter"><code><a class="link" href="
<p>
</p>
<div class="refsect3">
-<a name="idp23989600"></a><h4>Returns</h4>
+<a name="idp19308640"></a><h4>Returns</h4>
<p></p>
</div>
</div>
diff --git a/docs/reference/html/harfbuzz-hb-face.html b/docs/reference/html/harfbuzz-hb-face.html
index 4a2f856..dc31c55 100644
--- a/docs/reference/html/harfbuzz-hb-face.html
+++ b/docs/reference/html/harfbuzz-hb-face.html
@@ -210,7 +210,7 @@ hb_face_create (<em class="parameter"><code><a class="link" href="harfbuzz-hb-bl
<p>
</p>
<div class="refsect3">
-<a name="idp17669104"></a><h4>Returns</h4>
+<a name="idp20616992"></a><h4>Returns</h4>
<p></p>
</div>
</div>
@@ -222,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="idp16965008"></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">
@@ -237,7 +237,7 @@ hb_face_create_for_tables (<em class="parameter"><code><a class="link" href="har
</table></div>
</div>
<div class="refsect3">
-<a name="idp17846736"></a><h4>Returns</h4>
+<a name="idp22848528"></a><h4>Returns</h4>
<p> (transfer full)</p>
<p></p>
</div>
@@ -249,7 +249,7 @@ hb_face_create_for_tables (<em class="parameter"><code><a class="link" href="har
<pre class="programlisting"><span class="returnvalue">void</span>
hb_face_destroy (<em class="parameter"><code><a class="link" href="harfbuzz-hb-face.html#hb-face-t"><span class="type">hb_face_t</span></a> *face</code></em>);</pre>
<div class="refsect3">
-<a name="idp14634400"></a><h4>Parameters</h4>
+<a name="idp22856752"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -271,7 +271,7 @@ 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="idp21412768"></a><h4>Returns</h4>
+<a name="idp22870240"></a><h4>Returns</h4>
<p> (transfer full)</p>
<p></p>
</div>
@@ -283,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="idp22131376"></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">
@@ -298,7 +298,7 @@ hb_face_get_glyph_count (<em class="parameter"><code><a class="link" href="harfb
</table></div>
</div>
<div class="refsect3">
-<a name="idp22139776"></a><h4>Returns</h4>
+<a name="idp22886112"></a><h4>Returns</h4>
<p></p>
</div>
<p class="since">Since 1.0</p>
@@ -309,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="idp22148976"></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">
@@ -324,7 +324,7 @@ hb_face_get_index (<em class="parameter"><code><a class="link" href="harfbuzz-hb
</table></div>
</div>
<div class="refsect3">
-<a name="idp22157376"></a><h4>Returns</h4>
+<a name="idp22901552"></a><h4>Returns</h4>
<p></p>
</div>
<p class="since">Since 1.0</p>
@@ -335,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="idp22166576"></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">
@@ -350,7 +350,7 @@ hb_face_get_upem (<em class="parameter"><code><a class="link" href="harfbuzz-hb-
</table></div>
</div>
<div class="refsect3">
-<a name="idp22174976"></a><h4>Returns</h4>
+<a name="idp18604560"></a><h4>Returns</h4>
<p></p>
</div>
<p class="since">Since 1.0</p>
@@ -362,7 +362,7 @@ hb_face_get_upem (<em class="parameter"><code><a class="link" href="harfbuzz-hb-
hb_face_get_user_data (<em class="parameter"><code><a class="link" href="harfbuzz-hb-face.html#hb-face-t"><span class="type">hb_face_t</span></a> *face</code></em>,
<em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-user-data-key-t"><span class="type">hb_user_data_key_t</span></a> *key</code></em>);</pre>
<div class="refsect3">
-<a name="idp22185664"></a><h4>Parameters</h4>
+<a name="idp15960320"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -377,7 +377,7 @@ hb_face_get_user_data (<em class="parameter"><code><a class="link" href="harfbuz
</table></div>
</div>
<div class="refsect3">
-<a name="idp22194064"></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>
@@ -389,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="idp22204720"></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">
@@ -404,7 +404,7 @@ hb_face_is_immutable (<em class="parameter"><code><a class="link" href="harfbuzz
</table></div>
</div>
<div class="refsect3">
-<a name="idp22213120"></a><h4>Returns</h4>
+<a name="idp22926912"></a><h4>Returns</h4>
<p></p>
</div>
<p class="since">Since 1.0</p>
@@ -415,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="idp22222176"></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">
@@ -437,7 +437,7 @@ hb_face_make_immutable (<em class="parameter"><code><a class="link" href="harfbu
<pre class="programlisting"><a class="link" href="harfbuzz-hb-face.html#hb-face-t"><span class="returnvalue">hb_face_t</span></a> *
hb_face_reference (<em class="parameter"><code><a class="link" href="harfbuzz-hb-face.html#hb-face-t"><span class="type">hb_face_t</span></a> *face</code></em>);</pre>
<div class="refsect3">
-<a name="idp22238192"></a><h4>Parameters</h4>
+<a name="idp22944480"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -452,7 +452,7 @@ hb_face_reference (<em class="parameter"><code><a class="link" href="harfbuzz-hb
</table></div>
</div>
<div class="refsect3">
-<a name="idp22246592"></a><h4>Returns</h4>
+<a name="idp22950528"></a><h4>Returns</h4>
<p></p>
</div>
<p class="since">Since 1.0</p>
@@ -463,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="idp22255648"></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">
@@ -478,7 +478,7 @@ hb_face_reference_blob (<em class="parameter"><code><a class="link" href="harfbu
</table></div>
</div>
<div class="refsect3">
-<a name="idp22264048"></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>
@@ -491,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="idp22276400"></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">
@@ -506,7 +506,7 @@ hb_face_reference_table (<em class="parameter"><code><a class="link" href="harfb
</table></div>
</div>
<div class="refsect3">
-<a name="idp22284800"></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>
@@ -519,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="idp22297328"></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">
@@ -542,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="idp22315120"></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">
@@ -565,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="idp22332912"></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">
@@ -591,7 +591,7 @@ hb_face_set_user_data (<em class="parameter"><code><a class="link" href="harfbuz
<em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-destroy-func-t" title="hb_destroy_func_t ()"><span class="type">hb_destroy_func_t</span></a> destroy</code></em>,
<em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="type">hb_bool_t</span></a> replace</code></em>);</pre>
<div class="refsect3">
-<a name="idp22355472"></a><h4>Parameters</h4>
+<a name="idp23045152"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -606,7 +606,7 @@ hb_face_set_user_data (<em class="parameter"><code><a class="link" href="harfbuz
</table></div>
</div>
<div class="refsect3">
-<a name="idp22363872"></a><h4>Returns</h4>
+<a name="idp23052656"></a><h4>Returns</h4>
<p></p>
</div>
<p class="since">Since 1.0</p>
diff --git a/docs/reference/html/harfbuzz-hb-font.html b/docs/reference/html/harfbuzz-hb-font.html
index 2f91181..9596d54 100644
--- a/docs/reference/html/harfbuzz-hb-font.html
+++ b/docs/reference/html/harfbuzz-hb-font.html
@@ -630,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="idp24857136"></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">
@@ -666,7 +666,7 @@ hb_font_create (<em class="parameter"><code><a class="link" href="harfbuzz-hb-fa
<p>
</p>
<div class="refsect3">
-<a name="idp24877744"></a><h4>Returns</h4>
+<a name="idp24665728"></a><h4>Returns</h4>
<p></p>
</div>
</div>
@@ -676,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="idp24884992"></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">
@@ -691,7 +691,7 @@ hb_font_create_sub_font (<em class="parameter"><code><a class="link" href="harfb
</table></div>
</div>
<div class="refsect3">
-<a name="idp24892496"></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>
@@ -703,7 +703,7 @@ hb_font_create_sub_font (<em class="parameter"><code><a class="link" href="harfb
<pre class="programlisting"><span class="returnvalue">void</span>
hb_font_destroy (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-t"><span class="type">hb_font_t</span></a> *font</code></em>);</pre>
<div class="refsect3">
-<a name="idp24901696"></a><h4>Parameters</h4>
+<a name="idp24689680"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -727,7 +727,7 @@ hb_font_funcs_create (<em class="parameter"><code><span class="type">void</span>
<p>
</p>
<div class="refsect3">
-<a name="idp24915104"></a><h4>Returns</h4>
+<a name="idp24703088"></a><h4>Returns</h4>
<p></p>
</div>
</div>
@@ -737,7 +737,7 @@ hb_font_funcs_create (<em class="parameter"><code><span class="type">void</span>
<pre class="programlisting"><span class="returnvalue">void</span>
hb_font_funcs_destroy (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-funcs-t"><span class="type">hb_font_funcs_t</span></a> *ffuncs</code></em>);</pre>
<div class="refsect3">
-<a name="idp24922352"></a><h4>Parameters</h4>
+<a name="idp24710336"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -759,7 +759,7 @@ 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="idp24935840"></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>
@@ -772,7 +772,7 @@ hb_font_funcs_get_empty (<em class="parameter"><code><span class="type">void</sp
hb_font_funcs_get_user_data (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-funcs-t"><span class="type">hb_font_funcs_t</span></a> *ffuncs</code></em>,
<em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-user-data-key-t"><span class="type">hb_user_data_key_t</span></a> *key</code></em>);</pre>
<div class="refsect3">
-<a name="idp24946416"></a><h4>Parameters</h4>
+<a name="idp24734400"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -787,7 +787,7 @@ hb_font_funcs_get_user_data (<em class="parameter"><code><a class="link" href="h
</table></div>
</div>
<div class="refsect3">
-<a name="idp24953920"></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>
@@ -799,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="idp24963120"></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">
@@ -814,7 +814,7 @@ hb_font_funcs_is_immutable (<em class="parameter"><code><a class="link" href="ha
</table></div>
</div>
<div class="refsect3">
-<a name="idp24970624"></a><h4>Returns</h4>
+<a name="idp24759184"></a><h4>Returns</h4>
<p></p>
</div>
<p class="since">Since 1.0</p>
@@ -825,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="idp24978416"></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">
@@ -847,7 +847,7 @@ hb_font_funcs_make_immutable (<em class="parameter"><code><a class="link" href="
<pre class="programlisting"><a class="link" href="harfbuzz-hb-font.html#hb-font-funcs-t"><span class="returnvalue">hb_font_funcs_t</span></a> *
hb_font_funcs_reference (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-funcs-t"><span class="type">hb_font_funcs_t</span></a> *ffuncs</code></em>);</pre>
<div class="refsect3">
-<a name="idp24992448"></a><h4>Parameters</h4>
+<a name="idp24785040"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -862,7 +862,7 @@ hb_font_funcs_reference (<em class="parameter"><code><a class="link" href="harfb
</table></div>
</div>
<div class="refsect3">
-<a name="idp24999952"></a><h4>Returns</h4>
+<a name="idp24793440"></a><h4>Returns</h4>
<p></p>
</div>
<p class="since">Since 1.0</p>
@@ -877,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="idp25014480"></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">
@@ -909,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="idp25040736"></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">
@@ -942,7 +942,7 @@ 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="idp25067056"></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">
@@ -967,7 +967,7 @@ hb_font_funcs_set_glyph_func (<em class="parameter"><code><a class="link" href="
<em class="parameter"><code><span class="type">void</span> *user_data</code></em>,
<em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-destroy-func-t" title="hb_destroy_func_t ()"><span class="type">hb_destroy_func_t</span></a> destroy</code></em>);</pre>
<div class="refsect3">
-<a name="idp25088528"></a><h4>Parameters</h4>
+<a name="idp24882160"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -993,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="idp25110128"></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">
@@ -1026,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="idp25136432"></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">
@@ -1058,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="idp25162752"></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">
@@ -1090,7 +1090,7 @@ 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="idp25188992"></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">
@@ -1116,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="idp25210592"></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">
@@ -1149,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="idp25236896"></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">
@@ -1181,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="idp25263216"></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">
@@ -1214,7 +1214,7 @@ hb_font_funcs_set_user_data (<em class="parameter"><code><a class="link" href="h
<em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-destroy-func-t" title="hb_destroy_func_t ()"><span class="type">hb_destroy_func_t</span></a> destroy</code></em>,
<em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="type">hb_bool_t</span></a> replace</code></em>);</pre>
<div class="refsect3">
-<a name="idp25291120"></a><h4>Parameters</h4>
+<a name="idp25084624"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -1229,7 +1229,7 @@ hb_font_funcs_set_user_data (<em class="parameter"><code><a class="link" href="h
</table></div>
</div>
<div class="refsect3">
-<a name="idp25299520"></a><h4>Returns</h4>
+<a name="idp25093024"></a><h4>Returns</h4>
<p></p>
</div>
<p class="since">Since 1.0</p>
@@ -1240,7 +1240,7 @@ 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="idp25308272"></a><h4>Returns</h4>
+<a name="idp25101776"></a><h4>Returns</h4>
<p> (transfer full)</p>
<p></p>
</div>
@@ -1252,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="idp25318112"></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">
@@ -1267,7 +1267,7 @@ hb_font_get_face (<em class="parameter"><code><a class="link" href="harfbuzz-hb-
</table></div>
</div>
<div class="refsect3">
-<a name="idp25326512"></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>
@@ -1282,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="idp25342432"></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">
@@ -1304,7 +1304,7 @@ hb_font_get_glyph (<em class="parameter"><code><a class="link" href="harfbuzz-hb
</table></div>
</div>
<div class="refsect3">
-<a name="idp25354544"></a><h4>Returns</h4>
+<a name="idp25148112"></a><h4>Returns</h4>
<p></p>
</div>
<p class="since">Since 1.0</p>
@@ -1320,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="idp25370832"></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">
@@ -1359,7 +1359,7 @@ hb_font_get_glyph_advance_for_direction
<p>
</p>
<div class="refsect3">
-<a name="idp25401296"></a><h4>Returns</h4>
+<a name="idp25194864"></a><h4>Returns</h4>
<p></p>
</div>
</div>
@@ -1373,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="idp25417088"></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">
@@ -1400,7 +1400,7 @@ hb_font_get_glyph_contour_point (<em class="parameter"><code><a class="link" hre
</table></div>
</div>
<div class="refsect3">
-<a name="idp25432912"></a><h4>Returns</h4>
+<a name="idp25226416"></a><h4>Returns</h4>
<p></p>
</div>
<p class="since">Since 1.0</p>
@@ -1417,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="idp25451136"></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">
@@ -1444,7 +1444,7 @@ hb_font_get_glyph_contour_point_for_origin
</table></div>
</div>
<div class="refsect3">
-<a name="idp25466960"></a><h4>Returns</h4>
+<a name="idp25260464"></a><h4>Returns</h4>
<p></p>
</div>
<p class="since">Since 1.0</p>
@@ -1464,7 +1464,7 @@ hb_font_get_glyph_contour_point_for_origin
<p>
</p>
<div class="refsect3">
-<a name="idp25488288"></a><h4>Returns</h4>
+<a name="idp25281728"></a><h4>Returns</h4>
<p></p>
</div>
</div>
@@ -1476,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="idp25500512"></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">
@@ -1498,7 +1498,7 @@ hb_font_get_glyph_extents (<em class="parameter"><code><a class="link" href="har
</table></div>
</div>
<div class="refsect3">
-<a name="idp25512624"></a><h4>Returns</h4>
+<a name="idp25306064"></a><h4>Returns</h4>
<p></p>
</div>
<p class="since">Since 1.0</p>
@@ -1512,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="idp25527232"></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">
@@ -1534,7 +1534,7 @@ hb_font_get_glyph_extents_for_origin (<em class="parameter"><code><a class="link
</table></div>
</div>
<div class="refsect3">
-<a name="idp25539344"></a><h4>Returns</h4>
+<a name="idp25332784"></a><h4>Returns</h4>
<p></p>
</div>
<p class="since">Since 1.0</p>
@@ -1551,7 +1551,7 @@ hb_font_get_glyph_extents_for_origin (<em class="parameter"><code><a class="link
<p>
</p>
<div class="refsect3">
-<a name="idp25557120"></a><h4>Returns</h4>
+<a name="idp25350560"></a><h4>Returns</h4>
<p></p>
</div>
</div>
@@ -1564,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="idp25571216"></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">
@@ -1591,7 +1591,7 @@ hb_font_get_glyph_from_name (<em class="parameter"><code><a class="link" href="h
</table></div>
</div>
<div class="refsect3">
-<a name="idp25587040"></a><h4>Returns</h4>
+<a name="idp25380480"></a><h4>Returns</h4>
<p></p>
</div>
<p class="since">Since 1.0</p>
@@ -1607,7 +1607,7 @@ hb_font_get_glyph_from_name (<em class="parameter"><code><a class="link" href="h
<p>
</p>
<div class="refsect3">
-<a name="idp25603280"></a><h4>Returns</h4>
+<a name="idp25396720"></a><h4>Returns</h4>
<p></p>
</div>
</div>
@@ -1624,7 +1624,7 @@ hb_font_get_glyph_from_name (<em class="parameter"><code><a class="link" href="h
<p>
</p>
<div class="refsect3">
-<a name="idp25622080"></a><h4>Returns</h4>
+<a name="idp25415520"></a><h4>Returns</h4>
<p></p>
</div>
</div>
@@ -1635,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="idp25632608"></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">
@@ -1650,7 +1650,7 @@ hb_font_get_glyph_h_advance (<em class="parameter"><code><a class="link" href="h
</table></div>
</div>
<div class="refsect3">
-<a name="idp25641008"></a><h4>Returns</h4>
+<a name="idp25434448"></a><h4>Returns</h4>
<p></p>
</div>
<p class="since">Since 1.0</p>
@@ -1663,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="idp25653840"></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">
@@ -1678,7 +1678,7 @@ hb_font_get_glyph_h_kerning (<em class="parameter"><code><a class="link" href="h
</table></div>
</div>
<div class="refsect3">
-<a name="idp25662240"></a><h4>Returns</h4>
+<a name="idp25455680"></a><h4>Returns</h4>
<p></p>
</div>
<p class="since">Since 1.0</p>
@@ -1692,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="idp25676768"></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">
@@ -1719,7 +1719,7 @@ hb_font_get_glyph_h_origin (<em class="parameter"><code><a class="link" href="ha
</table></div>
</div>
<div class="refsect3">
-<a name="idp25692592"></a><h4>Returns</h4>
+<a name="idp25486032"></a><h4>Returns</h4>
<p></p>
</div>
<p class="since">Since 1.0</p>
@@ -1736,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="idp25710640"></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">
@@ -1776,7 +1776,7 @@ hb_font_get_glyph_kerning_for_direction
<p>
</p>
<div class="refsect3">
-<a name="idp25742752"></a><h4>Returns</h4>
+<a name="idp25536256"></a><h4>Returns</h4>
<p></p>
</div>
</div>
@@ -1789,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="idp25756784"></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">
@@ -1811,7 +1811,7 @@ hb_font_get_glyph_name (<em class="parameter"><code><a class="link" href="harfbu
</table></div>
</div>
<div class="refsect3">
-<a name="idp25768896"></a><h4>Returns</h4>
+<a name="idp25562400"></a><h4>Returns</h4>
<p></p>
</div>
<p class="since">Since 1.0</p>
@@ -1829,7 +1829,7 @@ hb_font_get_glyph_name (<em class="parameter"><code><a class="link" href="harfbu
<p>
</p>
<div class="refsect3">
-<a name="idp25788480"></a><h4>Returns</h4>
+<a name="idp25581984"></a><h4>Returns</h4>
<p></p>
</div>
</div>
@@ -1844,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="idp25804160"></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">
@@ -1885,7 +1885,7 @@ hb_font_get_glyph_origin_for_direction
<p>
</p>
<div class="refsect3">
-<a name="idp25837968"></a><h4>Returns</h4>
+<a name="idp25631472"></a><h4>Returns</h4>
<p></p>
</div>
</div>
@@ -1896,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="idp25848496"></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">
@@ -1911,7 +1911,7 @@ hb_font_get_glyph_v_advance (<em class="parameter"><code><a class="link" href="h
</table></div>
</div>
<div class="refsect3">
-<a name="idp25856896"></a><h4>Returns</h4>
+<a name="idp25650336"></a><h4>Returns</h4>
<p></p>
</div>
<p class="since">Since 1.0</p>
@@ -1924,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="idp25869728"></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">
@@ -1939,7 +1939,7 @@ hb_font_get_glyph_v_kerning (<em class="parameter"><code><a class="link" href="h
</table></div>
</div>
<div class="refsect3">
-<a name="idp25878128"></a><h4>Returns</h4>
+<a name="idp25671504"></a><h4>Returns</h4>
<p></p>
</div>
<p class="since">Since 1.0</p>
@@ -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="idp25892592"></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">
@@ -1980,7 +1980,7 @@ hb_font_get_glyph_v_origin (<em class="parameter"><code><a class="link" href="ha
</table></div>
</div>
<div class="refsect3">
-<a name="idp25908416"></a><h4>Returns</h4>
+<a name="idp25701856"></a><h4>Returns</h4>
<p></p>
</div>
<p class="since">Since 1.0</p>
@@ -1991,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="idp25917776"></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">
@@ -2006,7 +2006,7 @@ hb_font_get_parent (<em class="parameter"><code><a class="link" href="harfbuzz-h
</table></div>
</div>
<div class="refsect3">
-<a name="idp25926176"></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>
@@ -2020,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="idp25940768"></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">
@@ -2056,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="idp25967872"></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">
@@ -2091,7 +2091,7 @@ hb_font_get_scale (<em class="parameter"><code><a class="link" href="harfbuzz-hb
hb_font_get_user_data (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-t"><span class="type">hb_font_t</span></a> *font</code></em>,
<em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-user-data-key-t"><span class="type">hb_user_data_key_t</span></a> *key</code></em>);</pre>
<div class="refsect3">
-<a name="idp25993280"></a><h4>Parameters</h4>
+<a name="idp25786848"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -2106,7 +2106,7 @@ hb_font_get_user_data (<em class="parameter"><code><a class="link" href="harfbuz
</table></div>
</div>
<div class="refsect3">
-<a name="idp26001680"></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>
@@ -2121,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="idp26017984"></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">
@@ -2148,7 +2148,7 @@ hb_font_glyph_from_string (<em class="parameter"><code><a class="link" href="har
</table></div>
</div>
<div class="refsect3">
-<a name="idp26033808"></a><h4>Returns</h4>
+<a name="idp25827376"></a><h4>Returns</h4>
<p></p>
</div>
<p class="since">Since 1.0</p>
@@ -2162,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="idp26048448"></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">
@@ -2191,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="idp26068512"></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">
@@ -2206,7 +2206,7 @@ hb_font_is_immutable (<em class="parameter"><code><a class="link" href="harfbuzz
</table></div>
</div>
<div class="refsect3">
-<a name="idp26076912"></a><h4>Returns</h4>
+<a name="idp25870480"></a><h4>Returns</h4>
<p></p>
</div>
<p class="since">Since 1.0</p>
@@ -2217,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="idp26086288"></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">
@@ -2239,7 +2239,7 @@ hb_font_make_immutable (<em class="parameter"><code><a class="link" href="harfbu
<pre class="programlisting"><a class="link" href="harfbuzz-hb-font.html#hb-font-t"><span class="returnvalue">hb_font_t</span></a> *
hb_font_reference (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.html#hb-font-t"><span class="type">hb_font_t</span></a> *font</code></em>);</pre>
<div class="refsect3">
-<a name="idp26102624"></a><h4>Parameters</h4>
+<a name="idp25896192"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -2254,7 +2254,7 @@ hb_font_reference (<em class="parameter"><code><a class="link" href="harfbuzz-hb
</table></div>
</div>
<div class="refsect3">
-<a name="idp26111024"></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>
@@ -2269,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="idp26127008"></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">
@@ -2300,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="idp26151456"></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">
@@ -2331,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="idp26175696"></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">
@@ -2355,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="idp26195376"></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">
@@ -2381,7 +2381,7 @@ hb_font_set_user_data (<em class="parameter"><code><a class="link" href="harfbuz
<em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-destroy-func-t" title="hb_destroy_func_t ()"><span class="type">hb_destroy_func_t</span></a> destroy</code></em>,
<em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="type">hb_bool_t</span></a> replace</code></em>);</pre>
<div class="refsect3">
-<a name="idp26218448"></a><h4>Parameters</h4>
+<a name="idp26012016"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -2396,7 +2396,7 @@ hb_font_set_user_data (<em class="parameter"><code><a class="link" href="harfbuz
</table></div>
</div>
<div class="refsect3">
-<a name="idp26226848"></a><h4>Returns</h4>
+<a name="idp26020416"></a><h4>Returns</h4>
<p></p>
</div>
<p class="since">Since 1.0</p>
@@ -2412,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="idp26243200"></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">
@@ -2450,7 +2450,7 @@ hb_font_subtract_glyph_origin_for_direction
<p>
</p>
<div class="refsect3">
-<a name="idp26271920"></a><h4>Returns</h4>
+<a name="idp26065488"></a><h4>Returns</h4>
<p></p>
</div>
</div>
diff --git a/docs/reference/html/harfbuzz-hb-ft.html b/docs/reference/html/harfbuzz-hb-ft.html
index 5194725..910af86 100644
--- a/docs/reference/html/harfbuzz-hb-ft.html
+++ b/docs/reference/html/harfbuzz-hb-ft.html
@@ -95,7 +95,7 @@
hb_ft_face_create (<em class="parameter"><code><span class="type">FT_Face</span> ft_face</code></em>,
<em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-destroy-func-t" title="hb_destroy_func_t ()"><span class="type">hb_destroy_func_t</span></a> destroy</code></em>);</pre>
<div class="refsect3">
-<a name="idp15898752"></a><h4>Parameters</h4>
+<a name="idp18589520"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -110,7 +110,7 @@ hb_ft_face_create (<em class="parameter"><code><span class="type">FT_Face</span>
</table></div>
</div>
<div class="refsect3">
-<a name="idp12575376"></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>
@@ -122,7 +122,7 @@ 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="idp26678384"></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>
@@ -135,7 +135,7 @@ hb_ft_face_create_cached (<em class="parameter"><code><span class="type">FT_Face
hb_ft_font_create (<em class="parameter"><code><span class="type">FT_Face</span> ft_face</code></em>,
<em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-destroy-func-t" title="hb_destroy_func_t ()"><span class="type">hb_destroy_func_t</span></a> destroy</code></em>);</pre>
<div class="refsect3">
-<a name="idp19378304"></a><h4>Parameters</h4>
+<a name="idp18930768"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -150,7 +150,7 @@ hb_ft_font_create (<em class="parameter"><code><span class="type">FT_Face</span>
</table></div>
</div>
<div class="refsect3">
-<a name="idp24573216"></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>
@@ -164,7 +164,7 @@ hb_ft_font_get_face (<em class="parameter"><code><a class="link" href="harfbuzz-
<p>
</p>
<div class="refsect3">
-<a name="idp26520048"></a><h4>Returns</h4>
+<a name="idp26507392"></a><h4>Returns</h4>
<p></p>
</div>
</div>
diff --git a/docs/reference/html/harfbuzz-hb-glib.html b/docs/reference/html/harfbuzz-hb-glib.html
index d8ebd68..03ab919 100644
--- a/docs/reference/html/harfbuzz-hb-glib.html
+++ b/docs/reference/html/harfbuzz-hb-glib.html
@@ -80,7 +80,7 @@ hb_glib_get_unicode_funcs (<em class="parameter"><code><span class="type">void</
<p>
</p>
<div class="refsect3">
-<a name="idp17205360"></a><h4>Returns</h4>
+<a name="idp18673488"></a><h4>Returns</h4>
<p></p>
</div>
</div>
@@ -92,7 +92,7 @@ hb_glib_script_from_script (<em class="parameter"><code><a class="link" href="ha
<p>
</p>
<div class="refsect3">
-<a name="idp15952992"></a><h4>Returns</h4>
+<a name="idp19415904"></a><h4>Returns</h4>
<p></p>
</div>
</div>
@@ -104,7 +104,7 @@ hb_glib_script_to_script (<em class="parameter"><code><span class="type">GUnicod
<p>
</p>
<div class="refsect3">
-<a name="idp17801872"></a><h4>Returns</h4>
+<a name="idp16666160"></a><h4>Returns</h4>
<p></p>
</div>
</div>
diff --git a/docs/reference/html/harfbuzz-hb-graphite2.html b/docs/reference/html/harfbuzz-hb-graphite2.html
index cc51db9..2c57cac 100644
--- a/docs/reference/html/harfbuzz-hb-graphite2.html
+++ b/docs/reference/html/harfbuzz-hb-graphite2.html
@@ -85,7 +85,7 @@ hb_graphite2_face_get_gr_face (<em class="parameter"><code><a class="link" href=
<p>
</p>
<div class="refsect3">
-<a name="idp9994096"></a><h4>Returns</h4>
+<a name="idp14441472"></a><h4>Returns</h4>
<p></p>
</div>
</div>
@@ -97,7 +97,7 @@ hb_graphite2_font_get_gr_font (<em class="parameter"><code><a class="link" href=
<p>
</p>
<div class="refsect3">
-<a name="idp18663728"></a><h4>Returns</h4>
+<a name="idp23104224"></a><h4>Returns</h4>
<p></p>
</div>
</div>
diff --git a/docs/reference/html/harfbuzz-hb-icu.html b/docs/reference/html/harfbuzz-hb-icu.html
index 77c031c..307aeb2 100644
--- a/docs/reference/html/harfbuzz-hb-icu.html
+++ b/docs/reference/html/harfbuzz-hb-icu.html
@@ -80,7 +80,7 @@ hb_icu_get_unicode_funcs (<em class="parameter"><code><span class="type">void</s
<p>
</p>
<div class="refsect3">
-<a name="idp14261024"></a><h4>Returns</h4>
+<a name="idp14126544"></a><h4>Returns</h4>
<p></p>
</div>
</div>
@@ -92,7 +92,7 @@ hb_icu_script_from_script (<em class="parameter"><code><a class="link" href="har
<p>
</p>
<div class="refsect3">
-<a name="idp24211888"></a><h4>Returns</h4>
+<a name="idp20698224"></a><h4>Returns</h4>
<p></p>
</div>
</div>
@@ -104,7 +104,7 @@ hb_icu_script_to_script (<em class="parameter"><code><span class="type">UScriptC
<p>
</p>
<div class="refsect3">
-<a name="idp14646672"></a><h4>Returns</h4>
+<a name="idp16604368"></a><h4>Returns</h4>
<p></p>
</div>
</div>
diff --git a/docs/reference/html/harfbuzz-hb-ot-layout.html b/docs/reference/html/harfbuzz-hb-ot-layout.html
index 32a2663..d7231db 100644
--- a/docs/reference/html/harfbuzz-hb-ot-layout.html
+++ b/docs/reference/html/harfbuzz-hb-ot-layout.html
@@ -319,7 +319,7 @@ hb_ot_layout_feature_get_lookups (<em class="parameter"><code><a class="link" hr
<p>
</p>
<div class="refsect3">
-<a name="idp23755552"></a><h4>Returns</h4>
+<a name="idp26122576"></a><h4>Returns</h4>
<p></p>
</div>
</div>
@@ -335,7 +335,7 @@ hb_ot_layout_get_attach_points (<em class="parameter"><code><a class="link" href
<p>
</p>
<div class="refsect3">
-<a name="idp23771216"></a><h4>Returns</h4>
+<a name="idp26138240"></a><h4>Returns</h4>
<p></p>
</div>
</div>
@@ -348,7 +348,7 @@ hb_ot_layout_get_glyph_class (<em class="parameter"><code><a class="link" href="
<p>
</p>
<div class="refsect3">
-<a name="idp23781312"></a><h4>Returns</h4>
+<a name="idp26148336"></a><h4>Returns</h4>
<p></p>
</div>
</div>
@@ -375,7 +375,7 @@ hb_ot_layout_get_ligature_carets (<em class="parameter"><code><a class="link" hr
<p>
</p>
<div class="refsect3">
-<a name="idp23808736"></a><h4>Returns</h4>
+<a name="idp26175760"></a><h4>Returns</h4>
<p></p>
</div>
</div>
@@ -392,7 +392,7 @@ hb_ot_layout_get_size_params (<em class="parameter"><code><a class="link" href="
<p>
</p>
<div class="refsect3">
-<a name="idp23826208"></a><h4>Returns</h4>
+<a name="idp26193232"></a><h4>Returns</h4>
<p></p>
</div>
</div>
@@ -408,7 +408,7 @@ hb_ot_layout_get_size_params (<em class="parameter"><code><a class="link" href="
<p>
</p>
<div class="refsect3">
-<a name="idp23842928"></a><h4>Returns</h4>
+<a name="idp26209952"></a><h4>Returns</h4>
<p></p>
</div>
</div>
@@ -420,7 +420,7 @@ hb_ot_layout_has_glyph_classes (<em class="parameter"><code><a class="link" href
<p>
</p>
<div class="refsect3">
-<a name="idp23851360"></a><h4>Returns</h4>
+<a name="idp26218384"></a><h4>Returns</h4>
<p></p>
</div>
</div>
@@ -432,7 +432,7 @@ hb_ot_layout_has_positioning (<em class="parameter"><code><a class="link" href="
<p>
</p>
<div class="refsect3">
-<a name="idp23859792"></a><h4>Returns</h4>
+<a name="idp26226816"></a><h4>Returns</h4>
<p></p>
</div>
</div>
@@ -444,7 +444,7 @@ hb_ot_layout_has_substitution (<em class="parameter"><code><a class="link" href=
<p>
</p>
<div class="refsect3">
-<a name="idp23868224"></a><h4>Returns</h4>
+<a name="idp26235248"></a><h4>Returns</h4>
<p></p>
</div>
</div>
@@ -461,7 +461,7 @@ hb_ot_layout_language_find_feature (<em class="parameter"><code><a class="link"
<p>
</p>
<div class="refsect3">
-<a name="idp23885344"></a><h4>Returns</h4>
+<a name="idp26252368"></a><h4>Returns</h4>
<p></p>
</div>
</div>
@@ -480,7 +480,7 @@ hb_ot_layout_language_get_feature_indexes
<p>
</p>
<div class="refsect3">
-<a name="idp23904336"></a><h4>Returns</h4>
+<a name="idp26271360"></a><h4>Returns</h4>
<p></p>
</div>
</div>
@@ -499,7 +499,7 @@ hb_ot_layout_language_get_feature_tags
<p>
</p>
<div class="refsect3">
-<a name="idp23923344"></a><h4>Returns</h4>
+<a name="idp26290368"></a><h4>Returns</h4>
<p></p>
</div>
</div>
@@ -552,7 +552,7 @@ hb_ot_layout_lookup_would_substitute (<em class="parameter"><code><a class="link
<p>
</p>
<div class="refsect3">
-<a name="idp23980784"></a><h4>Returns</h4>
+<a name="idp26347808"></a><h4>Returns</h4>
<p></p>
</div>
</div>
@@ -568,7 +568,7 @@ hb_ot_layout_script_find_language (<em class="parameter"><code><a class="link" h
<p>
</p>
<div class="refsect3">
-<a name="idp24314880"></a><h4>Returns</h4>
+<a name="idp23893888"></a><h4>Returns</h4>
<p></p>
</div>
</div>
@@ -585,7 +585,7 @@ hb_ot_layout_script_get_language_tags (<em class="parameter"><code><a class="lin
<p>
</p>
<div class="refsect3">
-<a name="idp24331840"></a><h4>Returns</h4>
+<a name="idp23910848"></a><h4>Returns</h4>
<p></p>
</div>
</div>
@@ -601,7 +601,7 @@ hb_ot_layout_table_choose_script (<em class="parameter"><code><a class="link" hr
<p>
</p>
<div class="refsect3">
-<a name="idp24347152"></a><h4>Returns</h4>
+<a name="idp23926160"></a><h4>Returns</h4>
<p></p>
</div>
</div>
@@ -616,7 +616,7 @@ hb_ot_layout_table_find_script (<em class="parameter"><code><a class="link" href
<p>
</p>
<div class="refsect3">
-<a name="idp24360656"></a><h4>Returns</h4>
+<a name="idp23939664"></a><h4>Returns</h4>
<p></p>
</div>
</div>
@@ -632,7 +632,7 @@ hb_ot_layout_table_get_feature_tags (<em class="parameter"><code><a class="link"
<p>
</p>
<div class="refsect3">
-<a name="idp24375904"></a><h4>Returns</h4>
+<a name="idp23954912"></a><h4>Returns</h4>
<p></p>
</div>
</div>
@@ -648,7 +648,7 @@ hb_ot_layout_table_get_script_tags (<em class="parameter"><code><a class="link"
<p>
</p>
<div class="refsect3">
-<a name="idp24391392"></a><h4>Returns</h4>
+<a name="idp23970400"></a><h4>Returns</h4>
<p></p>
</div>
</div>
@@ -725,7 +725,7 @@ hb_ot_shape_plan_collect_lookups (<em class="parameter"><code><a class="link" hr
<p>
</p>
<div class="refsect3">
-<a name="idp24443872"></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">
diff --git a/docs/reference/html/harfbuzz-hb-ot-tag.html b/docs/reference/html/harfbuzz-hb-ot-tag.html
index e909d29..058623f 100644
--- a/docs/reference/html/harfbuzz-hb-ot-tag.html
+++ b/docs/reference/html/harfbuzz-hb-ot-tag.html
@@ -107,7 +107,7 @@ hb_ot_tag_from_language (<em class="parameter"><code><a class="link" href="harfb
<p>
</p>
<div class="refsect3">
-<a name="idp17314176"></a><h4>Returns</h4>
+<a name="idp16597424"></a><h4>Returns</h4>
<p></p>
</div>
</div>
@@ -119,7 +119,7 @@ hb_ot_tag_to_language (<em class="parameter"><code><a class="link" href="harfbuz
<p>
</p>
<div class="refsect3">
-<a name="idp17962528"></a><h4>Returns</h4>
+<a name="idp15287904"></a><h4>Returns</h4>
<p></p>
</div>
</div>
@@ -131,7 +131,7 @@ hb_ot_tag_to_script (<em class="parameter"><code><a class="link" href="harfbuzz-
<p>
</p>
<div class="refsect3">
-<a name="idp20744864"></a><h4>Returns</h4>
+<a name="idp14593888"></a><h4>Returns</h4>
<p></p>
</div>
</div>
diff --git a/docs/reference/html/harfbuzz-hb-set.html b/docs/reference/html/harfbuzz-hb-set.html
index 3663879..87ce9bf 100644
--- a/docs/reference/html/harfbuzz-hb-set.html
+++ b/docs/reference/html/harfbuzz-hb-set.html
@@ -292,7 +292,7 @@
hb_set_add (<em class="parameter"><code><a class="link" href="harfbuzz-hb-set.html#hb-set-t"><span class="type">hb_set_t</span></a> *set</code></em>,
<em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-codepoint-t" title="hb_codepoint_t"><span class="type">hb_codepoint_t</span></a> codepoint</code></em>);</pre>
<div class="refsect3">
-<a name="idp23360080"></a><h4>Parameters</h4>
+<a name="idp20721456"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -316,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="idp23503168"></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">
@@ -338,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="idp23519440"></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">
@@ -353,7 +353,7 @@ hb_set_allocation_successful (<em class="parameter"><code>const <a class="link"
</table></div>
</div>
<div class="refsect3">
-<a name="idp23527840"></a><h4>Returns</h4>
+<a name="idp23207648"></a><h4>Returns</h4>
<p></p>
</div>
<p class="since">Since 1.0</p>
@@ -364,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="idp23536864"></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">
@@ -388,7 +388,7 @@ hb_set_create (<em class="parameter"><code><span class="type">void</span></code>
<p>
</p>
<div class="refsect3">
-<a name="idp23552176"></a><h4>Returns</h4>
+<a name="idp23231984"></a><h4>Returns</h4>
<p></p>
</div>
</div>
@@ -399,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="idp23562208"></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">
@@ -423,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="idp23581440"></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">
@@ -445,7 +445,7 @@ hb_set_del_range (<em class="parameter"><code><a class="link" href="harfbuzz-hb-
<pre class="programlisting"><span class="returnvalue">void</span>
hb_set_destroy (<em class="parameter"><code><a class="link" href="harfbuzz-hb-set.html#hb-set-t"><span class="type">hb_set_t</span></a> *set</code></em>);</pre>
<div class="refsect3">
-<a name="idp23597440"></a><h4>Parameters</h4>
+<a name="idp23277248"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -467,7 +467,7 @@ 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="idp23612832"></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>
@@ -480,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="idp23624144"></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">
@@ -495,7 +495,7 @@ hb_set_get_max (<em class="parameter"><code>const <a class="link" href="harfbuzz
</table></div>
</div>
<div class="refsect3">
-<a name="idp23632544"></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>
@@ -508,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="idp23644080"></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">
@@ -523,7 +523,7 @@ hb_set_get_min (<em class="parameter"><code>const <a class="link" href="harfbuzz
</table></div>
</div>
<div class="refsect3">
-<a name="idp23652480"></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>
@@ -536,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="idp23664176"></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">
@@ -551,7 +551,7 @@ hb_set_get_population (<em class="parameter"><code>const <a class="link" href="h
</table></div>
</div>
<div class="refsect3">
-<a name="idp23672576"></a><h4>Returns</h4>
+<a name="idp23352384"></a><h4>Returns</h4>
<p> set population.</p>
<p></p>
</div>
@@ -564,7 +564,7 @@ hb_set_get_population (<em class="parameter"><code>const <a class="link" href="h
hb_set_get_user_data (<em class="parameter"><code><a class="link" href="harfbuzz-hb-set.html#hb-set-t"><span class="type">hb_set_t</span></a> *set</code></em>,
<em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-user-data-key-t"><span class="type">hb_user_data_key_t</span></a> *key</code></em>);</pre>
<div class="refsect3">
-<a name="idp23683760"></a><h4>Parameters</h4>
+<a name="idp23363568"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -579,7 +579,7 @@ hb_set_get_user_data (<em class="parameter"><code><a class="link" href="harfbuzz
</table></div>
</div>
<div class="refsect3">
-<a name="idp23692160"></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>
@@ -592,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="idp23704576"></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">
@@ -607,7 +607,7 @@ hb_set_has (<em class="parameter"><code>const <a class="link" href="harfbuzz-hb-
</table></div>
</div>
<div class="refsect3">
-<a name="idp23712976"></a><h4>Returns</h4>
+<a name="idp23392784"></a><h4>Returns</h4>
<p></p>
</div>
<p class="since">Since 1.0</p>
@@ -619,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="idp23723792"></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">
@@ -641,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="idp23739792"></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">
@@ -663,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="idp26791456"></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">
@@ -678,7 +678,7 @@ hb_set_is_empty (<em class="parameter"><code>const <a class="link" href="harfbuz
</table></div>
</div>
<div class="refsect3">
-<a name="idp26798960"></a><h4>Returns</h4>
+<a name="idp26538736"></a><h4>Returns</h4>
<p></p>
</div>
<p class="since">Since 1.0</p>
@@ -690,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="idp26808416"></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">
@@ -705,7 +705,7 @@ hb_set_is_equal (<em class="parameter"><code>const <a class="link" href="harfbuz
</table></div>
</div>
<div class="refsect3">
-<a name="idp26815808"></a><h4>Returns</h4>
+<a name="idp26555696"></a><h4>Returns</h4>
<p></p>
</div>
<p class="since">Since 1.0</p>
@@ -717,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="idp26825120"></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">
@@ -739,7 +739,7 @@ hb_set_next (<em class="parameter"><code>const <a class="link" href="harfbuzz-hb
</table></div>
</div>
<div class="refsect3">
-<a name="idp26835952"></a><h4>Returns</h4>
+<a name="idp26575728"></a><h4>Returns</h4>
<p> whether there was a next value.</p>
<p></p>
</div>
@@ -757,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="idp26848880"></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">
@@ -784,7 +784,7 @@ are greater than current value of <em class="parameter"><code>last</code></em>
</table></div>
</div>
<div class="refsect3">
-<a name="idp26863040"></a><h4>Returns</h4>
+<a name="idp26602816"></a><h4>Returns</h4>
<p> whether there was a next range.</p>
<p></p>
</div>
@@ -796,7 +796,7 @@ are greater than current value of <em class="parameter"><code>last</code></em>
<pre class="programlisting"><a class="link" href="harfbuzz-hb-set.html#hb-set-t"><span class="returnvalue">hb_set_t</span></a> *
hb_set_reference (<em class="parameter"><code><a class="link" href="harfbuzz-hb-set.html#hb-set-t"><span class="type">hb_set_t</span></a> *set</code></em>);</pre>
<div class="refsect3">
-<a name="idp26871264"></a><h4>Parameters</h4>
+<a name="idp26611040"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -811,7 +811,7 @@ hb_set_reference (<em class="parameter"><code><a class="link" href="harfbuzz-hb-
</table></div>
</div>
<div class="refsect3">
-<a name="idp26878768"></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>
@@ -824,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="idp26889488"></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">
@@ -850,7 +850,7 @@ hb_set_set_user_data (<em class="parameter"><code><a class="link" href="harfbuzz
<em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-destroy-func-t" title="hb_destroy_func_t ()"><span class="type">hb_destroy_func_t</span></a> destroy</code></em>,
<em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="type">hb_bool_t</span></a> replace</code></em>);</pre>
<div class="refsect3">
-<a name="idp26909024"></a><h4>Parameters</h4>
+<a name="idp26648800"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -873,7 +873,7 @@ hb_set_set_user_data (<em class="parameter"><code><a class="link" href="harfbuzz
</table></div>
</div>
<div class="refsect3">
-<a name="idp26919424"></a><h4>Returns</h4>
+<a name="idp26659200"></a><h4>Returns</h4>
<p></p>
</div>
<p class="since">Since 1.0</p>
@@ -885,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="idp26928736"></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">
@@ -908,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="idp26944288"></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">
@@ -931,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="idp26959840"></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">
diff --git a/docs/reference/html/harfbuzz-hb-shape-plan.html b/docs/reference/html/harfbuzz-hb-shape-plan.html
index 0fd311f..d612552 100644
--- a/docs/reference/html/harfbuzz-hb-shape-plan.html
+++ b/docs/reference/html/harfbuzz-hb-shape-plan.html
@@ -151,7 +151,7 @@ hb_shape_plan_create (<em class="parameter"><code><a class="link" href="harfbuzz
<p>
</p>
<div class="refsect3">
-<a name="idp19672080"></a><h4>Returns</h4>
+<a name="idp14878704"></a><h4>Returns</h4>
<p></p>
</div>
</div>
@@ -165,7 +165,7 @@ hb_shape_plan_create_cached (<em class="parameter"><code><a class="link" href="h
<em class="parameter"><code>unsigned <span class="type">int</span> num_user_features</code></em>,
<em class="parameter"><code>const <span class="type">char</span> * const *shaper_list</code></em>);</pre>
<div class="refsect3">
-<a name="idp18027296"></a><h4>Parameters</h4>
+<a name="idp16920256"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -187,7 +187,7 @@ hb_shape_plan_create_cached (<em class="parameter"><code><a class="link" href="h
</table></div>
</div>
<div class="refsect3">
-<a name="idp21113632"></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>
@@ -199,7 +199,7 @@ hb_shape_plan_create_cached (<em class="parameter"><code><a class="link" href="h
<pre class="programlisting"><span class="returnvalue">void</span>
hb_shape_plan_destroy (<em class="parameter"><code><a class="link" href="harfbuzz-hb-shape-plan.html#hb-shape-plan-t"><span class="type">hb_shape_plan_t</span></a> *shape_plan</code></em>);</pre>
<div class="refsect3">
-<a name="idp18653136"></a><h4>Parameters</h4>
+<a name="idp16259760"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -225,7 +225,7 @@ hb_shape_plan_execute (<em class="parameter"><code><a class="link" href="harfbuz
<em class="parameter"><code>const <a class="link" href="harfbuzz-hb-shape.html#hb-feature-t"><span class="type">hb_feature_t</span></a> *features</code></em>,
<em class="parameter"><code>unsigned <span class="type">int</span> num_features</code></em>);</pre>
<div class="refsect3">
-<a name="idp26555664"></a><h4>Parameters</h4>
+<a name="idp24238496"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -257,7 +257,7 @@ hb_shape_plan_execute (<em class="parameter"><code><a class="link" href="harfbuz
</table></div>
</div>
<div class="refsect3">
-<a name="idp24004304"></a><h4>Returns</h4>
+<a name="idp23522512"></a><h4>Returns</h4>
<p></p>
</div>
<p class="since">Since 1.0</p>
@@ -268,7 +268,7 @@ 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="idp24012816"></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>
@@ -280,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="idp24023712"></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">
@@ -295,7 +295,7 @@ hb_shape_plan_get_shaper (<em class="parameter"><code><a class="link" href="harf
</table></div>
</div>
<div class="refsect3">
-<a name="idp24032112"></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>
@@ -308,7 +308,7 @@ hb_shape_plan_get_shaper (<em class="parameter"><code><a class="link" href="harf
hb_shape_plan_get_user_data (<em class="parameter"><code><a class="link" href="harfbuzz-hb-shape-plan.html#hb-shape-plan-t"><span class="type">hb_shape_plan_t</span></a> *shape_plan</code></em>,
<em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-user-data-key-t"><span class="type">hb_user_data_key_t</span></a> *key</code></em>);</pre>
<div class="refsect3">
-<a name="idp24044464"></a><h4>Parameters</h4>
+<a name="idp23562672"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -323,7 +323,7 @@ hb_shape_plan_get_user_data (<em class="parameter"><code><a class="link" href="h
</table></div>
</div>
<div class="refsect3">
-<a name="idp24052864"></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>
@@ -335,7 +335,7 @@ hb_shape_plan_get_user_data (<em class="parameter"><code><a class="link" href="h
<pre class="programlisting"><a class="link" href="harfbuzz-hb-shape-plan.html#hb-shape-plan-t"><span class="returnvalue">hb_shape_plan_t</span></a> *
hb_shape_plan_reference (<em class="parameter"><code><a class="link" href="harfbuzz-hb-shape-plan.html#hb-shape-plan-t"><span class="type">hb_shape_plan_t</span></a> *shape_plan</code></em>);</pre>
<div class="refsect3">
-<a name="idp24063584"></a><h4>Parameters</h4>
+<a name="idp23581792"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -350,7 +350,7 @@ hb_shape_plan_reference (<em class="parameter"><code><a class="link" href="harfb
</table></div>
</div>
<div class="refsect3">
-<a name="idp24071984"></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>
@@ -366,7 +366,7 @@ hb_shape_plan_set_user_data (<em class="parameter"><code><a class="link" href="h
<em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-destroy-func-t" title="hb_destroy_func_t ()"><span class="type">hb_destroy_func_t</span></a> destroy</code></em>,
<em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="type">hb_bool_t</span></a> replace</code></em>);</pre>
<div class="refsect3">
-<a name="idp24089232"></a><h4>Parameters</h4>
+<a name="idp23607440"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -381,7 +381,7 @@ hb_shape_plan_set_user_data (<em class="parameter"><code><a class="link" href="h
</table></div>
</div>
<div class="refsect3">
-<a name="idp24097632"></a><h4>Returns</h4>
+<a name="idp23615840"></a><h4>Returns</h4>
<p></p>
</div>
<p class="since">Since 1.0</p>
diff --git a/docs/reference/html/harfbuzz-hb-shape.html b/docs/reference/html/harfbuzz-hb-shape.html
index 288025d..c055347 100644
--- a/docs/reference/html/harfbuzz-hb-shape.html
+++ b/docs/reference/html/harfbuzz-hb-shape.html
@@ -115,7 +115,7 @@ hb_feature_from_string (<em class="parameter"><code>const <span class="type">cha
<em class="parameter"><code><span class="type">int</span> len</code></em>,
<em class="parameter"><code><a class="link" href="harfbuzz-hb-shape.html#hb-feature-t"><span class="type">hb_feature_t</span></a> *feature</code></em>);</pre>
<div class="refsect3">
-<a name="idp17629440"></a><h4>Parameters</h4>
+<a name="idp18031264"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -131,13 +131,13 @@ hb_feature_from_string (<em class="parameter"><code>const <span class="type">cha
<tr>
<td class="parameter_name"><p>feature</p></td>
<td class="parameter_description"><p>. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+<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="idp15995600"></a><h4>Returns</h4>
+<a name="idp17491264"></a><h4>Returns</h4>
<p></p>
</div>
<p class="since">Since 1.0</p>
@@ -150,7 +150,7 @@ hb_feature_to_string (<em class="parameter"><code><a class="link" href="harfbuzz
<em class="parameter"><code><span class="type">char</span> *buf</code></em>,
<em class="parameter"><code>unsigned <span class="type">int</span> size</code></em>);</pre>
<div class="refsect3">
-<a name="idp17672592"></a><h4>Parameters</h4>
+<a name="idp16212496"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -175,7 +175,7 @@ hb_shape (<em class="parameter"><code><a class="link" href="harfbuzz-hb-font.htm
<em class="parameter"><code>const <a class="link" href="harfbuzz-hb-shape.html#hb-feature-t"><span class="type">hb_feature_t</span></a> *features</code></em>,
<em class="parameter"><code>unsigned <span class="type">int</span> num_features</code></em>);</pre>
<div class="refsect3">
-<a name="idp16399600"></a><h4>Parameters</h4>
+<a name="idp20849744"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -213,7 +213,7 @@ hb_shape_full (<em class="parameter"><code><a class="link" href="harfbuzz-hb-fon
<em class="parameter"><code>unsigned <span class="type">int</span> num_features</code></em>,
<em class="parameter"><code>const <span class="type">char</span> * const *shaper_list</code></em>);</pre>
<div class="refsect3">
-<a name="idp14558768"></a><h4>Parameters</h4>
+<a name="idp20668592"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -245,7 +245,7 @@ hb_shape_full (<em class="parameter"><code><a class="link" href="harfbuzz-hb-fon
</table></div>
</div>
<div class="refsect3">
-<a name="idp22383984"></a><h4>Returns</h4>
+<a name="idp24215408"></a><h4>Returns</h4>
<p></p>
</div>
<p class="since">Since 1.0</p>
@@ -256,7 +256,7 @@ hb_shape_full (<em class="parameter"><code><a class="link" href="harfbuzz-hb-fon
<pre class="programlisting">const <span class="returnvalue">char</span> **
hb_shape_list_shapers (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
<div class="refsect3">
-<a name="idp22392608"></a><h4>Returns</h4>
+<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>
diff --git a/docs/reference/html/harfbuzz-hb-unicode.html b/docs/reference/html/harfbuzz-hb-unicode.html
index a5ee566..91358b2 100644
--- a/docs/reference/html/harfbuzz-hb-unicode.html
+++ b/docs/reference/html/harfbuzz-hb-unicode.html
@@ -356,7 +356,7 @@ hb_unicode_combining_class (<em class="parameter"><code><a class="link" href="ha
<p>
</p>
<div class="refsect3">
-<a name="idp19818576"></a><h4>Returns</h4>
+<a name="idp19583296"></a><h4>Returns</h4>
<p></p>
</div>
</div>
@@ -370,7 +370,7 @@ hb_unicode_combining_class (<em class="parameter"><code><a class="link" href="ha
<p>
</p>
<div class="refsect3">
-<a name="idp19831776"></a><h4>Returns</h4>
+<a name="idp19596496"></a><h4>Returns</h4>
<p></p>
</div>
</div>
@@ -383,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="idp19845040"></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">
@@ -405,7 +405,7 @@ hb_unicode_compose (<em class="parameter"><code><a class="link" href="harfbuzz-h
</table></div>
</div>
<div class="refsect3">
-<a name="idp19857152"></a><h4>Returns</h4>
+<a name="idp19621872"></a><h4>Returns</h4>
<p></p>
</div>
<p class="since">Since 1.0</p>
@@ -422,7 +422,7 @@ hb_unicode_compose (<em class="parameter"><code><a class="link" href="harfbuzz-h
<p>
</p>
<div class="refsect3">
-<a name="idp19874288"></a><h4>Returns</h4>
+<a name="idp19639008"></a><h4>Returns</h4>
<p></p>
</div>
</div>
@@ -435,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="idp19887632"></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">
@@ -462,7 +462,7 @@ hb_unicode_decompose (<em class="parameter"><code><a class="link" href="harfbuzz
</table></div>
</div>
<div class="refsect3">
-<a name="idp19903456"></a><h4>Returns</h4>
+<a name="idp19668176"></a><h4>Returns</h4>
<p></p>
</div>
<p class="since">Since 1.0</p>
@@ -475,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="idp19916016"></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">
@@ -497,7 +497,7 @@ hb_unicode_decompose_compatibility (<em class="parameter"><code><a class="link"
</table></div>
</div>
<div class="refsect3">
-<a name="idp19928128"></a><h4>Returns</h4>
+<a name="idp19692848"></a><h4>Returns</h4>
<p></p>
</div>
<p class="since">Since 1.0</p>
@@ -514,7 +514,7 @@ hb_unicode_decompose_compatibility (<em class="parameter"><code><a class="link"
<p>
</p>
<div class="refsect3">
-<a name="idp19945264"></a><h4>Returns</h4>
+<a name="idp19709984"></a><h4>Returns</h4>
<p></p>
</div>
</div>
@@ -527,7 +527,7 @@ hb_unicode_eastasian_width (<em class="parameter"><code><a class="link" href="ha
<p>
</p>
<div class="refsect3">
-<a name="idp19955504"></a><h4>Returns</h4>
+<a name="idp19720224"></a><h4>Returns</h4>
<p></p>
</div>
</div>
@@ -539,7 +539,7 @@ hb_unicode_funcs_create (<em class="parameter"><code><a class="link" href="harfb
<p>
</p>
<div class="refsect3">
-<a name="idp19963936"></a><h4>Returns</h4>
+<a name="idp19728656"></a><h4>Returns</h4>
<p></p>
</div>
</div>
@@ -549,7 +549,7 @@ hb_unicode_funcs_create (<em class="parameter"><code><a class="link" href="harfb
<pre class="programlisting"><span class="returnvalue">void</span>
hb_unicode_funcs_destroy (<em class="parameter"><code><a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-t"><span class="type">hb_unicode_funcs_t</span></a> *ufuncs</code></em>);</pre>
<div class="refsect3">
-<a name="idp19972448"></a><h4>Parameters</h4>
+<a name="idp19737168"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -573,7 +573,7 @@ hb_unicode_funcs_get_default (<em class="parameter"><code><span class="type">voi
<p>
</p>
<div class="refsect3">
-<a name="idp19987856"></a><h4>Returns</h4>
+<a name="idp19752576"></a><h4>Returns</h4>
<p></p>
</div>
</div>
@@ -583,7 +583,7 @@ 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="idp19995760"></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>
@@ -595,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="idp20006480"></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">
@@ -610,7 +610,7 @@ hb_unicode_funcs_get_parent (<em class="parameter"><code><a class="link" href="h
</table></div>
</div>
<div class="refsect3">
-<a name="idp20014880"></a><h4>Returns</h4>
+<a name="idp19779600"></a><h4>Returns</h4>
<p></p>
</div>
<p class="since">Since 1.0</p>
@@ -622,7 +622,7 @@ hb_unicode_funcs_get_parent (<em class="parameter"><code><a class="link" href="h
hb_unicode_funcs_get_user_data (<em class="parameter"><code><a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-t"><span class="type">hb_unicode_funcs_t</span></a> *ufuncs</code></em>,
<em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-user-data-key-t"><span class="type">hb_user_data_key_t</span></a> *key</code></em>);</pre>
<div class="refsect3">
-<a name="idp20025632"></a><h4>Parameters</h4>
+<a name="idp19790352"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -637,7 +637,7 @@ hb_unicode_funcs_get_user_data (<em class="parameter"><code><a class="link" href
</table></div>
</div>
<div class="refsect3">
-<a name="idp20034032"></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>
@@ -649,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="idp21543488"></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">
@@ -664,7 +664,7 @@ hb_unicode_funcs_is_immutable (<em class="parameter"><code><a class="link" href=
</table></div>
</div>
<div class="refsect3">
-<a name="idp21550992"></a><h4>Returns</h4>
+<a name="idp20966128"></a><h4>Returns</h4>
<p></p>
</div>
<p class="since">Since 1.0</p>
@@ -675,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="idp21558784"></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">
@@ -697,7 +697,7 @@ hb_unicode_funcs_make_immutable (<em class="parameter"><code><a class="link" hre
<pre class="programlisting"><a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-t"><span class="returnvalue">hb_unicode_funcs_t</span></a> *
hb_unicode_funcs_reference (<em class="parameter"><code><a class="link" href="harfbuzz-hb-unicode.html#hb-unicode-funcs-t"><span class="type">hb_unicode_funcs_t</span></a> *ufuncs</code></em>);</pre>
<div class="refsect3">
-<a name="idp21572816"></a><h4>Parameters</h4>
+<a name="idp20987952"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -712,7 +712,7 @@ hb_unicode_funcs_reference (<em class="parameter"><code><a class="link" href="ha
</table></div>
</div>
<div class="refsect3">
-<a name="idp21580320"></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>
@@ -728,7 +728,7 @@ 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="idp21593648"></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">
@@ -753,7 +753,7 @@ 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="idp21611808"></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">
@@ -779,7 +779,7 @@ 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="idp21629968"></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">
@@ -804,7 +804,7 @@ 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="idp21648128"></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">
@@ -830,7 +830,7 @@ 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="idp21666288"></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">
@@ -856,7 +856,7 @@ 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="idp21684448"></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">
@@ -881,7 +881,7 @@ 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="idp21702608"></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">
@@ -906,7 +906,7 @@ 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="idp21720768"></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">
@@ -932,7 +932,7 @@ hb_unicode_funcs_set_user_data (<em class="parameter"><code><a class="link" href
<em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-destroy-func-t" title="hb_destroy_func_t ()"><span class="type">hb_destroy_func_t</span></a> destroy</code></em>,
<em class="parameter"><code><a class="link" href="harfbuzz-hb-common.html#hb-bool-t" title="hb_bool_t"><span class="type">hb_bool_t</span></a> replace</code></em>);</pre>
<div class="refsect3">
-<a name="idp21740304"></a><h4>Parameters</h4>
+<a name="idp21155328"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -947,7 +947,7 @@ hb_unicode_funcs_set_user_data (<em class="parameter"><code><a class="link" href
</table></div>
</div>
<div class="refsect3">
-<a name="idp21747808"></a><h4>Returns</h4>
+<a name="idp21162832"></a><h4>Returns</h4>
<p></p>
</div>
<p class="since">Since 1.0</p>
@@ -961,7 +961,7 @@ hb_unicode_general_category (<em class="parameter"><code><a class="link" href="h
<p>
</p>
<div class="refsect3">
-<a name="idp21756896"></a><h4>Returns</h4>
+<a name="idp21171920"></a><h4>Returns</h4>
<p></p>
</div>
</div>
@@ -975,7 +975,7 @@ hb_unicode_general_category (<em class="parameter"><code><a class="link" href="h
<p>
</p>
<div class="refsect3">
-<a name="idp21768192"></a><h4>Returns</h4>
+<a name="idp21183216"></a><h4>Returns</h4>
<p></p>
</div>
</div>
@@ -988,7 +988,7 @@ hb_unicode_mirroring (<em class="parameter"><code><a class="link" href="harfbuzz
<p>
</p>
<div class="refsect3">
-<a name="idp21777952"></a><h4>Returns</h4>
+<a name="idp21191760"></a><h4>Returns</h4>
<p></p>
</div>
</div>
@@ -1002,7 +1002,7 @@ hb_unicode_mirroring (<em class="parameter"><code><a class="link" href="harfbuzz
<p>
</p>
<div class="refsect3">
-<a name="idp21791664"></a><h4>Returns</h4>
+<a name="idp21203056"></a><h4>Returns</h4>
<p></p>
</div>
</div>
@@ -1015,7 +1015,7 @@ hb_unicode_script (<em class="parameter"><code><a class="link" href="harfbuzz-hb
<p>
</p>
<div class="refsect3">
-<a name="idp21801936"></a><h4>Returns</h4>
+<a name="idp21211600"></a><h4>Returns</h4>
<p></p>
</div>
</div>
@@ -1029,7 +1029,7 @@ hb_unicode_script (<em class="parameter"><code><a class="link" href="harfbuzz-hb
<p>
</p>
<div class="refsect3">
-<a name="idp21815648"></a><h4>Returns</h4>
+<a name="idp21222896"></a><h4>Returns</h4>
<p></p>
</div>
</div>
@@ -1041,7 +1041,7 @@ hb_unicode_script (<em class="parameter"><code><a class="link" href="harfbuzz-hb
<p>
</p>
<div class="refsect3">
-<a name="idp21822720"></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">
@@ -1352,7 +1352,7 @@ hb_unicode_script (<em class="parameter"><code><a class="link" href="harfbuzz-hb
<p>
</p>
<div class="refsect3">
-<a name="idp22023440"></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">
diff --git a/docs/reference/html/harfbuzz-hb-uniscribe.html b/docs/reference/html/harfbuzz-hb-uniscribe.html
index eb90c9f..3b9645a 100644
--- a/docs/reference/html/harfbuzz-hb-uniscribe.html
+++ b/docs/reference/html/harfbuzz-hb-uniscribe.html
@@ -72,7 +72,7 @@ hb_uniscribe_font_get_hfont (<em class="parameter"><code><a class="link" href="h
<p>
</p>
<div class="refsect3">
-<a name="idp18176784"></a><h4>Returns</h4>
+<a name="idp26513136"></a><h4>Returns</h4>
<p></p>
</div>
</div>
@@ -84,7 +84,7 @@ hb_uniscribe_font_get_logfontw (<em class="parameter"><code><a class="link" href
<p>
</p>
<div class="refsect3">
-<a name="idp19749248"></a><h4>Returns</h4>
+<a name="idp15442704"></a><h4>Returns</h4>
<p></p>
</div>
</div>
diff --git a/docs/reference/html/harfbuzz-hb-version.html b/docs/reference/html/harfbuzz-hb-version.html
index a20d726..3438e91 100644
--- a/docs/reference/html/harfbuzz-hb-version.html
+++ b/docs/reference/html/harfbuzz-hb-version.html
@@ -98,7 +98,7 @@ hb_version (<em class="parameter"><code>unsigned <span class="type">int</span> *
<em class="parameter"><code>unsigned <span class="type">int</span> *minor</code></em>,
<em class="parameter"><code>unsigned <span class="type">int</span> *micro</code></em>);</pre>
<div class="refsect3">
-<a name="idp17096464"></a><h4>Parameters</h4>
+<a name="idp16699792"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -133,7 +133,7 @@ hb_version (<em class="parameter"><code>unsigned <span class="type">int</span> *
hb_version_string (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
<p>Returns library version as a string with three components.</p>
<div class="refsect3">
-<a name="idp21398048"></a><h4>Returns</h4>
+<a name="idp14950384"></a><h4>Returns</h4>
<p> library version string.</p>
<p></p>
</div>
@@ -152,7 +152,7 @@ hb_version_string (<em class="parameter"><code><span class="type">void</span></c
<hr>
<div class="refsect2">
<a name="HB-VERSION-MICRO:CAPS"></a><h3>HB_VERSION_MICRO</h3>
-<pre class="programlisting">#define HB_VERSION_MICRO 35
+<pre class="programlisting">#define HB_VERSION_MICRO 40
</pre>
<p>
</p>
@@ -168,7 +168,7 @@ hb_version_string (<em class="parameter"><code><span class="type">void</span></c
<hr>
<div class="refsect2">
<a name="HB-VERSION-STRING:CAPS"></a><h3>HB_VERSION_STRING</h3>
-<pre class="programlisting">#define HB_VERSION_STRING "0.9.35"
+<pre class="programlisting">#define HB_VERSION_STRING "0.9.40"
</pre>
<p>
</p>
diff --git a/docs/reference/html/harfbuzz.devhelp2 b/docs/reference/html/harfbuzz.devhelp2
index 4fdf9d4..10bb40c 100644
--- a/docs/reference/html/harfbuzz.devhelp2
+++ b/docs/reference/html/harfbuzz.devhelp2
@@ -156,7 +156,7 @@
<keyword type="struct" name="hb_glyph_info_t" link="harfbuzz-hb-buffer.html#hb-glyph-info-t-struct"/>
<keyword type="struct" name="hb_glyph_position_t" link="harfbuzz-hb-buffer.html#hb-glyph-position-t-struct"/>
<keyword type="struct" name="hb_segment_properties_t" link="harfbuzz-hb-buffer.html#hb-segment-properties-t-struct"/>
- <keyword type="function" name="hb_blob_create ()" link="harfbuzz-hb-blob.html#hb-blob-create"/>
+ <keyword type="function" name="hb_blob_create ()" 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"/>
diff --git a/docs/reference/html/index.html b/docs/reference/html/index.html
index d5cc2bb..772db71 100644
--- a/docs/reference/html/index.html
+++ b/docs/reference/html/index.html
@@ -15,7 +15,7 @@
<div>
<div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">HarfBuzz Reference Manual</p></th></tr></table></div>
<div><p class="releaseinfo">
- for HarfBuzz 0.9.35
+ for HarfBuzz 0.9.40
.
</p></div>
diff --git a/docs/reference/html/index.sgml b/docs/reference/html/index.sgml
index e9d29e0..7b469b5 100644
--- a/docs/reference/html/index.sgml
+++ b/docs/reference/html/index.sgml
@@ -485,10 +485,10 @@
<ANCHOR id="harfbuzz-hb-gobject.description" href="harfbuzz/harfbuzz-hb-gobject.html#harfbuzz-hb-gobject.description">
<ANCHOR id="harfbuzz-hb-gobject.functions_details" href="harfbuzz/harfbuzz-hb-gobject.html#harfbuzz-hb-gobject.functions_details">
<ANCHOR id="harfbuzz-hb-gobject.other_details" href="harfbuzz/harfbuzz-hb-gobject.html#harfbuzz-hb-gobject.other_details">
-<ANCHOR id="annotation-glossterm-allow-none" href="harfbuzz/annotation-glossary.html#annotation-glossterm-allow-none">
<ANCHOR id="annotation-glossterm-array" href="harfbuzz/annotation-glossary.html#annotation-glossterm-array">
<ANCHOR id="annotation-glossterm-closure" href="harfbuzz/annotation-glossary.html#annotation-glossterm-closure">
<ANCHOR id="annotation-glossterm-destroy" href="harfbuzz/annotation-glossary.html#annotation-glossterm-destroy">
+<ANCHOR id="annotation-glossterm-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">
diff --git a/docs/reference/version.xml b/docs/reference/version.xml
index 8e99e29..f81283f 100644
--- a/docs/reference/version.xml
+++ b/docs/reference/version.xml
@@ -1 +1 @@
-0.9.35
+0.9.40
diff --git a/src/Makefile.am b/src/Makefile.am
index ba07ac5..c99967f 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -13,6 +13,9 @@ DISTCHECK_CONFIGURE_FLAGS = --enable-introspection
# The following warning options are useful for debugging: -Wpadded
#AM_CXXFLAGS =
+# Convenience targets:
+lib: libharfbuzz.la
+
lib_LTLIBRARIES = libharfbuzz.la
HBCFLAGS =
@@ -234,8 +237,8 @@ hb-gobject-enums.%: hb-gobject-enums.%.tmpl $(HBHEADERS)
$(AM_V_GEN) $(GLIB_MKENUMS) \
--identifier-prefix hb_ --symbol-prefix hb_gobject \
--template $^ | \
- sed 's/_t_get_type/_get_type/g; s/_T (/ (/g' > "$@.tmp" && \
- mv "$@.tmp" "$@" || ( $(RM) "@.tmp" && false )
+ sed 's/_t_get_type/_get_type/g; s/_T (/ (/g' > "$@" \
+ || ($(RM) "$@"; false)
endif
EXTRA_DIST += \
harfbuzz-gobject.pc.in \
@@ -251,8 +254,8 @@ EXTRA_DIST += \
-e 's@%libdir%@$(libdir)@g' \
-e 's@%includedir%@$(includedir)@g' \
-e 's@%VERSION%@$(VERSION)@g' \
- "$<" \
- > "$@.tmp" && mv "$@.tmp" "$@" || ( $(RM) "$@.tmp"; false )
+ "$<" > "$@" \
+ || ($(RM) "$@"; false)
CLEANFILES += $(pkgconfig_DATA)
@@ -265,8 +268,9 @@ harfbuzz.def: $(HBHEADERS) $(HBNODISTHEADERS)
sed -e 's/ (.*//' | \
LANG=C sort; \
echo LIBRARY libharfbuzz-$(HB_VERSION_MAJOR).dll; \
- ) >"$@.tmp"
- @ ! grep -q hb_ERROR "$@.tmp" && mv "$@.tmp" "$@" || ($(RM) "$@"; false)
+ ) >"$@"
+ @ ! grep -q hb_ERROR "$@" \
+ || ($(RM) "$@"; false)
GENERATORS = \
@@ -278,26 +282,25 @@ EXTRA_DIST += $(GENERATORS)
unicode-tables: arabic-table indic-table
indic-table: gen-indic-table.py IndicSyllabicCategory.txt IndicMatraCategory.txt Blocks.txt
- $(AM_V_GEN) $(builddir)/$^ > hb-ot-shape-complex-indic-table.cc.tmp && \
- mv hb-ot-shape-complex-indic-table.cc.tmp $(srcdir)/hb-ot-shape-complex-indic-table.cc || \
- ($(RM) hb-ot-shape-complex-indic-table.cc.tmp; false)
+ $(AM_V_GEN) $(builddir)/$^ > hb-ot-shape-complex-indic-table.cc \
+ || ($(RM) hb-ot-shape-complex-indic-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.tmp && \
- mv hb-ot-shape-complex-arabic-table.hh.tmp $(srcdir)/hb-ot-shape-complex-arabic-table.hh || \
- ($(RM) hb-ot-shape-complex-arabic-table.hh.tmp; false)
+ $(AM_V_GEN) $(builddir)/$^ > hb-ot-shape-complex-arabic-table.hh \
+ || ($(RM) hb-ot-shape-complex-arabic-table.hh; false)
built-sources: $(BUILT_SOURCES)
.PHONY: unicode-tables arabic-table indic-table built-sources
-BUILT_SOURCES += \
- hb-buffer-deserialize-json.hh \
- hb-buffer-deserialize-text.hh \
- hb-ot-shape-complex-indic-machine.hh \
- hb-ot-shape-complex-myanmar-machine.hh \
- hb-ot-shape-complex-sea-machine.hh \
+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-sea-machine.hh \
$(NULL)
+BUILT_SOURCES += $(RAGEL_GENERATED)
EXTRA_DIST += \
hb-buffer-deserialize-json.rl \
hb-buffer-deserialize-text.rl \
@@ -305,9 +308,10 @@ EXTRA_DIST += \
hb-ot-shape-complex-myanmar-machine.rl \
hb-ot-shape-complex-sea-machine.rl \
$(NULL)
-.rl.hh:
- $(AM_V_GEN)$(RAGEL) -e -F1 -o "$@.tmp" "$<" && \
- mv "$@.tmp" "$@" || ( $(RM) "$@.tmp" && false )
+MAINTAINERCLEANFILES += $(RAGEL_GENERATED)
+$(srcdir)/%.hh: $(srcdir)/%.rl
+ $(AM_V_GEN)(cd $(srcdir) && $(RAGEL) -e -F1 -o "$*.hh" "$*.rl") \
+ || ($(RM) "$@"; false)
noinst_PROGRAMS = \
main \
diff --git a/src/Makefile.in b/src/Makefile.in
index 703d994..bd923e6 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -861,11 +861,7 @@ top_srcdir = @top_srcdir@
NULL =
SUBDIRS = $(am__append_26)
DIST_SUBDIRS = hb-ucdn
-BUILT_SOURCES = $(am__append_37) hb-buffer-deserialize-json.hh \
- hb-buffer-deserialize-text.hh \
- hb-ot-shape-complex-indic-machine.hh \
- hb-ot-shape-complex-myanmar-machine.hh \
- hb-ot-shape-complex-sea-machine.hh $(NULL)
+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 \
@@ -875,11 +871,8 @@ EXTRA_DIST = harfbuzz.pc.in harfbuzz-icu.pc.in harfbuzz-gobject.pc.in \
hb-ot-shape-complex-sea-machine.rl $(NULL)
CLEANFILES = $(pkgconfig_DATA) harfbuzz.def $(am__append_39)
DISTCLEANFILES = $(am__append_38)
-MAINTAINERCLEANFILES =
+MAINTAINERCLEANFILES = $(RAGEL_GENERATED)
DISTCHECK_CONFIGURE_FLAGS = --enable-introspection
-
-# The following warning options are useful for debugging: -Wpadded
-#AM_CXXFLAGS =
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) \
@@ -943,6 +936,14 @@ GENERATORS = \
gen-indic-table.py \
$(NULL)
+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-sea-machine.hh \
+ $(NULL)
+
main_SOURCES = main.cc
main_CPPFLAGS = $(HBCFLAGS)
main_LDADD = libharfbuzz.la $(HBLIBS)
@@ -1014,7 +1015,7 @@ all: $(BUILT_SOURCES)
$(MAKE) $(AM_MAKEFLAGS) all-recursive
.SUFFIXES:
-.SUFFIXES: .cc .hh .lo .log .o .obj .rl .test .test$(EXEEXT) .trs
+.SUFFIXES: .cc .lo .log .o .obj .test .test$(EXEEXT) .trs
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
@@ -2223,12 +2224,18 @@ uninstall-am: uninstall-binPROGRAMS uninstall-girDATA \
uninstall-pkgconfigDATA uninstall-pkgincludeHEADERS \
uninstall-typelibDATA
+
+# The following warning options are useful for debugging: -Wpadded
+#AM_CXXFLAGS =
+
+# Convenience targets:
+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 \
@HAVE_GOBJECT_TRUE@ --template $^ | \
-@HAVE_GOBJECT_TRUE@ sed 's/_t_get_type/_get_type/g; s/_T (/ (/g' > "$@.tmp" && \
-@HAVE_GOBJECT_TRUE@ mv "$@.tmp" "$@" || ( $(RM) "@.tmp" && false )
+@HAVE_GOBJECT_TRUE@ sed 's/_t_get_type/_get_type/g; s/_T (/ (/g' > "$@" \
+@HAVE_GOBJECT_TRUE@ || ($(RM) "$@"; false)
%.pc: %.pc.in $(top_builddir)/config.status
$(AM_V_GEN) \
@@ -2237,8 +2244,8 @@ uninstall-am: uninstall-binPROGRAMS uninstall-girDATA \
-e 's@%libdir%@$(libdir)@g' \
-e 's@%includedir%@$(includedir)@g' \
-e 's@%VERSION%@$(VERSION)@g' \
- "$<" \
- > "$@.tmp" && mv "$@.tmp" "$@" || ( $(RM) "$@.tmp"; false )
+ "$<" > "$@" \
+ || ($(RM) "$@"; false)
harfbuzz.def: $(HBHEADERS) $(HBNODISTHEADERS)
$(AM_V_GEN) (echo EXPORTS; \
(cat $^ || echo 'hb_ERROR ()' ) | \
@@ -2246,27 +2253,26 @@ harfbuzz.def: $(HBHEADERS) $(HBNODISTHEADERS)
sed -e 's/ (.*//' | \
LANG=C sort; \
echo LIBRARY libharfbuzz-$(HB_VERSION_MAJOR).dll; \
- ) >"$@.tmp"
- @ ! grep -q hb_ERROR "$@.tmp" && mv "$@.tmp" "$@" || ($(RM) "$@"; false)
+ ) >"$@"
+ @ ! grep -q hb_ERROR "$@" \
+ || ($(RM) "$@"; false)
unicode-tables: arabic-table indic-table
indic-table: gen-indic-table.py IndicSyllabicCategory.txt IndicMatraCategory.txt Blocks.txt
- $(AM_V_GEN) $(builddir)/$^ > hb-ot-shape-complex-indic-table.cc.tmp && \
- mv hb-ot-shape-complex-indic-table.cc.tmp $(srcdir)/hb-ot-shape-complex-indic-table.cc || \
- ($(RM) hb-ot-shape-complex-indic-table.cc.tmp; false)
+ $(AM_V_GEN) $(builddir)/$^ > hb-ot-shape-complex-indic-table.cc \
+ || ($(RM) hb-ot-shape-complex-indic-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.tmp && \
- mv hb-ot-shape-complex-arabic-table.hh.tmp $(srcdir)/hb-ot-shape-complex-arabic-table.hh || \
- ($(RM) hb-ot-shape-complex-arabic-table.hh.tmp; false)
+ $(AM_V_GEN) $(builddir)/$^ > hb-ot-shape-complex-arabic-table.hh \
+ || ($(RM) hb-ot-shape-complex-arabic-table.hh; false)
built-sources: $(BUILT_SOURCES)
.PHONY: unicode-tables arabic-table indic-table built-sources
-.rl.hh:
- $(AM_V_GEN)$(RAGEL) -e -F1 -o "$@.tmp" "$<" && \
- mv "$@.tmp" "$@" || ( $(RM) "$@.tmp" && false )
+$(srcdir)/%.hh: $(srcdir)/%.rl
+ $(AM_V_GEN)(cd $(srcdir) && $(RAGEL) -e -F1 -o "$*.hh" "$*.rl") \
+ || ($(RM) "$@"; false)
@HAVE_INTROSPECTION_TRUE@-include $(INTROSPECTION_MAKEFILE)
diff --git a/src/check-defs.sh b/src/check-defs.sh
index 357347f..65a2467 100755
--- a/src/check-defs.sh
+++ b/src/check-defs.sh
@@ -21,7 +21,7 @@ for def in $defs; do
lib=`echo "$def" | sed 's/[.]def$//;s@.*/@@'`
so=.libs/lib${lib}.so
- EXPORTED_SYMBOLS="`nm "$so" | grep ' [BCDGINRSTVW] ' | grep -v ' _fini\>\| _init\>\| _fdata\>\| _ftext\>\| _fbss\>\| __bss_start\>\| __bss_start__\>\| __bss_end__\>\| _edata\>\| _end\>\| _bss_end__\>\| __end__\>' | cut -d' ' -f3`"
+ EXPORTED_SYMBOLS="`nm "$so" | grep ' [BCDGINRSTVW] ' | grep -v ' _fini\>\| _init\>\| _fdata\>\| _ftext\>\| _fbss\>\| __bss_start\>\| __bss_start__\>\| __bss_end__\>\| _edata\>\| _end\>\| _bss_end__\>\| __end__\>\| __gcov_flush\>\| llvm_' | cut -d' ' -f3`"
if test -f "$so"; then
diff --git a/src/check-libstdc++.sh b/src/check-libstdc++.sh
index e7e0e29..27deb42 100755
--- a/src/check-libstdc++.sh
+++ b/src/check-libstdc++.sh
@@ -17,14 +17,14 @@ fi
tested=false
for suffix in so dylib; do
so=.libs/libharfbuzz.$suffix
- if test -f "$so"; then
- 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
+ if ! test -f "$so"; then continue; fi
+
+ 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
done
if ! $tested; then
echo "check-libstdc++.sh: libharfbuzz shared library not found; skipping test"
diff --git a/src/check-static-inits.sh b/src/check-static-inits.sh
index 83d02c8..1446fa7 100755
--- a/src/check-static-inits.sh
+++ b/src/check-static-inits.sh
@@ -22,8 +22,8 @@ fi
echo "Checking that no object file has static initializers"
for obj in $OBJS; do
- if objdump -t "$obj" | grep '[.]ctors'; then
- echo "Ouch, $obj has static initializers"
+ if objdump -t "$obj" | grep '[.][cd]tors' | grep -v '\<00*\>'; then
+ echo "Ouch, $obj has static initializers/finalizers"
stat=1
fi
done
diff --git a/src/check-symbols.sh b/src/check-symbols.sh
index e000b01..b2bf43f 100755
--- a/src/check-symbols.sh
+++ b/src/check-symbols.sh
@@ -16,11 +16,17 @@ fi
echo "Checking that we are not exposing internal symbols"
tested=false
-for so in `ls .libs/lib*.so .libs/lib*.dylib 2>/dev/null` ; do
+for suffix in so dylib; do
+ so=.libs/libharfbuzz.$suffix
+ if ! test -f "$so"; then continue; fi
- EXPORTED_SYMBOLS="`nm "$so" | grep ' [BCDGINRSTVW] ' | grep -v ' _fini\>\| _init\>\| _fdata\>\| _ftext\>\| _fbss\>\| __bss_start\>\| __bss_start__\>\| __bss_end__\>\| _edata\>\| _end\>\| _bss_end__\>\| __end__\>' | cut -d' ' -f3`"
+ EXPORTED_SYMBOLS="`nm "$so" | grep ' [BCDGINRSTVW] ' | grep -v ' _fini\>\| _init\>\| _fdata\>\| _ftext\>\| _fbss\>\| __bss_start\>\| __bss_start__\>\| __bss_end__\>\| _edata\>\| _end\>\| _bss_end__\>\| __end__\>\| __gcov_flush\>\| llvm_' | cut -d' ' -f3`"
+
prefix=`basename "$so" | sed 's/libharfbuzz/hb/; s/-/_/g; s/[.].*//'`
+ # On mac, C symbols are prefixed with _
+ if test $suffix = dylib; then prefix="_$prefix"; fi
+
echo "Processing $so"
if echo "$EXPORTED_SYMBOLS" | grep -v "^${prefix}_"; then
echo "Ouch, internal symbols exposed"
diff --git a/src/gen-indic-table.py b/src/gen-indic-table.py
index 4fb76f4..f5716bd 100755
--- a/src/gen-indic-table.py
+++ b/src/gen-indic-table.py
@@ -209,7 +209,7 @@ for p in sorted(pages):
for (start,end) in zip (starts, ends):
if p not in [start>>page_bits, end>>page_bits]: continue
offset = "indic_offset_0x%04xu" % start
- print " if (hb_in_range (u, 0x%04Xu, 0x%04Xu)) return indic_table[u - 0x%04Xu + %s];" % (start, end, start, offset)
+ print " if (hb_in_range (u, 0x%04Xu, 0x%04Xu)) return indic_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,%s);" % (u, short[0][d[0]], short[1][d[1]])
diff --git a/src/hb-blob.cc b/src/hb-blob.cc
index b82b4b2..8759a25 100644
--- a/src/hb-blob.cc
+++ b/src/hb-blob.cc
@@ -78,8 +78,8 @@ _hb_blob_destroy_user_data (hb_blob_t *blob)
}
/**
- * hb_blob_create: (Xconstructor)
- * @data: (array length=length) (closure user_data) (destroy destroy) (scope notified) (transfer none): Pointer to blob data.
+ * hb_blob_create: (skip)
+ * @data: Pointer to blob data.
* @length: Length of @data in bytes.
* @mode: Memory mode for @data.
* @user_data: Data parameter to pass to @destroy.
@@ -102,7 +102,10 @@ hb_blob_create (const char *data,
{
hb_blob_t *blob;
- if (!length || !(blob = hb_object_create<hb_blob_t> ())) {
+ if (!length ||
+ length >= 1u << 31 ||
+ data + length < data /* overflows */ ||
+ !(blob = hb_object_create<hb_blob_t> ())) {
if (destroy)
destroy (user_data);
return hb_blob_get_empty ();
diff --git a/src/hb-buffer-deserialize-json.hh b/src/hb-buffer-deserialize-json.hh
index dead700..3f626bd 100644
--- a/src/hb-buffer-deserialize-json.hh
+++ b/src/hb-buffer-deserialize-json.hh
@@ -1,5 +1,5 @@
-#line 1 "../../src/hb-buffer-deserialize-json.rl"
+#line 1 "hb-buffer-deserialize-json.rl"
/*
* Copyright © 2013 Google, Inc.
*
@@ -32,7 +32,7 @@
#include "hb-private.hh"
-#line 36 "hb-buffer-deserialize-json.hh.tmp"
+#line 36 "hb-buffer-deserialize-json.hh"
static const unsigned char _deserialize_json_trans_keys[] = {
0u, 0u, 9u, 123u, 9u, 34u, 97u, 103u, 120u, 121u, 34u, 34u, 9u, 58u, 9u, 57u,
48u, 57u, 9u, 125u, 9u, 125u, 9u, 125u, 34u, 34u, 9u, 58u, 9u, 57u, 48u, 57u,
@@ -435,7 +435,7 @@ static const int deserialize_json_error = 0;
static const int deserialize_json_en_main = 1;
-#line 97 "../../src/hb-buffer-deserialize-json.rl"
+#line 97 "hb-buffer-deserialize-json.rl"
static hb_bool_t
@@ -459,15 +459,15 @@ _hb_buffer_deserialize_glyphs_json (hb_buffer_t *buffer,
const char *tok = NULL;
int cs;
- hb_glyph_info_t info;
- hb_glyph_position_t pos;
+ hb_glyph_info_t info = {0};
+ hb_glyph_position_t pos = {0};
-#line 466 "hb-buffer-deserialize-json.hh.tmp"
+#line 466 "hb-buffer-deserialize-json.hh"
{
cs = deserialize_json_start;
}
-#line 471 "hb-buffer-deserialize-json.hh.tmp"
+#line 471 "hb-buffer-deserialize-json.hh"
{
int _slen;
int _trans;
@@ -493,14 +493,14 @@ _resume:
switch ( _deserialize_json_trans_actions[_trans] ) {
case 1:
-#line 38 "../../src/hb-buffer-deserialize-json.rl"
+#line 38 "hb-buffer-deserialize-json.rl"
{
memset (&info, 0, sizeof (info));
memset (&pos , 0, sizeof (pos ));
}
break;
case 5:
-#line 43 "../../src/hb-buffer-deserialize-json.rl"
+#line 43 "hb-buffer-deserialize-json.rl"
{
buffer->add_info (info);
if (buffer->in_error)
@@ -510,13 +510,13 @@ _resume:
}
break;
case 2:
-#line 51 "../../src/hb-buffer-deserialize-json.rl"
+#line 51 "hb-buffer-deserialize-json.rl"
{
tok = p;
}
break;
case 14:
-#line 55 "../../src/hb-buffer-deserialize-json.rl"
+#line 55 "hb-buffer-deserialize-json.rl"
{
if (!hb_font_glyph_from_string (font,
tok, p - tok,
@@ -525,33 +525,33 @@ _resume:
}
break;
case 15:
-#line 62 "../../src/hb-buffer-deserialize-json.rl"
+#line 62 "hb-buffer-deserialize-json.rl"
{ if (!parse_uint (tok, p, &info.codepoint)) return false; }
break;
case 8:
-#line 63 "../../src/hb-buffer-deserialize-json.rl"
+#line 63 "hb-buffer-deserialize-json.rl"
{ if (!parse_uint (tok, p, &info.cluster )) return false; }
break;
case 10:
-#line 64 "../../src/hb-buffer-deserialize-json.rl"
+#line 64 "hb-buffer-deserialize-json.rl"
{ if (!parse_int (tok, p, &pos.x_offset )) return false; }
break;
case 12:
-#line 65 "../../src/hb-buffer-deserialize-json.rl"
+#line 65 "hb-buffer-deserialize-json.rl"
{ if (!parse_int (tok, p, &pos.y_offset )) return false; }
break;
case 3:
-#line 66 "../../src/hb-buffer-deserialize-json.rl"
+#line 66 "hb-buffer-deserialize-json.rl"
{ if (!parse_int (tok, p, &pos.x_advance)) return false; }
break;
case 6:
-#line 67 "../../src/hb-buffer-deserialize-json.rl"
+#line 67 "hb-buffer-deserialize-json.rl"
{ if (!parse_int (tok, p, &pos.y_advance)) return false; }
break;
case 16:
-#line 62 "../../src/hb-buffer-deserialize-json.rl"
+#line 62 "hb-buffer-deserialize-json.rl"
{ if (!parse_uint (tok, p, &info.codepoint)) return false; }
-#line 43 "../../src/hb-buffer-deserialize-json.rl"
+#line 43 "hb-buffer-deserialize-json.rl"
{
buffer->add_info (info);
if (buffer->in_error)
@@ -561,9 +561,9 @@ _resume:
}
break;
case 9:
-#line 63 "../../src/hb-buffer-deserialize-json.rl"
+#line 63 "hb-buffer-deserialize-json.rl"
{ if (!parse_uint (tok, p, &info.cluster )) return false; }
-#line 43 "../../src/hb-buffer-deserialize-json.rl"
+#line 43 "hb-buffer-deserialize-json.rl"
{
buffer->add_info (info);
if (buffer->in_error)
@@ -573,9 +573,9 @@ _resume:
}
break;
case 11:
-#line 64 "../../src/hb-buffer-deserialize-json.rl"
+#line 64 "hb-buffer-deserialize-json.rl"
{ if (!parse_int (tok, p, &pos.x_offset )) return false; }
-#line 43 "../../src/hb-buffer-deserialize-json.rl"
+#line 43 "hb-buffer-deserialize-json.rl"
{
buffer->add_info (info);
if (buffer->in_error)
@@ -585,9 +585,9 @@ _resume:
}
break;
case 13:
-#line 65 "../../src/hb-buffer-deserialize-json.rl"
+#line 65 "hb-buffer-deserialize-json.rl"
{ if (!parse_int (tok, p, &pos.y_offset )) return false; }
-#line 43 "../../src/hb-buffer-deserialize-json.rl"
+#line 43 "hb-buffer-deserialize-json.rl"
{
buffer->add_info (info);
if (buffer->in_error)
@@ -597,9 +597,9 @@ _resume:
}
break;
case 4:
-#line 66 "../../src/hb-buffer-deserialize-json.rl"
+#line 66 "hb-buffer-deserialize-json.rl"
{ if (!parse_int (tok, p, &pos.x_advance)) return false; }
-#line 43 "../../src/hb-buffer-deserialize-json.rl"
+#line 43 "hb-buffer-deserialize-json.rl"
{
buffer->add_info (info);
if (buffer->in_error)
@@ -609,9 +609,9 @@ _resume:
}
break;
case 7:
-#line 67 "../../src/hb-buffer-deserialize-json.rl"
+#line 67 "hb-buffer-deserialize-json.rl"
{ if (!parse_int (tok, p, &pos.y_advance)) return false; }
-#line 43 "../../src/hb-buffer-deserialize-json.rl"
+#line 43 "hb-buffer-deserialize-json.rl"
{
buffer->add_info (info);
if (buffer->in_error)
@@ -620,7 +620,7 @@ _resume:
*end_ptr = p;
}
break;
-#line 624 "hb-buffer-deserialize-json.hh.tmp"
+#line 624 "hb-buffer-deserialize-json.hh"
}
_again:
@@ -632,7 +632,7 @@ _again:
_out: {}
}
-#line 125 "../../src/hb-buffer-deserialize-json.rl"
+#line 125 "hb-buffer-deserialize-json.rl"
*end_ptr = p;
diff --git a/src/hb-buffer-deserialize-json.rl b/src/hb-buffer-deserialize-json.rl
index 7351b2a..91b350f 100644
--- a/src/hb-buffer-deserialize-json.rl
+++ b/src/hb-buffer-deserialize-json.rl
@@ -117,8 +117,8 @@ _hb_buffer_deserialize_glyphs_json (hb_buffer_t *buffer,
const char *tok = NULL;
int cs;
- hb_glyph_info_t info;
- hb_glyph_position_t pos;
+ hb_glyph_info_t info = {0};
+ hb_glyph_position_t pos = {0};
%%{
write init;
write exec;
diff --git a/src/hb-buffer-deserialize-text.hh b/src/hb-buffer-deserialize-text.hh
index a38efe3..7a46ab2 100644
--- a/src/hb-buffer-deserialize-text.hh
+++ b/src/hb-buffer-deserialize-text.hh
@@ -1,5 +1,5 @@
-#line 1 "../../src/hb-buffer-deserialize-text.rl"
+#line 1 "hb-buffer-deserialize-text.rl"
/*
* Copyright © 2013 Google, Inc.
*
@@ -32,7 +32,7 @@
#include "hb-private.hh"
-#line 36 "hb-buffer-deserialize-text.hh.tmp"
+#line 36 "hb-buffer-deserialize-text.hh"
static const unsigned char _deserialize_text_trans_keys[] = {
0u, 0u, 9u, 122u, 45u, 57u, 48u, 57u, 45u, 57u, 48u, 57u, 48u, 57u, 45u, 57u,
48u, 57u, 44u, 44u, 45u, 57u, 48u, 57u, 44u, 57u, 9u, 124u, 9u, 124u, 0u, 0u,
@@ -312,7 +312,7 @@ static const int deserialize_text_error = 0;
static const int deserialize_text_en_main = 1;
-#line 91 "../../src/hb-buffer-deserialize-text.rl"
+#line 91 "hb-buffer-deserialize-text.rl"
static hb_bool_t
@@ -339,12 +339,12 @@ _hb_buffer_deserialize_glyphs_text (hb_buffer_t *buffer,
hb_glyph_info_t info;
hb_glyph_position_t pos;
-#line 343 "hb-buffer-deserialize-text.hh.tmp"
+#line 343 "hb-buffer-deserialize-text.hh"
{
cs = deserialize_text_start;
}
-#line 348 "hb-buffer-deserialize-text.hh.tmp"
+#line 348 "hb-buffer-deserialize-text.hh"
{
int _slen;
int _trans;
@@ -370,13 +370,13 @@ _resume:
switch ( _deserialize_text_trans_actions[_trans] ) {
case 2:
-#line 51 "../../src/hb-buffer-deserialize-text.rl"
+#line 51 "hb-buffer-deserialize-text.rl"
{
tok = p;
}
break;
case 5:
-#line 55 "../../src/hb-buffer-deserialize-text.rl"
+#line 55 "hb-buffer-deserialize-text.rl"
{
if (!hb_font_glyph_from_string (font,
tok, p - tok,
@@ -385,41 +385,41 @@ _resume:
}
break;
case 10:
-#line 62 "../../src/hb-buffer-deserialize-text.rl"
+#line 62 "hb-buffer-deserialize-text.rl"
{ if (!parse_uint (tok, p, &info.cluster )) return false; }
break;
case 3:
-#line 63 "../../src/hb-buffer-deserialize-text.rl"
+#line 63 "hb-buffer-deserialize-text.rl"
{ if (!parse_int (tok, p, &pos.x_offset )) return false; }
break;
case 12:
-#line 64 "../../src/hb-buffer-deserialize-text.rl"
+#line 64 "hb-buffer-deserialize-text.rl"
{ if (!parse_int (tok, p, &pos.y_offset )) return false; }
break;
case 7:
-#line 65 "../../src/hb-buffer-deserialize-text.rl"
+#line 65 "hb-buffer-deserialize-text.rl"
{ if (!parse_int (tok, p, &pos.x_advance)) return false; }
break;
case 1:
-#line 38 "../../src/hb-buffer-deserialize-text.rl"
+#line 38 "hb-buffer-deserialize-text.rl"
{
memset (&info, 0, sizeof (info));
memset (&pos , 0, sizeof (pos ));
}
-#line 51 "../../src/hb-buffer-deserialize-text.rl"
+#line 51 "hb-buffer-deserialize-text.rl"
{
tok = p;
}
break;
case 4:
-#line 55 "../../src/hb-buffer-deserialize-text.rl"
+#line 55 "hb-buffer-deserialize-text.rl"
{
if (!hb_font_glyph_from_string (font,
tok, p - tok,
&info.codepoint))
return false;
}
-#line 43 "../../src/hb-buffer-deserialize-text.rl"
+#line 43 "hb-buffer-deserialize-text.rl"
{
buffer->add_info (info);
if (buffer->in_error)
@@ -429,9 +429,9 @@ _resume:
}
break;
case 9:
-#line 62 "../../src/hb-buffer-deserialize-text.rl"
+#line 62 "hb-buffer-deserialize-text.rl"
{ if (!parse_uint (tok, p, &info.cluster )) return false; }
-#line 43 "../../src/hb-buffer-deserialize-text.rl"
+#line 43 "hb-buffer-deserialize-text.rl"
{
buffer->add_info (info);
if (buffer->in_error)
@@ -441,9 +441,9 @@ _resume:
}
break;
case 11:
-#line 64 "../../src/hb-buffer-deserialize-text.rl"
+#line 64 "hb-buffer-deserialize-text.rl"
{ if (!parse_int (tok, p, &pos.y_offset )) return false; }
-#line 43 "../../src/hb-buffer-deserialize-text.rl"
+#line 43 "hb-buffer-deserialize-text.rl"
{
buffer->add_info (info);
if (buffer->in_error)
@@ -453,9 +453,9 @@ _resume:
}
break;
case 6:
-#line 65 "../../src/hb-buffer-deserialize-text.rl"
+#line 65 "hb-buffer-deserialize-text.rl"
{ if (!parse_int (tok, p, &pos.x_advance)) return false; }
-#line 43 "../../src/hb-buffer-deserialize-text.rl"
+#line 43 "hb-buffer-deserialize-text.rl"
{
buffer->add_info (info);
if (buffer->in_error)
@@ -465,9 +465,9 @@ _resume:
}
break;
case 8:
-#line 66 "../../src/hb-buffer-deserialize-text.rl"
+#line 66 "hb-buffer-deserialize-text.rl"
{ if (!parse_int (tok, p, &pos.y_advance)) return false; }
-#line 43 "../../src/hb-buffer-deserialize-text.rl"
+#line 43 "hb-buffer-deserialize-text.rl"
{
buffer->add_info (info);
if (buffer->in_error)
@@ -476,7 +476,7 @@ _resume:
*end_ptr = p;
}
break;
-#line 480 "hb-buffer-deserialize-text.hh.tmp"
+#line 480 "hb-buffer-deserialize-text.hh"
}
_again:
@@ -489,14 +489,14 @@ _again:
{
switch ( _deserialize_text_eof_actions[cs] ) {
case 4:
-#line 55 "../../src/hb-buffer-deserialize-text.rl"
+#line 55 "hb-buffer-deserialize-text.rl"
{
if (!hb_font_glyph_from_string (font,
tok, p - tok,
&info.codepoint))
return false;
}
-#line 43 "../../src/hb-buffer-deserialize-text.rl"
+#line 43 "hb-buffer-deserialize-text.rl"
{
buffer->add_info (info);
if (buffer->in_error)
@@ -506,9 +506,9 @@ _again:
}
break;
case 9:
-#line 62 "../../src/hb-buffer-deserialize-text.rl"
+#line 62 "hb-buffer-deserialize-text.rl"
{ if (!parse_uint (tok, p, &info.cluster )) return false; }
-#line 43 "../../src/hb-buffer-deserialize-text.rl"
+#line 43 "hb-buffer-deserialize-text.rl"
{
buffer->add_info (info);
if (buffer->in_error)
@@ -518,9 +518,9 @@ _again:
}
break;
case 11:
-#line 64 "../../src/hb-buffer-deserialize-text.rl"
+#line 64 "hb-buffer-deserialize-text.rl"
{ if (!parse_int (tok, p, &pos.y_offset )) return false; }
-#line 43 "../../src/hb-buffer-deserialize-text.rl"
+#line 43 "hb-buffer-deserialize-text.rl"
{
buffer->add_info (info);
if (buffer->in_error)
@@ -530,9 +530,9 @@ _again:
}
break;
case 6:
-#line 65 "../../src/hb-buffer-deserialize-text.rl"
+#line 65 "hb-buffer-deserialize-text.rl"
{ if (!parse_int (tok, p, &pos.x_advance)) return false; }
-#line 43 "../../src/hb-buffer-deserialize-text.rl"
+#line 43 "hb-buffer-deserialize-text.rl"
{
buffer->add_info (info);
if (buffer->in_error)
@@ -542,9 +542,9 @@ _again:
}
break;
case 8:
-#line 66 "../../src/hb-buffer-deserialize-text.rl"
+#line 66 "hb-buffer-deserialize-text.rl"
{ if (!parse_int (tok, p, &pos.y_advance)) return false; }
-#line 43 "../../src/hb-buffer-deserialize-text.rl"
+#line 43 "hb-buffer-deserialize-text.rl"
{
buffer->add_info (info);
if (buffer->in_error)
@@ -553,14 +553,14 @@ _again:
*end_ptr = p;
}
break;
-#line 557 "hb-buffer-deserialize-text.hh.tmp"
+#line 557 "hb-buffer-deserialize-text.hh"
}
}
_out: {}
}
-#line 119 "../../src/hb-buffer-deserialize-text.rl"
+#line 119 "hb-buffer-deserialize-text.rl"
*end_ptr = p;
diff --git a/src/hb-buffer.cc b/src/hb-buffer.cc
index 74ae273..b9fe263 100644
--- a/src/hb-buffer.cc
+++ b/src/hb-buffer.cc
@@ -443,7 +443,7 @@ hb_buffer_t::reverse_range (unsigned int start,
{
unsigned int i, j;
- if (start == end - 1)
+ if (end - start < 2)
return;
for (i = start, j = end - 1; i < j; i++, j--) {
@@ -454,7 +454,7 @@ hb_buffer_t::reverse_range (unsigned int start,
info[j] = t;
}
- if (pos) {
+ if (have_positions) {
for (i = start, j = end - 1; i < j; i++, j--) {
hb_glyph_position_t t;
@@ -1328,15 +1328,15 @@ hb_buffer_guess_segment_properties (hb_buffer_t *buffer)
buffer->guess_segment_properties ();
}
-template <bool validate, typename T>
+template <typename utf_t>
static inline void
hb_buffer_add_utf (hb_buffer_t *buffer,
- const T *text,
+ const typename utf_t::codepoint_t *text,
int text_length,
unsigned int item_offset,
int item_length)
{
- typedef hb_utf_t<T, true> utf_t;
+ typedef typename utf_t::codepoint_t T;
const hb_codepoint_t replacement = buffer->replacement;
assert (buffer->content_type == HB_BUFFER_CONTENT_TYPE_UNICODE ||
@@ -1400,7 +1400,7 @@ hb_buffer_add_utf (hb_buffer_t *buffer,
/**
* hb_buffer_add_utf8:
* @buffer: a buffer.
- * @text: (array length=text_length):
+ * @text: (array length=text_length) (element-type uint8_t):
* @text_length:
* @item_offset:
* @item_length:
@@ -1416,7 +1416,7 @@ hb_buffer_add_utf8 (hb_buffer_t *buffer,
unsigned int item_offset,
int item_length)
{
- hb_buffer_add_utf<true> (buffer, (const uint8_t *) text, text_length, item_offset, item_length);
+ hb_buffer_add_utf<hb_utf8_t> (buffer, (const uint8_t *) text, text_length, item_offset, item_length);
}
/**
@@ -1438,7 +1438,7 @@ hb_buffer_add_utf16 (hb_buffer_t *buffer,
unsigned int item_offset,
int item_length)
{
- hb_buffer_add_utf<true> (buffer, text, text_length, item_offset, item_length);
+ hb_buffer_add_utf<hb_utf16_t> (buffer, text, text_length, item_offset, item_length);
}
/**
@@ -1460,7 +1460,29 @@ hb_buffer_add_utf32 (hb_buffer_t *buffer,
unsigned int item_offset,
int item_length)
{
- hb_buffer_add_utf<true> (buffer, text, text_length, item_offset, item_length);
+ hb_buffer_add_utf<hb_utf32_t<> > (buffer, text, text_length, item_offset, item_length);
+}
+
+/**
+ * hb_buffer_add_latin1:
+ * @buffer: a buffer.
+ * @text: (array length=text_length) (element-type uint8_t):
+ * @text_length:
+ * @item_offset:
+ * @item_length:
+ *
+ *
+ *
+ * Since: 1.0
+ **/
+void
+hb_buffer_add_latin1 (hb_buffer_t *buffer,
+ const uint8_t *text,
+ int text_length,
+ unsigned int item_offset,
+ int item_length)
+{
+ hb_buffer_add_utf<hb_latin1_t> (buffer, text, text_length, item_offset, item_length);
}
/**
@@ -1482,7 +1504,7 @@ hb_buffer_add_codepoints (hb_buffer_t *buffer,
unsigned int item_offset,
int item_length)
{
- hb_buffer_add_utf<false> (buffer, text, text_length, item_offset, item_length);
+ hb_buffer_add_utf<hb_utf32_t<false> > (buffer, text, text_length, item_offset, item_length);
}
diff --git a/src/hb-buffer.h b/src/hb-buffer.h
index 7b0c920..e5b46d8 100644
--- a/src/hb-buffer.h
+++ b/src/hb-buffer.h
@@ -253,6 +253,14 @@ hb_buffer_add_utf32 (hb_buffer_t *buffer,
unsigned int item_offset,
int item_length);
+/* 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);
+
/* Like add_utf32 but does NOT check for invalid Unicode codepoints. */
void
hb_buffer_add_codepoints (hb_buffer_t *buffer,
diff --git a/src/hb-common.cc b/src/hb-common.cc
index a6a5144..05a1f9c 100644
--- a/src/hb-common.cc
+++ b/src/hb-common.cc
@@ -235,7 +235,7 @@ struct hb_language_item_t {
static hb_language_item_t *langs;
#ifdef HB_USE_ATEXIT
-static inline
+static
void free_langs (void)
{
while (langs) {
@@ -265,6 +265,7 @@ retry:
*lang = key;
if (!hb_atomic_ptr_cmpexch (&langs, first_lang, lang)) {
+ lang->finish ();
free (lang);
goto retry;
}
@@ -345,7 +346,7 @@ hb_language_get_default (void)
hb_language_t language = (hb_language_t) hb_atomic_ptr_get (&default_language);
if (unlikely (language == HB_LANGUAGE_INVALID)) {
language = hb_language_from_string (setlocale (LC_CTYPE, NULL), -1);
- hb_atomic_ptr_cmpexch (&default_language, HB_LANGUAGE_INVALID, language);
+ (void) hb_atomic_ptr_cmpexch (&default_language, HB_LANGUAGE_INVALID, language);
}
return default_language;
diff --git a/src/hb-coretext.cc b/src/hb-coretext.cc
index 9097cce..4a45175 100644
--- a/src/hb-coretext.cc
+++ b/src/hb-coretext.cc
@@ -140,6 +140,7 @@ hb_coretext_face_get_cg_font (hb_face_t *face)
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 *
@@ -154,7 +155,17 @@ _hb_coretext_shaper_font_data_create (hb_font_t *font)
hb_face_t *face = font->face;
hb_coretext_shaper_face_data_t *face_data = HB_SHAPER_DATA_GET (face);
- data->ct_font = CTFontCreateWithGraphicsFont (face_data, font->y_scale, NULL, NULL);
+ /* 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);
@@ -327,7 +338,7 @@ struct range_record_t {
#define kUpperCaseType 38
/* Table data courtesy of Apple. */
-struct feature_mapping_t {
+static const struct feature_mapping_t {
FourCharCode otFeatureTag;
uint16_t aatFeatureType;
uint16_t selectorToEnable;
@@ -776,6 +787,7 @@ retry:
buffer->len = 0;
uint32_t status_and = ~0, status_or = 0;
+ double advances_so_far = 0;
const CFRange range_all = CFRangeMake (0, 0);
@@ -786,6 +798,10 @@ retry:
status_or |= run_status;
status_and &= run_status;
DEBUG_MSG (CORETEXT, run, "CTRunStatus: %x", run_status);
+ double run_advance = CTRunGetTypographicBounds (run, range_all, NULL, NULL, NULL);
+ if (HB_DIRECTION_IS_VERTICAL (buffer->props.direction))
+ run_advance = -run_advance;
+ DEBUG_MSG (CORETEXT, run, "Run advance: %g", run_advance);
/* CoreText does automatic font fallback (AKA "cascading") for characters
* not supported by the requested font, and provides no way to turn it off,
@@ -860,8 +876,14 @@ retry:
goto resize_and_retry;
hb_glyph_info_t *info = buffer->info + buffer->len;
- CGGlyph notdef = 0;
- double advance = CTFontGetAdvancesForGlyphs (font_data->ct_font, kCTFontHorizontalOrientation, &notdef, NULL, 1);
+ hb_codepoint_t notdef = 0;
+ hb_direction_t dir = buffer->props.direction;
+ hb_position_t x_advance, y_advance, x_offset, y_offset;
+ hb_font_get_glyph_advance_for_direction (font, notdef, dir, &x_advance, &y_advance);
+ hb_font_get_glyph_origin_for_direction (font, notdef, dir, &x_offset, &y_offset);
+ hb_position_t advance = x_advance + y_advance;
+ x_offset = -x_offset;
+ y_offset = -y_offset;
unsigned int old_len = buffer->len;
for (CFIndex j = range.location; j < range.location + range.length; j++)
@@ -875,19 +897,22 @@ retry:
* for this one. */
continue;
}
+ if (buffer->unicode->is_default_ignorable (ch))
+ continue;
info->codepoint = notdef;
info->cluster = log_clusters[j];
info->mask = advance;
- info->var1.u32 = 0;
- info->var2.u32 = 0;
+ info->var1.u32 = x_offset;
+ info->var2.u32 = y_offset;
info++;
buffer->len++;
}
if (HB_DIRECTION_IS_BACKWARD (buffer->props.direction))
buffer->reverse_range (old_len, buffer->len);
+ advances_so_far += run_advance;
continue;
}
}
@@ -917,7 +942,7 @@ retry:
scratch_size = scratch_size_saved; \
scratch = scratch_saved;
- {
+ { /* Setup glyphs */
SCRATCH_SAVE();
const CGGlyph* glyphs = USE_PTR ? CTRunGetGlyphsPtr (run) : NULL;
if (!glyphs) {
@@ -941,6 +966,11 @@ retry:
SCRATCH_RESTORE();
}
{
+ /* Setup positions.
+ * Note that CoreText does not return advances for glyphs. As such,
+ * for all but last glyph, we use the delta position to next glyph as
+ * advance (in the advance direction only), and for last glyph we set
+ * whatever is needed to make the whole run's advance add up. */
SCRATCH_SAVE();
const CGPoint* positions = USE_PTR ? CTRunGetPositionsPtr (run) : NULL;
if (!positions) {
@@ -948,33 +978,42 @@ retry:
CTRunGetPositions (run, range_all, position_buf);
positions = position_buf;
}
- double run_advance = CTRunGetTypographicBounds (run, range_all, NULL, NULL, NULL);
- DEBUG_MSG (CORETEXT, run, "Run advance: %g", run_advance);
hb_glyph_info_t *info = run_info;
+ 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;
for (unsigned int j = 0; j < num_glyphs; j++)
{
- double advance = (j + 1 < num_glyphs ? positions[j + 1].x : positions[0].x + run_advance) - positions[j].x;
- info->mask = advance;
- info->var1.u32 = positions[0].x; /* Yes, zero. */
- info->var2.u32 = positions[j].y;
+ double advance;
+ if (likely (j + 1 < num_glyphs))
+ advance = positions[j + 1].x - positions[j].x;
+ else /* last glyph */
+ advance = run_advance - (positions[j].x - positions[0].x);
+ info->mask = advance * x_mult;
+ info->var1.u32 = x_offset;
+ info->var2.u32 = positions[j].y * y_mult;
info++;
}
}
else
{
- run_advance = -run_advance;
+ hb_position_t y_offset = (positions[0].y - advances_so_far) * y_mult;
for (unsigned int j = 0; j < num_glyphs; j++)
{
- double advance = (j + 1 < num_glyphs ? positions[j + 1].y : positions[0].y + run_advance) - positions[j].y;
- info->mask = advance;
- info->var1.u32 = positions[j].x;
- info->var2.u32 = positions[0].y; /* Yes, zero. */
+ double advance;
+ if (likely (j + 1 < num_glyphs))
+ advance = positions[j + 1].y - positions[j].y;
+ else /* last glyph */
+ advance = run_advance - (positions[j].y - positions[0].y);
+ info->mask = advance * y_mult;
+ info->var1.u32 = positions[j].x * x_mult;
+ info->var2.u32 = y_offset;
info++;
}
}
SCRATCH_RESTORE();
+ advances_so_far += run_advance;
}
#undef SCRATCH_RESTORE
#undef SCRATCH_SAVE
diff --git a/src/hb-face-private.hh b/src/hb-face-private.hh
index 6520d3d..c4266ff 100644
--- a/src/hb-face-private.hh
+++ b/src/hb-face-private.hh
@@ -66,7 +66,7 @@ struct hb_face_t {
{
hb_blob_t *blob;
- if (unlikely (!this || !reference_table_func))
+ if (unlikely (!reference_table_func))
return hb_blob_get_empty ();
blob = reference_table_func (/*XXX*/const_cast<hb_face_t *> (this), tag, user_data);
diff --git a/src/hb-ft.cc b/src/hb-ft.cc
index 16bf51f..322f93a 100644
--- a/src/hb-ft.cc
+++ b/src/hb-ft.cc
@@ -51,6 +51,13 @@
* 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
+ * 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 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.
*
* - In the future, we should add constructors to create fonts in font space?
@@ -70,12 +77,10 @@ hb_ft_get_glyph (hb_font_t *font HB_UNUSED,
{
FT_Face ft_face = (FT_Face) font_data;
-#ifdef HAVE_FT_FACE_GETCHARVARIANTINDEX
if (unlikely (variation_selector)) {
*glyph = FT_Face_GetCharVariantIndex (ft_face, unicode, variation_selector);
return *glyph != 0;
}
-#endif
*glyph = FT_Get_Char_Index (ft_face, unicode);
return *glyph != 0;
@@ -94,6 +99,9 @@ hb_ft_get_glyph_h_advance (hb_font_t *font HB_UNUSED,
if (unlikely (FT_Get_Advance (ft_face, glyph, load_flags, &v)))
return 0;
+ if (font->x_scale < 0)
+ v = -v;
+
return (v + (1<<9)) >> 10;
}
@@ -110,6 +118,9 @@ hb_ft_get_glyph_v_advance (hb_font_t *font HB_UNUSED,
if (unlikely (FT_Get_Advance (ft_face, glyph, load_flags, &v)))
return 0;
+ if (font->y_scale < 0)
+ v = -v;
+
/* Note: FreeType's vertical metrics grows downward while other FreeType coordinates
* have a Y growing upward. Hence the extra negation. */
return (-v + (1<<9)) >> 10;
@@ -136,7 +147,7 @@ hb_ft_get_glyph_v_origin (hb_font_t *font HB_UNUSED,
void *user_data HB_UNUSED)
{
FT_Face ft_face = (FT_Face) font_data;
- int load_flags = FT_LOAD_DEFAULT;
+ int load_flags = FT_LOAD_DEFAULT | FT_LOAD_NO_HINTING;
if (unlikely (FT_Load_Glyph (ft_face, glyph, load_flags)))
return false;
@@ -146,6 +157,11 @@ hb_ft_get_glyph_v_origin (hb_font_t *font HB_UNUSED,
*x = ft_face->glyph->metrics.horiBearingX - ft_face->glyph->metrics.vertBearingX;
*y = ft_face->glyph->metrics.horiBearingY - (-ft_face->glyph->metrics.vertBearingY);
+ if (font->x_scale < 0)
+ *x = -*x;
+ if (font->y_scale < 0)
+ *y = -*y;
+
return true;
}
@@ -185,7 +201,7 @@ hb_ft_get_glyph_extents (hb_font_t *font HB_UNUSED,
void *user_data HB_UNUSED)
{
FT_Face ft_face = (FT_Face) font_data;
- int load_flags = FT_LOAD_DEFAULT;
+ int load_flags = FT_LOAD_DEFAULT | FT_LOAD_NO_HINTING;
if (unlikely (FT_Load_Glyph (ft_face, glyph, load_flags)))
return false;
@@ -340,11 +356,7 @@ hb_ft_face_create (FT_Face ft_face,
blob = hb_blob_create ((const char *) ft_face->stream->base,
(unsigned int) ft_face->stream->size,
- /* TODO: We assume that it's mmap()'ed, but FreeType code
- * suggests that there are cases we reach here but font is
- * not mmapped. For example, when mmap() fails. No idea
- * how to deal with it better here. */
- HB_MEMORY_MODE_READONLY_MAY_MAKE_WRITABLE,
+ HB_MEMORY_MODE_READONLY,
ft_face, destroy);
face = hb_face_create (blob, ft_face->face_index);
hb_blob_destroy (blob);
@@ -358,6 +370,22 @@ hb_ft_face_create (FT_Face ft_face,
return face;
}
+/**
+ * hb_ft_face_create_referenced:
+ * @ft_face:
+ *
+ *
+ *
+ * Return value: (transfer full):
+ * Since: 1.0
+ **/
+hb_face_t *
+hb_ft_face_create_referenced (FT_Face ft_face)
+{
+ FT_Reference_Face (ft_face);
+ return hb_ft_face_create (ft_face, (hb_destroy_func_t) FT_Done_Face);
+}
+
static void
hb_ft_face_finalize (FT_Face ft_face)
{
@@ -420,23 +448,43 @@ hb_ft_font_create (FT_Face ft_face,
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));
+#if 0 /* hb-ft works in no-hinting model */
hb_font_set_ppem (font,
ft_face->size->metrics.x_ppem,
ft_face->size->metrics.y_ppem);
+#endif
return font;
}
+/**
+ * hb_ft_font_create_referenced:
+ * @ft_face:
+ *
+ *
+ *
+ * Return value: (transfer full):
+ * Since: 1.0
+ **/
+hb_font_t *
+hb_ft_font_create_referenced (FT_Face ft_face)
+{
+ FT_Reference_Face (ft_face);
+ return hb_ft_font_create (ft_face, (hb_destroy_func_t) FT_Done_Face);
+}
+
/* Thread-safe, lock-free, FT_Library */
static FT_Library ft_library;
-static inline
+#ifdef HB_USE_ATEXIT
+static
void free_ft_library (void)
{
FT_Done_FreeType (ft_library);
}
+#endif
static FT_Library
get_ft_library (void)
@@ -493,14 +541,19 @@ hb_ft_font_set_funcs (hb_font_t *font)
FT_Select_Charmap (ft_face, FT_ENCODING_UNICODE);
- assert (font->y_scale >= 0);
FT_Set_Char_Size (ft_face,
- font->x_scale, font->y_scale,
+ abs (font->x_scale), abs (font->y_scale),
0, 0);
#if 0
font->x_ppem * 72 * 64 / font->x_scale,
font->y_ppem * 72 * 64 / font->y_scale);
#endif
+ if (font->x_scale < 0 || font->y_scale < 0)
+ {
+ FT_Matrix matrix = { font->x_scale < 0 ? -1 : +1, 0,
+ 0, font->y_scale < 0 ? -1 : +1};
+ FT_Set_Transform (ft_face, &matrix, NULL);
+ }
ft_face->generic.data = blob;
ft_face->generic.finalizer = (FT_Generic_Finalizer) _release_blob;
diff --git a/src/hb-ft.h b/src/hb-ft.h
index 696251e..92f4b36 100644
--- a/src/hb-ft.h
+++ b/src/hb-ft.h
@@ -34,19 +34,76 @@
HB_BEGIN_DECLS
-/* Note: FreeType is not thread-safe. Hence, these functions are not either. */
+/*
+ * Note: FreeType is not thread-safe.
+ * Hence, these functions are not either.
+ */
+
+/*
+ * hb-face from ft-face.
+ */
+/* This one creates a new hb-face for given ft-face.
+ * When the returned hb-face is destroyed, the destroy
+ * callback is called (if not NULL), with the ft-face passed
+ * to it.
+ *
+ * The client is responsible to make sure that ft-face is
+ * destroyed after hb-face is destroyed.
+ *
+ * Most often you don't want this function. You should use either
+ * hb_ft_face_create_cached(), or hb_ft_face_create_referenced().
+ * In particular, if you are going to pass NULL as destroy, you
+ * probably should use (the more recent) hb_ft_face_create_referenced()
+ * instead.
+ */
hb_face_t *
hb_ft_face_create (FT_Face ft_face,
hb_destroy_func_t destroy);
+/* This version is like hb_ft_face_create(), except that it caches
+ * the hb-face using the generic pointer of the ft-face. This means
+ * that subsequent calls to this function with the same ft-face will
+ * return the same hb-face (correctly referenced).
+ *
+ * Client is still responsible for making sure that ft-face is destroyed
+ * after hb-face is.
+ */
hb_face_t *
hb_ft_face_create_cached (FT_Face ft_face);
+/* This version is like hb_ft_face_create(), except that it calls
+ * FT_Reference_Face() on ft-face, as such keeping ft-face alive
+ * as long as the hb-face is.
+ *
+ * This is the most convenient version to use. Use it unless you have
+ * very good reasons not to.
+ */
+hb_face_t *
+hb_ft_face_create_referenced (FT_Face ft_face);
+
+
+/*
+ * hb-font from ft-face.
+ */
+
+/*
+ * Note:
+ *
+ * Set face size on ft-face before creating hb-font from it.
+ * Otherwise hb-ft would NOT pick up the font size correctly.
+ */
+
+/* See notes on hb_ft_face_create(). Same issues re lifecycle-management
+ * apply here. Use hb_ft_font_create_referenced() if you can. */
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_font_t *
+hb_ft_font_create_referenced (FT_Face ft_face);
/* Makes an hb_font_t use FreeType internally to implement font functions. */
diff --git a/src/hb-glib.cc b/src/hb-glib.cc
index af43cab..61dff5e 100644
--- a/src/hb-glib.cc
+++ b/src/hb-glib.cc
@@ -382,3 +382,14 @@ hb_glib_get_unicode_funcs (void)
return const_cast<hb_unicode_funcs_t *> (&_hb_glib_unicode_funcs);
}
+hb_blob_t *
+hb_glib_blob_create (GBytes *gbytes)
+{
+ gsize size = 0;
+ gconstpointer data = g_bytes_get_data (gbytes, &size);
+ return hb_blob_create ((const char *) data,
+ size,
+ HB_MEMORY_MODE_READONLY,
+ g_bytes_ref (gbytes),
+ (hb_destroy_func_t) g_bytes_unref);
+}
diff --git a/src/hb-glib.h b/src/hb-glib.h
index 63a9d33..1a8f42e 100644
--- a/src/hb-glib.h
+++ b/src/hb-glib.h
@@ -46,6 +46,9 @@ hb_glib_script_from_script (hb_script_t script);
hb_unicode_funcs_t *
hb_glib_get_unicode_funcs (void);
+hb_blob_t *
+hb_glib_blob_create (GBytes *gbytes);
+
HB_END_DECLS
diff --git a/src/hb-icu.cc b/src/hb-icu.cc
index 86c8b5c..24cec9d 100644
--- a/src/hb-icu.cc
+++ b/src/hb-icu.cc
@@ -363,10 +363,8 @@ hb_icu_get_unicode_funcs (void)
if (!hb_atomic_ptr_get (&normalizer)) {
UErrorCode icu_err = U_ZERO_ERROR;
/* We ignore failure in getNFCInstace(). */
- hb_atomic_ptr_cmpexch (&normalizer, NULL, unorm2_getNFCInstance (&icu_err));
+ (void) hb_atomic_ptr_cmpexch (&normalizer, NULL, unorm2_getNFCInstance (&icu_err));
}
#endif
return const_cast<hb_unicode_funcs_t *> (&_hb_icu_unicode_funcs);
}
-
-
diff --git a/src/hb-mutex-private.hh b/src/hb-mutex-private.hh
index 6281201..a8ea39c 100644
--- a/src/hb-mutex-private.hh
+++ b/src/hb-mutex-private.hh
@@ -47,7 +47,11 @@
#include <windows.h>
typedef CRITICAL_SECTION hb_mutex_impl_t;
#define HB_MUTEX_IMPL_INIT {0}
+#if defined(WINAPI_FAMILY) && (WINAPI_FAMILY==WINAPI_FAMILY_PC_APP || WINAPI_FAMILY==WINAPI_FAMILY_PHONE_APP)
+#define hb_mutex_impl_init(M) InitializeCriticalSectionEx (M, 0, 0)
+#else
#define hb_mutex_impl_init(M) InitializeCriticalSection (M)
+#endif
#define hb_mutex_impl_lock(M) EnterCriticalSection (M)
#define hb_mutex_impl_unlock(M) LeaveCriticalSection (M)
#define hb_mutex_impl_finish(M) DeleteCriticalSection (M)
diff --git a/src/hb-object-private.hh b/src/hb-object-private.hh
index 8a9ae34..7bd0f16 100644
--- a/src/hb-object-private.hh
+++ b/src/hb-object-private.hh
@@ -68,8 +68,6 @@ struct hb_reference_count_t
#define HB_USER_DATA_ARRAY_INIT {HB_MUTEX_INIT, HB_LOCKABLE_SET_INIT}
struct hb_user_data_array_t
{
- /* TODO Add tracing. */
-
struct hb_user_data_item_t {
hb_user_data_key_t *key;
void *data;
@@ -106,69 +104,6 @@ struct hb_object_header_t
#define HB_OBJECT_HEADER_STATIC {HB_REFERENCE_COUNT_INVALID, HB_USER_DATA_ARRAY_INIT}
- static inline void *create (unsigned int size) {
- hb_object_header_t *obj = (hb_object_header_t *) calloc (1, size);
-
- if (likely (obj))
- obj->init ();
-
- return obj;
- }
-
- inline void init (void) {
- ref_count.init (1);
- user_data.init ();
- }
-
- inline bool is_inert (void) const {
- return unlikely (ref_count.is_invalid ());
- }
-
- inline void reference (void) {
- if (unlikely (!this || this->is_inert ()))
- return;
- ref_count.inc ();
- }
-
- inline bool destroy (void) {
- if (unlikely (!this || this->is_inert ()))
- return false;
- if (ref_count.dec () != 1)
- return false;
-
- ref_count.finish (); /* Do this before user_data */
- user_data.finish ();
-
- return true;
- }
-
- inline bool set_user_data (hb_user_data_key_t *key,
- void * data,
- hb_destroy_func_t destroy_func,
- hb_bool_t replace) {
- if (unlikely (!this || this->is_inert ()))
- return false;
-
- return user_data.set (key, data, destroy_func, replace);
- }
-
- inline void *get_user_data (hb_user_data_key_t *key) {
- if (unlikely (!this || this->is_inert ()))
- return NULL;
-
- return user_data.get (key);
- }
-
- inline void trace (const char *function) const {
- if (unlikely (!this)) return;
- /* TODO We cannot use DEBUG_MSG_FUNC here since that one currently only
- * prints the class name and throws away the template info. */
- DEBUG_MSG (OBJECT, (void *) this,
- "%s refcount=%d",
- function,
- this ? ref_count.ref_count : 0);
- }
-
private:
ASSERT_POD ();
};
@@ -179,32 +114,56 @@ struct hb_object_header_t
template <typename Type>
static inline void hb_object_trace (const Type *obj, const char *function)
{
- obj->header.trace (function);
+ DEBUG_MSG (OBJECT, (void *) obj,
+ "%s refcount=%d",
+ function,
+ obj ? obj->header.ref_count.ref_count : 0);
}
+
template <typename Type>
static inline Type *hb_object_create (void)
{
- Type *obj = (Type *) hb_object_header_t::create (sizeof (Type));
+ Type *obj = (Type *) calloc (1, sizeof (Type));
+
+ if (unlikely (!obj))
+ return obj;
+
+ hb_object_init (obj);
hb_object_trace (obj, HB_FUNC);
return obj;
}
template <typename Type>
+static inline void hb_object_init (Type *obj)
+{
+ obj->header.ref_count.init (1);
+ obj->header.user_data.init ();
+}
+template <typename Type>
static inline bool hb_object_is_inert (const Type *obj)
{
- return unlikely (obj->header.is_inert ());
+ return unlikely (obj->header.ref_count.is_invalid ());
}
template <typename Type>
static inline Type *hb_object_reference (Type *obj)
{
hb_object_trace (obj, HB_FUNC);
- obj->header.reference ();
+ if (unlikely (!obj || hb_object_is_inert (obj)))
+ return obj;
+ obj->header.ref_count.inc ();
return obj;
}
template <typename Type>
static inline bool hb_object_destroy (Type *obj)
{
hb_object_trace (obj, HB_FUNC);
- return obj->header.destroy ();
+ if (unlikely (!obj || hb_object_is_inert (obj)))
+ return false;
+ if (obj->header.ref_count.dec () != 1)
+ return false;
+
+ obj->header.ref_count.finish (); /* Do this before user_data */
+ obj->header.user_data.finish ();
+ return true;
}
template <typename Type>
static inline bool hb_object_set_user_data (Type *obj,
@@ -213,14 +172,18 @@ static inline bool hb_object_set_user_data (Type *obj,
hb_destroy_func_t destroy,
hb_bool_t replace)
{
- return obj->header.set_user_data (key, data, destroy, replace);
+ if (unlikely (!obj || hb_object_is_inert (obj)))
+ return false;
+ return obj->header.user_data.set (key, data, destroy, replace);
}
template <typename Type>
static inline void *hb_object_get_user_data (Type *obj,
hb_user_data_key_t *key)
{
- return obj->header.get_user_data (key);
+ if (unlikely (!obj || hb_object_is_inert (obj)))
+ return NULL;
+ return obj->header.user_data.get (key);
}
diff --git a/src/hb-open-file-private.hh b/src/hb-open-file-private.hh
index 57db59d..178bc7c 100644
--- a/src/hb-open-file-private.hh
+++ b/src/hb-open-file-private.hh
@@ -53,7 +53,8 @@ struct TTCHeader;
typedef struct TableRecord
{
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
return TRACE_RETURN (c->check_struct (this));
}
@@ -102,7 +103,8 @@ typedef struct OffsetTable
}
public:
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
return TRACE_RETURN (c->check_struct (this) && c->check_array (tables, TableRecord::static_size, numTables));
}
@@ -130,7 +132,8 @@ struct TTCHeaderVersion1
inline unsigned int get_face_count (void) const { return table.len; }
inline const OpenTypeFontFace& get_face (unsigned int i) const { return this+table[i]; }
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
return TRACE_RETURN (table.sanitize (c, this));
}
@@ -169,7 +172,8 @@ struct TTCHeader
}
}
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
if (unlikely (!u.header.version.sanitize (c))) return TRACE_RETURN (false);
switch (u.header.version.major) {
@@ -197,6 +201,8 @@ struct TTCHeader
struct OpenTypeFontFile
{
+ static const hb_tag_t tableTag = HB_TAG ('_','_','_','_'); /* Sanitizer needs this. */
+
static const hb_tag_t CFFTag = HB_TAG ('O','T','T','O'); /* OpenType with Postscript outlines */
static const hb_tag_t TrueTypeTag = HB_TAG ( 0 , 1 , 0 , 0 ); /* OpenType with TrueType outlines */
static const hb_tag_t TTCTag = HB_TAG ('t','t','c','f'); /* TrueType Collection */
@@ -231,7 +237,8 @@ struct OpenTypeFontFile
}
}
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
if (unlikely (!u.tag.sanitize (c))) return TRACE_RETURN (false);
switch (u.tag) {
diff --git a/src/hb-open-type-private.hh b/src/hb-open-type-private.hh
index 475187b..75a0f56 100644
--- a/src/hb-open-type-private.hh
+++ b/src/hb-open-type-private.hh
@@ -179,10 +179,13 @@ struct hb_sanitize_context_t
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; }
- bool stop_sublookup_iteration (const return_t r HB_UNUSED) const { return false; }
+ bool stop_sublookup_iteration (const return_t r) const { return !r; }
inline void init (hb_blob_t *b)
{
@@ -194,10 +197,11 @@ struct hb_sanitize_context_t
{
this->start = hb_blob_get_data (this->blob, NULL);
this->end = this->start + hb_blob_get_length (this->blob);
+ assert (this->start <= this->end); /* Must not overflow. */
this->edit_count = 0;
this->debug_depth = 0;
- DEBUG_MSG_LEVEL (SANITIZE, this->blob, 0, +1,
+ DEBUG_MSG_LEVEL (SANITIZE, start, 0, +1,
"start [%p..%p] (%lu bytes)",
this->start, this->end,
(unsigned long) (this->end - this->start));
@@ -205,7 +209,7 @@ struct hb_sanitize_context_t
inline void end_processing (void)
{
- DEBUG_MSG_LEVEL (SANITIZE, this->blob, 0, -1,
+ DEBUG_MSG_LEVEL (SANITIZE, this->start, 0, -1,
"end [%p..%p] %u edit requests",
this->start, this->end, this->edit_count);
@@ -217,28 +221,31 @@ struct hb_sanitize_context_t
inline bool check_range (const void *base, unsigned int len) const
{
const char *p = (const char *) base;
+ bool ok = this->start <= p && p <= this->end && (unsigned int) (this->end - p) >= len;
- hb_auto_trace_t<HB_DEBUG_SANITIZE, bool> trace
- (&this->debug_depth, "SANITIZE", this->blob, NULL,
- "check_range [%p..%p] (%d bytes) in [%p..%p]",
+ DEBUG_MSG_LEVEL (SANITIZE, p, this->debug_depth+1, 0,
+ "check_range [%p..%p] (%d bytes) in [%p..%p] -> %s",
p, p + len, len,
- this->start, this->end);
+ this->start, this->end,
+ ok ? "OK" : "OUT-OF-RANGE");
- return TRACE_RETURN (likely (this->start <= p && p <= this->end && (unsigned int) (this->end - p) >= len));
+ return likely (ok);
}
inline bool check_array (const void *base, unsigned int record_size, unsigned int len) const
{
const char *p = (const char *) base;
bool overflows = _hb_unsigned_int_mul_overflows (len, record_size);
+ unsigned int array_size = record_size * len;
+ bool ok = !overflows && this->check_range (base, array_size);
- hb_auto_trace_t<HB_DEBUG_SANITIZE, bool> trace
- (&this->debug_depth, "SANITIZE", this->blob, NULL,
- "check_array [%p..%p] (%d*%d=%ld bytes) in [%p..%p]",
- p, p + (record_size * len), record_size, len, (unsigned long) record_size * len,
- this->start, this->end);
+ DEBUG_MSG_LEVEL (SANITIZE, p, this->debug_depth+1, 0,
+ "check_array [%p..%p] (%d*%d=%d bytes) in [%p..%p] -> %s",
+ p, p + (record_size * len), record_size, len, (unsigned int) array_size,
+ this->start, this->end,
+ overflows ? "OVERFLOWS" : ok ? "OK" : "OUT-OF-RANGE");
- return TRACE_RETURN (likely (!overflows && this->check_range (base, record_size * len)));
+ return likely (ok);
}
template <typename Type>
@@ -255,21 +262,20 @@ struct hb_sanitize_context_t
const char *p = (const char *) base;
this->edit_count++;
- hb_auto_trace_t<HB_DEBUG_SANITIZE, bool> trace
- (&this->debug_depth, "SANITIZE", this->blob, NULL,
+ DEBUG_MSG_LEVEL (SANITIZE, p, this->debug_depth+1, 0,
"may_edit(%u) [%p..%p] (%d bytes) in [%p..%p] -> %s",
this->edit_count,
p, p + len, len,
this->start, this->end,
this->writable ? "GRANTED" : "DENIED");
- return TRACE_RETURN (this->writable);
+ return this->writable;
}
template <typename Type, typename ValueType>
- inline bool try_set (Type *obj, const ValueType &v) {
+ inline bool try_set (const Type *obj, const ValueType &v) {
if (this->may_edit (obj, obj->static_size)) {
- obj->set (v);
+ const_cast<Type *> (obj)->set (v);
return true;
}
return false;
@@ -297,7 +303,7 @@ struct Sanitizer
c->init (blob);
retry:
- DEBUG_MSG_FUNC (SANITIZE, blob, "start");
+ DEBUG_MSG_FUNC (SANITIZE, c->start, "start");
c->start_processing ();
@@ -311,13 +317,13 @@ struct Sanitizer
sane = t->sanitize (c);
if (sane) {
if (c->edit_count) {
- DEBUG_MSG_FUNC (SANITIZE, blob, "passed first round with %d edits; going for second round", c->edit_count);
+ DEBUG_MSG_FUNC (SANITIZE, c->start, "passed first round with %d edits; going for second round", c->edit_count);
/* sanitize again to ensure no toe-stepping */
c->edit_count = 0;
sane = t->sanitize (c);
if (c->edit_count) {
- DEBUG_MSG_FUNC (SANITIZE, blob, "requested %d edits in second round; FAILLING", c->edit_count);
+ DEBUG_MSG_FUNC (SANITIZE, c->start, "requested %d edits in second round; FAILLING", c->edit_count);
sane = false;
}
}
@@ -330,7 +336,7 @@ struct Sanitizer
if (c->start) {
c->writable = true;
/* ok, we made it writable by relocating. try again */
- DEBUG_MSG_FUNC (SANITIZE, blob, "retry");
+ DEBUG_MSG_FUNC (SANITIZE, c->start, "retry");
goto retry;
}
}
@@ -338,7 +344,7 @@ struct Sanitizer
c->end_processing ();
- DEBUG_MSG_FUNC (SANITIZE, blob, sane ? "PASSED" : "FAILED");
+ DEBUG_MSG_FUNC (SANITIZE, c->start, sane ? "PASSED" : "FAILED");
if (sane)
return blob;
else {
@@ -533,31 +539,55 @@ template <typename Type>
struct BEInt<Type, 2>
{
public:
- inline void set (Type i) { hb_be_uint16_put (v,i); }
- inline operator Type (void) const { return hb_be_uint16_get (v); }
- inline bool operator == (const BEInt<Type, 2>& o) const { return hb_be_uint16_eq (v, o.v); }
- inline bool operator != (const BEInt<Type, 2>& o) const { return !(*this == o); }
+ inline void set (Type V)
+ {
+ v[0] = (V >> 8) & 0xFF;
+ v[1] = (V ) & 0xFF;
+ }
+ inline operator Type (void) const
+ {
+ return (v[0] << 8)
+ + (v[1] );
+ }
private: uint8_t v[2];
};
template <typename Type>
-struct BEInt<Type, 4>
+struct BEInt<Type, 3>
{
public:
- inline void set (Type i) { hb_be_uint32_put (v,i); }
- inline operator Type (void) const { return hb_be_uint32_get (v); }
- inline bool operator == (const BEInt<Type, 4>& o) const { return hb_be_uint32_eq (v, o.v); }
- inline bool operator != (const BEInt<Type, 4>& o) const { return !(*this == o); }
- private: uint8_t v[4];
+ inline void set (Type V)
+ {
+ v[0] = (V >> 16) & 0xFF;
+ v[1] = (V >> 8) & 0xFF;
+ v[2] = (V ) & 0xFF;
+ }
+ inline operator Type (void) const
+ {
+ return (v[0] << 16)
+ + (v[1] << 8)
+ + (v[2] );
+ }
+ private: uint8_t v[3];
};
template <typename Type>
-struct BEInt<Type, 3>
+struct BEInt<Type, 4>
{
public:
- inline void set (Type i) { hb_be_uint24_put (v,i); }
- inline operator Type (void) const { return hb_be_uint24_get (v); }
- inline bool operator == (const BEInt<Type, 3>& o) const { return hb_be_uint24_eq (v, o.v); }
- inline bool operator != (const BEInt<Type, 3>& o) const { return !(*this == o); }
- private: uint8_t v[3];
+ inline void set (Type V)
+ {
+ v[0] = (V >> 24) & 0xFF;
+ v[1] = (V >> 16) & 0xFF;
+ v[2] = (V >> 8) & 0xFF;
+ v[3] = (V ) & 0xFF;
+ }
+ inline operator Type (void) const
+ {
+ return (v[0] << 24)
+ + (v[1] << 16)
+ + (v[2] << 8)
+ + (v[3] );
+ }
+ private: uint8_t v[4];
};
/* Integer types in big-endian order and no alignment requirement */
@@ -566,12 +596,19 @@ struct IntType
{
inline void set (Type i) { v.set (i); }
inline operator Type(void) const { return v; }
- inline bool operator == (const IntType<Type,Size> &o) const { return v == o.v; }
- inline bool operator != (const IntType<Type,Size> &o) const { return v != o.v; }
+ inline bool operator == (const IntType<Type,Size> &o) const { return (Type) v == (Type) o.v; }
+ inline bool operator != (const IntType<Type,Size> &o) const { return !(*this == o); }
static inline int cmp (const IntType<Type,Size> *a, const IntType<Type,Size> *b) { return b->cmp (*a); }
- inline int cmp (IntType<Type,Size> va) const { Type a = va; Type b = v; return a < b ? -1 : a == b ? 0 : +1; }
- inline int cmp (Type a) const { Type b = v; return a < b ? -1 : a == b ? 0 : +1; }
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline int cmp (Type a) const
+ {
+ Type b = v;
+ if (sizeof (Type) < sizeof (int))
+ return (int) a - (int) b;
+ else
+ return a < b ? -1 : a == b ? 0 : +1;
+ }
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
return TRACE_RETURN (likely (c->check_struct (this)));
}
@@ -598,7 +635,8 @@ typedef USHORT UFWORD;
* 1904. The value is represented as a signed 64-bit integer. */
struct LONGDATETIME
{
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
return TRACE_RETURN (likely (c->check_struct (this)));
}
@@ -622,7 +660,10 @@ struct Tag : ULONG
DEFINE_NULL_DATA (Tag, " ");
/* Glyph index number, same as uint16 (length = 16 bits) */
-typedef USHORT GlyphID;
+struct GlyphID : USHORT {
+ static inline int cmp (const GlyphID *a, const GlyphID *b) { return b->USHORT::cmp (*a); }
+ inline int cmp (hb_codepoint_t a) const { return (int) a - (int) *this; }
+};
/* Script/language-system/feature index */
struct Index : USHORT {
@@ -671,7 +712,8 @@ struct FixedVersion
{
inline uint32_t to_int (void) const { return (major << 16) + minor; }
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
return TRACE_RETURN (c->check_struct (this));
}
@@ -699,33 +741,35 @@ struct OffsetTo : Offset<OffsetType>
return StructAtOffset<Type> (base, offset);
}
- inline Type& serialize (hb_serialize_context_t *c, void *base)
+ inline Type& serialize (hb_serialize_context_t *c, const void *base)
{
Type *t = c->start_embed<Type> ();
this->set ((char *) t - (char *) base); /* TODO(serialize) Overflow? */
return *t;
}
- inline bool sanitize (hb_sanitize_context_t *c, void *base) {
+ inline bool sanitize (hb_sanitize_context_t *c, const void *base) const
+ {
TRACE_SANITIZE (this);
if (unlikely (!c->check_struct (this))) return TRACE_RETURN (false);
unsigned int offset = *this;
if (unlikely (!offset)) return TRACE_RETURN (true);
- Type &obj = StructAtOffset<Type> (base, offset);
+ const Type &obj = StructAtOffset<Type> (base, offset);
return TRACE_RETURN (likely (obj.sanitize (c)) || neuter (c));
}
template <typename T>
- inline bool sanitize (hb_sanitize_context_t *c, void *base, T user_data) {
+ 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_RETURN (false);
unsigned int offset = *this;
if (unlikely (!offset)) return TRACE_RETURN (true);
- Type &obj = StructAtOffset<Type> (base, offset);
+ const Type &obj = StructAtOffset<Type> (base, offset);
return TRACE_RETURN (likely (obj.sanitize (c, user_data)) || neuter (c));
}
/* Set the offset to Null */
- inline bool neuter (hb_sanitize_context_t *c) {
+ inline bool neuter (hb_sanitize_context_t *c) const {
return c->try_set (this, 0);
}
DEFINE_SIZE_STATIC (sizeof(OffsetType));
@@ -790,7 +834,8 @@ struct ArrayOf
return TRACE_RETURN (true);
}
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
if (unlikely (!sanitize_shallow (c))) return TRACE_RETURN (false);
@@ -805,7 +850,8 @@ struct ArrayOf
return TRACE_RETURN (true);
}
- inline bool sanitize (hb_sanitize_context_t *c, void *base) {
+ inline bool sanitize (hb_sanitize_context_t *c, const void *base) const
+ {
TRACE_SANITIZE (this);
if (unlikely (!sanitize_shallow (c))) return TRACE_RETURN (false);
unsigned int count = len;
@@ -815,7 +861,8 @@ struct ArrayOf
return TRACE_RETURN (true);
}
template <typename T>
- inline bool sanitize (hb_sanitize_context_t *c, void *base, T user_data) {
+ 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_RETURN (false);
unsigned int count = len;
@@ -836,7 +883,8 @@ struct ArrayOf
}
private:
- inline bool sanitize_shallow (hb_sanitize_context_t *c) {
+ inline bool sanitize_shallow (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
return TRACE_RETURN (c->check_struct (this) && c->check_array (this, Type::static_size, len));
}
@@ -862,12 +910,14 @@ struct OffsetListOf : OffsetArrayOf<Type>
return this+this->array[i];
}
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
return TRACE_RETURN (OffsetArrayOf<Type>::sanitize (c, this));
}
template <typename T>
- inline bool sanitize (hb_sanitize_context_t *c, T user_data) {
+ inline bool sanitize (hb_sanitize_context_t *c, T user_data) const
+ {
TRACE_SANITIZE (this);
return TRACE_RETURN (OffsetArrayOf<Type>::sanitize (c, this, user_data));
}
@@ -901,12 +951,14 @@ struct HeadlessArrayOf
return TRACE_RETURN (true);
}
- inline bool sanitize_shallow (hb_sanitize_context_t *c) {
+ inline bool sanitize_shallow (hb_sanitize_context_t *c) const
+ {
return c->check_struct (this)
&& c->check_array (this, Type::static_size, len);
}
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
if (unlikely (!sanitize_shallow (c))) return TRACE_RETURN (false);
diff --git a/src/hb-ot-cmap-table.hh b/src/hb-ot-cmap-table.hh
index d531411..0482312 100644
--- a/src/hb-ot-cmap-table.hh
+++ b/src/hb-ot-cmap-table.hh
@@ -51,7 +51,8 @@ struct CmapSubtableFormat0
return true;
}
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
return TRACE_RETURN (c->check_struct (this));
}
@@ -125,7 +126,7 @@ struct CmapSubtableFormat4
return true;
}
- inline bool sanitize (hb_sanitize_context_t *c)
+ inline bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
if (unlikely (!c->check_struct (this)))
@@ -183,7 +184,8 @@ struct CmapSubtableLongGroup
return 0;
}
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
return TRACE_RETURN (c->check_struct (this));
}
@@ -210,7 +212,8 @@ struct CmapSubtableTrimmed
return true;
}
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
return TRACE_RETURN (c->check_struct (this) && glyphIdArray.sanitize (c));
}
@@ -242,7 +245,8 @@ struct CmapSubtableLongSegmented
return true;
}
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
return TRACE_RETURN (c->check_struct (this) && groups.sanitize (c));
}
@@ -288,7 +292,8 @@ struct UnicodeValueRange
return 0;
}
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
return TRACE_RETURN (c->check_struct (this));
}
@@ -309,7 +314,8 @@ struct UVSMapping
return unicodeValue.cmp (codepoint);
}
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
return TRACE_RETURN (c->check_struct (this));
}
@@ -348,7 +354,8 @@ struct VariationSelectorRecord
return varSelector.cmp (variation_selector);
}
- inline bool sanitize (hb_sanitize_context_t *c, void *base) {
+ inline bool sanitize (hb_sanitize_context_t *c, const void *base) const
+ {
TRACE_SANITIZE (this);
return TRACE_RETURN (c->check_struct (this) &&
defaultUVS.sanitize (c, base) &&
@@ -373,7 +380,8 @@ struct CmapSubtableFormat14
return record[record.bsearch(variation_selector)].get_glyph (codepoint, glyph, this);
}
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
return TRACE_RETURN (c->check_struct (this) &&
record.sanitize (c, this));
@@ -418,7 +426,8 @@ struct CmapSubtable
}
}
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
if (!u.format.sanitize (c)) return TRACE_RETURN (false);
switch (u.format) {
@@ -461,7 +470,8 @@ struct EncodingRecord
return 0;
}
- inline bool sanitize (hb_sanitize_context_t *c, void *base) {
+ inline bool sanitize (hb_sanitize_context_t *c, const void *base) const
+ {
TRACE_SANITIZE (this);
return TRACE_RETURN (c->check_struct (this) &&
subtable.sanitize (c, base));
@@ -496,7 +506,8 @@ struct cmap
return &(this+encodingRecord[result].subtable);
}
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
return TRACE_RETURN (c->check_struct (this) &&
likely (version == 0) &&
diff --git a/src/hb-ot-font.cc b/src/hb-ot-font.cc
index c9890c5..2af2f54 100644
--- a/src/hb-ot-font.cc
+++ b/src/hb-ot-font.cc
@@ -35,17 +35,128 @@
#include "hb-ot-hmtx-table.hh"
+struct hb_ot_face_metrics_accelerator_t
+{
+ unsigned int num_metrics;
+ unsigned int num_advances;
+ unsigned int default_advance;
+ 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,
+ unsigned int default_advance)
+ {
+ 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;
+ hb_blob_destroy (_hea_blob);
+
+ this->blob = OT::Sanitizer<OT::_mtx>::sanitize (face->reference_table (_mtx_tag));
+ 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);
+ this->blob = hb_blob_get_empty ();
+ }
+ this->table = OT::Sanitizer<OT::_mtx>::lock_instance (this->blob);
+ }
+
+ inline void fini (void)
+ {
+ hb_blob_destroy (this->blob);
+ }
+
+ inline unsigned int get_advance (hb_codepoint_t glyph) const
+ {
+ 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 one EM. Otherwise, it means that the glyph
+ * index is out of bound: return zero. */
+ if (this->num_metrics)
+ return 0;
+ else
+ return this->default_advance;
+ }
+
+ if (glyph >= this->num_advances)
+ glyph = this->num_advances - 1;
+
+ return this->table->longMetric[glyph].advance;
+ }
+};
+
+struct hb_ot_face_cmap_accelerator_t
+{
+ const OT::CmapSubtable *table;
+ const OT::CmapSubtable *uvs_table;
+ hb_blob_t *blob;
+
+ inline void init (hb_face_t *face)
+ {
+ 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::CmapSubtable *subtable_uvs = NULL;
+
+ /* 32-bit subtables. */
+ if (!subtable) subtable = cmap->find_subtable (3, 10);
+ if (!subtable) subtable = cmap->find_subtable (0, 6);
+ if (!subtable) subtable = cmap->find_subtable (0, 4);
+ /* 16-bit subtables. */
+ if (!subtable) subtable = cmap->find_subtable (3, 1);
+ if (!subtable) subtable = cmap->find_subtable (0, 3);
+ if (!subtable) subtable = cmap->find_subtable (0, 2);
+ if (!subtable) subtable = cmap->find_subtable (0, 1);
+ if (!subtable) subtable = cmap->find_subtable (0, 0);
+ /* Meh. */
+ if (!subtable) subtable = &OT::Null(OT::CmapSubtable);
+
+ /* UVS subtable. */
+ if (!subtable_uvs) subtable_uvs = cmap->find_subtable (0, 5);
+ /* Meh. */
+ if (!subtable_uvs) subtable_uvs = &OT::Null(OT::CmapSubtable);
+
+ this->table = subtable;
+ this->uvs_table = subtable_uvs;
+ }
+
+ inline void fini (void)
+ {
+ hb_blob_destroy (this->blob);
+ }
+
+ inline bool get_glyph (hb_codepoint_t unicode,
+ hb_codepoint_t variation_selector,
+ hb_codepoint_t *glyph) const
+ {
+ if (unlikely (variation_selector))
+ {
+ 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 this->table->get_glyph (unicode, glyph);
+ }
+};
+
struct hb_ot_font_t
{
- unsigned int num_glyphs;
- unsigned int num_hmetrics;
- const OT::hmtx *hmtx;
- hb_blob_t *hmtx_blob;
-
- const OT::CmapSubtable *cmap;
- const OT::CmapSubtable *cmap_uvs;
- hb_blob_t *cmap_blob;
+ hb_ot_face_cmap_accelerator_t cmap;
+ hb_ot_face_metrics_accelerator_t h_metrics;
+ hb_ot_face_metrics_accelerator_t v_metrics;
};
@@ -53,50 +164,16 @@ static hb_ot_font_t *
_hb_ot_font_create (hb_font_t *font)
{
hb_ot_font_t *ot_font = (hb_ot_font_t *) calloc (1, sizeof (hb_ot_font_t));
+ hb_face_t *face = font->face;
if (unlikely (!ot_font))
return NULL;
- ot_font->num_glyphs = font->face->get_num_glyphs ();
+ unsigned int upem = face->get_upem ();
- {
- hb_blob_t *hhea_blob = OT::Sanitizer<OT::hhea>::sanitize (font->face->reference_table (HB_OT_TAG_hhea));
- const OT::hhea *hhea = OT::Sanitizer<OT::hhea>::lock_instance (hhea_blob);
- ot_font->num_hmetrics = hhea->numberOfHMetrics;
- hb_blob_destroy (hhea_blob);
- }
- ot_font->hmtx_blob = OT::Sanitizer<OT::hmtx>::sanitize (font->face->reference_table (HB_OT_TAG_hmtx));
- if (unlikely (!ot_font->num_hmetrics ||
- 2 * (ot_font->num_hmetrics + ot_font->num_glyphs) < hb_blob_get_length (ot_font->hmtx_blob)))
- {
- hb_blob_destroy (ot_font->hmtx_blob);
- free (ot_font);
- return NULL;
- }
- ot_font->hmtx = OT::Sanitizer<OT::hmtx>::lock_instance (ot_font->hmtx_blob);
-
- ot_font->cmap_blob = OT::Sanitizer<OT::cmap>::sanitize (font->face->reference_table (HB_OT_TAG_cmap));
- const OT::cmap *cmap = OT::Sanitizer<OT::cmap>::lock_instance (ot_font->cmap_blob);
- const OT::CmapSubtable *subtable = NULL;
- const OT::CmapSubtable *subtable_uvs = NULL;
-
- /* 32-bit subtables. */
- if (!subtable) subtable = cmap->find_subtable (0, 6);
- if (!subtable) subtable = cmap->find_subtable (0, 4);
- if (!subtable) subtable = cmap->find_subtable (3, 10);
- /* 16-bit subtables. */
- if (!subtable) subtable = cmap->find_subtable (0, 3);
- if (!subtable) subtable = cmap->find_subtable (3, 1);
- /* Meh. */
- if (!subtable) subtable = &OT::Null(OT::CmapSubtable);
-
- /* UVS subtable. */
- if (!subtable_uvs) subtable_uvs = cmap->find_subtable (0, 5);
- /* Meh. */
- if (!subtable_uvs) subtable_uvs = &OT::Null(OT::CmapSubtable);
-
- ot_font->cmap = subtable;
- ot_font->cmap_uvs = subtable_uvs;
+ ot_font->cmap.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;
}
@@ -104,8 +181,9 @@ _hb_ot_font_create (hb_font_t *font)
static void
_hb_ot_font_destroy (hb_ot_font_t *ot_font)
{
- hb_blob_destroy (ot_font->cmap_blob);
- hb_blob_destroy (ot_font->hmtx_blob);
+ ot_font->cmap.fini ();
+ ot_font->h_metrics.fini ();
+ ot_font->v_metrics.fini ();
free (ot_font);
}
@@ -121,20 +199,7 @@ hb_ot_get_glyph (hb_font_t *font HB_UNUSED,
{
const hb_ot_font_t *ot_font = (const hb_ot_font_t *) font_data;
-
- if (unlikely (variation_selector))
- {
- switch (ot_font->cmap_uvs->get_glyph_variant (unicode,
- variation_selector,
- glyph))
- {
- case OT::GLYPH_VARIANT_NOT_FOUND: return false;
- case OT::GLYPH_VARIANT_FOUND: return true;
- case OT::GLYPH_VARIANT_USE_DEFAULT: break;
- }
- }
-
- return ot_font->cmap->get_glyph (unicode, glyph);
+ return ot_font->cmap.get_glyph (unicode, variation_selector, glyph);
}
static hb_position_t
@@ -144,14 +209,7 @@ hb_ot_get_glyph_h_advance (hb_font_t *font HB_UNUSED,
void *user_data HB_UNUSED)
{
const hb_ot_font_t *ot_font = (const hb_ot_font_t *) font_data;
-
- if (unlikely (glyph >= ot_font->num_glyphs))
- return 0; /* Maybe better to return notdef's advance instead? */
-
- if (glyph >= ot_font->num_hmetrics)
- glyph = ot_font->num_hmetrics - 1;
-
- return font->em_scale_x (ot_font->hmtx->longHorMetric[glyph].advanceWidth);
+ return font->em_scale_x (ot_font->h_metrics.get_advance (glyph));
}
static hb_position_t
@@ -160,8 +218,8 @@ hb_ot_get_glyph_v_advance (hb_font_t *font HB_UNUSED,
hb_codepoint_t glyph,
void *user_data HB_UNUSED)
{
- /* TODO */
- return 0;
+ const hb_ot_font_t *ot_font = (const hb_ot_font_t *) font_data;
+ return font->em_scale_y (-ot_font->v_metrics.get_advance (glyph));
}
static hb_bool_t
@@ -206,6 +264,7 @@ hb_ot_get_glyph_v_kerning (hb_font_t *font 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;
}
diff --git a/src/hb-ot-head-table.hh b/src/hb-ot-head-table.hh
index ec4e8c9..268f133 100644
--- a/src/hb-ot-head-table.hh
+++ b/src/hb-ot-head-table.hh
@@ -45,13 +45,15 @@ struct head
{
static const hb_tag_t tableTag = HB_OT_TAG_head;
- inline unsigned int get_upem (void) const {
+ inline unsigned int get_upem (void) const
+ {
unsigned int upem = unitsPerEm;
/* If no valid head table found, assume 1000, which matches typical Type1 usage. */
return 16 <= upem && upem <= 16384 ? upem : 1000;
}
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
return TRACE_RETURN (c->check_struct (this) && likely (version.major == 1));
}
diff --git a/src/hb-ot-hhea-table.hh b/src/hb-ot-hhea-table.hh
index d433200..992fe55 100644
--- a/src/hb-ot-hhea-table.hh
+++ b/src/hb-ot-hhea-table.hh
@@ -35,61 +35,67 @@ namespace OT {
/*
* hhea -- The Horizontal Header Table
+ * vhea -- The Vertical Header Table
*/
#define HB_OT_TAG_hhea HB_TAG('h','h','e','a')
+#define HB_OT_TAG_vhea HB_TAG('v','h','e','a')
-struct hhea
+struct _hea
{
- static const hb_tag_t tableTag = HB_OT_TAG_hhea;
+ static const hb_tag_t tableTag = HB_TAG('_','h','e','a');
+
+ static const hb_tag_t hheaTag = HB_OT_TAG_hhea;
+ static const hb_tag_t vheaTag = HB_OT_TAG_vhea;
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
return TRACE_RETURN (c->check_struct (this) && likely (version.major == 1));
}
public:
FixedVersion version; /* 0x00010000u for version 1.0. */
- FWORD ascender; /* Typographic ascent. <a
- * href="http://developer.apple.com/fonts/TTRefMan/RM06/Chap6hhea.html">
- * (Distance from baseline of highest
- * ascender)</a> */
- FWORD descender; /* Typographic descent. <a
- * href="http://developer.apple.com/fonts/TTRefMan/RM06/Chap6hhea.html">
- * (Distance from baseline of lowest
- * descender)</a> */
- FWORD lineGap; /* Typographic line gap. Negative
- * LineGap values are treated as zero
- * in Windows 3.1, System 6, and
- * System 7. */
- UFWORD advanceWidthMax; /* Maximum advance width value in
- * 'hmtx' table. */
- FWORD minLeftSideBearing; /* Minimum left sidebearing value in
- * 'hmtx' table. */
- FWORD minRightSideBearing; /* Minimum right sidebearing value;
+ FWORD ascender; /* Typographic ascent. */
+ FWORD descender; /* Typographic descent. */
+ FWORD lineGap; /* Typographic line gap. */
+ UFWORD advanceMax; /* Maximum advance width/height value in
+ * metrics table. */
+ FWORD minLeadingBearing; /* Minimum left/top sidebearing value in
+ * metrics table. */
+ FWORD minTrailingBearing; /* Minimum right/bottom sidebearing value;
* calculated as Min(aw - lsb -
- * (xMax - xMin)). */
- FWORD xMaxExtent; /* Max(lsb + (xMax - xMin)). */
+ * (xMax - xMin)) for horizontal. */
+ FWORD maxExtent; /* horizontal: Max(lsb + (xMax - xMin)),
+ * vertical: minLeadingBearing+(yMax-yMin). */
SHORT caretSlopeRise; /* Used to calculate the slope of the
- * cursor (rise/run); 1 for vertical. */
- SHORT caretSlopeRun; /* 0 for vertical. */
+ * cursor (rise/run); 1 for vertical caret,
+ * 0 for horizontal.*/
+ SHORT caretSlopeRun; /* 0 for vertical caret, 1 for horizontal. */
SHORT caretOffset; /* The amount by which a slanted
* highlight on a glyph needs
* to be shifted to produce the
* best appearance. Set to 0 for
- * non--slanted fonts */
- SHORT reserved1; /* set to 0 */
- SHORT reserved2; /* set to 0 */
- SHORT reserved3; /* set to 0 */
- SHORT reserved4; /* set to 0 */
+ * non-slanted fonts. */
+ SHORT reserved1; /* Set to 0. */
+ SHORT reserved2; /* Set to 0. */
+ SHORT reserved3; /* Set to 0. */
+ SHORT reserved4; /* Set to 0. */
SHORT metricDataFormat; /* 0 for current format. */
- USHORT numberOfHMetrics; /* Number of hMetric entries in 'hmtx'
- * table */
+ USHORT numberOfLongMetrics; /* Number of LongMetric entries in metric
+ * table. */
public:
DEFINE_SIZE_STATIC (36);
};
+struct hhea : _hea {
+ static const hb_tag_t tableTag = HB_OT_TAG_hhea;
+};
+struct vhea : _hea {
+ static const hb_tag_t tableTag = HB_OT_TAG_vhea;
+};
+
} /* namespace OT */
diff --git a/src/hb-ot-hmtx-table.hh b/src/hb-ot-hmtx-table.hh
index e918e3b..a0e3855 100644
--- a/src/hb-ot-hmtx-table.hh
+++ b/src/hb-ot-hmtx-table.hh
@@ -35,24 +35,30 @@ namespace OT {
/*
* hmtx -- The Horizontal Metrics Table
+ * vmtx -- The Vertical Metrics Table
*/
#define HB_OT_TAG_hmtx HB_TAG('h','m','t','x')
+#define HB_OT_TAG_vmtx HB_TAG('v','m','t','x')
-struct LongHorMetric
+struct LongMetric
{
- USHORT advanceWidth;
- SHORT lsb;
+ USHORT advance; /* Advance width/height. */
+ SHORT lsb; /* Leading (left/top) side bearing. */
public:
DEFINE_SIZE_STATIC (4);
};
-struct hmtx
+struct _mtx
{
- static const hb_tag_t tableTag = HB_OT_TAG_hmtx;
+ static const hb_tag_t tableTag = HB_TAG('_','m','t','x');
+
+ static const hb_tag_t hmtxTag = HB_OT_TAG_hmtx;
+ static const hb_tag_t vmtxTag = HB_OT_TAG_vmtx;
- inline bool sanitize (hb_sanitize_context_t *c) {
+ 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... */
@@ -60,7 +66,7 @@ struct hmtx
}
public:
- LongHorMetric longHorMetric[VAR]; /* Paired advance width and left side
+ LongMetric longMetric[VAR]; /* Paired advance width and leading
* bearing values for each glyph. The
* value numOfHMetrics comes from
* the 'hhea' table. If the font is
@@ -68,23 +74,29 @@ struct hmtx
* be in the array, but that entry is
* required. The last entry applies to
* all subsequent glyphs. */
- SHORT leftSideBearingX[VAR]; /* Here the advanceWidth is assumed
- * to be the same as the advanceWidth
+ 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
* derived from numGlyphs (from 'maxp'
- * table) minus numberOfHMetrics. This
- * generally is used with a run of
- * monospaced glyphs (e.g., Kanji
+ * table) minus numberOfLongMetrics.
+ * This generally is used with a run
+ * of monospaced glyphs (e.g., Kanji
* fonts or Courier fonts). Only one
* run is allowed and it must be at
* the end. This allows a monospaced
- * font to vary the left side bearing
+ * font to vary the side bearing
* values for each glyph. */
public:
- DEFINE_SIZE_ARRAY2 (0, longHorMetric, leftSideBearingX);
+ DEFINE_SIZE_ARRAY2 (0, longMetric, leadingBearingX);
};
+struct hmtx : _mtx {
+ static const hb_tag_t tableTag = HB_OT_TAG_hmtx;
+};
+struct vmtx : _mtx {
+ static const hb_tag_t tableTag = HB_OT_TAG_vmtx;
+};
} /* namespace OT */
diff --git a/src/hb-ot-layout-common-private.hh b/src/hb-ot-layout-common-private.hh
index abd063c..3db7f57 100644
--- a/src/hb-ot-layout-common-private.hh
+++ b/src/hb-ot-layout-common-private.hh
@@ -37,6 +37,12 @@
namespace OT {
+#define TRACE_DISPATCH(this, format) \
+ hb_auto_trace_t<context_t::max_debug_depth, typename context_t::return_t> trace \
+ (&c->debug_depth, c->get_name (), this, HB_FUNC, \
+ "format %d", (int) format);
+
+
#define NOT_COVERED ((unsigned int) -1)
#define MAX_NESTING_LEVEL 8
#define MAX_CONTEXT_LENGTH 64
@@ -63,9 +69,10 @@ struct Record
struct sanitize_closure_t {
hb_tag_t tag;
- void *list_base;
+ const void *list_base;
};
- inline bool sanitize (hb_sanitize_context_t *c, void *base) {
+ inline bool sanitize (hb_sanitize_context_t *c, const void *base) const
+ {
TRACE_SANITIZE (this);
const sanitize_closure_t closure = {tag, base};
return TRACE_RETURN (c->check_struct (this) && offset.sanitize (c, base, &closure));
@@ -121,7 +128,8 @@ struct RecordListOf : RecordArrayOf<Type>
inline const Type& operator [] (unsigned int i) const
{ return this+RecordArrayOf<Type>::operator [](i).offset; }
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
return TRACE_RETURN (RecordArrayOf<Type>::sanitize (c, this));
}
@@ -134,7 +142,8 @@ struct RangeRecord
return g < start ? -1 : g <= end ? 0 : +1 ;
}
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
return TRACE_RETURN (c->check_struct (this));
}
@@ -199,7 +208,8 @@ struct LangSys
}
inline bool sanitize (hb_sanitize_context_t *c,
- const Record<LangSys>::sanitize_closure_t * = NULL) {
+ const Record<LangSys>::sanitize_closure_t * = NULL) const
+ {
TRACE_SANITIZE (this);
return TRACE_RETURN (c->check_struct (this) && featureIndex.sanitize (c));
}
@@ -238,7 +248,8 @@ struct Script
inline const LangSys& get_default_lang_sys (void) const { return this+defaultLangSys; }
inline bool sanitize (hb_sanitize_context_t *c,
- const Record<Script>::sanitize_closure_t * = NULL) {
+ const Record<Script>::sanitize_closure_t * = NULL) const
+ {
TRACE_SANITIZE (this);
return TRACE_RETURN (defaultLangSys.sanitize (c, this) && langSys.sanitize (c, this));
}
@@ -260,7 +271,8 @@ typedef RecordListOf<Script> ScriptList;
/* http://www.microsoft.com/typography/otspec/features_pt.htm#size */
struct FeatureParamsSize
{
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
if (unlikely (!c->check_struct (this))) return TRACE_RETURN (false);
@@ -371,7 +383,8 @@ struct FeatureParamsSize
/* http://www.microsoft.com/typography/otspec/features_pt.htm#ssxx */
struct FeatureParamsStylisticSet
{
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
/* Right now minorVersion is at zero. Which means, any table supports
* the uiNameID field. */
@@ -404,7 +417,8 @@ struct FeatureParamsStylisticSet
/* http://www.microsoft.com/typography/otspec/features_ae.htm#cv01-cv99 */
struct FeatureParamsCharacterVariants
{
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
return TRACE_RETURN (c->check_struct (this) &&
characters.sanitize (c));
@@ -444,7 +458,8 @@ struct FeatureParamsCharacterVariants
struct FeatureParams
{
- inline bool sanitize (hb_sanitize_context_t *c, hb_tag_t tag) {
+ inline bool sanitize (hb_sanitize_context_t *c, hb_tag_t tag) const
+ {
TRACE_SANITIZE (this);
if (tag == HB_TAG ('s','i','z','e'))
return TRACE_RETURN (u.size.sanitize (c));
@@ -486,7 +501,8 @@ struct Feature
{ return this+featureParams; }
inline bool sanitize (hb_sanitize_context_t *c,
- const Record<Feature>::sanitize_closure_t *closure) {
+ const Record<Feature>::sanitize_closure_t *closure) const
+ {
TRACE_SANITIZE (this);
if (unlikely (!(c->check_struct (this) && lookupIndex.sanitize (c))))
return TRACE_RETURN (false);
@@ -561,6 +577,17 @@ struct Lookup
{
inline unsigned int get_subtable_count (void) const { return subTable.len; }
+ template <typename SubTableType>
+ inline const SubTableType& get_subtable (unsigned int i) const
+ { return this+CastR<OffsetArrayOf<SubTableType> > (subTable)[i]; }
+
+ template <typename SubTableType>
+ inline const OffsetArrayOf<SubTableType>& get_subtables (void) const
+ { return CastR<OffsetArrayOf<SubTableType> > (subTable); }
+ template <typename SubTableType>
+ inline OffsetArrayOf<SubTableType>& get_subtables (void)
+ { return CastR<OffsetArrayOf<SubTableType> > (subTable); }
+
inline unsigned int get_type (void) const { return lookupType; }
/* lookup_props is a 32-bit integer where the lower 16-bit is LookupFlag and
@@ -577,6 +604,20 @@ struct Lookup
return flag;
}
+ template <typename SubTableType, typename context_t>
+ inline typename context_t::return_t dispatch (context_t *c) const
+ {
+ unsigned int lookup_type = get_type ();
+ TRACE_DISPATCH (this, lookup_type);
+ unsigned int count = get_subtable_count ();
+ 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_RETURN (r);
+ }
+ return TRACE_RETURN (c->default_return_value ());
+ }
+
inline bool serialize (hb_serialize_context_t *c,
unsigned int lookup_type,
uint32_t lookup_props,
@@ -595,18 +636,20 @@ struct Lookup
return TRACE_RETURN (true);
}
- inline bool sanitize (hb_sanitize_context_t *c) {
+ 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_RETURN (false);
if (lookupFlag & LookupFlag::UseMarkFilteringSet)
{
- USHORT &markFilteringSet = StructAfter<USHORT> (subTable);
+ const USHORT &markFilteringSet = StructAfter<USHORT> (subTable);
if (!markFilteringSet.sanitize (c)) return TRACE_RETURN (false);
}
return TRACE_RETURN (true);
}
+ private:
USHORT lookupType; /* Different enumerations for GSUB and GPOS */
USHORT lookupFlag; /* Lookup qualifiers */
ArrayOf<Offset<> >
@@ -651,7 +694,8 @@ struct CoverageFormat1
return TRACE_RETURN (true);
}
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
return TRACE_RETURN (glyphArray.sanitize (c));
}
@@ -737,7 +781,8 @@ struct CoverageFormat2
return TRACE_RETURN (true);
}
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
return TRACE_RETURN (rangeRecord.sanitize (c));
}
@@ -832,7 +877,8 @@ struct Coverage
}
}
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
if (!u.format.sanitize (c)) return TRACE_RETURN (false);
switch (u.format) {
@@ -938,12 +984,14 @@ struct ClassDefFormat1
private:
inline unsigned int get_class (hb_codepoint_t glyph_id) const
{
- if (unlikely ((unsigned int) (glyph_id - startGlyph) < classValue.len))
- return classValue[glyph_id - startGlyph];
+ unsigned int i = (unsigned int) (glyph_id - startGlyph);
+ if (unlikely (i < classValue.len))
+ return classValue[i];
return 0;
}
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
return TRACE_RETURN (c->check_struct (this) && classValue.sanitize (c));
}
@@ -994,12 +1042,13 @@ struct ClassDefFormat2
inline unsigned int get_class (hb_codepoint_t glyph_id) const
{
int i = rangeRecord.bsearch (glyph_id);
- if (i != -1)
+ if (unlikely (i != -1))
return rangeRecord[i].value;
return 0;
}
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
return TRACE_RETURN (rangeRecord.sanitize (c));
}
@@ -1056,7 +1105,8 @@ struct ClassDef
}
}
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
if (!u.format.sanitize (c)) return TRACE_RETURN (false);
switch (u.format) {
@@ -1148,7 +1198,8 @@ struct Device
return USHORT::static_size * (4 + ((endSize - startSize) >> (4 - f)));
}
- inline bool sanitize (hb_sanitize_context_t *c) {
+ 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 ()));
}
diff --git a/src/hb-ot-layout-gdef-table.hh b/src/hb-ot-layout-gdef-table.hh
index 84a5e79..7a6c04d 100644
--- a/src/hb-ot-layout-gdef-table.hh
+++ b/src/hb-ot-layout-gdef-table.hh
@@ -71,7 +71,8 @@ struct AttachList
return points.len;
}
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
return TRACE_RETURN (coverage.sanitize (c, this) && attachPoint.sanitize (c, this));
}
@@ -101,7 +102,8 @@ struct CaretValueFormat1
return HB_DIRECTION_IS_HORIZONTAL (direction) ? font->em_scale_x (coordinate) : font->em_scale_y (coordinate);
}
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
return TRACE_RETURN (c->check_struct (this));
}
@@ -127,7 +129,8 @@ struct CaretValueFormat2
return 0;
}
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
return TRACE_RETURN (c->check_struct (this));
}
@@ -150,7 +153,8 @@ struct CaretValueFormat3
font->em_scale_y (coordinate) + (this+deviceTable).get_y_delta (font);
}
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
return TRACE_RETURN (c->check_struct (this) && deviceTable.sanitize (c, this));
}
@@ -178,7 +182,8 @@ struct CaretValue
}
}
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
if (!u.format.sanitize (c)) return TRACE_RETURN (false);
switch (u.format) {
@@ -219,7 +224,8 @@ struct LigGlyph
return carets.len;
}
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
return TRACE_RETURN (carets.sanitize (c, this));
}
@@ -253,7 +259,8 @@ struct LigCaretList
return lig_glyph.get_lig_carets (font, direction, glyph_id, start_offset, caret_count, caret_array);
}
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
return TRACE_RETURN (coverage.sanitize (c, this) && ligGlyph.sanitize (c, this));
}
@@ -275,7 +282,8 @@ struct MarkGlyphSetsFormat1
inline bool covers (unsigned int set_index, hb_codepoint_t glyph_id) const
{ return (this+coverage[set_index]).get_coverage (glyph_id) != NOT_COVERED; }
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
return TRACE_RETURN (coverage.sanitize (c, this));
}
@@ -299,7 +307,8 @@ struct MarkGlyphSets
}
}
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
if (!u.format.sanitize (c)) return TRACE_RETURN (false);
switch (u.format) {
@@ -364,7 +373,8 @@ struct GDEF
inline bool mark_set_covers (unsigned int set_index, hb_codepoint_t glyph_id) const
{ return version.to_int () >= 0x00010002u && (this+markGlyphSetsDef[0]).covers (set_index, glyph_id); }
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
return TRACE_RETURN (version.sanitize (c) &&
likely (version.major == 1) &&
diff --git a/src/hb-ot-layout-gpos-table.hh b/src/hb-ot-layout-gpos-table.hh
index 8e2860c..d88f787 100644
--- a/src/hb-ot-layout-gpos-table.hh
+++ b/src/hb-ot-layout-gpos-table.hh
@@ -146,7 +146,8 @@ struct ValueFormat : USHORT
}
private:
- inline bool sanitize_value_devices (hb_sanitize_context_t *c, void *base, Value *values) {
+ inline bool sanitize_value_devices (hb_sanitize_context_t *c, const void *base, const Value *values) const
+ {
unsigned int format = *this;
if (format & xPlacement) values++;
@@ -177,12 +178,14 @@ struct ValueFormat : USHORT
return (format & devices) != 0;
}
- inline bool sanitize_value (hb_sanitize_context_t *c, void *base, Value *values) {
+ inline bool sanitize_value (hb_sanitize_context_t *c, const void *base, const Value *values) const
+ {
TRACE_SANITIZE (this);
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, void *base, Value *values, unsigned int count) {
+ inline bool sanitize_values (hb_sanitize_context_t *c, const void *base, const Value *values, unsigned int count) const
+ {
TRACE_SANITIZE (this);
unsigned int len = get_len ();
@@ -200,7 +203,8 @@ struct ValueFormat : USHORT
}
/* Just sanitize referenced Device tables. Doesn't check the values themselves. */
- inline bool sanitize_values_stride_unsafe (hb_sanitize_context_t *c, void *base, Value *values, unsigned int count, unsigned int stride) {
+ inline bool sanitize_values_stride_unsafe (hb_sanitize_context_t *c, const void *base, const Value *values, unsigned int count, unsigned int stride) const
+ {
TRACE_SANITIZE (this);
if (!has_device ()) return TRACE_RETURN (true);
@@ -225,7 +229,8 @@ struct AnchorFormat1
*y = font->em_scale_y (yCoordinate);
}
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
return TRACE_RETURN (c->check_struct (this));
}
@@ -254,7 +259,8 @@ struct AnchorFormat2
*y = ret && y_ppem ? cy : font->em_scale_y (yCoordinate);
}
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
return TRACE_RETURN (c->check_struct (this));
}
@@ -282,7 +288,8 @@ struct AnchorFormat3
*y += (this+yDeviceTable).get_x_delta (font);
}
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
return TRACE_RETURN (c->check_struct (this) && xDeviceTable.sanitize (c, this) && yDeviceTable.sanitize (c, this));
}
@@ -317,7 +324,8 @@ struct Anchor
}
}
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
if (!u.format.sanitize (c)) return TRACE_RETURN (false);
switch (u.format) {
@@ -345,28 +353,29 @@ struct AnchorMatrix
inline const Anchor& get_anchor (unsigned int row, unsigned int col, unsigned int cols, bool *found) const {
*found = false;
if (unlikely (row >= rows || col >= cols)) return Null(Anchor);
- *found = !matrix[row * cols + col].is_null ();
- return this+matrix[row * cols + col];
+ *found = !matrixZ[row * cols + col].is_null ();
+ return this+matrixZ[row * cols + col];
}
- inline bool sanitize (hb_sanitize_context_t *c, unsigned int cols) {
+ inline bool sanitize (hb_sanitize_context_t *c, unsigned int cols) const
+ {
TRACE_SANITIZE (this);
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 (matrix, matrix[0].static_size, count)) return TRACE_RETURN (false);
+ if (!c->check_array (matrixZ, matrixZ[0].static_size, count)) return TRACE_RETURN (false);
for (unsigned int i = 0; i < count; i++)
- if (!matrix[i].sanitize (c, this)) return TRACE_RETURN (false);
+ if (!matrixZ[i].sanitize (c, this)) return TRACE_RETURN (false);
return TRACE_RETURN (true);
}
USHORT rows; /* Number of rows */
protected:
OffsetTo<Anchor>
- matrix[VAR]; /* Matrix of offsets to Anchor tables--
+ matrixZ[VAR]; /* Matrix of offsets to Anchor tables--
* from beginning of AnchorMatrix table */
public:
- DEFINE_SIZE_ARRAY (2, matrix);
+ DEFINE_SIZE_ARRAY (2, matrixZ);
};
@@ -374,7 +383,8 @@ struct MarkRecord
{
friend struct MarkArray;
- inline bool sanitize (hb_sanitize_context_t *c, void *base) {
+ inline bool sanitize (hb_sanitize_context_t *c, const void *base) const
+ {
TRACE_SANITIZE (this);
return TRACE_RETURN (c->check_struct (this) && markAnchor.sanitize (c, base));
}
@@ -421,7 +431,8 @@ struct MarkArray : ArrayOf<MarkRecord> /* Array of MarkRecords--in Coverage orde
return TRACE_RETURN (true);
}
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
return TRACE_RETURN (ArrayOf<MarkRecord>::sanitize (c, this));
}
@@ -457,9 +468,12 @@ struct SinglePosFormat1
return TRACE_RETURN (true);
}
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
- return TRACE_RETURN (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:
@@ -506,9 +520,12 @@ struct SinglePosFormat2
return TRACE_RETURN (true);
}
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
- return TRACE_RETURN (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:
@@ -530,7 +547,8 @@ struct SinglePos
template <typename context_t>
inline typename context_t::return_t dispatch (context_t *c) const
{
- TRACE_DISPATCH (this);
+ TRACE_DISPATCH (this, u.format);
+ if (unlikely (!c->may_dispatch (this, &u.format))) TRACE_RETURN (c->default_return_value ());
switch (u.format) {
case 1: return TRACE_RETURN (c->dispatch (u.format1));
case 2: return TRACE_RETURN (c->dispatch (u.format2));
@@ -538,16 +556,6 @@ struct SinglePos
}
}
- inline bool sanitize (hb_sanitize_context_t *c) {
- TRACE_SANITIZE (this);
- if (!u.format.sanitize (c)) return TRACE_RETURN (false);
- switch (u.format) {
- case 1: return TRACE_RETURN (u.format1.sanitize (c));
- case 2: return TRACE_RETURN (u.format2.sanitize (c));
- default:return TRACE_RETURN (true);
- }
- }
-
protected:
union {
USHORT format; /* Format identifier */
@@ -583,7 +591,7 @@ struct PairSet
unsigned int len2 = valueFormats[1].get_len ();
unsigned int record_size = USHORT::static_size * (1 + len1 + len2);
- const PairValueRecord *record = CastP<PairValueRecord> (array);
+ const PairValueRecord *record = CastP<PairValueRecord> (arrayZ);
unsigned int count = len;
for (unsigned int i = 0; i < count; i++)
{
@@ -602,12 +610,24 @@ struct PairSet
unsigned int len2 = valueFormats[1].get_len ();
unsigned int record_size = USHORT::static_size * (1 + len1 + len2);
- const PairValueRecord *record = CastP<PairValueRecord> (array);
+ const PairValueRecord *record_array = CastP<PairValueRecord> (arrayZ);
unsigned int count = len;
- for (unsigned int i = 0; i < count; i++)
+
+ /* Hand-coded bsearch. */
+ if (unlikely (!count))
+ return TRACE_RETURN (false);
+ hb_codepoint_t x = buffer->info[pos].codepoint;
+ int min = 0, max = (int) count - 1;
+ while (min <= max)
{
- /* TODO bsearch */
- if (buffer->info[pos].codepoint == record->secondGlyph)
+ int mid = (min + max) / 2;
+ const PairValueRecord *record = &StructAtOffset<PairValueRecord> (record_array, record_size * mid);
+ hb_codepoint_t mid_x = record->secondGlyph;
+ if (x < mid_x)
+ max = mid - 1;
+ else if (x > mid_x)
+ min = mid + 1;
+ else
{
valueFormats[0].apply_value (c->font, c->direction, this,
&record->values[0], buffer->cur_pos());
@@ -618,36 +638,36 @@ struct PairSet
buffer->idx = pos;
return TRACE_RETURN (true);
}
- record = &StructAtOffset<PairValueRecord> (record, record_size);
}
return TRACE_RETURN (false);
}
struct sanitize_closure_t {
- void *base;
- ValueFormat *valueFormats;
+ const void *base;
+ const ValueFormat *valueFormats;
unsigned int len1; /* valueFormats[0].get_len() */
unsigned int stride; /* 1 + len1 + len2 */
};
- inline bool sanitize (hb_sanitize_context_t *c, const sanitize_closure_t *closure) {
+ inline bool sanitize (hb_sanitize_context_t *c, const sanitize_closure_t *closure) const
+ {
TRACE_SANITIZE (this);
if (!(c->check_struct (this)
- && c->check_array (array, USHORT::static_size * closure->stride, len))) return TRACE_RETURN (false);
+ && c->check_array (arrayZ, USHORT::static_size * closure->stride, len))) return TRACE_RETURN (false);
unsigned int count = len;
- PairValueRecord *record = CastP<PairValueRecord> (array);
+ const PairValueRecord *record = CastP<PairValueRecord> (arrayZ);
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:
USHORT len; /* Number of PairValueRecords */
- USHORT array[VAR]; /* Array of PairValueRecords--ordered
+ USHORT arrayZ[VAR]; /* Array of PairValueRecords--ordered
* by GlyphID of the second glyph */
public:
- DEFINE_SIZE_ARRAY (2, array);
+ DEFINE_SIZE_ARRAY (2, arrayZ);
};
struct PairPosFormat1
@@ -670,18 +690,18 @@ struct PairPosFormat1
{
TRACE_APPLY (this);
hb_buffer_t *buffer = c->buffer;
- hb_apply_context_t::skipping_forward_iterator_t skippy_iter (c, buffer->idx, 1);
- if (skippy_iter.has_no_chance ()) return TRACE_RETURN (false);
-
unsigned int index = (this+coverage).get_coverage (buffer->cur().codepoint);
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_RETURN (false);
return TRACE_RETURN ((this+pairSet[index]).apply (c, &valueFormat1, skippy_iter.idx));
}
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
unsigned int len1 = valueFormat1.get_len ();
@@ -741,12 +761,11 @@ struct PairPosFormat2
{
TRACE_APPLY (this);
hb_buffer_t *buffer = c->buffer;
- hb_apply_context_t::skipping_forward_iterator_t skippy_iter (c, buffer->idx, 1);
- if (skippy_iter.has_no_chance ()) return TRACE_RETURN (false);
-
unsigned int index = (this+coverage).get_coverage (buffer->cur().codepoint);
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_RETURN (false);
unsigned int len1 = valueFormat1.get_len ();
@@ -770,7 +789,8 @@ struct PairPosFormat2
return TRACE_RETURN (true);
}
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
if (!(c->check_struct (this)
&& coverage.sanitize (c, this)
@@ -822,7 +842,8 @@ struct PairPos
template <typename context_t>
inline typename context_t::return_t dispatch (context_t *c) const
{
- TRACE_DISPATCH (this);
+ TRACE_DISPATCH (this, u.format);
+ if (unlikely (!c->may_dispatch (this, &u.format))) TRACE_RETURN (c->default_return_value ());
switch (u.format) {
case 1: return TRACE_RETURN (c->dispatch (u.format1));
case 2: return TRACE_RETURN (c->dispatch (u.format2));
@@ -830,16 +851,6 @@ struct PairPos
}
}
- inline bool sanitize (hb_sanitize_context_t *c) {
- TRACE_SANITIZE (this);
- if (!u.format.sanitize (c)) return TRACE_RETURN (false);
- switch (u.format) {
- case 1: return TRACE_RETURN (u.format1.sanitize (c));
- case 2: return TRACE_RETURN (u.format2.sanitize (c));
- default:return TRACE_RETURN (true);
- }
- }
-
protected:
union {
USHORT format; /* Format identifier */
@@ -853,7 +864,8 @@ struct EntryExitRecord
{
friend struct CursivePosFormat1;
- inline bool sanitize (hb_sanitize_context_t *c, void *base) {
+ inline bool sanitize (hb_sanitize_context_t *c, const void *base) const
+ {
TRACE_SANITIZE (this);
return TRACE_RETURN (entryAnchor.sanitize (c, base) && exitAnchor.sanitize (c, base));
}
@@ -892,12 +904,11 @@ struct CursivePosFormat1
/* We don't handle mark glyphs here. */
if (unlikely (_hb_glyph_info_is_mark (&buffer->cur()))) return TRACE_RETURN (false);
- hb_apply_context_t::skipping_forward_iterator_t skippy_iter (c, buffer->idx, 1);
- if (skippy_iter.has_no_chance ()) return TRACE_RETURN (false);
-
const EntryExitRecord &this_record = entryExitRecord[(this+coverage).get_coverage (buffer->cur().codepoint)];
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_RETURN (false);
const EntryExitRecord &next_record = entryExitRecord[(this+coverage).get_coverage (buffer->info[skippy_iter.idx].codepoint)];
@@ -967,7 +978,8 @@ struct CursivePosFormat1
return TRACE_RETURN (true);
}
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
return TRACE_RETURN (coverage.sanitize (c, this) && entryExitRecord.sanitize (c, this));
}
@@ -989,22 +1001,14 @@ struct CursivePos
template <typename context_t>
inline typename context_t::return_t dispatch (context_t *c) const
{
- TRACE_DISPATCH (this);
+ TRACE_DISPATCH (this, u.format);
+ if (unlikely (!c->may_dispatch (this, &u.format))) TRACE_RETURN (c->default_return_value ());
switch (u.format) {
case 1: return TRACE_RETURN (c->dispatch (u.format1));
default:return TRACE_RETURN (c->default_return_value ());
}
}
- inline bool sanitize (hb_sanitize_context_t *c) {
- TRACE_SANITIZE (this);
- if (!u.format.sanitize (c)) return TRACE_RETURN (false);
- switch (u.format) {
- case 1: return TRACE_RETURN (u.format1.sanitize (c));
- default:return TRACE_RETURN (true);
- }
- }
-
protected:
union {
USHORT format; /* Format identifier */
@@ -1040,7 +1044,8 @@ struct MarkBasePosFormat1
if (likely (mark_index == NOT_COVERED)) return TRACE_RETURN (false);
/* now we search backwards for a non-mark glyph */
- hb_apply_context_t::skipping_backward_iterator_t skippy_iter (c, buffer->idx, 1);
+ 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_RETURN (false);
@@ -1058,7 +1063,8 @@ struct MarkBasePosFormat1
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) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
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));
@@ -1088,22 +1094,14 @@ struct MarkBasePos
template <typename context_t>
inline typename context_t::return_t dispatch (context_t *c) const
{
- TRACE_DISPATCH (this);
+ TRACE_DISPATCH (this, u.format);
+ if (unlikely (!c->may_dispatch (this, &u.format))) TRACE_RETURN (c->default_return_value ());
switch (u.format) {
case 1: return TRACE_RETURN (c->dispatch (u.format1));
default:return TRACE_RETURN (c->default_return_value ());
}
}
- inline bool sanitize (hb_sanitize_context_t *c) {
- TRACE_SANITIZE (this);
- if (!u.format.sanitize (c)) return TRACE_RETURN (false);
- switch (u.format) {
- case 1: return TRACE_RETURN (u.format1.sanitize (c));
- default:return TRACE_RETURN (true);
- }
- }
-
protected:
union {
USHORT format; /* Format identifier */
@@ -1144,7 +1142,8 @@ struct MarkLigPosFormat1
if (likely (mark_index == NOT_COVERED)) return TRACE_RETURN (false);
/* now we search backwards for a non-mark glyph */
- hb_apply_context_t::skipping_backward_iterator_t skippy_iter (c, buffer->idx, 1);
+ 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_RETURN (false);
@@ -1178,7 +1177,8 @@ struct MarkLigPosFormat1
return TRACE_RETURN ((this+markArray).apply (c, mark_index, comp_index, lig_attach, classCount, j));
}
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
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));
@@ -1209,22 +1209,14 @@ struct MarkLigPos
template <typename context_t>
inline typename context_t::return_t dispatch (context_t *c) const
{
- TRACE_DISPATCH (this);
+ TRACE_DISPATCH (this, u.format);
+ if (unlikely (!c->may_dispatch (this, &u.format))) TRACE_RETURN (c->default_return_value ());
switch (u.format) {
case 1: return TRACE_RETURN (c->dispatch (u.format1));
default:return TRACE_RETURN (c->default_return_value ());
}
}
- inline bool sanitize (hb_sanitize_context_t *c) {
- TRACE_SANITIZE (this);
- if (!u.format.sanitize (c)) return TRACE_RETURN (false);
- switch (u.format) {
- case 1: return TRACE_RETURN (u.format1.sanitize (c));
- default:return TRACE_RETURN (true);
- }
- }
-
protected:
union {
USHORT format; /* Format identifier */
@@ -1260,7 +1252,8 @@ struct MarkMarkPosFormat1
if (likely (mark1_index == NOT_COVERED)) return TRACE_RETURN (false);
/* now we search backwards for a suitable mark glyph until a non-mark glyph */
- hb_apply_context_t::skipping_backward_iterator_t skippy_iter (c, buffer->idx, 1);
+ 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_RETURN (false);
@@ -1295,7 +1288,8 @@ struct MarkMarkPosFormat1
return TRACE_RETURN ((this+mark1Array).apply (c, mark1_index, mark2_index, this+mark2Array, classCount, j));
}
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
return TRACE_RETURN (c->check_struct (this) && mark1Coverage.sanitize (c, this) &&
mark2Coverage.sanitize (c, this) && mark1Array.sanitize (c, this)
@@ -1328,22 +1322,14 @@ struct MarkMarkPos
template <typename context_t>
inline typename context_t::return_t dispatch (context_t *c) const
{
- TRACE_DISPATCH (this);
+ TRACE_DISPATCH (this, u.format);
+ if (unlikely (!c->may_dispatch (this, &u.format))) TRACE_RETURN (c->default_return_value ());
switch (u.format) {
case 1: return TRACE_RETURN (c->dispatch (u.format1));
default:return TRACE_RETURN (c->default_return_value ());
}
}
- inline bool sanitize (hb_sanitize_context_t *c) {
- TRACE_SANITIZE (this);
- if (!u.format.sanitize (c)) return TRACE_RETURN (false);
- switch (u.format) {
- case 1: return TRACE_RETURN (u.format1.sanitize (c));
- default:return TRACE_RETURN (true);
- }
- }
-
protected:
union {
USHORT format; /* Format identifier */
@@ -1387,7 +1373,9 @@ struct PosLookupSubTable
template <typename context_t>
inline typename context_t::return_t dispatch (context_t *c, unsigned int lookup_type) const
{
- TRACE_DISPATCH (this);
+ TRACE_DISPATCH (this, lookup_type);
+ /* 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_RETURN (u.single.dispatch (c));
case Pair: return TRACE_RETURN (u.pair.dispatch (c));
@@ -1402,29 +1390,9 @@ struct PosLookupSubTable
}
}
- inline bool sanitize (hb_sanitize_context_t *c, unsigned int lookup_type) {
- TRACE_SANITIZE (this);
- if (!u.header.sub_format.sanitize (c))
- return TRACE_RETURN (false);
- switch (lookup_type) {
- case Single: return TRACE_RETURN (u.single.sanitize (c));
- case Pair: return TRACE_RETURN (u.pair.sanitize (c));
- case Cursive: return TRACE_RETURN (u.cursive.sanitize (c));
- case MarkBase: return TRACE_RETURN (u.markBase.sanitize (c));
- case MarkLig: return TRACE_RETURN (u.markLig.sanitize (c));
- case MarkMark: return TRACE_RETURN (u.markMark.sanitize (c));
- case Context: return TRACE_RETURN (u.context.sanitize (c));
- case ChainContext: return TRACE_RETURN (u.chainContext.sanitize (c));
- case Extension: return TRACE_RETURN (u.extension.sanitize (c));
- default: return TRACE_RETURN (true);
- }
- }
-
protected:
union {
- struct {
- USHORT sub_format;
- } header;
+ USHORT sub_format;
SinglePos single;
PairPos pair;
CursivePos cursive;
@@ -1436,48 +1404,37 @@ struct PosLookupSubTable
ExtensionPos extension;
} u;
public:
- DEFINE_SIZE_UNION (2, header.sub_format);
+ DEFINE_SIZE_UNION (2, sub_format);
};
struct PosLookup : Lookup
{
inline const PosLookupSubTable& get_subtable (unsigned int i) const
- { return this+CastR<OffsetArrayOf<PosLookupSubTable> > (subTable)[i]; }
+ { return Lookup::get_subtable<PosLookupSubTable> (i); }
inline bool is_reverse (void) const
{
return false;
}
+ inline bool apply (hb_apply_context_t *c) const
+ {
+ TRACE_APPLY (this);
+ 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 (NULL);
return TRACE_RETURN (dispatch (c));
}
template <typename set_t>
inline void add_coverage (set_t *glyphs) const
{
- hb_get_coverage_context_t c;
- const Coverage *last = NULL;
- unsigned int count = get_subtable_count ();
- for (unsigned int i = 0; i < count; i++) {
- const Coverage *coverage = &get_subtable (i).dispatch (&c, get_type ());
- if (coverage != last) {
- coverage->add_coverage (glyphs);
- last = coverage;
- }
- }
- }
-
- inline bool apply_once (hb_apply_context_t *c) const
- {
- TRACE_APPLY (this);
- if (!c->check_glyph_property (&c->buffer->cur(), c->lookup_props))
- return TRACE_RETURN (false);
- return TRACE_RETURN (dispatch (c));
+ hb_add_coverage_context_t<set_t> c (glyphs);
+ dispatch (&c);
}
static bool apply_recurse_func (hb_apply_context_t *c, unsigned int lookup_index);
@@ -1487,23 +1444,14 @@ struct PosLookup : Lookup
template <typename context_t>
inline typename context_t::return_t dispatch (context_t *c) const
- {
- TRACE_DISPATCH (this);
- unsigned int lookup_type = get_type ();
- unsigned int count = get_subtable_count ();
- for (unsigned int i = 0; i < count; i++) {
- typename context_t::return_t r = get_subtable (i).dispatch (c, lookup_type);
- if (c->stop_sublookup_iteration (r))
- return TRACE_RETURN (r);
- }
- return TRACE_RETURN (c->default_return_value ());
- }
+ { return Lookup::dispatch<PosLookupSubTable> (c); }
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
if (unlikely (!Lookup::sanitize (c))) return TRACE_RETURN (false);
- OffsetArrayOf<PosLookupSubTable> &list = CastR<OffsetArrayOf<PosLookupSubTable> > (subTable);
- return TRACE_RETURN (list.sanitize (c, this, get_type ()));
+ const OffsetArrayOf<PosLookupSubTable> &list = get_subtables<PosLookupSubTable> ();
+ return TRACE_RETURN (dispatch (c));
}
};
@@ -1523,10 +1471,11 @@ struct GPOS : GSUBGPOS
static inline void position_start (hb_font_t *font, hb_buffer_t *buffer);
static inline void position_finish (hb_font_t *font, hb_buffer_t *buffer);
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
if (unlikely (!GSUBGPOS::sanitize (c))) return TRACE_RETURN (false);
- OffsetTo<PosLookupList> &list = CastR<OffsetTo<PosLookupList> > (lookupList);
+ const OffsetTo<PosLookupList> &list = CastR<OffsetTo<PosLookupList> > (lookupList);
return TRACE_RETURN (list.sanitize (c, this));
}
public:
@@ -1621,8 +1570,8 @@ template <typename context_t>
const PosLookup &l = gpos.get_lookup (lookup_index);
unsigned int saved_lookup_props = c->lookup_props;
c->set_lookup (l);
- bool ret = l.apply_once (c);
- c->lookup_props = saved_lookup_props;
+ bool ret = l.dispatch (c);
+ c->set_lookup_props (saved_lookup_props);
return ret;
}
diff --git a/src/hb-ot-layout-gsub-table.hh b/src/hb-ot-layout-gsub-table.hh
index 2b421a9..ebe4c9e 100644
--- a/src/hb-ot-layout-gsub-table.hh
+++ b/src/hb-ot-layout-gsub-table.hh
@@ -97,7 +97,8 @@ struct SingleSubstFormat1
return TRACE_RETURN (true);
}
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
return TRACE_RETURN (coverage.sanitize (c, this) && deltaGlyphID.sanitize (c));
}
@@ -173,7 +174,8 @@ struct SingleSubstFormat2
return TRACE_RETURN (true);
}
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
return TRACE_RETURN (coverage.sanitize (c, this) && substitute.sanitize (c));
}
@@ -200,7 +202,7 @@ struct SingleSubst
TRACE_SERIALIZE (this);
if (unlikely (!c->extend_min (u.format))) return TRACE_RETURN (false);
unsigned int format = 2;
- int delta;
+ int delta = 0;
if (num_glyphs) {
format = 1;
/* TODO(serialize) check for wrap-around */
@@ -222,7 +224,8 @@ struct SingleSubst
template <typename context_t>
inline typename context_t::return_t dispatch (context_t *c) const
{
- TRACE_DISPATCH (this);
+ TRACE_DISPATCH (this, u.format);
+ if (unlikely (!c->may_dispatch (this, &u.format))) TRACE_RETURN (c->default_return_value ());
switch (u.format) {
case 1: return TRACE_RETURN (c->dispatch (u.format1));
case 2: return TRACE_RETURN (c->dispatch (u.format2));
@@ -230,16 +233,6 @@ struct SingleSubst
}
}
- inline bool sanitize (hb_sanitize_context_t *c) {
- TRACE_SANITIZE (this);
- if (!u.format.sanitize (c)) return TRACE_RETURN (false);
- switch (u.format) {
- case 1: return TRACE_RETURN (u.format1.sanitize (c));
- case 2: return TRACE_RETURN (u.format2.sanitize (c));
- default:return TRACE_RETURN (true);
- }
- }
-
protected:
union {
USHORT format; /* Format identifier */
@@ -312,7 +305,8 @@ struct Sequence
return TRACE_RETURN (true);
}
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
return TRACE_RETURN (substitute.sanitize (c));
}
@@ -384,7 +378,8 @@ struct MultipleSubstFormat1
return TRACE_RETURN (true);
}
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
return TRACE_RETURN (coverage.sanitize (c, this) && sequence.sanitize (c, this));
}
@@ -422,22 +417,14 @@ struct MultipleSubst
template <typename context_t>
inline typename context_t::return_t dispatch (context_t *c) const
{
- TRACE_DISPATCH (this);
+ TRACE_DISPATCH (this, u.format);
+ if (unlikely (!c->may_dispatch (this, &u.format))) TRACE_RETURN (c->default_return_value ());
switch (u.format) {
case 1: return TRACE_RETURN (c->dispatch (u.format1));
default:return TRACE_RETURN (c->default_return_value ());
}
}
- inline bool sanitize (hb_sanitize_context_t *c) {
- TRACE_SANITIZE (this);
- if (!u.format.sanitize (c)) return TRACE_RETURN (false);
- switch (u.format) {
- case 1: return TRACE_RETURN (u.format1.sanitize (c));
- default:return TRACE_RETURN (true);
- }
- }
-
protected:
union {
USHORT format; /* Format identifier */
@@ -535,7 +522,8 @@ struct AlternateSubstFormat1
return TRACE_RETURN (true);
}
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
return TRACE_RETURN (coverage.sanitize (c, this) && alternateSet.sanitize (c, this));
}
@@ -573,22 +561,14 @@ struct AlternateSubst
template <typename context_t>
inline typename context_t::return_t dispatch (context_t *c) const
{
- TRACE_DISPATCH (this);
+ TRACE_DISPATCH (this, u.format);
+ if (unlikely (!c->may_dispatch (this, &u.format))) TRACE_RETURN (c->default_return_value ());
switch (u.format) {
case 1: return TRACE_RETURN (c->dispatch (u.format1));
default:return TRACE_RETURN (c->default_return_value ());
}
}
- inline bool sanitize (hb_sanitize_context_t *c) {
- TRACE_SANITIZE (this);
- if (!u.format.sanitize (c)) return TRACE_RETURN (false);
- switch (u.format) {
- case 1: return TRACE_RETURN (u.format1.sanitize (c));
- default:return TRACE_RETURN (true);
- }
- }
-
protected:
union {
USHORT format; /* Format identifier */
@@ -686,7 +666,8 @@ struct Ligature
}
public:
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
return TRACE_RETURN (ligGlyph.sanitize (c) && component.sanitize (c));
}
@@ -764,7 +745,8 @@ struct LigatureSet
return TRACE_RETURN (true);
}
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
return TRACE_RETURN (ligature.sanitize (c, this));
}
@@ -848,7 +830,8 @@ struct LigatureSubstFormat1
return TRACE_RETURN (true);
}
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
return TRACE_RETURN (coverage.sanitize (c, this) && ligatureSet.sanitize (c, this));
}
@@ -889,22 +872,14 @@ struct LigatureSubst
template <typename context_t>
inline typename context_t::return_t dispatch (context_t *c) const
{
- TRACE_DISPATCH (this);
+ TRACE_DISPATCH (this, u.format);
+ if (unlikely (!c->may_dispatch (this, &u.format))) TRACE_RETURN (c->default_return_value ());
switch (u.format) {
case 1: return TRACE_RETURN (c->dispatch (u.format1));
default:return TRACE_RETURN (c->default_return_value ());
}
}
- inline bool sanitize (hb_sanitize_context_t *c) {
- TRACE_SANITIZE (this);
- if (!u.format.sanitize (c)) return TRACE_RETURN (false);
- switch (u.format) {
- case 1: return TRACE_RETURN (u.format1.sanitize (c));
- default:return TRACE_RETURN (true);
- }
- }
-
protected:
union {
USHORT format; /* Format identifier */
@@ -1017,14 +992,15 @@ struct ReverseChainSingleSubstFormat1
return TRACE_RETURN (false);
}
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
if (!(coverage.sanitize (c, this) && backtrack.sanitize (c, this)))
return TRACE_RETURN (false);
- OffsetArrayOf<Coverage> &lookahead = StructAfter<OffsetArrayOf<Coverage> > (backtrack);
+ const OffsetArrayOf<Coverage> &lookahead = StructAfter<OffsetArrayOf<Coverage> > (backtrack);
if (!lookahead.sanitize (c, this))
return TRACE_RETURN (false);
- ArrayOf<GlyphID> &substitute = StructAfter<ArrayOf<GlyphID> > (lookahead);
+ const ArrayOf<GlyphID> &substitute = StructAfter<ArrayOf<GlyphID> > (lookahead);
return TRACE_RETURN (substitute.sanitize (c));
}
@@ -1053,22 +1029,14 @@ struct ReverseChainSingleSubst
template <typename context_t>
inline typename context_t::return_t dispatch (context_t *c) const
{
- TRACE_DISPATCH (this);
+ TRACE_DISPATCH (this, u.format);
+ if (unlikely (!c->may_dispatch (this, &u.format))) TRACE_RETURN (c->default_return_value ());
switch (u.format) {
case 1: return TRACE_RETURN (c->dispatch (u.format1));
default:return TRACE_RETURN (c->default_return_value ());
}
}
- inline bool sanitize (hb_sanitize_context_t *c) {
- TRACE_SANITIZE (this);
- if (!u.format.sanitize (c)) return TRACE_RETURN (false);
- switch (u.format) {
- case 1: return TRACE_RETURN (u.format1.sanitize (c));
- default:return TRACE_RETURN (true);
- }
- }
-
protected:
union {
USHORT format; /* Format identifier */
@@ -1100,7 +1068,9 @@ struct SubstLookupSubTable
template <typename context_t>
inline typename context_t::return_t dispatch (context_t *c, unsigned int lookup_type) const
{
- TRACE_DISPATCH (this);
+ TRACE_DISPATCH (this, lookup_type);
+ /* 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_RETURN (u.single.dispatch (c));
case Multiple: return TRACE_RETURN (u.multiple.dispatch (c));
@@ -1114,28 +1084,9 @@ struct SubstLookupSubTable
}
}
- inline bool sanitize (hb_sanitize_context_t *c, unsigned int lookup_type) {
- TRACE_SANITIZE (this);
- if (!u.header.sub_format.sanitize (c))
- return TRACE_RETURN (false);
- switch (lookup_type) {
- case Single: return TRACE_RETURN (u.single.sanitize (c));
- case Multiple: return TRACE_RETURN (u.multiple.sanitize (c));
- case Alternate: return TRACE_RETURN (u.alternate.sanitize (c));
- case Ligature: return TRACE_RETURN (u.ligature.sanitize (c));
- case Context: return TRACE_RETURN (u.context.sanitize (c));
- case ChainContext: return TRACE_RETURN (u.chainContext.sanitize (c));
- case Extension: return TRACE_RETURN (u.extension.sanitize (c));
- case ReverseChainSingle: return TRACE_RETURN (u.reverseChainContextSingle.sanitize (c));
- default: return TRACE_RETURN (true);
- }
- }
-
protected:
union {
- struct {
- USHORT sub_format;
- } header;
+ USHORT sub_format;
SingleSubst single;
MultipleSubst multiple;
AlternateSubst alternate;
@@ -1146,14 +1097,14 @@ struct SubstLookupSubTable
ReverseChainSingleSubst reverseChainContextSingle;
} u;
public:
- DEFINE_SIZE_UNION (2, header.sub_format);
+ DEFINE_SIZE_UNION (2, sub_format);
};
struct SubstLookup : Lookup
{
inline const SubstLookupSubTable& get_subtable (unsigned int i) const
- { return this+CastR<OffsetArrayOf<SubstLookupSubTable> > (subTable)[i]; }
+ { return Lookup::get_subtable<SubstLookupSubTable> (i); }
inline static bool lookup_type_is_reverse (unsigned int lookup_type)
{ return lookup_type == SubstLookupSubTable::ReverseChainSingle; }
@@ -1166,6 +1117,12 @@ struct SubstLookup : Lookup
return lookup_type_is_reverse (type);
}
+ inline bool apply (hb_apply_context_t *c) const
+ {
+ TRACE_APPLY (this);
+ return TRACE_RETURN (dispatch (c));
+ }
+
inline hb_closure_context_t::return_t closure (hb_closure_context_t *c) const
{
TRACE_CLOSURE (this);
@@ -1183,39 +1140,24 @@ struct SubstLookup : Lookup
template <typename set_t>
inline void add_coverage (set_t *glyphs) const
{
- hb_get_coverage_context_t c;
- const Coverage *last = NULL;
- unsigned int count = get_subtable_count ();
- for (unsigned int i = 0; i < count; i++) {
- const Coverage *coverage = &get_subtable (i).dispatch (&c, get_type ());
- if (coverage != last) {
- coverage->add_coverage (glyphs);
- last = coverage;
- }
- }
+ hb_add_coverage_context_t<set_t> c (glyphs);
+ dispatch (&c);
}
- inline bool would_apply (hb_would_apply_context_t *c, const hb_set_digest_t *digest) const
+ inline bool would_apply (hb_would_apply_context_t *c,
+ const hb_ot_layout_lookup_accelerator_t *accel) const
{
TRACE_WOULD_APPLY (this);
if (unlikely (!c->len)) return TRACE_RETURN (false);
- if (!digest->may_have (c->glyphs[0])) return TRACE_RETURN (false);
+ if (!accel->may_have (c->glyphs[0])) return TRACE_RETURN (false);
return TRACE_RETURN (dispatch (c));
}
- inline bool apply_once (hb_apply_context_t *c) const
- {
- TRACE_APPLY (this);
- if (!c->check_glyph_property (&c->buffer->cur(), c->lookup_props))
- return TRACE_RETURN (false);
- return TRACE_RETURN (dispatch (c));
- }
-
static bool apply_recurse_func (hb_apply_context_t *c, unsigned int lookup_index);
inline SubstLookupSubTable& serialize_subtable (hb_serialize_context_t *c,
unsigned int i)
- { return CastR<OffsetArrayOf<SubstLookupSubTable> > (subTable)[i].serialize (c, this); }
+ { return get_subtables<SubstLookupSubTable> ()[i].serialize (c, this); }
inline bool serialize_single (hb_serialize_context_t *c,
uint32_t lookup_props,
@@ -1274,24 +1216,14 @@ struct SubstLookup : Lookup
template <typename context_t>
inline typename context_t::return_t dispatch (context_t *c) const
- {
- TRACE_DISPATCH (this);
- unsigned int lookup_type = get_type ();
- unsigned int count = get_subtable_count ();
- for (unsigned int i = 0; i < count; i++) {
- typename context_t::return_t r = get_subtable (i).dispatch (c, lookup_type);
- if (c->stop_sublookup_iteration (r))
- return TRACE_RETURN (r);
- }
- return TRACE_RETURN (c->default_return_value ());
- }
+ { return Lookup::dispatch<SubstLookupSubTable> (c); }
- inline bool sanitize (hb_sanitize_context_t *c)
+ inline bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
if (unlikely (!Lookup::sanitize (c))) return TRACE_RETURN (false);
- OffsetArrayOf<SubstLookupSubTable> &list = CastR<OffsetArrayOf<SubstLookupSubTable> > (subTable);
- if (unlikely (!list.sanitize (c, this, get_type ()))) 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))
{
@@ -1324,10 +1256,11 @@ struct GSUB : GSUBGPOS
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) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
if (unlikely (!GSUBGPOS::sanitize (c))) return TRACE_RETURN (false);
- OffsetTo<SubstLookupList> &list = CastR<OffsetTo<SubstLookupList> > (lookupList);
+ const OffsetTo<SubstLookupList> &list = CastR<OffsetTo<SubstLookupList> > (lookupList);
return TRACE_RETURN (list.sanitize (c, this));
}
public:
@@ -1362,7 +1295,7 @@ GSUB::substitute_finish (hb_font_t *font HB_UNUSED, hb_buffer_t *buffer HB_UNUSE
{
unsigned int type = get_type ();
if (unlikely (type == SubstLookupSubTable::Extension))
- return CastR<ExtensionSubst> (get_subtable<SubstLookupSubTable>()).is_reverse ();
+ return CastR<ExtensionSubst> (get_subtable<LookupSubTable>()).is_reverse ();
return SubstLookup::lookup_type_is_reverse (type);
}
@@ -1380,8 +1313,8 @@ template <typename context_t>
const SubstLookup &l = gsub.get_lookup (lookup_index);
unsigned int saved_lookup_props = c->lookup_props;
c->set_lookup (l);
- bool ret = l.apply_once (c);
- c->lookup_props = saved_lookup_props;
+ bool ret = l.dispatch (c);
+ c->set_lookup_props (saved_lookup_props);
return ret;
}
diff --git a/src/hb-ot-layout-gsubgpos-private.hh b/src/hb-ot-layout-gsubgpos-private.hh
index 546ff4b..cbc6840 100644
--- a/src/hb-ot-layout-gsubgpos-private.hh
+++ b/src/hb-ot-layout-gsubgpos-private.hh
@@ -37,12 +37,6 @@
namespace OT {
-
-#define TRACE_DISPATCH(this) \
- hb_auto_trace_t<context_t::max_debug_depth, typename context_t::return_t> trace \
- (&c->debug_depth, c->get_name (), this, HB_FUNC, \
- "");
-
#ifndef HB_DEBUG_CLOSURE
#define HB_DEBUG_CLOSURE (HB_DEBUG+0)
#endif
@@ -58,6 +52,8 @@ struct hb_closure_context_t
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; }
@@ -107,6 +103,8 @@ 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; }
@@ -146,6 +144,8 @@ struct hb_collect_glyphs_context_t
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; }
@@ -168,6 +168,10 @@ struct hb_collect_glyphs_context_t
if (output == hb_set_get_empty ())
return HB_VOID;
+ /* Return if new lookup was recursed to before. */
+ if (recursed_lookups.has (lookup_index))
+ return HB_VOID;
+
hb_set_t *old_before = before;
hb_set_t *old_input = input;
hb_set_t *old_after = after;
@@ -181,6 +185,8 @@ struct hb_collect_glyphs_context_t
input = old_input;
after = old_after;
+ recursed_lookups.add (lookup_index);
+
return HB_VOID;
}
@@ -190,6 +196,7 @@ struct hb_collect_glyphs_context_t
hb_set_t *after;
hb_set_t *output;
recurse_func_t recurse_func;
+ hb_set_t recursed_lookups;
unsigned int nesting_level_left;
unsigned int debug_depth;
@@ -205,26 +212,48 @@ struct hb_collect_glyphs_context_t
after (glyphs_after ? glyphs_after : hb_set_get_empty ()),
output (glyphs_output ? glyphs_output : hb_set_get_empty ()),
recurse_func (NULL),
+ recursed_lookups (),
nesting_level_left (nesting_level_left_),
- debug_depth (0) {}
+ debug_depth (0)
+ {
+ recursed_lookups.init ();
+ }
+ ~hb_collect_glyphs_context_t (void)
+ {
+ recursed_lookups.fini ();
+ }
void set_recurse_func (recurse_func_t func) { recurse_func = func; }
};
-struct hb_get_coverage_context_t
+#ifndef HB_DEBUG_GET_COVERAGE
+#define HB_DEBUG_GET_COVERAGE (HB_DEBUG+0)
+#endif
+
+template <typename set_t>
+struct hb_add_coverage_context_t
{
inline const char *get_name (void) { return "GET_COVERAGE"; }
- static const unsigned int max_debug_depth = 0;
+ 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); }
+ bool stop_sublookup_iteration (return_t r) const
+ {
+ r.add_coverage (set);
+ return false;
+ }
- hb_get_coverage_context_t (void) :
+ hb_add_coverage_context_t (set_t *set_) :
+ set (set_),
debug_depth (0) {}
+ set_t *set;
unsigned int debug_depth;
};
@@ -241,61 +270,6 @@ struct hb_get_coverage_context_t
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>
- inline return_t dispatch (const T &obj) { return obj.apply (this); }
- static return_t default_return_value (void) { return false; }
- bool stop_sublookup_iteration (return_t r) const { return r; }
- return_t recurse (unsigned int lookup_index)
- {
- if (unlikely (nesting_level_left == 0 || !recurse_func))
- return default_return_value ();
-
- nesting_level_left--;
- bool ret = recurse_func (this, lookup_index);
- nesting_level_left++;
- return ret;
- }
-
- unsigned int table_index; /* GSUB/GPOS */
- hb_font_t *font;
- hb_face_t *face;
- hb_buffer_t *buffer;
- hb_direction_t direction;
- hb_mask_t lookup_mask;
- bool auto_zwj;
- recurse_func_t recurse_func;
- unsigned int nesting_level_left;
- unsigned int lookup_props;
- const GDEF &gdef;
- bool has_glyph_classes;
- unsigned int debug_depth;
-
-
- hb_apply_context_t (unsigned int table_index_,
- hb_font_t *font_,
- hb_buffer_t *buffer_) :
- table_index (table_index_),
- font (font_), face (font->face), buffer (buffer_),
- direction (buffer_->props.direction),
- lookup_mask (1),
- auto_zwj (true),
- recurse_func (NULL),
- nesting_level_left (MAX_NESTING_LEVEL),
- lookup_props (0),
- gdef (*hb_ot_layout_from_face (face)->gdef),
- has_glyph_classes (gdef.has_glyph_classes ()),
- 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_props (unsigned int lookup_props_) { lookup_props = lookup_props_; }
- inline void set_lookup (const Lookup &l) { lookup_props = l.get_props (); }
-
struct matcher_t
{
inline matcher_t (void) :
@@ -371,29 +345,24 @@ struct hb_apply_context_t
const void *match_data;
};
- struct skipping_forward_iterator_t
- {
- inline skipping_forward_iterator_t (hb_apply_context_t *c_,
- unsigned int start_index_,
- unsigned int num_items_,
- bool context_match = false) :
- idx (start_index_),
- c (c_),
- match_glyph_data (NULL),
- num_items (num_items_),
- end (c->buffer->len)
+ struct skipping_iterator_t
+ {
+ inline void init (hb_apply_context_t *c_, bool context_match = false)
{
+ c = c_;
+ match_glyph_data = NULL,
+ matcher.set_match_func (NULL, NULL);
matcher.set_lookup_props (c->lookup_props);
/* Ignore ZWNJ if we are matching GSUB context, or matching GPOS. */
matcher.set_ignore_zwnj (context_match || c->table_index == 1);
/* Ignore ZWJ if we are matching GSUB context, or matching GPOS, or if asked to. */
matcher.set_ignore_zwj (context_match || c->table_index == 1 || c->auto_zwj);
- if (!context_match)
- matcher.set_mask (c->lookup_mask);
- matcher.set_syllable (start_index_ == c->buffer->idx ? c->buffer->cur().syllable () : 0);
+ matcher.set_mask (context_match ? -1 : c->lookup_mask);
+ }
+ inline void set_lookup_props (unsigned int lookup_props)
+ {
+ matcher.set_lookup_props (lookup_props);
}
- inline void set_lookup_props (unsigned int lookup_props) { matcher.set_lookup_props (lookup_props); }
- inline void set_syllable (unsigned int syllable) { matcher.set_syllable (syllable); }
inline void set_match_func (matcher_t::match_func_t match_func,
const void *match_data,
const USHORT glyph_data[])
@@ -402,12 +371,21 @@ struct hb_apply_context_t
match_glyph_data = glyph_data;
}
- inline bool has_no_chance (void) const { return unlikely (num_items && idx + num_items >= end); }
+ inline void reset (unsigned int start_index_,
+ unsigned int num_items_)
+ {
+ idx = start_index_;
+ num_items = num_items_;
+ end = c->buffer->len;
+ matcher.set_syllable (start_index_ == c->buffer->idx ? c->buffer->cur().syllable () : 0);
+ }
+
inline void reject (void) { num_items++; match_glyph_data--; }
+
inline bool next (void)
{
assert (num_items > 0);
- while (!has_no_chance ())
+ while (idx + num_items < end)
{
idx++;
const hb_glyph_info_t &info = c->buffer->info[idx];
@@ -431,53 +409,10 @@ struct hb_apply_context_t
}
return false;
}
-
- unsigned int idx;
- protected:
- hb_apply_context_t *c;
- matcher_t matcher;
- const USHORT *match_glyph_data;
-
- unsigned int num_items;
- unsigned int end;
- };
-
- struct skipping_backward_iterator_t
- {
- inline skipping_backward_iterator_t (hb_apply_context_t *c_,
- unsigned int start_index_,
- unsigned int num_items_,
- bool context_match = false) :
- idx (start_index_),
- c (c_),
- match_glyph_data (NULL),
- num_items (num_items_)
- {
- matcher.set_lookup_props (c->lookup_props);
- /* Ignore ZWNJ if we are matching GSUB context, or matching GPOS. */
- matcher.set_ignore_zwnj (context_match || c->table_index == 1);
- /* Ignore ZWJ if we are matching GSUB context, or matching GPOS, or if asked to. */
- matcher.set_ignore_zwj (context_match || c->table_index == 1 || c->auto_zwj);
- if (!context_match)
- matcher.set_mask (c->lookup_mask);
- matcher.set_syllable (start_index_ == c->buffer->idx ? c->buffer->cur().syllable () : 0);
- }
- inline void set_lookup_props (unsigned int lookup_props) { matcher.set_lookup_props (lookup_props); }
- inline void set_syllable (unsigned int syllable) { matcher.set_syllable (syllable); }
- inline void set_match_func (matcher_t::match_func_t match_func,
- const void *match_data,
- const USHORT glyph_data[])
- {
- matcher.set_match_func (match_func, match_data);
- match_glyph_data = glyph_data;
- }
-
- inline bool has_no_chance (void) const { return unlikely (idx < num_items); }
- inline void reject (void) { num_items++; }
inline bool prev (void)
{
assert (num_items > 0);
- while (!has_no_chance ())
+ while (idx >= num_items)
{
idx--;
const hb_glyph_info_t &info = c->buffer->out_info[idx];
@@ -509,8 +444,75 @@ struct hb_apply_context_t
const USHORT *match_glyph_data;
unsigned int num_items;
+ unsigned int end;
};
+
+ 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; }
+ bool stop_sublookup_iteration (return_t r) const { return r; }
+ return_t recurse (unsigned int lookup_index)
+ {
+ if (unlikely (nesting_level_left == 0 || !recurse_func))
+ return default_return_value ();
+
+ nesting_level_left--;
+ bool ret = recurse_func (this, lookup_index);
+ nesting_level_left++;
+ return ret;
+ }
+
+ unsigned int table_index; /* GSUB/GPOS */
+ hb_font_t *font;
+ hb_face_t *face;
+ hb_buffer_t *buffer;
+ hb_direction_t direction;
+ hb_mask_t lookup_mask;
+ bool auto_zwj;
+ recurse_func_t recurse_func;
+ unsigned int nesting_level_left;
+ unsigned int lookup_props;
+ const GDEF &gdef;
+ bool has_glyph_classes;
+ skipping_iterator_t iter_input, iter_context;
+ unsigned int debug_depth;
+
+
+ hb_apply_context_t (unsigned int table_index_,
+ hb_font_t *font_,
+ hb_buffer_t *buffer_) :
+ table_index (table_index_),
+ font (font_), face (font->face), buffer (buffer_),
+ direction (buffer_->props.direction),
+ lookup_mask (1),
+ auto_zwj (true),
+ recurse_func (NULL),
+ 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 (),
+ 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 (const Lookup &l) { set_lookup_props (l.get_props ()); }
+ inline void set_lookup_props (unsigned int lookup_props_)
+ {
+ lookup_props = lookup_props_;
+ iter_input.init (this, false);
+ iter_context.init (this, true);
+ }
+
inline bool
match_properties_mark (hb_codepoint_t glyph,
unsigned int glyph_props,
@@ -722,9 +724,9 @@ static inline bool match_input (hb_apply_context_t *c,
hb_buffer_t *buffer = c->buffer;
- hb_apply_context_t::skipping_forward_iterator_t skippy_iter (c, buffer->idx, count - 1);
+ hb_apply_context_t::skipping_iterator_t &skippy_iter = c->iter_input;
+ skippy_iter.reset (buffer->idx, count - 1);
skippy_iter.set_match_func (match_func, match_data, input);
- if (skippy_iter.has_no_chance ()) return TRACE_RETURN (false);
/*
* This is perhaps the trickiest part of OpenType... Remarks:
@@ -891,9 +893,9 @@ static inline bool match_backtrack (hb_apply_context_t *c,
{
TRACE_APPLY (NULL);
- hb_apply_context_t::skipping_backward_iterator_t skippy_iter (c, c->buffer->backtrack_len (), count, true);
+ hb_apply_context_t::skipping_iterator_t &skippy_iter = c->iter_context;
+ skippy_iter.reset (c->buffer->backtrack_len (), count);
skippy_iter.set_match_func (match_func, match_data, backtrack);
- if (skippy_iter.has_no_chance ()) return TRACE_RETURN (false);
for (unsigned int i = 0; i < count; i++)
if (!skippy_iter.prev ())
@@ -911,9 +913,9 @@ static inline bool match_lookahead (hb_apply_context_t *c,
{
TRACE_APPLY (NULL);
- hb_apply_context_t::skipping_forward_iterator_t skippy_iter (c, c->buffer->idx + offset - 1, count, true);
+ hb_apply_context_t::skipping_iterator_t &skippy_iter = c->iter_context;
+ skippy_iter.reset (c->buffer->idx + offset - 1, count);
skippy_iter.set_match_func (match_func, match_data, lookahead);
- if (skippy_iter.has_no_chance ()) return TRACE_RETURN (false);
for (unsigned int i = 0; i < count; i++)
if (!skippy_iter.next ())
@@ -926,7 +928,8 @@ static inline bool match_lookahead (hb_apply_context_t *c,
struct LookupRecord
{
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
return TRACE_RETURN (c->check_struct (this));
}
@@ -1117,9 +1120,9 @@ struct Rule
inline void closure (hb_closure_context_t *c, ContextClosureLookupContext &lookup_context) const
{
TRACE_CLOSURE (this);
- const LookupRecord *lookupRecord = &StructAtOffset<LookupRecord> (input, input[0].static_size * (inputCount ? inputCount - 1 : 0));
+ const LookupRecord *lookupRecord = &StructAtOffset<LookupRecord> (inputZ, inputZ[0].static_size * (inputCount ? inputCount - 1 : 0));
context_closure_lookup (c,
- inputCount, input,
+ inputCount, inputZ,
lookupCount, lookupRecord,
lookup_context);
}
@@ -1127,9 +1130,9 @@ struct Rule
inline void collect_glyphs (hb_collect_glyphs_context_t *c, ContextCollectGlyphsLookupContext &lookup_context) const
{
TRACE_COLLECT_GLYPHS (this);
- const LookupRecord *lookupRecord = &StructAtOffset<LookupRecord> (input, input[0].static_size * (inputCount ? inputCount - 1 : 0));
+ const LookupRecord *lookupRecord = &StructAtOffset<LookupRecord> (inputZ, inputZ[0].static_size * (inputCount ? inputCount - 1 : 0));
context_collect_glyphs_lookup (c,
- inputCount, input,
+ inputCount, inputZ,
lookupCount, lookupRecord,
lookup_context);
}
@@ -1137,24 +1140,25 @@ struct Rule
inline bool would_apply (hb_would_apply_context_t *c, ContextApplyLookupContext &lookup_context) const
{
TRACE_WOULD_APPLY (this);
- const LookupRecord *lookupRecord = &StructAtOffset<LookupRecord> (input, input[0].static_size * (inputCount ? inputCount - 1 : 0));
- return TRACE_RETURN (context_would_apply_lookup (c, inputCount, input, lookupCount, lookupRecord, lookup_context));
+ const LookupRecord *lookupRecord = &StructAtOffset<LookupRecord> (inputZ, inputZ[0].static_size * (inputCount ? inputCount - 1 : 0));
+ 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> (input, input[0].static_size * (inputCount ? inputCount - 1 : 0));
- return TRACE_RETURN (context_apply_lookup (c, inputCount, input, lookupCount, lookupRecord, lookup_context));
+ const LookupRecord *lookupRecord = &StructAtOffset<LookupRecord> (inputZ, inputZ[0].static_size * (inputCount ? inputCount - 1 : 0));
+ return TRACE_RETURN (context_apply_lookup (c, inputCount, inputZ, lookupCount, lookupRecord, lookup_context));
}
public:
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
return inputCount.sanitize (c)
&& lookupCount.sanitize (c)
- && c->check_range (input,
- input[0].static_size * inputCount
+ && c->check_range (inputZ,
+ inputZ[0].static_size * inputCount
+ lookupRecordX[0].static_size * lookupCount);
}
@@ -1163,12 +1167,12 @@ struct Rule
* glyph sequence--includes the first
* glyph */
USHORT lookupCount; /* Number of LookupRecords */
- USHORT input[VAR]; /* Array of match inputs--start with
+ USHORT inputZ[VAR]; /* Array of match inputs--start with
* second glyph */
LookupRecord lookupRecordX[VAR]; /* Array of LookupRecords--in
* design order */
public:
- DEFINE_SIZE_ARRAY2 (4, input, lookupRecordX);
+ DEFINE_SIZE_ARRAY2 (4, inputZ, lookupRecordX);
};
struct RuleSet
@@ -1213,7 +1217,8 @@ struct RuleSet
return TRACE_RETURN (false);
}
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
return TRACE_RETURN (rule.sanitize (c, this));
}
@@ -1295,7 +1300,8 @@ struct ContextFormat1
return TRACE_RETURN (rule_set.apply (c, lookup_context));
}
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
return TRACE_RETURN (coverage.sanitize (c, this) && ruleSet.sanitize (c, this));
}
@@ -1387,7 +1393,8 @@ struct ContextFormat2
return TRACE_RETURN (rule_set.apply (c, lookup_context));
}
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
return TRACE_RETURN (coverage.sanitize (c, this) && classDef.sanitize (c, this) && ruleSet.sanitize (c, this));
}
@@ -1413,16 +1420,16 @@ struct ContextFormat3
inline void closure (hb_closure_context_t *c) const
{
TRACE_CLOSURE (this);
- if (!(this+coverage[0]).intersects (c->glyphs))
+ if (!(this+coverageZ[0]).intersects (c->glyphs))
return;
- const LookupRecord *lookupRecord = &StructAtOffset<LookupRecord> (coverage, coverage[0].static_size * glyphCount);
+ const LookupRecord *lookupRecord = &StructAtOffset<LookupRecord> (coverageZ, coverageZ[0].static_size * glyphCount);
struct ContextClosureLookupContext lookup_context = {
{intersects_coverage},
this
};
context_closure_lookup (c,
- glyphCount, (const USHORT *) (coverage + 1),
+ glyphCount, (const USHORT *) (coverageZ + 1),
lookupCount, lookupRecord,
lookup_context);
}
@@ -1430,16 +1437,16 @@ struct ContextFormat3
inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
{
TRACE_COLLECT_GLYPHS (this);
- (this+coverage[0]).add_coverage (c->input);
+ (this+coverageZ[0]).add_coverage (c->input);
- const LookupRecord *lookupRecord = &StructAtOffset<LookupRecord> (coverage, coverage[0].static_size * glyphCount);
+ const LookupRecord *lookupRecord = &StructAtOffset<LookupRecord> (coverageZ, coverageZ[0].static_size * glyphCount);
struct ContextCollectGlyphsLookupContext lookup_context = {
{collect_coverage},
this
};
context_collect_glyphs_lookup (c,
- glyphCount, (const USHORT *) (coverage + 1),
+ glyphCount, (const USHORT *) (coverageZ + 1),
lookupCount, lookupRecord,
lookup_context);
}
@@ -1448,41 +1455,43 @@ struct ContextFormat3
{
TRACE_WOULD_APPLY (this);
- const LookupRecord *lookupRecord = &StructAtOffset<LookupRecord> (coverage, coverage[0].static_size * glyphCount);
+ const LookupRecord *lookupRecord = &StructAtOffset<LookupRecord> (coverageZ, coverageZ[0].static_size * glyphCount);
struct ContextApplyLookupContext lookup_context = {
{match_coverage},
this
};
- return TRACE_RETURN (context_would_apply_lookup (c, glyphCount, (const USHORT *) (coverage + 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
{
- return this+coverage[0];
+ return this+coverageZ[0];
}
inline bool apply (hb_apply_context_t *c) const
{
TRACE_APPLY (this);
- unsigned int index = (this+coverage[0]).get_coverage (c->buffer->cur().codepoint);
+ unsigned int index = (this+coverageZ[0]).get_coverage (c->buffer->cur().codepoint);
if (likely (index == NOT_COVERED)) return TRACE_RETURN (false);
- const LookupRecord *lookupRecord = &StructAtOffset<LookupRecord> (coverage, coverage[0].static_size * glyphCount);
+ const LookupRecord *lookupRecord = &StructAtOffset<LookupRecord> (coverageZ, coverageZ[0].static_size * glyphCount);
struct ContextApplyLookupContext lookup_context = {
{match_coverage},
this
};
- return TRACE_RETURN (context_apply_lookup (c, glyphCount, (const USHORT *) (coverage + 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) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
if (!c->check_struct (this)) return TRACE_RETURN (false);
unsigned int count = glyphCount;
- if (!c->check_array (coverage, coverage[0].static_size, count)) return TRACE_RETURN (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 (!coverage[i].sanitize (c, this)) return TRACE_RETURN (false);
- LookupRecord *lookupRecord = &StructAtOffset<LookupRecord> (coverage, coverage[0].static_size * count);
+ if (!coverageZ[i].sanitize (c, this)) return TRACE_RETURN (false);
+ const LookupRecord *lookupRecord = &StructAtOffset<LookupRecord> (coverageZ, coverageZ[0].static_size * count);
return TRACE_RETURN (c->check_array (lookupRecord, lookupRecord[0].static_size, lookupCount));
}
@@ -1492,12 +1501,12 @@ struct ContextFormat3
* sequence */
USHORT lookupCount; /* Number of LookupRecords */
OffsetTo<Coverage>
- coverage[VAR]; /* Array of offsets to Coverage
+ coverageZ[VAR]; /* Array of offsets to Coverage
* table in glyph sequence order */
LookupRecord lookupRecordX[VAR]; /* Array of LookupRecords--in
* design order */
public:
- DEFINE_SIZE_ARRAY2 (6, coverage, lookupRecordX);
+ DEFINE_SIZE_ARRAY2 (6, coverageZ, lookupRecordX);
};
struct Context
@@ -1505,7 +1514,8 @@ struct Context
template <typename context_t>
inline typename context_t::return_t dispatch (context_t *c) const
{
- TRACE_DISPATCH (this);
+ TRACE_DISPATCH (this, u.format);
+ if (unlikely (!c->may_dispatch (this, &u.format))) TRACE_RETURN (c->default_return_value ());
switch (u.format) {
case 1: return TRACE_RETURN (c->dispatch (u.format1));
case 2: return TRACE_RETURN (c->dispatch (u.format2));
@@ -1514,17 +1524,6 @@ struct Context
}
}
- inline bool sanitize (hb_sanitize_context_t *c) {
- TRACE_SANITIZE (this);
- if (!u.format.sanitize (c)) return TRACE_RETURN (false);
- switch (u.format) {
- 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);
- }
- }
-
protected:
union {
USHORT format; /* Format identifier */
@@ -1706,14 +1705,15 @@ struct ChainRule
lookup.array, lookup_context));
}
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
if (!backtrack.sanitize (c)) return TRACE_RETURN (false);
- HeadlessArrayOf<USHORT> &input = StructAfter<HeadlessArrayOf<USHORT> > (backtrack);
+ const HeadlessArrayOf<USHORT> &input = StructAfter<HeadlessArrayOf<USHORT> > (backtrack);
if (!input.sanitize (c)) return TRACE_RETURN (false);
- ArrayOf<USHORT> &lookahead = StructAfter<ArrayOf<USHORT> > (input);
+ const ArrayOf<USHORT> &lookahead = StructAfter<ArrayOf<USHORT> > (input);
if (!lookahead.sanitize (c)) return TRACE_RETURN (false);
- ArrayOf<LookupRecord> &lookup = StructAfter<ArrayOf<LookupRecord> > (lookahead);
+ const ArrayOf<LookupRecord> &lookup = StructAfter<ArrayOf<LookupRecord> > (lookahead);
return TRACE_RETURN (lookup.sanitize (c));
}
@@ -1775,7 +1775,8 @@ struct ChainRuleSet
return TRACE_RETURN (false);
}
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
return TRACE_RETURN (rule.sanitize (c, this));
}
@@ -1854,7 +1855,8 @@ struct ChainContextFormat1
return TRACE_RETURN (rule_set.apply (c, lookup_context));
}
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
return TRACE_RETURN (coverage.sanitize (c, this) && ruleSet.sanitize (c, this));
}
@@ -1964,7 +1966,8 @@ struct ChainContextFormat2
return TRACE_RETURN (rule_set.apply (c, lookup_context));
}
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
return TRACE_RETURN (coverage.sanitize (c, this) && backtrackClassDef.sanitize (c, this) &&
inputClassDef.sanitize (c, this) && lookaheadClassDef.sanitize (c, this) &&
@@ -2085,14 +2088,16 @@ struct ChainContextFormat3
lookup.len, lookup.array, lookup_context));
}
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
if (!backtrack.sanitize (c, this)) return TRACE_RETURN (false);
- OffsetArrayOf<Coverage> &input = StructAfter<OffsetArrayOf<Coverage> > (backtrack);
+ const OffsetArrayOf<Coverage> &input = StructAfter<OffsetArrayOf<Coverage> > (backtrack);
if (!input.sanitize (c, this)) return TRACE_RETURN (false);
- OffsetArrayOf<Coverage> &lookahead = StructAfter<OffsetArrayOf<Coverage> > (input);
+ 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_RETURN (false);
- ArrayOf<LookupRecord> &lookup = StructAfter<ArrayOf<LookupRecord> > (lookahead);
+ const ArrayOf<LookupRecord> &lookup = StructAfter<ArrayOf<LookupRecord> > (lookahead);
return TRACE_RETURN (lookup.sanitize (c));
}
@@ -2122,7 +2127,8 @@ struct ChainContext
template <typename context_t>
inline typename context_t::return_t dispatch (context_t *c) const
{
- TRACE_DISPATCH (this);
+ TRACE_DISPATCH (this, u.format);
+ if (unlikely (!c->may_dispatch (this, &u.format))) TRACE_RETURN (c->default_return_value ());
switch (u.format) {
case 1: return TRACE_RETURN (c->dispatch (u.format1));
case 2: return TRACE_RETURN (c->dispatch (u.format2));
@@ -2131,17 +2137,6 @@ struct ChainContext
}
}
- inline bool sanitize (hb_sanitize_context_t *c) {
- TRACE_SANITIZE (this);
- if (!u.format.sanitize (c)) return TRACE_RETURN (false);
- switch (u.format) {
- 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);
- }
- }
-
protected:
union {
USHORT format; /* Format identifier */
@@ -2152,14 +2147,32 @@ struct ChainContext
};
+template <typename T>
struct ExtensionFormat1
{
inline unsigned int get_type (void) const { return extensionLookupType; }
- inline unsigned int get_offset (void) const { return extensionOffset; }
- inline bool sanitize (hb_sanitize_context_t *c) {
+ template <typename X>
+ inline const X& get_subtable (void) const
+ {
+ unsigned int offset = extensionOffset;
+ if (unlikely (!offset)) return Null(typename T::LookupSubTable);
+ return StructAtOffset<typename T::LookupSubTable> (this, offset);
+ }
+
+ template <typename context_t>
+ inline typename context_t::return_t dispatch (context_t *c) const
+ {
+ TRACE_DISPATCH (this, format);
+ 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_RETURN (c->check_struct (this));
+ return TRACE_RETURN (c->check_struct (this) && extensionOffset != 0);
}
protected:
@@ -2183,49 +2196,30 @@ struct Extension
default:return 0;
}
}
- inline unsigned int get_offset (void) const
- {
- switch (u.format) {
- case 1: return u.format1.get_offset ();
- default:return 0;
- }
- }
-
template <typename X>
inline const X& get_subtable (void) const
{
- unsigned int offset = get_offset ();
- if (unlikely (!offset)) return Null(typename T::LookupSubTable);
- return StructAtOffset<typename T::LookupSubTable> (this, offset);
+ switch (u.format) {
+ case 1: return u.format1.template get_subtable<typename T::LookupSubTable> ();
+ default:return Null(typename T::LookupSubTable);
+ }
}
template <typename context_t>
inline typename context_t::return_t dispatch (context_t *c) const
{
- return get_subtable<typename T::LookupSubTable> ().dispatch (c, get_type ());
- }
-
- inline bool sanitize_self (hb_sanitize_context_t *c) {
- TRACE_SANITIZE (this);
- if (!u.format.sanitize (c)) return TRACE_RETURN (false);
+ TRACE_DISPATCH (this, u.format);
+ if (unlikely (!c->may_dispatch (this, &u.format))) TRACE_RETURN (c->default_return_value ());
switch (u.format) {
- case 1: return TRACE_RETURN (u.format1.sanitize (c));
- default:return TRACE_RETURN (true);
+ case 1: return TRACE_RETURN (u.format1.dispatch (c));
+ default:return TRACE_RETURN (c->default_return_value ());
}
}
- inline bool sanitize (hb_sanitize_context_t *c) {
- TRACE_SANITIZE (this);
- if (!sanitize_self (c)) return TRACE_RETURN (false);
- unsigned int offset = get_offset ();
- if (unlikely (!offset)) return TRACE_RETURN (true);
- return TRACE_RETURN (StructAtOffset<typename T::LookupSubTable> (this, offset).sanitize (c, get_type ()));
- }
-
protected:
union {
USHORT format; /* Format identifier */
- ExtensionFormat1 format1;
+ ExtensionFormat1<T> format1;
} u;
};
@@ -2270,7 +2264,8 @@ struct GSUBGPOS
inline const Lookup& get_lookup (unsigned int i) const
{ return (this+lookupList)[i]; }
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
return TRACE_RETURN (version.sanitize (c) && likely (version.major == 1) &&
scriptList.sanitize (c, this) &&
diff --git a/src/hb-ot-layout-jstf-table.hh b/src/hb-ot-layout-jstf-table.hh
index 67a6df5..739dfd9 100644
--- a/src/hb-ot-layout-jstf-table.hh
+++ b/src/hb-ot-layout-jstf-table.hh
@@ -54,7 +54,8 @@ typedef OffsetListOf<PosLookup> JstfMax;
struct JstfPriority
{
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
return TRACE_RETURN (c->check_struct (this) &&
shrinkageEnableGSUB.sanitize (c, this) &&
@@ -123,7 +124,8 @@ struct JstfPriority
struct JstfLangSys : OffsetListOf<JstfPriority>
{
inline bool sanitize (hb_sanitize_context_t *c,
- const Record<JstfLangSys>::sanitize_closure_t * = NULL) {
+ const Record<JstfLangSys>::sanitize_closure_t * = NULL) const
+ {
TRACE_SANITIZE (this);
return TRACE_RETURN (OffsetListOf<JstfPriority>::sanitize (c));
}
@@ -163,7 +165,8 @@ struct JstfScript
inline const JstfLangSys& get_default_lang_sys (void) const { return this+defaultLangSys; }
inline bool sanitize (hb_sanitize_context_t *c,
- const Record<JstfScript>::sanitize_closure_t * = NULL) {
+ const Record<JstfScript>::sanitize_closure_t * = NULL) const
+ {
TRACE_SANITIZE (this);
return TRACE_RETURN (extenderGlyphs.sanitize (c, this) &&
defaultLangSys.sanitize (c, this) &&
@@ -206,7 +209,8 @@ struct JSTF
inline bool find_script_index (hb_tag_t tag, unsigned int *index) const
{ return scriptList.find_index (tag, index); }
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
return TRACE_RETURN (version.sanitize (c) && likely (version.major == 1) &&
scriptList.sanitize (c, this));
diff --git a/src/hb-ot-layout-private.hh b/src/hb-ot-layout-private.hh
index ae7daa6..47fecd2 100644
--- a/src/hb-ot-layout-private.hh
+++ b/src/hb-ot-layout-private.hh
@@ -126,11 +126,15 @@ struct hb_ot_layout_lookup_accelerator_t
lookup.add_coverage (&digest);
}
- template <typename TLookup>
- inline void fini (const TLookup &lookup HB_UNUSED)
+ inline void fini (void)
{
}
+ inline bool may_have (hb_codepoint_t g) const {
+ return digest.may_have (g);
+ }
+
+ private:
hb_set_digest_t digest;
};
diff --git a/src/hb-ot-layout.cc b/src/hb-ot-layout.cc
index 661d90e..b1e69e8 100644
--- a/src/hb-ot-layout.cc
+++ b/src/hb-ot-layout.cc
@@ -84,9 +84,9 @@ void
_hb_ot_layout_destroy (hb_ot_layout_t *layout)
{
for (unsigned int i = 0; i < layout->gsub_lookup_count; i++)
- layout->gsub_accels[i].fini (layout->gsub->get_lookup (i));
+ layout->gsub_accels[i].fini ();
for (unsigned int i = 0; i < layout->gpos_lookup_count; i++)
- layout->gpos_accels[i].fini (layout->gpos->get_lookup (i));
+ layout->gpos_accels[i].fini ();
free (layout->gsub_accels);
free (layout->gpos_accels);
@@ -699,7 +699,7 @@ hb_ot_layout_lookup_would_substitute_fast (hb_face_t *face,
const OT::SubstLookup& l = hb_ot_layout_from_face (face)->gsub->get_lookup (lookup_index);
- return l.would_apply (&c, &hb_ot_layout_from_face (face)->gsub_accels[lookup_index].digest);
+ return l.would_apply (&c, &hb_ot_layout_from_face (face)->gsub_accels[lookup_index]);
}
void
@@ -829,26 +829,83 @@ struct GPOSProxy
};
-template <typename Lookup>
-static inline bool apply_once (OT::hb_apply_context_t *c,
- const Lookup &lookup)
+template <typename Obj>
+static inline bool
+apply_forward (OT::hb_apply_context_t *c,
+ const Obj &obj,
+ const hb_ot_layout_lookup_accelerator_t &accel)
{
- if (!c->check_glyph_property (&c->buffer->cur(), c->lookup_props))
- return false;
- return lookup.dispatch (c);
+ bool ret = false;
+ hb_buffer_t *buffer = c->buffer;
+ while (buffer->idx < buffer->len)
+ {
+ if (accel.may_have (buffer->cur().codepoint) &&
+ (buffer->cur().mask & c->lookup_mask) &&
+ c->check_glyph_property (&buffer->cur(), c->lookup_props) &&
+ obj.apply (c))
+ ret = true;
+ else
+ buffer->next_glyph ();
+ }
+ return ret;
}
-template <typename Proxy>
+template <typename Obj>
static inline bool
+apply_backward (OT::hb_apply_context_t *c,
+ const Obj &obj,
+ const hb_ot_layout_lookup_accelerator_t &accel)
+{
+ bool ret = false;
+ hb_buffer_t *buffer = c->buffer;
+ do
+ {
+ if (accel.may_have (buffer->cur().codepoint) &&
+ (buffer->cur().mask & c->lookup_mask) &&
+ 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--;
+
+ }
+ while ((int) buffer->idx >= 0);
+ 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,
const typename Proxy::Lookup &lookup,
const hb_ot_layout_lookup_accelerator_t &accel)
{
- bool ret = false;
hb_buffer_t *buffer = c->buffer;
if (unlikely (!buffer->len || !c->lookup_mask))
- return false;
+ return;
c->set_lookup (lookup);
@@ -859,21 +916,20 @@ apply_string (OT::hb_apply_context_t *c,
buffer->clear_output ();
buffer->idx = 0;
- while (buffer->idx < buffer->len)
+ bool ret;
+ if (lookup.get_subtable_count () == 1)
{
- if (accel.digest.may_have (buffer->cur().codepoint) &&
- (buffer->cur().mask & c->lookup_mask) &&
- apply_once (c, lookup))
- ret = true;
- else
- buffer->next_glyph ();
+ 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)
buffer->swap_buffers ();
else
- assert (!buffer->has_separate_output ());
+ assert (!buffer->has_separate_output ());
}
}
else
@@ -882,20 +938,9 @@ apply_string (OT::hb_apply_context_t *c,
if (Proxy::table_index == 0)
buffer->remove_output ();
buffer->idx = buffer->len - 1;
- do
- {
- if (accel.digest.may_have (buffer->cur().codepoint) &&
- (buffer->cur().mask & c->lookup_mask) &&
- apply_once (c, lookup))
- ret = true;
- /* The reverse lookup doesn't "advance" cursor (for good reason). */
- buffer->idx--;
- }
- while ((int) buffer->idx >= 0);
+ apply_backward (c, lookup, accel);
}
-
- return ret;
}
template <typename Proxy>
diff --git a/src/hb-ot-maxp-table.hh b/src/hb-ot-maxp-table.hh
index b1f8328..0d9a0fa 100644
--- a/src/hb-ot-maxp-table.hh
+++ b/src/hb-ot-maxp-table.hh
@@ -43,11 +43,13 @@ struct maxp
{
static const hb_tag_t tableTag = HB_OT_TAG_maxp;
- inline unsigned int get_num_glyphs (void) const {
+ inline unsigned int get_num_glyphs (void) const
+ {
return numGlyphs;
}
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
return TRACE_RETURN (c->check_struct (this) &&
likely (version.major == 1 || (version.major == 0 && version.minor == 0x5000u)));
diff --git a/src/hb-ot-name-table.hh b/src/hb-ot-name-table.hh
index 31d9fac..21450c6 100644
--- a/src/hb-ot-name-table.hh
+++ b/src/hb-ot-name-table.hh
@@ -56,7 +56,8 @@ struct NameRecord
return 0;
}
- inline bool sanitize (hb_sanitize_context_t *c, void *base) {
+ inline bool sanitize (hb_sanitize_context_t *c, const void *base) const
+ {
TRACE_SANITIZE (this);
/* We can check from base all the way up to the end of string... */
return TRACE_RETURN (c->check_struct (this) && c->check_range ((char *) base, (unsigned int) length + offset));
@@ -101,7 +102,7 @@ struct name
inline unsigned int get_size (void) const
{ return min_size + count * nameRecord[0].min_size; }
- inline bool sanitize_records (hb_sanitize_context_t *c) {
+ inline bool sanitize_records (hb_sanitize_context_t *c) const {
TRACE_SANITIZE (this);
char *string_pool = (char *) this + stringOffset;
unsigned int _count = count;
@@ -110,7 +111,8 @@ struct name
return TRACE_RETURN (true);
}
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
return TRACE_RETURN (c->check_struct (this) &&
likely (format == 0 || format == 1) &&
diff --git a/src/hb-ot-shape-complex-arabic-fallback.hh b/src/hb-ot-shape-complex-arabic-fallback.hh
index e5b7ed4..a77f24e 100644
--- a/src/hb-ot-shape-complex-arabic-fallback.hh
+++ b/src/hb-ot-shape-complex-arabic-fallback.hh
@@ -207,7 +207,7 @@ struct arabic_fallback_plan_t
static const arabic_fallback_plan_t arabic_fallback_plan_nil = {};
-#if (defined(_WIN32) || defined(__CYGWIN__)) && !defined(HB_WITH_WIN1256)
+#if (defined(_WIN32) || defined(__CYGWIN__)) && !defined(HB_NO_WIN1256)
#define HB_WITH_WIN1256
#endif
@@ -327,7 +327,7 @@ arabic_fallback_plan_destroy (arabic_fallback_plan_t *fallback_plan)
for (unsigned int i = 0; i < fallback_plan->num_lookups; i++)
if (fallback_plan->lookup_array[i])
{
- fallback_plan->accel_array[i].fini (fallback_plan->lookup_array[i]);
+ fallback_plan->accel_array[i].fini ();
if (fallback_plan->free_lookups)
free (fallback_plan->lookup_array[i]);
}
diff --git a/src/hb-ot-shape-complex-arabic-win1256.hh b/src/hb-ot-shape-complex-arabic-win1256.hh
index 63ed3f8..8edd3ba 100644
--- a/src/hb-ot-shape-complex-arabic-win1256.hh
+++ b/src/hb-ot-shape-complex-arabic-win1256.hh
@@ -133,7 +133,6 @@
*/
#define OT_LOOKUP_TYPE_SUBST_SINGLE 1u
-#define OT_LOOKUP_TYPE_SUBST_MULTIPLE 2u
#define OT_LOOKUP_TYPE_SUBST_LIGATURE 4u
#define OT_SUBLOOKUP_SINGLE_SUBST_FORMAT2(Name, FromGlyphs, ToGlyphs) \
@@ -313,8 +312,11 @@ OT_TABLE_END
/*
* Include a second time to get the table data...
*/
+#if 0
+#include "hb-private.hh" /* Make check-includes.sh happy. */
+#endif
#ifdef OT_MEASURE
-#include __FILE__
+#include "hb-ot-shape-complex-arabic-win1256.hh"
#endif
#define HB_OT_SHAPE_COMPLEX_ARABIC_WIN1256_HH
diff --git a/src/hb-ot-shape-complex-indic-machine.hh b/src/hb-ot-shape-complex-indic-machine.hh
index 5fbdcc8..f652d4f 100644
--- a/src/hb-ot-shape-complex-indic-machine.hh
+++ b/src/hb-ot-shape-complex-indic-machine.hh
@@ -1,5 +1,5 @@
-#line 1 "../../src/hb-ot-shape-complex-indic-machine.rl"
+#line 1 "hb-ot-shape-complex-indic-machine.rl"
/*
* Copyright © 2011,2012 Google, Inc.
*
@@ -32,1281 +32,1304 @@
#include "hb-private.hh"
-#line 36 "../../src/hb-ot-shape-complex-indic-machine.hh.tmp"
+#line 36 "hb-ot-shape-complex-indic-machine.hh"
static const unsigned char _indic_syllable_machine_trans_keys[] = {
- 1u, 16u, 13u, 13u, 5u, 7u, 5u, 7u, 7u, 7u, 5u, 7u, 5u, 7u, 7u, 7u,
- 5u, 7u, 5u, 7u, 7u, 7u, 5u, 7u, 5u, 7u, 7u, 7u, 4u, 4u, 6u, 6u,
- 16u, 16u, 4u, 7u, 6u, 6u, 16u, 16u, 4u, 7u, 6u, 6u, 16u, 16u, 4u, 7u,
- 6u, 6u, 16u, 16u, 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u,
- 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, 1u, 16u, 13u, 13u, 5u, 7u, 5u, 7u,
- 7u, 7u, 5u, 7u, 5u, 7u, 7u, 7u, 5u, 7u, 5u, 7u, 7u, 7u, 5u, 7u,
- 5u, 7u, 7u, 7u, 4u, 4u, 6u, 6u, 16u, 16u, 4u, 7u, 6u, 6u, 16u, 16u,
- 4u, 7u, 6u, 6u, 16u, 16u, 4u, 7u, 6u, 6u, 16u, 16u, 4u, 14u, 4u, 14u,
+ 8u, 8u, 1u, 16u, 8u, 13u, 5u, 8u, 5u, 7u, 7u, 7u, 5u, 8u, 5u, 7u,
+ 7u, 7u, 5u, 8u, 5u, 7u, 7u, 7u, 5u, 8u, 5u, 7u, 7u, 7u, 4u, 8u,
+ 6u, 6u, 16u, 16u, 4u, 8u, 6u, 6u, 16u, 16u, 4u, 8u, 6u, 6u, 16u, 16u,
+ 4u, 8u, 6u, 6u, 16u, 16u, 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u,
+ 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, 8u, 8u, 1u, 16u, 8u, 13u,
+ 5u, 8u, 5u, 7u, 7u, 7u, 5u, 8u, 5u, 7u, 7u, 7u, 5u, 8u, 5u, 7u,
+ 7u, 7u, 5u, 8u, 5u, 7u, 7u, 7u, 4u, 8u, 6u, 6u, 16u, 16u, 4u, 8u,
+ 6u, 6u, 16u, 16u, 4u, 8u, 6u, 6u, 16u, 16u, 4u, 8u, 6u, 6u, 16u, 16u,
4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u,
- 1u, 16u, 13u, 13u, 5u, 7u, 5u, 7u, 7u, 7u, 5u, 7u, 5u, 7u, 7u, 7u,
- 5u, 7u, 5u, 7u, 7u, 7u, 5u, 7u, 5u, 7u, 7u, 7u, 4u, 4u, 6u, 6u,
- 16u, 16u, 4u, 7u, 6u, 6u, 16u, 16u, 4u, 7u, 6u, 6u, 16u, 16u, 4u, 7u,
- 6u, 6u, 16u, 16u, 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u,
- 4u, 14u, 4u, 14u, 4u, 14u, 1u, 16u, 13u, 13u, 5u, 7u, 5u, 7u, 7u, 7u,
- 5u, 7u, 5u, 7u, 7u, 7u, 5u, 7u, 5u, 7u, 7u, 7u, 5u, 7u, 5u, 7u,
- 7u, 7u, 4u, 4u, 6u, 6u, 16u, 16u, 4u, 7u, 6u, 6u, 16u, 16u, 4u, 7u,
- 6u, 6u, 16u, 16u, 4u, 7u, 6u, 6u, 16u, 16u, 4u, 14u, 4u, 14u, 4u, 14u,
- 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u,
- 4u, 14u, 5u, 7u, 5u, 7u, 5u, 7u, 5u, 7u, 7u, 7u, 5u, 7u, 5u, 7u,
- 7u, 7u, 5u, 7u, 5u, 7u, 7u, 7u, 1u, 16u, 13u, 13u, 4u, 4u, 6u, 6u,
- 16u, 16u, 4u, 7u, 6u, 6u, 16u, 16u, 4u, 7u, 6u, 6u, 16u, 16u, 4u, 7u,
- 6u, 6u, 16u, 16u, 1u, 31u, 3u, 31u, 3u, 31u, 4u, 31u, 1u, 16u, 3u, 31u,
+ 4u, 14u, 4u, 14u, 8u, 8u, 1u, 16u, 8u, 13u, 5u, 8u, 5u, 7u, 7u, 7u,
+ 5u, 8u, 5u, 7u, 7u, 7u, 5u, 8u, 5u, 7u, 7u, 7u, 5u, 8u, 5u, 7u,
+ 7u, 7u, 4u, 8u, 6u, 6u, 16u, 16u, 4u, 8u, 6u, 6u, 16u, 16u, 4u, 8u,
+ 6u, 6u, 16u, 16u, 4u, 8u, 6u, 6u, 16u, 16u, 4u, 14u, 4u, 14u, 4u, 14u,
+ 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, 8u, 8u, 1u, 16u,
+ 8u, 13u, 5u, 8u, 5u, 7u, 7u, 7u, 5u, 8u, 5u, 7u, 7u, 7u, 5u, 8u,
+ 5u, 7u, 7u, 7u, 5u, 8u, 5u, 7u, 7u, 7u, 4u, 8u, 6u, 6u, 16u, 16u,
+ 4u, 8u, 6u, 6u, 16u, 16u, 4u, 8u, 6u, 6u, 16u, 16u, 4u, 8u, 6u, 6u,
+ 16u, 16u, 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u,
+ 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, 5u, 8u, 4u, 14u, 4u, 14u, 5u, 8u,
+ 5u, 7u, 5u, 8u, 5u, 7u, 7u, 7u, 5u, 8u, 5u, 7u, 7u, 7u, 5u, 8u,
+ 5u, 7u, 7u, 7u, 8u, 8u, 1u, 16u, 8u, 13u, 4u, 8u, 6u, 6u, 16u, 16u,
+ 4u, 8u, 6u, 6u, 16u, 16u, 4u, 8u, 6u, 6u, 16u, 16u, 4u, 8u, 6u, 6u,
+ 16u, 16u, 8u, 8u, 1u, 31u, 3u, 31u, 3u, 31u, 4u, 31u, 1u, 16u, 3u, 31u,
3u, 31u, 4u, 31u, 1u, 16u, 3u, 31u, 3u, 31u, 4u, 31u, 1u, 16u, 3u, 31u,
- 3u, 31u, 4u, 31u, 1u, 16u, 3u, 31u, 3u, 31u, 4u, 31u, 5u, 14u, 8u, 14u,
+ 3u, 31u, 4u, 31u, 1u, 16u, 3u, 31u, 3u, 31u, 4u, 31u, 5u, 14u, 5u, 14u,
5u, 10u, 9u, 10u, 9u, 9u, 9u, 10u, 9u, 10u, 9u, 9u, 5u, 10u, 3u, 13u,
- 3u, 10u, 8u, 10u, 3u, 10u, 3u, 13u, 3u, 14u, 3u, 14u, 4u, 14u, 5u, 14u,
+ 3u, 10u, 5u, 10u, 3u, 10u, 3u, 13u, 3u, 14u, 3u, 14u, 4u, 14u, 5u, 14u,
3u, 14u, 4u, 14u, 5u, 14u, 3u, 14u, 4u, 14u, 5u, 14u, 3u, 14u, 4u, 14u,
- 6u, 14u, 3u, 14u, 1u, 16u, 4u, 31u, 4u, 14u, 3u, 31u, 3u, 31u, 1u, 16u,
+ 5u, 14u, 3u, 14u, 1u, 16u, 4u, 31u, 4u, 14u, 3u, 31u, 3u, 31u, 1u, 16u,
1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 3u, 31u, 3u, 31u, 1u, 16u, 1u, 16u,
1u, 16u, 1u, 16u, 1u, 16u, 3u, 31u, 3u, 31u, 1u, 16u, 1u, 16u, 1u, 16u,
1u, 16u, 1u, 16u, 3u, 31u, 3u, 31u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u,
1u, 16u, 3u, 31u, 3u, 31u, 3u, 31u, 3u, 31u, 4u, 31u, 1u, 16u, 3u, 31u,
3u, 31u, 4u, 31u, 1u, 16u, 3u, 31u, 3u, 31u, 4u, 31u, 1u, 16u, 3u, 31u,
- 3u, 31u, 4u, 31u, 1u, 16u, 3u, 31u, 3u, 31u, 4u, 31u, 5u, 14u, 8u, 14u,
+ 3u, 31u, 4u, 31u, 1u, 16u, 3u, 31u, 3u, 31u, 4u, 31u, 5u, 14u, 5u, 14u,
5u, 10u, 9u, 10u, 9u, 9u, 9u, 10u, 9u, 10u, 9u, 9u, 5u, 10u, 3u, 13u,
- 3u, 10u, 8u, 10u, 3u, 10u, 3u, 13u, 3u, 14u, 3u, 14u, 4u, 14u, 5u, 14u,
+ 3u, 10u, 5u, 10u, 3u, 10u, 3u, 13u, 3u, 14u, 3u, 14u, 4u, 14u, 5u, 14u,
3u, 14u, 4u, 14u, 5u, 14u, 3u, 14u, 4u, 14u, 5u, 14u, 3u, 14u, 4u, 14u,
- 6u, 14u, 3u, 14u, 1u, 16u, 4u, 31u, 4u, 14u, 3u, 31u, 3u, 31u, 1u, 16u,
+ 5u, 14u, 3u, 14u, 1u, 16u, 4u, 31u, 4u, 14u, 3u, 31u, 3u, 31u, 1u, 16u,
1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 3u, 31u, 3u, 31u, 1u, 16u, 1u, 16u,
1u, 16u, 1u, 16u, 1u, 16u, 3u, 31u, 3u, 31u, 1u, 16u, 1u, 16u, 1u, 16u,
1u, 16u, 1u, 16u, 3u, 31u, 3u, 31u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u,
4u, 14u, 1u, 16u, 3u, 31u, 3u, 31u, 4u, 31u, 1u, 16u, 3u, 31u, 3u, 31u,
4u, 31u, 1u, 16u, 3u, 31u, 3u, 31u, 4u, 31u, 1u, 16u, 3u, 31u, 3u, 31u,
- 4u, 31u, 1u, 16u, 3u, 31u, 3u, 31u, 4u, 31u, 5u, 14u, 8u, 14u, 5u, 10u,
+ 4u, 31u, 1u, 16u, 3u, 31u, 3u, 31u, 4u, 31u, 5u, 14u, 5u, 14u, 5u, 10u,
9u, 10u, 9u, 9u, 9u, 10u, 9u, 10u, 9u, 9u, 5u, 10u, 3u, 13u, 3u, 10u,
- 8u, 10u, 3u, 10u, 3u, 13u, 3u, 14u, 3u, 14u, 4u, 14u, 5u, 14u, 3u, 14u,
- 4u, 14u, 5u, 14u, 3u, 14u, 4u, 14u, 5u, 14u, 3u, 14u, 4u, 14u, 6u, 14u,
+ 5u, 10u, 3u, 10u, 3u, 13u, 3u, 14u, 3u, 14u, 4u, 14u, 5u, 14u, 3u, 14u,
+ 4u, 14u, 5u, 14u, 3u, 14u, 4u, 14u, 5u, 14u, 3u, 14u, 4u, 14u, 5u, 14u,
3u, 14u, 1u, 16u, 4u, 31u, 4u, 14u, 3u, 31u, 3u, 31u, 1u, 16u, 1u, 16u,
1u, 16u, 1u, 16u, 1u, 16u, 3u, 31u, 3u, 31u, 1u, 16u, 1u, 16u, 1u, 16u,
1u, 16u, 1u, 16u, 3u, 31u, 3u, 31u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u,
1u, 16u, 3u, 31u, 3u, 31u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u,
4u, 14u, 3u, 31u, 4u, 14u, 3u, 31u, 3u, 31u, 4u, 31u, 1u, 16u, 3u, 31u,
3u, 31u, 4u, 31u, 1u, 16u, 3u, 31u, 3u, 31u, 4u, 31u, 1u, 16u, 3u, 31u,
- 3u, 31u, 4u, 31u, 1u, 16u, 3u, 31u, 3u, 31u, 4u, 31u, 5u, 14u, 8u, 14u,
+ 3u, 31u, 4u, 31u, 1u, 16u, 3u, 31u, 3u, 31u, 4u, 31u, 5u, 14u, 5u, 14u,
5u, 10u, 9u, 10u, 9u, 9u, 9u, 10u, 9u, 10u, 9u, 9u, 5u, 10u, 3u, 13u,
- 3u, 10u, 8u, 10u, 3u, 10u, 3u, 13u, 3u, 14u, 3u, 14u, 4u, 14u, 5u, 14u,
+ 3u, 10u, 5u, 10u, 3u, 10u, 3u, 13u, 3u, 14u, 3u, 14u, 4u, 14u, 5u, 14u,
3u, 14u, 4u, 14u, 5u, 14u, 3u, 14u, 4u, 14u, 5u, 14u, 3u, 14u, 4u, 14u,
- 6u, 14u, 3u, 14u, 1u, 16u, 4u, 31u, 4u, 14u, 3u, 31u, 3u, 31u, 1u, 16u,
+ 5u, 14u, 3u, 14u, 1u, 16u, 4u, 31u, 4u, 14u, 3u, 31u, 3u, 31u, 1u, 16u,
1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 3u, 31u, 3u, 31u, 1u, 16u, 1u, 16u,
1u, 16u, 1u, 16u, 1u, 16u, 3u, 31u, 3u, 31u, 1u, 16u, 1u, 16u, 1u, 16u,
1u, 16u, 1u, 16u, 3u, 31u, 3u, 31u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u,
- 1u, 16u, 3u, 31u, 1u, 31u, 3u, 31u, 1u, 31u, 4u, 14u, 1u, 16u, 3u, 31u,
- 3u, 31u, 4u, 31u, 5u, 10u, 9u, 10u, 9u, 9u, 9u, 10u, 9u, 10u, 9u, 9u,
- 5u, 10u, 3u, 31u, 3u, 31u, 1u, 16u, 3u, 14u, 4u, 14u, 5u, 14u, 3u, 14u,
- 4u, 14u, 5u, 14u, 3u, 14u, 4u, 14u, 5u, 14u, 3u, 14u, 4u, 14u, 8u, 14u,
- 3u, 13u, 3u, 10u, 8u, 10u, 3u, 10u, 3u, 13u, 1u, 16u, 3u, 10u, 8u, 10u,
+ 1u, 16u, 3u, 31u, 1u, 31u, 3u, 31u, 1u, 31u, 4u, 14u, 5u, 10u, 9u, 10u,
+ 9u, 9u, 9u, 10u, 9u, 10u, 9u, 9u, 5u, 10u, 1u, 16u, 3u, 31u, 3u, 31u,
+ 4u, 31u, 3u, 31u, 3u, 31u, 1u, 16u, 3u, 14u, 4u, 14u, 5u, 14u, 3u, 14u,
+ 4u, 14u, 5u, 14u, 3u, 14u, 4u, 14u, 5u, 14u, 3u, 14u, 4u, 14u, 5u, 14u,
+ 3u, 13u, 3u, 10u, 5u, 10u, 3u, 10u, 3u, 13u, 1u, 16u, 3u, 10u, 5u, 10u,
5u, 10u, 9u, 10u, 9u, 9u, 9u, 10u, 9u, 10u, 9u, 9u, 5u, 10u, 0
};
static const char _indic_syllable_machine_key_spans[] = {
- 16, 1, 3, 3, 1, 3, 3, 1,
- 3, 3, 1, 3, 3, 1, 1, 1,
- 1, 4, 1, 1, 4, 1, 1, 4,
- 1, 1, 11, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 16, 1, 3, 3,
- 1, 3, 3, 1, 3, 3, 1, 3,
- 3, 1, 1, 1, 1, 4, 1, 1,
- 4, 1, 1, 4, 1, 1, 11, 11,
- 11, 11, 11, 11, 11, 11, 11, 11,
- 16, 1, 3, 3, 1, 3, 3, 1,
- 3, 3, 1, 3, 3, 1, 1, 1,
- 1, 4, 1, 1, 4, 1, 1, 4,
- 1, 1, 11, 11, 11, 11, 11, 11,
- 11, 11, 11, 16, 1, 3, 3, 1,
- 3, 3, 1, 3, 3, 1, 3, 3,
- 1, 1, 1, 1, 4, 1, 1, 4,
- 1, 1, 4, 1, 1, 11, 11, 11,
+ 1, 16, 6, 4, 3, 1, 4, 3,
+ 1, 4, 3, 1, 4, 3, 1, 5,
+ 1, 1, 5, 1, 1, 5, 1, 1,
+ 5, 1, 1, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 1, 16, 6,
+ 4, 3, 1, 4, 3, 1, 4, 3,
+ 1, 4, 3, 1, 5, 1, 1, 5,
+ 1, 1, 5, 1, 1, 5, 1, 1,
11, 11, 11, 11, 11, 11, 11, 11,
- 11, 3, 3, 3, 3, 1, 3, 3,
- 1, 3, 3, 1, 16, 1, 1, 1,
- 1, 4, 1, 1, 4, 1, 1, 4,
+ 11, 11, 1, 16, 6, 4, 3, 1,
+ 4, 3, 1, 4, 3, 1, 4, 3,
+ 1, 5, 1, 1, 5, 1, 1, 5,
+ 1, 1, 5, 1, 1, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 1, 16,
+ 6, 4, 3, 1, 4, 3, 1, 4,
+ 3, 1, 4, 3, 1, 5, 1, 1,
+ 5, 1, 1, 5, 1, 1, 5, 1,
+ 1, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 4, 11, 11, 4,
+ 3, 4, 3, 1, 4, 3, 1, 4,
+ 3, 1, 1, 16, 6, 5, 1, 1,
+ 5, 1, 1, 5, 1, 1, 5, 1,
1, 1, 31, 29, 29, 28, 16, 29,
29, 28, 16, 29, 29, 28, 16, 29,
- 29, 28, 16, 29, 29, 28, 10, 7,
+ 29, 28, 16, 29, 29, 28, 10, 10,
6, 2, 1, 2, 2, 1, 6, 11,
- 8, 3, 8, 11, 12, 12, 11, 10,
+ 8, 6, 8, 11, 12, 12, 11, 10,
12, 11, 10, 12, 11, 10, 12, 11,
- 9, 12, 16, 28, 11, 29, 29, 16,
+ 10, 12, 16, 28, 11, 29, 29, 16,
16, 16, 16, 16, 29, 29, 16, 16,
16, 16, 16, 29, 29, 16, 16, 16,
16, 16, 29, 29, 16, 16, 16, 16,
16, 29, 29, 29, 29, 28, 16, 29,
29, 28, 16, 29, 29, 28, 16, 29,
- 29, 28, 16, 29, 29, 28, 10, 7,
+ 29, 28, 16, 29, 29, 28, 10, 10,
6, 2, 1, 2, 2, 1, 6, 11,
- 8, 3, 8, 11, 12, 12, 11, 10,
+ 8, 6, 8, 11, 12, 12, 11, 10,
12, 11, 10, 12, 11, 10, 12, 11,
- 9, 12, 16, 28, 11, 29, 29, 16,
+ 10, 12, 16, 28, 11, 29, 29, 16,
16, 16, 16, 16, 29, 29, 16, 16,
16, 16, 16, 29, 29, 16, 16, 16,
16, 16, 29, 29, 16, 16, 16, 16,
11, 16, 29, 29, 28, 16, 29, 29,
28, 16, 29, 29, 28, 16, 29, 29,
- 28, 16, 29, 29, 28, 10, 7, 6,
+ 28, 16, 29, 29, 28, 10, 10, 6,
2, 1, 2, 2, 1, 6, 11, 8,
- 3, 8, 11, 12, 12, 11, 10, 12,
- 11, 10, 12, 11, 10, 12, 11, 9,
+ 6, 8, 11, 12, 12, 11, 10, 12,
+ 11, 10, 12, 11, 10, 12, 11, 10,
12, 16, 28, 11, 29, 29, 16, 16,
16, 16, 16, 29, 29, 16, 16, 16,
16, 16, 29, 29, 16, 16, 16, 16,
16, 29, 29, 16, 16, 16, 16, 16,
11, 29, 11, 29, 29, 28, 16, 29,
29, 28, 16, 29, 29, 28, 16, 29,
- 29, 28, 16, 29, 29, 28, 10, 7,
+ 29, 28, 16, 29, 29, 28, 10, 10,
6, 2, 1, 2, 2, 1, 6, 11,
- 8, 3, 8, 11, 12, 12, 11, 10,
+ 8, 6, 8, 11, 12, 12, 11, 10,
12, 11, 10, 12, 11, 10, 12, 11,
- 9, 12, 16, 28, 11, 29, 29, 16,
+ 10, 12, 16, 28, 11, 29, 29, 16,
16, 16, 16, 16, 29, 29, 16, 16,
16, 16, 16, 29, 29, 16, 16, 16,
16, 16, 29, 29, 16, 16, 16, 16,
- 16, 29, 31, 29, 31, 11, 16, 29,
- 29, 28, 6, 2, 1, 2, 2, 1,
- 6, 29, 29, 16, 12, 11, 10, 12,
- 11, 10, 12, 11, 10, 12, 11, 7,
- 11, 8, 3, 8, 11, 16, 8, 3,
+ 16, 29, 31, 29, 31, 11, 6, 2,
+ 1, 2, 2, 1, 6, 16, 29, 29,
+ 28, 29, 29, 16, 12, 11, 10, 12,
+ 11, 10, 12, 11, 10, 12, 11, 10,
+ 11, 8, 6, 8, 11, 16, 8, 6,
6, 2, 1, 2, 2, 1, 6
};
static const short _indic_syllable_machine_index_offsets[] = {
- 0, 17, 19, 23, 27, 29, 33, 37,
- 39, 43, 47, 49, 53, 57, 59, 61,
- 63, 65, 70, 72, 74, 79, 81, 83,
- 88, 90, 92, 104, 116, 128, 140, 152,
- 164, 176, 188, 200, 212, 229, 231, 235,
- 239, 241, 245, 249, 251, 255, 259, 261,
- 265, 269, 271, 273, 275, 277, 282, 284,
- 286, 291, 293, 295, 300, 302, 304, 316,
- 328, 340, 352, 364, 376, 388, 400, 412,
- 424, 441, 443, 447, 451, 453, 457, 461,
- 463, 467, 471, 473, 477, 481, 483, 485,
- 487, 489, 494, 496, 498, 503, 505, 507,
- 512, 514, 516, 528, 540, 552, 564, 576,
- 588, 600, 612, 624, 641, 643, 647, 651,
- 653, 657, 661, 663, 667, 671, 673, 677,
- 681, 683, 685, 687, 689, 694, 696, 698,
- 703, 705, 707, 712, 714, 716, 728, 740,
- 752, 764, 776, 788, 800, 812, 824, 836,
- 848, 860, 864, 868, 872, 876, 878, 882,
- 886, 888, 892, 896, 898, 915, 917, 919,
- 921, 923, 928, 930, 932, 937, 939, 941,
- 946, 948, 950, 982, 1012, 1042, 1071, 1088,
- 1118, 1148, 1177, 1194, 1224, 1254, 1283, 1300,
- 1330, 1360, 1389, 1406, 1436, 1466, 1495, 1506,
- 1514, 1521, 1524, 1526, 1529, 1532, 1534, 1541,
- 1553, 1562, 1566, 1575, 1587, 1600, 1613, 1625,
- 1636, 1649, 1661, 1672, 1685, 1697, 1708, 1721,
- 1733, 1743, 1756, 1773, 1802, 1814, 1844, 1874,
- 1891, 1908, 1925, 1942, 1959, 1989, 2019, 2036,
- 2053, 2070, 2087, 2104, 2134, 2164, 2181, 2198,
- 2215, 2232, 2249, 2279, 2309, 2326, 2343, 2360,
- 2377, 2394, 2424, 2454, 2484, 2514, 2543, 2560,
- 2590, 2620, 2649, 2666, 2696, 2726, 2755, 2772,
- 2802, 2832, 2861, 2878, 2908, 2938, 2967, 2978,
- 2986, 2993, 2996, 2998, 3001, 3004, 3006, 3013,
- 3025, 3034, 3038, 3047, 3059, 3072, 3085, 3097,
- 3108, 3121, 3133, 3144, 3157, 3169, 3180, 3193,
- 3205, 3215, 3228, 3245, 3274, 3286, 3316, 3346,
- 3363, 3380, 3397, 3414, 3431, 3461, 3491, 3508,
- 3525, 3542, 3559, 3576, 3606, 3636, 3653, 3670,
- 3687, 3704, 3721, 3751, 3781, 3798, 3815, 3832,
- 3849, 3861, 3878, 3908, 3938, 3967, 3984, 4014,
- 4044, 4073, 4090, 4120, 4150, 4179, 4196, 4226,
- 4256, 4285, 4302, 4332, 4362, 4391, 4402, 4410,
- 4417, 4420, 4422, 4425, 4428, 4430, 4437, 4449,
- 4458, 4462, 4471, 4483, 4496, 4509, 4521, 4532,
- 4545, 4557, 4568, 4581, 4593, 4604, 4617, 4629,
- 4639, 4652, 4669, 4698, 4710, 4740, 4770, 4787,
- 4804, 4821, 4838, 4855, 4885, 4915, 4932, 4949,
- 4966, 4983, 5000, 5030, 5060, 5077, 5094, 5111,
- 5128, 5145, 5175, 5205, 5222, 5239, 5256, 5273,
- 5290, 5302, 5332, 5344, 5374, 5404, 5433, 5450,
- 5480, 5510, 5539, 5556, 5586, 5616, 5645, 5662,
- 5692, 5722, 5751, 5768, 5798, 5828, 5857, 5868,
- 5876, 5883, 5886, 5888, 5891, 5894, 5896, 5903,
- 5915, 5924, 5928, 5937, 5949, 5962, 5975, 5987,
- 5998, 6011, 6023, 6034, 6047, 6059, 6070, 6083,
- 6095, 6105, 6118, 6135, 6164, 6176, 6206, 6236,
- 6253, 6270, 6287, 6304, 6321, 6351, 6381, 6398,
- 6415, 6432, 6449, 6466, 6496, 6526, 6543, 6560,
- 6577, 6594, 6611, 6641, 6671, 6688, 6705, 6722,
- 6739, 6756, 6786, 6818, 6848, 6880, 6892, 6909,
- 6939, 6969, 6998, 7005, 7008, 7010, 7013, 7016,
- 7018, 7025, 7055, 7085, 7102, 7115, 7127, 7138,
- 7151, 7163, 7174, 7187, 7199, 7210, 7223, 7235,
- 7243, 7255, 7264, 7268, 7277, 7289, 7306, 7315,
- 7319, 7326, 7329, 7331, 7334, 7337, 7339
+ 0, 2, 19, 26, 31, 35, 37, 42,
+ 46, 48, 53, 57, 59, 64, 68, 70,
+ 76, 78, 80, 86, 88, 90, 96, 98,
+ 100, 106, 108, 110, 122, 134, 146, 158,
+ 170, 182, 194, 206, 218, 230, 232, 249,
+ 256, 261, 265, 267, 272, 276, 278, 283,
+ 287, 289, 294, 298, 300, 306, 308, 310,
+ 316, 318, 320, 326, 328, 330, 336, 338,
+ 340, 352, 364, 376, 388, 400, 412, 424,
+ 436, 448, 460, 462, 479, 486, 491, 495,
+ 497, 502, 506, 508, 513, 517, 519, 524,
+ 528, 530, 536, 538, 540, 546, 548, 550,
+ 556, 558, 560, 566, 568, 570, 582, 594,
+ 606, 618, 630, 642, 654, 666, 678, 680,
+ 697, 704, 709, 713, 715, 720, 724, 726,
+ 731, 735, 737, 742, 746, 748, 754, 756,
+ 758, 764, 766, 768, 774, 776, 778, 784,
+ 786, 788, 800, 812, 824, 836, 848, 860,
+ 872, 884, 896, 908, 920, 925, 937, 949,
+ 954, 958, 963, 967, 969, 974, 978, 980,
+ 985, 989, 991, 993, 1010, 1017, 1023, 1025,
+ 1027, 1033, 1035, 1037, 1043, 1045, 1047, 1053,
+ 1055, 1057, 1059, 1091, 1121, 1151, 1180, 1197,
+ 1227, 1257, 1286, 1303, 1333, 1363, 1392, 1409,
+ 1439, 1469, 1498, 1515, 1545, 1575, 1604, 1615,
+ 1626, 1633, 1636, 1638, 1641, 1644, 1646, 1653,
+ 1665, 1674, 1681, 1690, 1702, 1715, 1728, 1740,
+ 1751, 1764, 1776, 1787, 1800, 1812, 1823, 1836,
+ 1848, 1859, 1872, 1889, 1918, 1930, 1960, 1990,
+ 2007, 2024, 2041, 2058, 2075, 2105, 2135, 2152,
+ 2169, 2186, 2203, 2220, 2250, 2280, 2297, 2314,
+ 2331, 2348, 2365, 2395, 2425, 2442, 2459, 2476,
+ 2493, 2510, 2540, 2570, 2600, 2630, 2659, 2676,
+ 2706, 2736, 2765, 2782, 2812, 2842, 2871, 2888,
+ 2918, 2948, 2977, 2994, 3024, 3054, 3083, 3094,
+ 3105, 3112, 3115, 3117, 3120, 3123, 3125, 3132,
+ 3144, 3153, 3160, 3169, 3181, 3194, 3207, 3219,
+ 3230, 3243, 3255, 3266, 3279, 3291, 3302, 3315,
+ 3327, 3338, 3351, 3368, 3397, 3409, 3439, 3469,
+ 3486, 3503, 3520, 3537, 3554, 3584, 3614, 3631,
+ 3648, 3665, 3682, 3699, 3729, 3759, 3776, 3793,
+ 3810, 3827, 3844, 3874, 3904, 3921, 3938, 3955,
+ 3972, 3984, 4001, 4031, 4061, 4090, 4107, 4137,
+ 4167, 4196, 4213, 4243, 4273, 4302, 4319, 4349,
+ 4379, 4408, 4425, 4455, 4485, 4514, 4525, 4536,
+ 4543, 4546, 4548, 4551, 4554, 4556, 4563, 4575,
+ 4584, 4591, 4600, 4612, 4625, 4638, 4650, 4661,
+ 4674, 4686, 4697, 4710, 4722, 4733, 4746, 4758,
+ 4769, 4782, 4799, 4828, 4840, 4870, 4900, 4917,
+ 4934, 4951, 4968, 4985, 5015, 5045, 5062, 5079,
+ 5096, 5113, 5130, 5160, 5190, 5207, 5224, 5241,
+ 5258, 5275, 5305, 5335, 5352, 5369, 5386, 5403,
+ 5420, 5432, 5462, 5474, 5504, 5534, 5563, 5580,
+ 5610, 5640, 5669, 5686, 5716, 5746, 5775, 5792,
+ 5822, 5852, 5881, 5898, 5928, 5958, 5987, 5998,
+ 6009, 6016, 6019, 6021, 6024, 6027, 6029, 6036,
+ 6048, 6057, 6064, 6073, 6085, 6098, 6111, 6123,
+ 6134, 6147, 6159, 6170, 6183, 6195, 6206, 6219,
+ 6231, 6242, 6255, 6272, 6301, 6313, 6343, 6373,
+ 6390, 6407, 6424, 6441, 6458, 6488, 6518, 6535,
+ 6552, 6569, 6586, 6603, 6633, 6663, 6680, 6697,
+ 6714, 6731, 6748, 6778, 6808, 6825, 6842, 6859,
+ 6876, 6893, 6923, 6955, 6985, 7017, 7029, 7036,
+ 7039, 7041, 7044, 7047, 7049, 7056, 7073, 7103,
+ 7133, 7162, 7192, 7222, 7239, 7252, 7264, 7275,
+ 7288, 7300, 7311, 7324, 7336, 7347, 7360, 7372,
+ 7383, 7395, 7404, 7411, 7420, 7432, 7449, 7458,
+ 7465, 7472, 7475, 7477, 7480, 7483, 7485
};
static const short _indic_syllable_machine_indicies[] = {
- 1, 2, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1,
- 0, 3, 0, 4, 4, 5, 0, 6,
- 6, 5, 0, 5, 0, 7, 7, 8,
- 0, 9, 9, 8, 0, 8, 0, 10,
- 10, 11, 0, 12, 12, 11, 0, 11,
- 0, 13, 13, 14, 0, 15, 15, 14,
- 0, 14, 0, 16, 0, 17, 0, 18,
- 0, 19, 13, 13, 14, 0, 20, 0,
- 21, 0, 22, 10, 10, 11, 0, 23,
- 0, 24, 0, 25, 7, 7, 8, 0,
- 26, 0, 27, 0, 28, 4, 4, 5,
- 0, 0, 0, 0, 0, 0, 28, 0,
- 28, 4, 4, 5, 0, 0, 0, 0,
- 0, 29, 28, 0, 30, 4, 4, 5,
- 0, 0, 0, 0, 0, 0, 30, 0,
- 30, 4, 4, 5, 0, 0, 0, 0,
- 0, 31, 30, 0, 32, 4, 4, 5,
- 0, 0, 0, 0, 0, 0, 32, 0,
- 32, 4, 4, 5, 0, 0, 0, 0,
- 0, 33, 32, 0, 34, 4, 4, 5,
- 0, 0, 0, 0, 0, 0, 34, 0,
- 34, 4, 4, 5, 0, 0, 0, 0,
- 0, 35, 34, 0, 36, 4, 4, 5,
- 0, 0, 0, 0, 0, 0, 36, 0,
- 36, 4, 4, 5, 0, 0, 0, 0,
- 0, 37, 36, 0, 39, 40, 38, 38,
- 38, 38, 38, 38, 38, 38, 38, 38,
- 38, 38, 38, 39, 38, 41, 38, 42,
- 42, 43, 38, 44, 44, 43, 38, 43,
- 38, 45, 45, 46, 38, 47, 47, 46,
- 38, 46, 38, 48, 48, 49, 38, 50,
- 50, 49, 38, 49, 38, 51, 51, 52,
- 38, 53, 53, 52, 38, 52, 38, 54,
- 38, 55, 38, 56, 38, 57, 51, 51,
- 52, 38, 58, 38, 59, 38, 60, 48,
- 48, 49, 38, 61, 38, 62, 38, 63,
- 45, 45, 46, 38, 64, 38, 65, 38,
- 66, 42, 42, 43, 38, 38, 38, 38,
- 38, 38, 66, 38, 66, 42, 42, 43,
- 38, 38, 38, 38, 38, 67, 66, 38,
- 68, 42, 42, 43, 38, 38, 38, 38,
- 38, 38, 68, 38, 68, 42, 42, 43,
- 38, 38, 38, 38, 38, 69, 68, 38,
- 70, 42, 42, 43, 38, 38, 38, 38,
- 38, 38, 70, 38, 70, 42, 42, 43,
- 38, 38, 38, 38, 38, 71, 70, 38,
- 72, 42, 42, 43, 38, 38, 38, 38,
- 38, 38, 72, 38, 72, 42, 42, 43,
- 38, 38, 38, 38, 38, 73, 72, 38,
- 74, 42, 42, 43, 38, 38, 38, 38,
- 38, 38, 74, 38, 74, 42, 42, 43,
- 38, 38, 38, 38, 38, 75, 74, 38,
- 77, 78, 76, 76, 76, 76, 76, 76,
- 76, 76, 76, 76, 76, 76, 76, 77,
- 76, 79, 76, 80, 80, 81, 76, 83,
- 83, 81, 82, 81, 82, 84, 84, 85,
- 76, 86, 86, 85, 76, 85, 76, 87,
- 87, 88, 76, 89, 89, 88, 76, 88,
- 76, 90, 90, 91, 76, 92, 92, 91,
- 76, 91, 76, 93, 76, 94, 76, 95,
- 76, 96, 90, 90, 91, 76, 97, 76,
- 98, 76, 99, 87, 87, 88, 76, 100,
- 76, 101, 76, 102, 84, 84, 85, 76,
- 103, 76, 104, 76, 105, 80, 80, 81,
- 76, 76, 76, 76, 76, 76, 105, 76,
- 105, 80, 80, 81, 76, 76, 76, 76,
- 76, 106, 105, 76, 107, 80, 80, 81,
- 76, 76, 76, 76, 76, 76, 107, 76,
- 107, 80, 80, 81, 76, 76, 76, 76,
- 76, 108, 107, 76, 109, 80, 80, 81,
- 76, 76, 76, 76, 76, 76, 109, 76,
- 109, 80, 80, 81, 76, 76, 76, 76,
- 76, 110, 109, 76, 111, 80, 80, 81,
- 82, 82, 82, 82, 82, 82, 111, 82,
- 111, 80, 80, 81, 76, 76, 76, 76,
- 76, 112, 111, 76, 113, 80, 80, 81,
- 76, 76, 76, 76, 76, 76, 113, 76,
- 115, 116, 114, 114, 114, 114, 114, 114,
- 114, 114, 114, 114, 114, 114, 114, 115,
- 114, 117, 114, 118, 118, 119, 114, 120,
- 120, 119, 114, 119, 114, 121, 121, 122,
- 114, 123, 123, 122, 114, 122, 114, 124,
- 124, 125, 114, 126, 126, 125, 114, 125,
- 114, 127, 127, 128, 114, 129, 129, 128,
- 114, 128, 114, 130, 114, 131, 114, 132,
- 114, 133, 127, 127, 128, 114, 134, 114,
- 135, 114, 136, 124, 124, 125, 114, 137,
- 114, 138, 114, 139, 121, 121, 122, 114,
- 140, 114, 141, 114, 142, 118, 118, 119,
- 114, 114, 114, 114, 114, 114, 142, 114,
- 142, 118, 118, 119, 114, 114, 114, 114,
- 114, 143, 142, 114, 144, 118, 118, 119,
- 114, 114, 114, 114, 114, 114, 144, 114,
- 144, 118, 118, 119, 114, 114, 114, 114,
- 114, 145, 144, 114, 146, 118, 118, 119,
- 114, 114, 114, 114, 114, 114, 146, 114,
- 146, 118, 118, 119, 114, 114, 114, 114,
- 114, 147, 146, 114, 148, 118, 118, 119,
- 114, 114, 114, 114, 114, 114, 148, 114,
- 148, 118, 118, 119, 114, 114, 114, 114,
- 114, 149, 148, 114, 150, 118, 118, 119,
- 114, 114, 114, 114, 114, 114, 150, 114,
- 150, 118, 118, 119, 114, 114, 114, 114,
- 114, 151, 150, 114, 113, 80, 80, 81,
- 76, 76, 76, 76, 76, 152, 113, 76,
- 111, 80, 80, 81, 0, 0, 0, 0,
- 0, 153, 111, 0, 154, 154, 155, 0,
- 6, 6, 155, 0, 156, 156, 157, 0,
- 158, 158, 157, 0, 157, 0, 159, 159,
- 160, 0, 161, 161, 160, 0, 160, 0,
- 162, 162, 163, 0, 164, 164, 163, 0,
- 163, 0, 165, 166, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 165, 0, 167, 0, 168, 0, 169,
- 0, 170, 0, 171, 162, 162, 163, 0,
- 172, 0, 173, 0, 174, 159, 159, 160,
- 0, 175, 0, 176, 0, 177, 156, 156,
- 157, 0, 178, 0, 179, 0, 181, 182,
- 183, 184, 185, 186, 81, 187, 188, 189,
- 190, 190, 152, 191, 192, 193, 194, 195,
- 180, 180, 180, 180, 180, 180, 180, 180,
- 180, 180, 180, 180, 196, 180, 198, 199,
- 200, 201, 5, 202, 203, 204, 197, 197,
- 37, 205, 197, 197, 206, 197, 197, 197,
- 197, 197, 197, 197, 197, 197, 197, 197,
- 197, 197, 207, 197, 208, 199, 209, 209,
- 5, 202, 203, 204, 197, 197, 197, 205,
- 197, 197, 206, 197, 197, 197, 197, 197,
- 197, 197, 197, 197, 197, 197, 197, 197,
- 207, 197, 199, 209, 209, 5, 202, 203,
- 204, 197, 197, 197, 205, 197, 197, 206,
- 197, 197, 197, 197, 197, 197, 197, 197,
- 197, 197, 197, 197, 197, 207, 197, 210,
- 197, 197, 197, 18, 211, 197, 202, 203,
- 204, 197, 197, 197, 212, 197, 210, 197,
- 213, 214, 215, 216, 5, 202, 203, 204,
- 197, 197, 35, 217, 197, 197, 206, 197,
- 197, 197, 197, 197, 197, 197, 197, 197,
- 197, 197, 197, 197, 207, 197, 218, 214,
- 219, 219, 5, 202, 203, 204, 197, 197,
- 197, 217, 197, 197, 206, 197, 197, 197,
- 197, 197, 197, 197, 197, 197, 197, 197,
- 197, 197, 207, 197, 214, 219, 219, 5,
- 202, 203, 204, 197, 197, 197, 217, 197,
- 197, 206, 197, 197, 197, 197, 197, 197,
- 197, 197, 197, 197, 197, 197, 197, 207,
- 197, 220, 197, 197, 197, 18, 221, 197,
- 202, 203, 204, 197, 197, 197, 212, 197,
- 220, 197, 222, 223, 224, 225, 5, 202,
- 203, 204, 197, 197, 33, 226, 197, 197,
- 206, 197, 197, 197, 197, 197, 197, 197,
- 197, 197, 197, 197, 197, 197, 207, 197,
- 227, 223, 228, 228, 5, 202, 203, 204,
- 197, 197, 197, 226, 197, 197, 206, 197,
- 197, 197, 197, 197, 197, 197, 197, 197,
- 197, 197, 197, 197, 207, 197, 223, 228,
- 228, 5, 202, 203, 204, 197, 197, 197,
- 226, 197, 197, 206, 197, 197, 197, 197,
- 197, 197, 197, 197, 197, 197, 197, 197,
- 197, 207, 197, 229, 197, 197, 197, 18,
- 230, 197, 202, 203, 204, 197, 197, 197,
- 212, 197, 229, 197, 231, 232, 233, 234,
- 5, 202, 203, 204, 197, 197, 31, 235,
- 197, 197, 206, 197, 197, 197, 197, 197,
- 197, 197, 197, 197, 197, 197, 197, 197,
- 207, 197, 236, 232, 237, 237, 5, 202,
- 203, 204, 197, 197, 197, 235, 197, 197,
- 206, 197, 197, 197, 197, 197, 197, 197,
- 197, 197, 197, 197, 197, 197, 207, 197,
- 232, 237, 237, 5, 202, 203, 204, 197,
- 197, 197, 235, 197, 197, 206, 197, 197,
- 197, 197, 197, 197, 197, 197, 197, 197,
- 197, 197, 197, 207, 197, 238, 197, 197,
- 197, 18, 239, 197, 202, 203, 204, 197,
- 197, 197, 212, 197, 238, 197, 240, 241,
- 242, 243, 5, 202, 203, 204, 197, 197,
- 29, 244, 197, 197, 206, 197, 197, 197,
- 197, 197, 197, 197, 197, 197, 197, 197,
- 197, 197, 207, 197, 245, 241, 246, 246,
- 5, 202, 203, 204, 197, 197, 197, 244,
- 197, 197, 206, 197, 197, 197, 197, 197,
- 197, 197, 197, 197, 197, 197, 197, 197,
- 207, 197, 241, 246, 246, 5, 202, 203,
- 204, 197, 197, 197, 244, 197, 197, 206,
- 197, 197, 197, 197, 197, 197, 197, 197,
- 197, 197, 197, 197, 197, 207, 197, 18,
- 247, 197, 202, 203, 204, 197, 197, 197,
- 212, 197, 202, 203, 204, 197, 197, 197,
- 212, 197, 248, 197, 197, 249, 203, 204,
- 197, 203, 204, 197, 250, 197, 203, 251,
- 197, 203, 252, 197, 203, 197, 248, 197,
- 197, 197, 203, 204, 197, 253, 197, 254,
- 255, 197, 202, 203, 204, 197, 197, 3,
- 197, 2, 197, 197, 197, 197, 202, 203,
- 204, 197, 202, 203, 204, 197, 253, 197,
- 197, 197, 197, 202, 203, 204, 197, 253,
- 197, 254, 197, 197, 202, 203, 204, 197,
- 197, 3, 197, 18, 197, 256, 256, 5,
- 202, 203, 204, 197, 197, 197, 212, 197,
- 257, 27, 258, 259, 8, 202, 203, 204,
- 197, 197, 197, 212, 197, 27, 258, 259,
- 8, 202, 203, 204, 197, 197, 197, 212,
- 197, 258, 258, 8, 202, 203, 204, 197,
- 197, 197, 212, 197, 260, 24, 261, 262,
- 11, 202, 203, 204, 197, 197, 197, 212,
- 197, 24, 261, 262, 11, 202, 203, 204,
- 197, 197, 197, 212, 197, 261, 261, 11,
- 202, 203, 204, 197, 197, 197, 212, 197,
- 263, 21, 264, 265, 14, 202, 203, 204,
- 197, 197, 197, 212, 197, 21, 264, 265,
- 14, 202, 203, 204, 197, 197, 197, 212,
- 197, 264, 264, 14, 202, 203, 204, 197,
- 197, 197, 212, 197, 266, 18, 197, 267,
- 197, 202, 203, 204, 197, 197, 197, 212,
- 197, 18, 197, 267, 197, 202, 203, 204,
- 197, 197, 197, 212, 197, 268, 197, 202,
- 203, 204, 197, 197, 197, 212, 197, 18,
- 197, 197, 197, 197, 202, 203, 204, 197,
- 197, 197, 212, 197, 1, 2, 197, 197,
- 18, 247, 197, 202, 203, 204, 197, 197,
- 197, 212, 197, 1, 197, 241, 246, 246,
- 5, 202, 203, 204, 197, 197, 197, 244,
- 197, 197, 197, 197, 197, 197, 197, 197,
- 197, 197, 197, 197, 197, 197, 197, 197,
- 207, 197, 241, 246, 246, 5, 202, 203,
- 204, 197, 197, 197, 244, 197, 240, 241,
- 246, 246, 5, 202, 203, 204, 197, 197,
- 197, 244, 197, 197, 206, 197, 197, 197,
- 197, 197, 197, 197, 197, 197, 197, 197,
- 197, 197, 207, 197, 240, 241, 242, 246,
- 5, 202, 203, 204, 197, 197, 29, 244,
- 197, 197, 206, 197, 197, 197, 197, 197,
- 197, 197, 197, 197, 197, 197, 197, 197,
- 207, 197, 238, 197, 269, 197, 256, 256,
- 5, 202, 203, 204, 197, 197, 197, 212,
- 197, 238, 197, 238, 197, 197, 197, 197,
- 197, 197, 202, 203, 204, 197, 197, 197,
- 212, 197, 238, 197, 238, 197, 197, 197,
- 197, 270, 197, 202, 203, 204, 197, 197,
- 197, 212, 197, 238, 197, 238, 197, 269,
- 197, 197, 197, 197, 202, 203, 204, 197,
- 197, 197, 212, 197, 238, 197, 238, 2,
- 197, 197, 18, 239, 197, 202, 203, 204,
- 197, 197, 197, 212, 197, 238, 197, 231,
- 232, 237, 237, 5, 202, 203, 204, 197,
- 197, 197, 235, 197, 197, 206, 197, 197,
- 197, 197, 197, 197, 197, 197, 197, 197,
- 197, 197, 197, 207, 197, 231, 232, 233,
- 237, 5, 202, 203, 204, 197, 197, 31,
- 235, 197, 197, 206, 197, 197, 197, 197,
- 197, 197, 197, 197, 197, 197, 197, 197,
- 197, 207, 197, 229, 197, 271, 197, 256,
- 256, 5, 202, 203, 204, 197, 197, 197,
- 212, 197, 229, 197, 229, 197, 197, 197,
- 197, 197, 197, 202, 203, 204, 197, 197,
- 197, 212, 197, 229, 197, 229, 197, 197,
- 197, 197, 272, 197, 202, 203, 204, 197,
- 197, 197, 212, 197, 229, 197, 229, 197,
- 271, 197, 197, 197, 197, 202, 203, 204,
- 197, 197, 197, 212, 197, 229, 197, 229,
- 2, 197, 197, 18, 230, 197, 202, 203,
- 204, 197, 197, 197, 212, 197, 229, 197,
- 222, 223, 228, 228, 5, 202, 203, 204,
- 197, 197, 197, 226, 197, 197, 206, 197,
- 197, 197, 197, 197, 197, 197, 197, 197,
- 197, 197, 197, 197, 207, 197, 222, 223,
- 224, 228, 5, 202, 203, 204, 197, 197,
- 33, 226, 197, 197, 206, 197, 197, 197,
- 197, 197, 197, 197, 197, 197, 197, 197,
- 197, 197, 207, 197, 220, 197, 273, 197,
- 256, 256, 5, 202, 203, 204, 197, 197,
- 197, 212, 197, 220, 197, 220, 197, 197,
- 197, 197, 197, 197, 202, 203, 204, 197,
- 197, 197, 212, 197, 220, 197, 220, 197,
- 197, 197, 197, 274, 197, 202, 203, 204,
- 197, 197, 197, 212, 197, 220, 197, 220,
- 197, 273, 197, 197, 197, 197, 202, 203,
- 204, 197, 197, 197, 212, 197, 220, 197,
- 220, 2, 197, 197, 18, 221, 197, 202,
- 203, 204, 197, 197, 197, 212, 197, 220,
- 197, 213, 214, 219, 219, 5, 202, 203,
- 204, 197, 197, 197, 217, 197, 197, 206,
- 197, 197, 197, 197, 197, 197, 197, 197,
- 197, 197, 197, 197, 197, 207, 197, 213,
- 214, 215, 219, 5, 202, 203, 204, 197,
- 197, 35, 217, 197, 197, 206, 197, 197,
- 197, 197, 197, 197, 197, 197, 197, 197,
- 197, 197, 197, 207, 197, 210, 197, 275,
- 197, 256, 256, 5, 202, 203, 204, 197,
- 197, 197, 212, 197, 210, 197, 210, 197,
- 197, 197, 197, 197, 197, 202, 203, 204,
- 197, 197, 197, 212, 197, 210, 197, 210,
- 197, 197, 197, 197, 276, 197, 202, 203,
- 204, 197, 197, 197, 212, 197, 210, 197,
- 210, 197, 275, 197, 197, 197, 197, 202,
- 203, 204, 197, 197, 197, 212, 197, 210,
- 197, 210, 2, 197, 197, 18, 211, 197,
- 202, 203, 204, 197, 197, 197, 212, 197,
- 210, 197, 198, 199, 209, 209, 5, 202,
- 203, 204, 197, 197, 197, 205, 197, 197,
- 206, 197, 197, 197, 197, 197, 197, 197,
- 197, 197, 197, 197, 197, 197, 207, 197,
- 198, 199, 200, 209, 5, 202, 203, 204,
- 197, 197, 37, 205, 197, 197, 206, 197,
- 197, 197, 197, 197, 197, 197, 197, 197,
- 197, 197, 197, 197, 207, 197, 278, 279,
- 280, 281, 43, 282, 283, 284, 277, 277,
- 75, 285, 277, 277, 286, 277, 277, 277,
- 277, 277, 277, 277, 277, 277, 277, 277,
- 277, 277, 287, 277, 288, 279, 289, 281,
- 43, 282, 283, 284, 277, 277, 277, 285,
- 277, 277, 286, 277, 277, 277, 277, 277,
- 277, 277, 277, 277, 277, 277, 277, 277,
- 287, 277, 279, 289, 281, 43, 282, 283,
- 284, 277, 277, 277, 285, 277, 277, 286,
- 277, 277, 277, 277, 277, 277, 277, 277,
- 277, 277, 277, 277, 277, 287, 277, 290,
- 277, 277, 277, 56, 291, 277, 282, 283,
- 284, 277, 277, 277, 292, 277, 290, 277,
- 293, 294, 295, 296, 43, 282, 283, 284,
- 277, 277, 73, 297, 277, 277, 286, 277,
- 277, 277, 277, 277, 277, 277, 277, 277,
- 277, 277, 277, 277, 287, 277, 298, 294,
- 299, 299, 43, 282, 283, 284, 277, 277,
- 277, 297, 277, 277, 286, 277, 277, 277,
- 277, 277, 277, 277, 277, 277, 277, 277,
- 277, 277, 287, 277, 294, 299, 299, 43,
- 282, 283, 284, 277, 277, 277, 297, 277,
- 277, 286, 277, 277, 277, 277, 277, 277,
- 277, 277, 277, 277, 277, 277, 277, 287,
- 277, 300, 277, 277, 277, 56, 301, 277,
- 282, 283, 284, 277, 277, 277, 292, 277,
- 300, 277, 302, 303, 304, 305, 43, 282,
- 283, 284, 277, 277, 71, 306, 277, 277,
- 286, 277, 277, 277, 277, 277, 277, 277,
- 277, 277, 277, 277, 277, 277, 287, 277,
- 307, 303, 308, 308, 43, 282, 283, 284,
- 277, 277, 277, 306, 277, 277, 286, 277,
- 277, 277, 277, 277, 277, 277, 277, 277,
- 277, 277, 277, 277, 287, 277, 303, 308,
- 308, 43, 282, 283, 284, 277, 277, 277,
- 306, 277, 277, 286, 277, 277, 277, 277,
- 277, 277, 277, 277, 277, 277, 277, 277,
- 277, 287, 277, 309, 277, 277, 277, 56,
- 310, 277, 282, 283, 284, 277, 277, 277,
- 292, 277, 309, 277, 311, 312, 313, 314,
- 43, 282, 283, 284, 277, 277, 69, 315,
- 277, 277, 286, 277, 277, 277, 277, 277,
- 277, 277, 277, 277, 277, 277, 277, 277,
- 287, 277, 316, 312, 317, 317, 43, 282,
- 283, 284, 277, 277, 277, 315, 277, 277,
- 286, 277, 277, 277, 277, 277, 277, 277,
- 277, 277, 277, 277, 277, 277, 287, 277,
- 312, 317, 317, 43, 282, 283, 284, 277,
- 277, 277, 315, 277, 277, 286, 277, 277,
- 277, 277, 277, 277, 277, 277, 277, 277,
- 277, 277, 277, 287, 277, 318, 277, 277,
- 277, 56, 319, 277, 282, 283, 284, 277,
- 277, 277, 292, 277, 318, 277, 320, 321,
- 322, 323, 43, 282, 283, 284, 277, 277,
- 67, 324, 277, 277, 286, 277, 277, 277,
- 277, 277, 277, 277, 277, 277, 277, 277,
- 277, 277, 287, 277, 325, 321, 326, 326,
- 43, 282, 283, 284, 277, 277, 277, 324,
- 277, 277, 286, 277, 277, 277, 277, 277,
- 277, 277, 277, 277, 277, 277, 277, 277,
- 287, 277, 321, 326, 326, 43, 282, 283,
- 284, 277, 277, 277, 324, 277, 277, 286,
- 277, 277, 277, 277, 277, 277, 277, 277,
- 277, 277, 277, 277, 277, 287, 277, 56,
- 327, 277, 282, 283, 284, 277, 277, 277,
- 292, 277, 282, 283, 284, 277, 277, 277,
- 292, 277, 328, 277, 277, 329, 283, 284,
- 277, 283, 284, 277, 330, 277, 283, 331,
- 277, 283, 332, 277, 283, 277, 328, 277,
- 277, 277, 283, 284, 277, 333, 277, 334,
- 335, 277, 282, 283, 284, 277, 277, 41,
- 277, 40, 277, 277, 277, 277, 282, 283,
- 284, 277, 282, 283, 284, 277, 333, 277,
- 277, 277, 277, 282, 283, 284, 277, 333,
- 277, 334, 277, 277, 282, 283, 284, 277,
- 277, 41, 277, 56, 277, 336, 336, 43,
- 282, 283, 284, 277, 277, 277, 292, 277,
- 337, 65, 338, 339, 46, 282, 283, 284,
- 277, 277, 277, 292, 277, 65, 338, 339,
- 46, 282, 283, 284, 277, 277, 277, 292,
- 277, 338, 338, 46, 282, 283, 284, 277,
- 277, 277, 292, 277, 340, 62, 341, 342,
- 49, 282, 283, 284, 277, 277, 277, 292,
- 277, 62, 341, 342, 49, 282, 283, 284,
- 277, 277, 277, 292, 277, 341, 341, 49,
- 282, 283, 284, 277, 277, 277, 292, 277,
- 343, 59, 344, 345, 52, 282, 283, 284,
- 277, 277, 277, 292, 277, 59, 344, 345,
- 52, 282, 283, 284, 277, 277, 277, 292,
- 277, 344, 344, 52, 282, 283, 284, 277,
- 277, 277, 292, 277, 346, 56, 277, 347,
- 277, 282, 283, 284, 277, 277, 277, 292,
- 277, 56, 277, 347, 277, 282, 283, 284,
- 277, 277, 277, 292, 277, 348, 277, 282,
- 283, 284, 277, 277, 277, 292, 277, 56,
- 277, 277, 277, 277, 282, 283, 284, 277,
- 277, 277, 292, 277, 39, 40, 277, 277,
- 56, 327, 277, 282, 283, 284, 277, 277,
- 277, 292, 277, 39, 277, 321, 326, 326,
- 43, 282, 283, 284, 277, 277, 277, 324,
- 277, 277, 277, 277, 277, 277, 277, 277,
- 277, 277, 277, 277, 277, 277, 277, 277,
- 287, 277, 321, 326, 326, 43, 282, 283,
- 284, 277, 277, 277, 324, 277, 320, 321,
- 326, 326, 43, 282, 283, 284, 277, 277,
- 277, 324, 277, 277, 286, 277, 277, 277,
- 277, 277, 277, 277, 277, 277, 277, 277,
- 277, 277, 287, 277, 320, 321, 322, 326,
- 43, 282, 283, 284, 277, 277, 67, 324,
- 277, 277, 286, 277, 277, 277, 277, 277,
- 277, 277, 277, 277, 277, 277, 277, 277,
- 287, 277, 318, 277, 349, 277, 336, 336,
- 43, 282, 283, 284, 277, 277, 277, 292,
- 277, 318, 277, 318, 277, 277, 277, 277,
- 277, 277, 282, 283, 284, 277, 277, 277,
- 292, 277, 318, 277, 318, 277, 277, 277,
- 277, 350, 277, 282, 283, 284, 277, 277,
- 277, 292, 277, 318, 277, 318, 277, 349,
- 277, 277, 277, 277, 282, 283, 284, 277,
- 277, 277, 292, 277, 318, 277, 318, 40,
- 277, 277, 56, 319, 277, 282, 283, 284,
- 277, 277, 277, 292, 277, 318, 277, 311,
- 312, 317, 317, 43, 282, 283, 284, 277,
- 277, 277, 315, 277, 277, 286, 277, 277,
- 277, 277, 277, 277, 277, 277, 277, 277,
- 277, 277, 277, 287, 277, 311, 312, 313,
- 317, 43, 282, 283, 284, 277, 277, 69,
- 315, 277, 277, 286, 277, 277, 277, 277,
- 277, 277, 277, 277, 277, 277, 277, 277,
- 277, 287, 277, 309, 277, 351, 277, 336,
- 336, 43, 282, 283, 284, 277, 277, 277,
- 292, 277, 309, 277, 309, 277, 277, 277,
- 277, 277, 277, 282, 283, 284, 277, 277,
- 277, 292, 277, 309, 277, 309, 277, 277,
- 277, 277, 352, 277, 282, 283, 284, 277,
- 277, 277, 292, 277, 309, 277, 309, 277,
- 351, 277, 277, 277, 277, 282, 283, 284,
- 277, 277, 277, 292, 277, 309, 277, 309,
- 40, 277, 277, 56, 310, 277, 282, 283,
- 284, 277, 277, 277, 292, 277, 309, 277,
- 302, 303, 308, 308, 43, 282, 283, 284,
- 277, 277, 277, 306, 277, 277, 286, 277,
- 277, 277, 277, 277, 277, 277, 277, 277,
- 277, 277, 277, 277, 287, 277, 302, 303,
- 304, 308, 43, 282, 283, 284, 277, 277,
- 71, 306, 277, 277, 286, 277, 277, 277,
- 277, 277, 277, 277, 277, 277, 277, 277,
- 277, 277, 287, 277, 300, 277, 353, 277,
- 336, 336, 43, 282, 283, 284, 277, 277,
- 277, 292, 277, 300, 277, 300, 277, 277,
- 277, 277, 277, 277, 282, 283, 284, 277,
- 277, 277, 292, 277, 300, 277, 300, 277,
- 277, 277, 277, 354, 277, 282, 283, 284,
- 277, 277, 277, 292, 277, 300, 277, 300,
- 277, 353, 277, 277, 277, 277, 282, 283,
- 284, 277, 277, 277, 292, 277, 300, 277,
- 300, 40, 277, 277, 56, 301, 277, 282,
- 283, 284, 277, 277, 277, 292, 277, 300,
- 277, 293, 294, 299, 299, 43, 282, 283,
- 284, 277, 277, 277, 297, 277, 277, 286,
- 277, 277, 277, 277, 277, 277, 277, 277,
- 277, 277, 277, 277, 277, 287, 277, 293,
- 294, 295, 299, 43, 282, 283, 284, 277,
- 277, 73, 297, 277, 277, 286, 277, 277,
- 277, 277, 277, 277, 277, 277, 277, 277,
- 277, 277, 277, 287, 277, 290, 277, 355,
- 277, 336, 336, 43, 282, 283, 284, 277,
- 277, 277, 292, 277, 290, 277, 290, 277,
- 277, 277, 277, 277, 277, 282, 283, 284,
- 277, 277, 277, 292, 277, 290, 277, 290,
- 277, 277, 277, 277, 356, 277, 282, 283,
- 284, 277, 277, 277, 292, 277, 290, 277,
- 290, 277, 355, 277, 277, 277, 277, 282,
- 283, 284, 277, 277, 277, 292, 277, 290,
- 277, 74, 42, 42, 43, 277, 277, 277,
- 277, 277, 277, 74, 277, 290, 40, 277,
- 277, 56, 291, 277, 282, 283, 284, 277,
- 277, 277, 292, 277, 290, 277, 278, 279,
- 289, 281, 43, 282, 283, 284, 277, 277,
- 277, 285, 277, 277, 286, 277, 277, 277,
- 277, 277, 277, 277, 277, 277, 277, 277,
- 277, 277, 287, 277, 358, 184, 359, 359,
- 81, 187, 188, 189, 357, 357, 357, 191,
- 357, 357, 194, 357, 357, 357, 357, 357,
- 357, 357, 357, 357, 357, 357, 357, 357,
- 196, 357, 184, 359, 359, 81, 187, 188,
- 189, 357, 357, 357, 191, 357, 357, 194,
- 357, 357, 357, 357, 357, 357, 357, 357,
- 357, 357, 357, 357, 357, 196, 357, 360,
- 357, 357, 357, 95, 361, 357, 187, 188,
- 189, 357, 357, 357, 362, 357, 360, 357,
- 363, 364, 365, 366, 81, 187, 188, 189,
- 357, 357, 112, 367, 357, 357, 194, 357,
- 357, 357, 357, 357, 357, 357, 357, 357,
- 357, 357, 357, 357, 196, 357, 368, 364,
- 369, 369, 81, 187, 188, 189, 357, 357,
- 357, 367, 357, 357, 194, 357, 357, 357,
- 357, 357, 357, 357, 357, 357, 357, 357,
- 357, 357, 196, 357, 364, 369, 369, 81,
- 187, 188, 189, 357, 357, 357, 367, 357,
- 357, 194, 357, 357, 357, 357, 357, 357,
- 357, 357, 357, 357, 357, 357, 357, 196,
- 357, 370, 357, 357, 357, 95, 371, 357,
- 187, 188, 189, 357, 357, 357, 362, 357,
- 370, 357, 372, 373, 374, 375, 81, 187,
- 188, 189, 357, 357, 110, 376, 357, 357,
- 194, 357, 357, 357, 357, 357, 357, 357,
- 357, 357, 357, 357, 357, 357, 196, 357,
- 377, 373, 378, 378, 81, 187, 188, 189,
- 357, 357, 357, 376, 357, 357, 194, 357,
- 357, 357, 357, 357, 357, 357, 357, 357,
- 357, 357, 357, 357, 196, 357, 373, 378,
- 378, 81, 187, 188, 189, 357, 357, 357,
- 376, 357, 357, 194, 357, 357, 357, 357,
- 357, 357, 357, 357, 357, 357, 357, 357,
- 357, 196, 357, 379, 357, 357, 357, 95,
- 380, 357, 187, 188, 189, 357, 357, 357,
- 362, 357, 379, 357, 381, 382, 383, 384,
- 81, 187, 188, 189, 357, 357, 108, 385,
- 357, 357, 194, 357, 357, 357, 357, 357,
- 357, 357, 357, 357, 357, 357, 357, 357,
- 196, 357, 386, 382, 387, 387, 81, 187,
- 188, 189, 357, 357, 357, 385, 357, 357,
- 194, 357, 357, 357, 357, 357, 357, 357,
- 357, 357, 357, 357, 357, 357, 196, 357,
- 382, 387, 387, 81, 187, 188, 189, 357,
- 357, 357, 385, 357, 357, 194, 357, 357,
- 357, 357, 357, 357, 357, 357, 357, 357,
- 357, 357, 357, 196, 357, 388, 357, 357,
- 357, 95, 389, 357, 187, 188, 189, 357,
- 357, 357, 362, 357, 388, 357, 390, 391,
- 392, 393, 81, 187, 188, 189, 357, 357,
- 106, 394, 357, 357, 194, 357, 357, 357,
- 357, 357, 357, 357, 357, 357, 357, 357,
- 357, 357, 196, 357, 395, 391, 396, 396,
- 81, 187, 188, 189, 357, 357, 357, 394,
- 357, 357, 194, 357, 357, 357, 357, 357,
- 357, 357, 357, 357, 357, 357, 357, 357,
- 196, 357, 391, 396, 396, 81, 187, 188,
- 189, 357, 357, 357, 394, 357, 357, 194,
- 357, 357, 357, 357, 357, 357, 357, 357,
- 357, 357, 357, 357, 357, 196, 357, 95,
- 397, 357, 187, 188, 189, 357, 357, 357,
- 362, 357, 187, 188, 189, 357, 357, 357,
- 362, 357, 398, 357, 357, 399, 188, 189,
- 357, 188, 189, 357, 400, 357, 188, 401,
- 357, 188, 402, 357, 188, 357, 398, 357,
- 357, 357, 188, 189, 357, 403, 357, 404,
- 405, 357, 187, 188, 189, 357, 357, 79,
- 357, 78, 357, 357, 357, 357, 187, 188,
- 189, 357, 187, 188, 189, 357, 403, 357,
- 357, 357, 357, 187, 188, 189, 357, 403,
- 357, 404, 357, 357, 187, 188, 189, 357,
- 357, 79, 357, 95, 357, 406, 406, 81,
- 187, 188, 189, 357, 357, 357, 362, 357,
- 407, 104, 408, 409, 85, 187, 188, 189,
- 357, 357, 357, 362, 357, 104, 408, 409,
- 85, 187, 188, 189, 357, 357, 357, 362,
- 357, 408, 408, 85, 187, 188, 189, 357,
- 357, 357, 362, 357, 410, 101, 411, 412,
- 88, 187, 188, 189, 357, 357, 357, 362,
- 357, 101, 411, 412, 88, 187, 188, 189,
- 357, 357, 357, 362, 357, 411, 411, 88,
- 187, 188, 189, 357, 357, 357, 362, 357,
- 413, 98, 414, 415, 91, 187, 188, 189,
- 357, 357, 357, 362, 357, 98, 414, 415,
- 91, 187, 188, 189, 357, 357, 357, 362,
- 357, 414, 414, 91, 187, 188, 189, 357,
- 357, 357, 362, 357, 416, 95, 357, 417,
- 357, 187, 188, 189, 357, 357, 357, 362,
- 357, 95, 357, 417, 357, 187, 188, 189,
- 357, 357, 357, 362, 357, 418, 357, 187,
- 188, 189, 357, 357, 357, 362, 357, 95,
- 357, 357, 357, 357, 187, 188, 189, 357,
- 357, 357, 362, 357, 77, 78, 357, 357,
- 95, 397, 357, 187, 188, 189, 357, 357,
- 357, 362, 357, 77, 357, 391, 396, 396,
- 81, 187, 188, 189, 357, 357, 357, 394,
- 357, 357, 357, 357, 357, 357, 357, 357,
- 357, 357, 357, 357, 357, 357, 357, 357,
- 196, 357, 391, 396, 396, 81, 187, 188,
- 189, 357, 357, 357, 394, 357, 390, 391,
- 396, 396, 81, 187, 188, 189, 357, 357,
- 357, 394, 357, 357, 194, 357, 357, 357,
- 357, 357, 357, 357, 357, 357, 357, 357,
- 357, 357, 196, 357, 390, 391, 392, 396,
- 81, 187, 188, 189, 357, 357, 106, 394,
- 357, 357, 194, 357, 357, 357, 357, 357,
- 357, 357, 357, 357, 357, 357, 357, 357,
- 196, 357, 388, 357, 419, 357, 406, 406,
- 81, 187, 188, 189, 357, 357, 357, 362,
- 357, 388, 357, 388, 357, 357, 357, 357,
- 357, 357, 187, 188, 189, 357, 357, 357,
- 362, 357, 388, 357, 388, 357, 357, 357,
- 357, 420, 357, 187, 188, 189, 357, 357,
- 357, 362, 357, 388, 357, 388, 357, 419,
- 357, 357, 357, 357, 187, 188, 189, 357,
- 357, 357, 362, 357, 388, 357, 388, 78,
- 357, 357, 95, 389, 357, 187, 188, 189,
- 357, 357, 357, 362, 357, 388, 357, 381,
- 382, 387, 387, 81, 187, 188, 189, 357,
- 357, 357, 385, 357, 357, 194, 357, 357,
- 357, 357, 357, 357, 357, 357, 357, 357,
- 357, 357, 357, 196, 357, 381, 382, 383,
- 387, 81, 187, 188, 189, 357, 357, 108,
- 385, 357, 357, 194, 357, 357, 357, 357,
- 357, 357, 357, 357, 357, 357, 357, 357,
- 357, 196, 357, 379, 357, 421, 357, 406,
- 406, 81, 187, 188, 189, 357, 357, 357,
- 362, 357, 379, 357, 379, 357, 357, 357,
- 357, 357, 357, 187, 188, 189, 357, 357,
- 357, 362, 357, 379, 357, 379, 357, 357,
- 357, 357, 422, 357, 187, 188, 189, 357,
- 357, 357, 362, 357, 379, 357, 379, 357,
- 421, 357, 357, 357, 357, 187, 188, 189,
- 357, 357, 357, 362, 357, 379, 357, 379,
- 78, 357, 357, 95, 380, 357, 187, 188,
- 189, 357, 357, 357, 362, 357, 379, 357,
- 372, 373, 378, 378, 81, 187, 188, 189,
- 357, 357, 357, 376, 357, 357, 194, 357,
- 357, 357, 357, 357, 357, 357, 357, 357,
- 357, 357, 357, 357, 196, 357, 372, 373,
- 374, 378, 81, 187, 188, 189, 357, 357,
- 110, 376, 357, 357, 194, 357, 357, 357,
- 357, 357, 357, 357, 357, 357, 357, 357,
- 357, 357, 196, 357, 370, 357, 423, 357,
- 406, 406, 81, 187, 188, 189, 357, 357,
- 357, 362, 357, 370, 357, 370, 357, 357,
- 357, 357, 357, 357, 187, 188, 189, 357,
- 357, 357, 362, 357, 370, 357, 370, 357,
- 357, 357, 357, 424, 357, 187, 188, 189,
- 357, 357, 357, 362, 357, 370, 357, 370,
- 357, 423, 357, 357, 357, 357, 187, 188,
- 189, 357, 357, 357, 362, 357, 370, 357,
- 370, 78, 357, 357, 95, 371, 357, 187,
- 188, 189, 357, 357, 357, 362, 357, 370,
- 357, 363, 364, 369, 369, 81, 187, 188,
- 189, 357, 357, 357, 367, 357, 357, 194,
- 357, 357, 357, 357, 357, 357, 357, 357,
- 357, 357, 357, 357, 357, 196, 357, 363,
- 364, 365, 369, 81, 187, 188, 189, 357,
- 357, 112, 367, 357, 357, 194, 357, 357,
- 357, 357, 357, 357, 357, 357, 357, 357,
- 357, 357, 357, 196, 357, 360, 357, 425,
- 357, 406, 406, 81, 187, 188, 189, 357,
- 357, 357, 362, 357, 360, 357, 360, 357,
- 357, 357, 357, 357, 357, 187, 188, 189,
- 357, 357, 357, 362, 357, 360, 357, 360,
- 357, 357, 357, 357, 426, 357, 187, 188,
- 189, 357, 357, 357, 362, 357, 360, 357,
- 360, 357, 425, 357, 357, 357, 357, 187,
- 188, 189, 357, 357, 357, 362, 357, 360,
- 357, 360, 78, 357, 357, 95, 361, 357,
- 187, 188, 189, 357, 357, 357, 362, 357,
- 360, 357, 113, 80, 80, 81, 427, 427,
- 427, 427, 427, 152, 113, 427, 183, 184,
- 359, 359, 81, 187, 188, 189, 357, 357,
- 357, 191, 357, 357, 194, 357, 357, 357,
- 357, 357, 357, 357, 357, 357, 357, 357,
- 357, 357, 196, 357, 113, 80, 80, 81,
- 427, 427, 427, 427, 427, 427, 113, 427,
- 429, 430, 431, 432, 119, 433, 434, 435,
- 428, 428, 151, 436, 428, 428, 437, 428,
- 428, 428, 428, 428, 428, 428, 428, 428,
- 428, 428, 428, 428, 438, 428, 439, 430,
- 432, 432, 119, 433, 434, 435, 428, 428,
- 428, 436, 428, 428, 437, 428, 428, 428,
- 428, 428, 428, 428, 428, 428, 428, 428,
- 428, 428, 438, 428, 430, 432, 432, 119,
- 433, 434, 435, 428, 428, 428, 436, 428,
- 428, 437, 428, 428, 428, 428, 428, 428,
- 428, 428, 428, 428, 428, 428, 428, 438,
- 428, 440, 428, 428, 428, 132, 441, 428,
- 433, 434, 435, 428, 428, 428, 442, 428,
- 440, 428, 443, 444, 445, 446, 119, 433,
- 434, 435, 428, 428, 149, 447, 428, 428,
- 437, 428, 428, 428, 428, 428, 428, 428,
- 428, 428, 428, 428, 428, 428, 438, 428,
- 448, 444, 449, 449, 119, 433, 434, 435,
- 428, 428, 428, 447, 428, 428, 437, 428,
- 428, 428, 428, 428, 428, 428, 428, 428,
- 428, 428, 428, 428, 438, 428, 444, 449,
- 449, 119, 433, 434, 435, 428, 428, 428,
- 447, 428, 428, 437, 428, 428, 428, 428,
- 428, 428, 428, 428, 428, 428, 428, 428,
- 428, 438, 428, 450, 428, 428, 428, 132,
- 451, 428, 433, 434, 435, 428, 428, 428,
- 442, 428, 450, 428, 452, 453, 454, 455,
- 119, 433, 434, 435, 428, 428, 147, 456,
- 428, 428, 437, 428, 428, 428, 428, 428,
- 428, 428, 428, 428, 428, 428, 428, 428,
- 438, 428, 457, 453, 458, 458, 119, 433,
- 434, 435, 428, 428, 428, 456, 428, 428,
- 437, 428, 428, 428, 428, 428, 428, 428,
- 428, 428, 428, 428, 428, 428, 438, 428,
- 453, 458, 458, 119, 433, 434, 435, 428,
- 428, 428, 456, 428, 428, 437, 428, 428,
- 428, 428, 428, 428, 428, 428, 428, 428,
- 428, 428, 428, 438, 428, 459, 428, 428,
- 428, 132, 460, 428, 433, 434, 435, 428,
- 428, 428, 442, 428, 459, 428, 461, 462,
- 463, 464, 119, 433, 434, 435, 428, 428,
- 145, 465, 428, 428, 437, 428, 428, 428,
- 428, 428, 428, 428, 428, 428, 428, 428,
- 428, 428, 438, 428, 466, 462, 467, 467,
- 119, 433, 434, 435, 428, 428, 428, 465,
- 428, 428, 437, 428, 428, 428, 428, 428,
- 428, 428, 428, 428, 428, 428, 428, 428,
- 438, 428, 462, 467, 467, 119, 433, 434,
- 435, 428, 428, 428, 465, 428, 428, 437,
- 428, 428, 428, 428, 428, 428, 428, 428,
- 428, 428, 428, 428, 428, 438, 428, 468,
- 428, 428, 428, 132, 469, 428, 433, 434,
- 435, 428, 428, 428, 442, 428, 468, 428,
- 470, 471, 472, 473, 119, 433, 434, 435,
- 428, 428, 143, 474, 428, 428, 437, 428,
- 428, 428, 428, 428, 428, 428, 428, 428,
- 428, 428, 428, 428, 438, 428, 475, 471,
- 476, 476, 119, 433, 434, 435, 428, 428,
- 428, 474, 428, 428, 437, 428, 428, 428,
- 428, 428, 428, 428, 428, 428, 428, 428,
- 428, 428, 438, 428, 471, 476, 476, 119,
- 433, 434, 435, 428, 428, 428, 474, 428,
- 428, 437, 428, 428, 428, 428, 428, 428,
- 428, 428, 428, 428, 428, 428, 428, 438,
- 428, 132, 477, 428, 433, 434, 435, 428,
- 428, 428, 442, 428, 433, 434, 435, 428,
- 428, 428, 442, 428, 478, 428, 428, 479,
- 434, 435, 428, 434, 435, 428, 480, 428,
- 434, 481, 428, 434, 482, 428, 434, 428,
- 478, 428, 428, 428, 434, 435, 428, 483,
- 428, 484, 485, 428, 433, 434, 435, 428,
- 428, 117, 428, 116, 428, 428, 428, 428,
- 433, 434, 435, 428, 433, 434, 435, 428,
- 483, 428, 428, 428, 428, 433, 434, 435,
- 428, 483, 428, 484, 428, 428, 433, 434,
- 435, 428, 428, 117, 428, 132, 428, 486,
- 486, 119, 433, 434, 435, 428, 428, 428,
- 442, 428, 487, 141, 488, 489, 122, 433,
- 434, 435, 428, 428, 428, 442, 428, 141,
- 488, 489, 122, 433, 434, 435, 428, 428,
- 428, 442, 428, 488, 488, 122, 433, 434,
- 435, 428, 428, 428, 442, 428, 490, 138,
- 491, 492, 125, 433, 434, 435, 428, 428,
- 428, 442, 428, 138, 491, 492, 125, 433,
- 434, 435, 428, 428, 428, 442, 428, 491,
- 491, 125, 433, 434, 435, 428, 428, 428,
- 442, 428, 493, 135, 494, 495, 128, 433,
- 434, 435, 428, 428, 428, 442, 428, 135,
- 494, 495, 128, 433, 434, 435, 428, 428,
- 428, 442, 428, 494, 494, 128, 433, 434,
- 435, 428, 428, 428, 442, 428, 496, 132,
- 428, 497, 428, 433, 434, 435, 428, 428,
- 428, 442, 428, 132, 428, 497, 428, 433,
- 434, 435, 428, 428, 428, 442, 428, 498,
- 428, 433, 434, 435, 428, 428, 428, 442,
- 428, 132, 428, 428, 428, 428, 433, 434,
- 435, 428, 428, 428, 442, 428, 115, 116,
- 428, 428, 132, 477, 428, 433, 434, 435,
- 428, 428, 428, 442, 428, 115, 428, 471,
- 476, 476, 119, 433, 434, 435, 428, 428,
- 428, 474, 428, 428, 428, 428, 428, 428,
- 428, 428, 428, 428, 428, 428, 428, 428,
- 428, 428, 438, 428, 471, 476, 476, 119,
- 433, 434, 435, 428, 428, 428, 474, 428,
- 470, 471, 476, 476, 119, 433, 434, 435,
- 428, 428, 428, 474, 428, 428, 437, 428,
- 428, 428, 428, 428, 428, 428, 428, 428,
- 428, 428, 428, 428, 438, 428, 470, 471,
- 472, 476, 119, 433, 434, 435, 428, 428,
- 143, 474, 428, 428, 437, 428, 428, 428,
- 428, 428, 428, 428, 428, 428, 428, 428,
- 428, 428, 438, 428, 468, 428, 499, 428,
- 486, 486, 119, 433, 434, 435, 428, 428,
- 428, 442, 428, 468, 428, 468, 428, 428,
- 428, 428, 428, 428, 433, 434, 435, 428,
- 428, 428, 442, 428, 468, 428, 468, 428,
- 428, 428, 428, 500, 428, 433, 434, 435,
- 428, 428, 428, 442, 428, 468, 428, 468,
- 428, 499, 428, 428, 428, 428, 433, 434,
- 435, 428, 428, 428, 442, 428, 468, 428,
- 468, 116, 428, 428, 132, 469, 428, 433,
- 434, 435, 428, 428, 428, 442, 428, 468,
- 428, 461, 462, 467, 467, 119, 433, 434,
- 435, 428, 428, 428, 465, 428, 428, 437,
- 428, 428, 428, 428, 428, 428, 428, 428,
- 428, 428, 428, 428, 428, 438, 428, 461,
- 462, 463, 467, 119, 433, 434, 435, 428,
- 428, 145, 465, 428, 428, 437, 428, 428,
- 428, 428, 428, 428, 428, 428, 428, 428,
- 428, 428, 428, 438, 428, 459, 428, 501,
- 428, 486, 486, 119, 433, 434, 435, 428,
- 428, 428, 442, 428, 459, 428, 459, 428,
- 428, 428, 428, 428, 428, 433, 434, 435,
- 428, 428, 428, 442, 428, 459, 428, 459,
- 428, 428, 428, 428, 502, 428, 433, 434,
- 435, 428, 428, 428, 442, 428, 459, 428,
- 459, 428, 501, 428, 428, 428, 428, 433,
- 434, 435, 428, 428, 428, 442, 428, 459,
- 428, 459, 116, 428, 428, 132, 460, 428,
- 433, 434, 435, 428, 428, 428, 442, 428,
- 459, 428, 452, 453, 458, 458, 119, 433,
- 434, 435, 428, 428, 428, 456, 428, 428,
- 437, 428, 428, 428, 428, 428, 428, 428,
- 428, 428, 428, 428, 428, 428, 438, 428,
- 452, 453, 454, 458, 119, 433, 434, 435,
- 428, 428, 147, 456, 428, 428, 437, 428,
- 428, 428, 428, 428, 428, 428, 428, 428,
- 428, 428, 428, 428, 438, 428, 450, 428,
- 503, 428, 486, 486, 119, 433, 434, 435,
- 428, 428, 428, 442, 428, 450, 428, 450,
- 428, 428, 428, 428, 428, 428, 433, 434,
- 435, 428, 428, 428, 442, 428, 450, 428,
- 450, 428, 428, 428, 428, 504, 428, 433,
- 434, 435, 428, 428, 428, 442, 428, 450,
- 428, 450, 428, 503, 428, 428, 428, 428,
- 433, 434, 435, 428, 428, 428, 442, 428,
- 450, 428, 450, 116, 428, 428, 132, 451,
- 428, 433, 434, 435, 428, 428, 428, 442,
- 428, 450, 428, 443, 444, 449, 449, 119,
- 433, 434, 435, 428, 428, 428, 447, 428,
- 428, 437, 428, 428, 428, 428, 428, 428,
- 428, 428, 428, 428, 428, 428, 428, 438,
- 428, 443, 444, 445, 449, 119, 433, 434,
- 435, 428, 428, 149, 447, 428, 428, 437,
- 428, 428, 428, 428, 428, 428, 428, 428,
- 428, 428, 428, 428, 428, 438, 428, 440,
- 428, 505, 428, 486, 486, 119, 433, 434,
- 435, 428, 428, 428, 442, 428, 440, 428,
- 440, 428, 428, 428, 428, 428, 428, 433,
- 434, 435, 428, 428, 428, 442, 428, 440,
- 428, 440, 428, 428, 428, 428, 506, 428,
- 433, 434, 435, 428, 428, 428, 442, 428,
- 440, 428, 440, 428, 505, 428, 428, 428,
- 428, 433, 434, 435, 428, 428, 428, 442,
- 428, 440, 428, 440, 116, 428, 428, 132,
- 441, 428, 433, 434, 435, 428, 428, 428,
- 442, 428, 440, 428, 429, 430, 432, 432,
- 119, 433, 434, 435, 428, 428, 428, 436,
- 428, 428, 437, 428, 428, 428, 428, 428,
- 428, 428, 428, 428, 428, 428, 428, 428,
- 438, 428, 181, 182, 183, 184, 507, 359,
- 81, 187, 188, 189, 190, 190, 152, 191,
- 357, 181, 194, 357, 357, 357, 357, 357,
- 357, 357, 357, 357, 357, 357, 357, 357,
- 196, 357, 198, 508, 200, 201, 5, 202,
- 203, 204, 197, 197, 37, 205, 197, 197,
- 206, 197, 197, 197, 197, 197, 197, 197,
- 197, 197, 197, 197, 197, 197, 207, 197,
- 210, 182, 183, 184, 509, 510, 81, 511,
- 512, 513, 197, 190, 152, 514, 197, 210,
- 194, 197, 197, 197, 197, 197, 197, 197,
- 197, 197, 197, 197, 197, 197, 196, 197,
- 113, 80, 80, 81, 202, 203, 204, 197,
- 197, 152, 515, 197, 516, 2, 357, 357,
- 357, 426, 357, 187, 188, 189, 357, 357,
- 357, 362, 357, 516, 357, 517, 364, 518,
- 519, 81, 511, 512, 513, 197, 197, 153,
- 367, 197, 197, 194, 197, 197, 197, 197,
- 197, 197, 197, 197, 197, 197, 197, 197,
- 197, 196, 197, 520, 364, 369, 369, 81,
- 511, 512, 513, 197, 197, 197, 367, 197,
- 197, 194, 197, 197, 197, 197, 197, 197,
- 197, 197, 197, 197, 197, 197, 197, 196,
- 197, 364, 369, 369, 81, 511, 512, 513,
- 197, 197, 197, 367, 197, 197, 194, 197,
- 197, 197, 197, 197, 197, 197, 197, 197,
- 197, 197, 197, 197, 196, 197, 521, 197,
- 197, 522, 512, 513, 197, 512, 513, 197,
- 250, 197, 512, 523, 197, 512, 524, 197,
- 512, 197, 521, 197, 197, 197, 512, 513,
- 197, 517, 364, 369, 369, 81, 511, 512,
- 513, 197, 197, 197, 367, 197, 197, 194,
- 197, 197, 197, 197, 197, 197, 197, 197,
- 197, 197, 197, 197, 197, 196, 197, 517,
- 364, 518, 369, 81, 511, 512, 513, 197,
- 197, 153, 367, 197, 197, 194, 197, 197,
- 197, 197, 197, 197, 197, 197, 197, 197,
- 197, 197, 197, 196, 197, 210, 197, 275,
- 113, 525, 525, 155, 202, 203, 204, 197,
- 197, 197, 515, 197, 210, 197, 526, 179,
- 527, 528, 157, 511, 512, 513, 197, 197,
- 197, 529, 197, 179, 527, 528, 157, 511,
- 512, 513, 197, 197, 197, 529, 197, 527,
- 527, 157, 511, 512, 513, 197, 197, 197,
- 529, 197, 530, 176, 531, 532, 160, 511,
- 512, 513, 197, 197, 197, 529, 197, 176,
- 531, 532, 160, 511, 512, 513, 197, 197,
- 197, 529, 197, 531, 531, 160, 511, 512,
- 513, 197, 197, 197, 529, 197, 533, 173,
- 534, 535, 163, 511, 512, 513, 197, 197,
- 197, 529, 197, 173, 534, 535, 163, 511,
- 512, 513, 197, 197, 197, 529, 197, 534,
- 534, 163, 511, 512, 513, 197, 197, 197,
- 529, 197, 536, 170, 197, 537, 197, 511,
- 512, 513, 197, 197, 197, 529, 197, 170,
- 197, 537, 197, 511, 512, 513, 197, 197,
- 197, 529, 197, 511, 512, 513, 197, 197,
- 197, 529, 197, 538, 197, 539, 540, 197,
- 511, 512, 513, 197, 197, 167, 197, 166,
- 197, 197, 197, 197, 511, 512, 513, 197,
- 511, 512, 513, 197, 538, 197, 197, 197,
- 197, 511, 512, 513, 197, 538, 197, 539,
- 197, 197, 511, 512, 513, 197, 197, 167,
- 197, 516, 166, 357, 357, 95, 361, 357,
- 187, 188, 189, 357, 357, 357, 362, 357,
- 516, 357, 542, 541, 541, 541, 541, 543,
- 544, 545, 541, 543, 544, 545, 541, 546,
- 541, 541, 547, 544, 545, 541, 544, 545,
- 541, 548, 541, 544, 549, 541, 544, 550,
- 541, 544, 541, 546, 541, 541, 541, 544,
- 545, 541, 0
+ 1, 0, 2, 3, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 2, 0, 1, 0, 0, 0, 0,
+ 4, 0, 5, 5, 6, 1, 0, 7,
+ 7, 6, 0, 6, 0, 8, 8, 9,
+ 1, 0, 10, 10, 9, 0, 9, 0,
+ 11, 11, 12, 1, 0, 13, 13, 12,
+ 0, 12, 0, 14, 14, 15, 1, 0,
+ 16, 16, 15, 0, 15, 0, 17, 0,
+ 0, 0, 1, 0, 18, 0, 19, 0,
+ 20, 14, 14, 15, 1, 0, 21, 0,
+ 22, 0, 23, 11, 11, 12, 1, 0,
+ 24, 0, 25, 0, 26, 8, 8, 9,
+ 1, 0, 27, 0, 28, 0, 29, 5,
+ 5, 6, 1, 0, 0, 0, 0, 0,
+ 29, 0, 29, 5, 5, 6, 1, 0,
+ 0, 0, 0, 30, 29, 0, 31, 5,
+ 5, 6, 1, 0, 0, 0, 0, 0,
+ 31, 0, 31, 5, 5, 6, 1, 0,
+ 0, 0, 0, 32, 31, 0, 33, 5,
+ 5, 6, 1, 0, 0, 0, 0, 0,
+ 33, 0, 33, 5, 5, 6, 1, 0,
+ 0, 0, 0, 34, 33, 0, 35, 5,
+ 5, 6, 1, 0, 0, 0, 0, 0,
+ 35, 0, 35, 5, 5, 6, 1, 0,
+ 0, 0, 0, 36, 35, 0, 37, 5,
+ 5, 6, 1, 0, 0, 0, 0, 0,
+ 37, 0, 37, 5, 5, 6, 1, 0,
+ 0, 0, 0, 38, 37, 0, 40, 39,
+ 41, 42, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 41,
+ 39, 40, 39, 39, 39, 39, 43, 39,
+ 44, 44, 45, 40, 39, 46, 46, 45,
+ 39, 45, 39, 47, 47, 48, 40, 39,
+ 49, 49, 48, 39, 48, 39, 50, 50,
+ 51, 40, 39, 52, 52, 51, 39, 51,
+ 39, 53, 53, 54, 40, 39, 55, 55,
+ 54, 39, 54, 39, 56, 39, 39, 39,
+ 40, 39, 57, 39, 58, 39, 59, 53,
+ 53, 54, 40, 39, 60, 39, 61, 39,
+ 62, 50, 50, 51, 40, 39, 63, 39,
+ 64, 39, 65, 47, 47, 48, 40, 39,
+ 66, 39, 67, 39, 68, 44, 44, 45,
+ 40, 39, 39, 39, 39, 39, 68, 39,
+ 68, 44, 44, 45, 40, 39, 39, 39,
+ 39, 69, 68, 39, 70, 44, 44, 45,
+ 40, 39, 39, 39, 39, 39, 70, 39,
+ 70, 44, 44, 45, 40, 39, 39, 39,
+ 39, 71, 70, 39, 72, 44, 44, 45,
+ 40, 39, 39, 39, 39, 39, 72, 39,
+ 72, 44, 44, 45, 40, 39, 39, 39,
+ 39, 73, 72, 39, 74, 44, 44, 45,
+ 40, 39, 39, 39, 39, 39, 74, 39,
+ 74, 44, 44, 45, 40, 39, 39, 39,
+ 39, 75, 74, 39, 76, 44, 44, 45,
+ 40, 39, 39, 39, 39, 39, 76, 39,
+ 76, 44, 44, 45, 40, 39, 39, 39,
+ 39, 77, 76, 39, 79, 78, 80, 81,
+ 78, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 80, 78, 79,
+ 78, 78, 78, 78, 82, 78, 83, 83,
+ 84, 79, 78, 86, 86, 84, 85, 84,
+ 85, 87, 87, 88, 79, 78, 89, 89,
+ 88, 78, 88, 78, 90, 90, 91, 79,
+ 78, 92, 92, 91, 78, 91, 78, 93,
+ 93, 94, 79, 78, 95, 95, 94, 78,
+ 94, 78, 96, 78, 78, 78, 79, 78,
+ 97, 78, 98, 78, 99, 93, 93, 94,
+ 79, 78, 100, 78, 101, 78, 102, 90,
+ 90, 91, 79, 78, 103, 78, 104, 78,
+ 105, 87, 87, 88, 79, 78, 106, 78,
+ 107, 78, 108, 83, 83, 84, 79, 78,
+ 78, 78, 78, 78, 108, 78, 108, 83,
+ 83, 84, 79, 78, 78, 78, 78, 109,
+ 108, 78, 110, 83, 83, 84, 79, 78,
+ 78, 78, 78, 78, 110, 78, 110, 83,
+ 83, 84, 79, 78, 78, 78, 78, 111,
+ 110, 78, 112, 83, 83, 84, 79, 78,
+ 78, 78, 78, 78, 112, 78, 112, 83,
+ 83, 84, 79, 78, 78, 78, 78, 113,
+ 112, 78, 114, 83, 83, 84, 79, 78,
+ 78, 78, 78, 78, 114, 78, 114, 83,
+ 83, 84, 79, 78, 78, 78, 78, 115,
+ 114, 78, 116, 83, 83, 84, 79, 78,
+ 78, 78, 78, 78, 116, 78, 118, 117,
+ 119, 120, 117, 117, 117, 117, 117, 117,
+ 117, 117, 117, 117, 117, 117, 117, 119,
+ 117, 118, 117, 117, 117, 117, 121, 117,
+ 122, 122, 123, 118, 117, 124, 124, 123,
+ 117, 123, 117, 125, 125, 126, 118, 117,
+ 127, 127, 126, 117, 126, 117, 128, 128,
+ 129, 118, 117, 130, 130, 129, 117, 129,
+ 117, 131, 131, 132, 118, 117, 133, 133,
+ 132, 117, 132, 117, 134, 117, 117, 117,
+ 118, 117, 135, 117, 136, 117, 137, 131,
+ 131, 132, 118, 117, 138, 117, 139, 117,
+ 140, 128, 128, 129, 118, 117, 141, 117,
+ 142, 117, 143, 125, 125, 126, 118, 117,
+ 144, 117, 145, 117, 146, 122, 122, 123,
+ 118, 117, 117, 117, 117, 117, 146, 117,
+ 146, 122, 122, 123, 118, 117, 117, 117,
+ 117, 147, 146, 117, 148, 122, 122, 123,
+ 118, 117, 117, 117, 117, 117, 148, 117,
+ 148, 122, 122, 123, 118, 117, 117, 117,
+ 117, 149, 148, 117, 150, 122, 122, 123,
+ 118, 117, 117, 117, 117, 117, 150, 117,
+ 150, 122, 122, 123, 118, 117, 117, 117,
+ 117, 151, 150, 117, 152, 122, 122, 123,
+ 118, 117, 117, 117, 117, 117, 152, 117,
+ 152, 122, 122, 123, 118, 117, 117, 117,
+ 117, 153, 152, 117, 154, 122, 122, 123,
+ 118, 117, 117, 117, 117, 117, 154, 117,
+ 154, 122, 122, 123, 118, 117, 117, 117,
+ 117, 155, 154, 117, 116, 83, 83, 84,
+ 79, 78, 78, 78, 78, 156, 116, 78,
+ 86, 86, 84, 1, 0, 114, 83, 83,
+ 84, 157, 0, 0, 0, 0, 0, 114,
+ 0, 114, 83, 83, 84, 157, 0, 0,
+ 0, 0, 158, 114, 0, 159, 159, 160,
+ 1, 0, 7, 7, 160, 0, 161, 161,
+ 162, 157, 0, 163, 163, 162, 0, 162,
+ 0, 164, 164, 165, 157, 0, 166, 166,
+ 165, 0, 165, 0, 167, 167, 168, 157,
+ 0, 169, 169, 168, 0, 168, 0, 157,
+ 0, 170, 171, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 170, 0, 157, 0, 0, 0, 0, 172,
+ 0, 173, 0, 0, 0, 157, 0, 174,
+ 0, 175, 0, 176, 167, 167, 168, 157,
+ 0, 177, 0, 178, 0, 179, 164, 164,
+ 165, 157, 0, 180, 0, 181, 0, 182,
+ 161, 161, 162, 157, 0, 183, 0, 184,
+ 0, 186, 185, 188, 189, 190, 191, 192,
+ 193, 84, 79, 194, 195, 196, 196, 156,
+ 197, 198, 199, 200, 201, 187, 187, 187,
+ 187, 187, 187, 187, 187, 187, 187, 187,
+ 187, 202, 187, 204, 205, 206, 207, 6,
+ 1, 208, 209, 203, 203, 38, 210, 203,
+ 203, 211, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 212,
+ 203, 213, 205, 214, 214, 6, 1, 208,
+ 209, 203, 203, 203, 210, 203, 203, 211,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 212, 203, 205,
+ 214, 214, 6, 1, 208, 209, 203, 203,
+ 203, 210, 203, 203, 211, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 212, 203, 215, 203, 203, 203,
+ 19, 216, 203, 1, 208, 209, 203, 203,
+ 203, 217, 203, 215, 203, 218, 219, 220,
+ 221, 6, 1, 208, 209, 203, 203, 36,
+ 222, 203, 203, 211, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 212, 203, 223, 219, 224, 224, 6,
+ 1, 208, 209, 203, 203, 203, 222, 203,
+ 203, 211, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 212,
+ 203, 219, 224, 224, 6, 1, 208, 209,
+ 203, 203, 203, 222, 203, 203, 211, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 212, 203, 225, 203,
+ 203, 203, 19, 226, 203, 1, 208, 209,
+ 203, 203, 203, 217, 203, 225, 203, 227,
+ 228, 229, 230, 6, 1, 208, 209, 203,
+ 203, 34, 231, 203, 203, 211, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 212, 203, 232, 228, 233,
+ 233, 6, 1, 208, 209, 203, 203, 203,
+ 231, 203, 203, 211, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 212, 203, 228, 233, 233, 6, 1,
+ 208, 209, 203, 203, 203, 231, 203, 203,
+ 211, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 212, 203,
+ 234, 203, 203, 203, 19, 235, 203, 1,
+ 208, 209, 203, 203, 203, 217, 203, 234,
+ 203, 236, 237, 238, 239, 6, 1, 208,
+ 209, 203, 203, 32, 240, 203, 203, 211,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 212, 203, 241,
+ 237, 242, 242, 6, 1, 208, 209, 203,
+ 203, 203, 240, 203, 203, 211, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 212, 203, 237, 242, 242,
+ 6, 1, 208, 209, 203, 203, 203, 240,
+ 203, 203, 211, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 212, 203, 243, 203, 203, 203, 19, 244,
+ 203, 1, 208, 209, 203, 203, 203, 217,
+ 203, 243, 203, 245, 246, 247, 248, 6,
+ 1, 208, 209, 203, 203, 30, 249, 203,
+ 203, 211, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 212,
+ 203, 250, 246, 251, 251, 6, 1, 208,
+ 209, 203, 203, 203, 249, 203, 203, 211,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 212, 203, 246,
+ 251, 251, 6, 1, 208, 209, 203, 203,
+ 203, 249, 203, 203, 211, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 212, 203, 19, 252, 203, 1,
+ 208, 209, 203, 203, 203, 217, 203, 253,
+ 253, 203, 1, 208, 209, 203, 203, 203,
+ 217, 203, 254, 203, 203, 255, 208, 209,
+ 203, 208, 209, 203, 256, 203, 208, 257,
+ 203, 208, 258, 203, 208, 203, 254, 203,
+ 203, 203, 208, 209, 203, 259, 203, 260,
+ 261, 203, 1, 208, 209, 203, 203, 4,
+ 203, 3, 203, 253, 253, 203, 1, 208,
+ 209, 203, 253, 253, 203, 1, 208, 209,
+ 203, 259, 203, 253, 253, 203, 1, 208,
+ 209, 203, 259, 203, 260, 253, 203, 1,
+ 208, 209, 203, 203, 4, 203, 19, 203,
+ 262, 262, 6, 1, 208, 209, 203, 203,
+ 203, 217, 203, 263, 28, 264, 265, 9,
+ 1, 208, 209, 203, 203, 203, 217, 203,
+ 28, 264, 265, 9, 1, 208, 209, 203,
+ 203, 203, 217, 203, 264, 264, 9, 1,
+ 208, 209, 203, 203, 203, 217, 203, 266,
+ 25, 267, 268, 12, 1, 208, 209, 203,
+ 203, 203, 217, 203, 25, 267, 268, 12,
+ 1, 208, 209, 203, 203, 203, 217, 203,
+ 267, 267, 12, 1, 208, 209, 203, 203,
+ 203, 217, 203, 269, 22, 270, 271, 15,
+ 1, 208, 209, 203, 203, 203, 217, 203,
+ 22, 270, 271, 15, 1, 208, 209, 203,
+ 203, 203, 217, 203, 270, 270, 15, 1,
+ 208, 209, 203, 203, 203, 217, 203, 272,
+ 19, 253, 273, 203, 1, 208, 209, 203,
+ 203, 203, 217, 203, 19, 253, 273, 203,
+ 1, 208, 209, 203, 203, 203, 217, 203,
+ 253, 274, 203, 1, 208, 209, 203, 203,
+ 203, 217, 203, 19, 203, 253, 253, 203,
+ 1, 208, 209, 203, 203, 203, 217, 203,
+ 2, 3, 203, 203, 19, 252, 203, 1,
+ 208, 209, 203, 203, 203, 217, 203, 2,
+ 203, 246, 251, 251, 6, 1, 208, 209,
+ 203, 203, 203, 249, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 212, 203, 246, 251,
+ 251, 6, 1, 208, 209, 203, 203, 203,
+ 249, 203, 245, 246, 251, 251, 6, 1,
+ 208, 209, 203, 203, 203, 249, 203, 203,
+ 211, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 212, 203,
+ 245, 246, 247, 251, 6, 1, 208, 209,
+ 203, 203, 30, 249, 203, 203, 211, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 212, 203, 243, 203,
+ 275, 203, 262, 262, 6, 1, 208, 209,
+ 203, 203, 203, 217, 203, 243, 203, 243,
+ 203, 203, 203, 253, 253, 203, 1, 208,
+ 209, 203, 203, 203, 217, 203, 243, 203,
+ 243, 203, 203, 203, 253, 276, 203, 1,
+ 208, 209, 203, 203, 203, 217, 203, 243,
+ 203, 243, 203, 275, 203, 253, 253, 203,
+ 1, 208, 209, 203, 203, 203, 217, 203,
+ 243, 203, 243, 3, 203, 203, 19, 244,
+ 203, 1, 208, 209, 203, 203, 203, 217,
+ 203, 243, 203, 236, 237, 242, 242, 6,
+ 1, 208, 209, 203, 203, 203, 240, 203,
+ 203, 211, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 212,
+ 203, 236, 237, 238, 242, 6, 1, 208,
+ 209, 203, 203, 32, 240, 203, 203, 211,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 212, 203, 234,
+ 203, 277, 203, 262, 262, 6, 1, 208,
+ 209, 203, 203, 203, 217, 203, 234, 203,
+ 234, 203, 203, 203, 253, 253, 203, 1,
+ 208, 209, 203, 203, 203, 217, 203, 234,
+ 203, 234, 203, 203, 203, 253, 278, 203,
+ 1, 208, 209, 203, 203, 203, 217, 203,
+ 234, 203, 234, 203, 277, 203, 253, 253,
+ 203, 1, 208, 209, 203, 203, 203, 217,
+ 203, 234, 203, 234, 3, 203, 203, 19,
+ 235, 203, 1, 208, 209, 203, 203, 203,
+ 217, 203, 234, 203, 227, 228, 233, 233,
+ 6, 1, 208, 209, 203, 203, 203, 231,
+ 203, 203, 211, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 212, 203, 227, 228, 229, 233, 6, 1,
+ 208, 209, 203, 203, 34, 231, 203, 203,
+ 211, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 212, 203,
+ 225, 203, 279, 203, 262, 262, 6, 1,
+ 208, 209, 203, 203, 203, 217, 203, 225,
+ 203, 225, 203, 203, 203, 253, 253, 203,
+ 1, 208, 209, 203, 203, 203, 217, 203,
+ 225, 203, 225, 203, 203, 203, 253, 280,
+ 203, 1, 208, 209, 203, 203, 203, 217,
+ 203, 225, 203, 225, 203, 279, 203, 253,
+ 253, 203, 1, 208, 209, 203, 203, 203,
+ 217, 203, 225, 203, 225, 3, 203, 203,
+ 19, 226, 203, 1, 208, 209, 203, 203,
+ 203, 217, 203, 225, 203, 218, 219, 224,
+ 224, 6, 1, 208, 209, 203, 203, 203,
+ 222, 203, 203, 211, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 212, 203, 218, 219, 220, 224, 6,
+ 1, 208, 209, 203, 203, 36, 222, 203,
+ 203, 211, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 212,
+ 203, 215, 203, 281, 203, 262, 262, 6,
+ 1, 208, 209, 203, 203, 203, 217, 203,
+ 215, 203, 215, 203, 203, 203, 253, 253,
+ 203, 1, 208, 209, 203, 203, 203, 217,
+ 203, 215, 203, 215, 203, 203, 203, 253,
+ 282, 203, 1, 208, 209, 203, 203, 203,
+ 217, 203, 215, 203, 215, 203, 281, 203,
+ 253, 253, 203, 1, 208, 209, 203, 203,
+ 203, 217, 203, 215, 203, 215, 3, 203,
+ 203, 19, 216, 203, 1, 208, 209, 203,
+ 203, 203, 217, 203, 215, 203, 204, 205,
+ 214, 214, 6, 1, 208, 209, 203, 203,
+ 203, 210, 203, 203, 211, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 212, 203, 204, 205, 206, 214,
+ 6, 1, 208, 209, 203, 203, 38, 210,
+ 203, 203, 211, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 212, 203, 284, 285, 286, 287, 45, 40,
+ 288, 289, 283, 283, 77, 290, 283, 283,
+ 291, 283, 283, 283, 283, 283, 283, 283,
+ 283, 283, 283, 283, 283, 283, 292, 283,
+ 293, 285, 294, 287, 45, 40, 288, 289,
+ 283, 283, 283, 290, 283, 283, 291, 283,
+ 283, 283, 283, 283, 283, 283, 283, 283,
+ 283, 283, 283, 283, 292, 283, 285, 294,
+ 287, 45, 40, 288, 289, 283, 283, 283,
+ 290, 283, 283, 291, 283, 283, 283, 283,
+ 283, 283, 283, 283, 283, 283, 283, 283,
+ 283, 292, 283, 295, 283, 283, 283, 58,
+ 296, 283, 40, 288, 289, 283, 283, 283,
+ 297, 283, 295, 283, 298, 299, 300, 301,
+ 45, 40, 288, 289, 283, 283, 75, 302,
+ 283, 283, 291, 283, 283, 283, 283, 283,
+ 283, 283, 283, 283, 283, 283, 283, 283,
+ 292, 283, 303, 299, 304, 304, 45, 40,
+ 288, 289, 283, 283, 283, 302, 283, 283,
+ 291, 283, 283, 283, 283, 283, 283, 283,
+ 283, 283, 283, 283, 283, 283, 292, 283,
+ 299, 304, 304, 45, 40, 288, 289, 283,
+ 283, 283, 302, 283, 283, 291, 283, 283,
+ 283, 283, 283, 283, 283, 283, 283, 283,
+ 283, 283, 283, 292, 283, 305, 283, 283,
+ 283, 58, 306, 283, 40, 288, 289, 283,
+ 283, 283, 297, 283, 305, 283, 307, 308,
+ 309, 310, 45, 40, 288, 289, 283, 283,
+ 73, 311, 283, 283, 291, 283, 283, 283,
+ 283, 283, 283, 283, 283, 283, 283, 283,
+ 283, 283, 292, 283, 312, 308, 313, 313,
+ 45, 40, 288, 289, 283, 283, 283, 311,
+ 283, 283, 291, 283, 283, 283, 283, 283,
+ 283, 283, 283, 283, 283, 283, 283, 283,
+ 292, 283, 308, 313, 313, 45, 40, 288,
+ 289, 283, 283, 283, 311, 283, 283, 291,
+ 283, 283, 283, 283, 283, 283, 283, 283,
+ 283, 283, 283, 283, 283, 292, 283, 314,
+ 283, 283, 283, 58, 315, 283, 40, 288,
+ 289, 283, 283, 283, 297, 283, 314, 283,
+ 316, 317, 318, 319, 45, 40, 288, 289,
+ 283, 283, 71, 320, 283, 283, 291, 283,
+ 283, 283, 283, 283, 283, 283, 283, 283,
+ 283, 283, 283, 283, 292, 283, 321, 317,
+ 322, 322, 45, 40, 288, 289, 283, 283,
+ 283, 320, 283, 283, 291, 283, 283, 283,
+ 283, 283, 283, 283, 283, 283, 283, 283,
+ 283, 283, 292, 283, 317, 322, 322, 45,
+ 40, 288, 289, 283, 283, 283, 320, 283,
+ 283, 291, 283, 283, 283, 283, 283, 283,
+ 283, 283, 283, 283, 283, 283, 283, 292,
+ 283, 323, 283, 283, 283, 58, 324, 283,
+ 40, 288, 289, 283, 283, 283, 297, 283,
+ 323, 283, 325, 326, 327, 328, 45, 40,
+ 288, 289, 283, 283, 69, 329, 283, 283,
+ 291, 283, 283, 283, 283, 283, 283, 283,
+ 283, 283, 283, 283, 283, 283, 292, 283,
+ 330, 326, 331, 331, 45, 40, 288, 289,
+ 283, 283, 283, 329, 283, 283, 291, 283,
+ 283, 283, 283, 283, 283, 283, 283, 283,
+ 283, 283, 283, 283, 292, 283, 326, 331,
+ 331, 45, 40, 288, 289, 283, 283, 283,
+ 329, 283, 283, 291, 283, 283, 283, 283,
+ 283, 283, 283, 283, 283, 283, 283, 283,
+ 283, 292, 283, 58, 332, 283, 40, 288,
+ 289, 283, 283, 283, 297, 283, 333, 333,
+ 283, 40, 288, 289, 283, 283, 283, 297,
+ 283, 334, 283, 283, 335, 288, 289, 283,
+ 288, 289, 283, 336, 283, 288, 337, 283,
+ 288, 338, 283, 288, 283, 334, 283, 283,
+ 283, 288, 289, 283, 339, 283, 340, 341,
+ 283, 40, 288, 289, 283, 283, 43, 283,
+ 42, 283, 333, 333, 283, 40, 288, 289,
+ 283, 333, 333, 283, 40, 288, 289, 283,
+ 339, 283, 333, 333, 283, 40, 288, 289,
+ 283, 339, 283, 340, 333, 283, 40, 288,
+ 289, 283, 283, 43, 283, 58, 283, 342,
+ 342, 45, 40, 288, 289, 283, 283, 283,
+ 297, 283, 343, 67, 344, 345, 48, 40,
+ 288, 289, 283, 283, 283, 297, 283, 67,
+ 344, 345, 48, 40, 288, 289, 283, 283,
+ 283, 297, 283, 344, 344, 48, 40, 288,
+ 289, 283, 283, 283, 297, 283, 346, 64,
+ 347, 348, 51, 40, 288, 289, 283, 283,
+ 283, 297, 283, 64, 347, 348, 51, 40,
+ 288, 289, 283, 283, 283, 297, 283, 347,
+ 347, 51, 40, 288, 289, 283, 283, 283,
+ 297, 283, 349, 61, 350, 351, 54, 40,
+ 288, 289, 283, 283, 283, 297, 283, 61,
+ 350, 351, 54, 40, 288, 289, 283, 283,
+ 283, 297, 283, 350, 350, 54, 40, 288,
+ 289, 283, 283, 283, 297, 283, 352, 58,
+ 333, 353, 283, 40, 288, 289, 283, 283,
+ 283, 297, 283, 58, 333, 353, 283, 40,
+ 288, 289, 283, 283, 283, 297, 283, 333,
+ 354, 283, 40, 288, 289, 283, 283, 283,
+ 297, 283, 58, 283, 333, 333, 283, 40,
+ 288, 289, 283, 283, 283, 297, 283, 41,
+ 42, 283, 283, 58, 332, 283, 40, 288,
+ 289, 283, 283, 283, 297, 283, 41, 283,
+ 326, 331, 331, 45, 40, 288, 289, 283,
+ 283, 283, 329, 283, 283, 283, 283, 283,
+ 283, 283, 283, 283, 283, 283, 283, 283,
+ 283, 283, 283, 292, 283, 326, 331, 331,
+ 45, 40, 288, 289, 283, 283, 283, 329,
+ 283, 325, 326, 331, 331, 45, 40, 288,
+ 289, 283, 283, 283, 329, 283, 283, 291,
+ 283, 283, 283, 283, 283, 283, 283, 283,
+ 283, 283, 283, 283, 283, 292, 283, 325,
+ 326, 327, 331, 45, 40, 288, 289, 283,
+ 283, 69, 329, 283, 283, 291, 283, 283,
+ 283, 283, 283, 283, 283, 283, 283, 283,
+ 283, 283, 283, 292, 283, 323, 283, 355,
+ 283, 342, 342, 45, 40, 288, 289, 283,
+ 283, 283, 297, 283, 323, 283, 323, 283,
+ 283, 283, 333, 333, 283, 40, 288, 289,
+ 283, 283, 283, 297, 283, 323, 283, 323,
+ 283, 283, 283, 333, 356, 283, 40, 288,
+ 289, 283, 283, 283, 297, 283, 323, 283,
+ 323, 283, 355, 283, 333, 333, 283, 40,
+ 288, 289, 283, 283, 283, 297, 283, 323,
+ 283, 323, 42, 283, 283, 58, 324, 283,
+ 40, 288, 289, 283, 283, 283, 297, 283,
+ 323, 283, 316, 317, 322, 322, 45, 40,
+ 288, 289, 283, 283, 283, 320, 283, 283,
+ 291, 283, 283, 283, 283, 283, 283, 283,
+ 283, 283, 283, 283, 283, 283, 292, 283,
+ 316, 317, 318, 322, 45, 40, 288, 289,
+ 283, 283, 71, 320, 283, 283, 291, 283,
+ 283, 283, 283, 283, 283, 283, 283, 283,
+ 283, 283, 283, 283, 292, 283, 314, 283,
+ 357, 283, 342, 342, 45, 40, 288, 289,
+ 283, 283, 283, 297, 283, 314, 283, 314,
+ 283, 283, 283, 333, 333, 283, 40, 288,
+ 289, 283, 283, 283, 297, 283, 314, 283,
+ 314, 283, 283, 283, 333, 358, 283, 40,
+ 288, 289, 283, 283, 283, 297, 283, 314,
+ 283, 314, 283, 357, 283, 333, 333, 283,
+ 40, 288, 289, 283, 283, 283, 297, 283,
+ 314, 283, 314, 42, 283, 283, 58, 315,
+ 283, 40, 288, 289, 283, 283, 283, 297,
+ 283, 314, 283, 307, 308, 313, 313, 45,
+ 40, 288, 289, 283, 283, 283, 311, 283,
+ 283, 291, 283, 283, 283, 283, 283, 283,
+ 283, 283, 283, 283, 283, 283, 283, 292,
+ 283, 307, 308, 309, 313, 45, 40, 288,
+ 289, 283, 283, 73, 311, 283, 283, 291,
+ 283, 283, 283, 283, 283, 283, 283, 283,
+ 283, 283, 283, 283, 283, 292, 283, 305,
+ 283, 359, 283, 342, 342, 45, 40, 288,
+ 289, 283, 283, 283, 297, 283, 305, 283,
+ 305, 283, 283, 283, 333, 333, 283, 40,
+ 288, 289, 283, 283, 283, 297, 283, 305,
+ 283, 305, 283, 283, 283, 333, 360, 283,
+ 40, 288, 289, 283, 283, 283, 297, 283,
+ 305, 283, 305, 283, 359, 283, 333, 333,
+ 283, 40, 288, 289, 283, 283, 283, 297,
+ 283, 305, 283, 305, 42, 283, 283, 58,
+ 306, 283, 40, 288, 289, 283, 283, 283,
+ 297, 283, 305, 283, 298, 299, 304, 304,
+ 45, 40, 288, 289, 283, 283, 283, 302,
+ 283, 283, 291, 283, 283, 283, 283, 283,
+ 283, 283, 283, 283, 283, 283, 283, 283,
+ 292, 283, 298, 299, 300, 304, 45, 40,
+ 288, 289, 283, 283, 75, 302, 283, 283,
+ 291, 283, 283, 283, 283, 283, 283, 283,
+ 283, 283, 283, 283, 283, 283, 292, 283,
+ 295, 283, 361, 283, 342, 342, 45, 40,
+ 288, 289, 283, 283, 283, 297, 283, 295,
+ 283, 295, 283, 283, 283, 333, 333, 283,
+ 40, 288, 289, 283, 283, 283, 297, 283,
+ 295, 283, 295, 283, 283, 283, 333, 362,
+ 283, 40, 288, 289, 283, 283, 283, 297,
+ 283, 295, 283, 295, 283, 361, 283, 333,
+ 333, 283, 40, 288, 289, 283, 283, 283,
+ 297, 283, 295, 283, 76, 44, 44, 45,
+ 40, 283, 283, 283, 283, 283, 76, 283,
+ 295, 42, 283, 283, 58, 296, 283, 40,
+ 288, 289, 283, 283, 283, 297, 283, 295,
+ 283, 284, 285, 294, 287, 45, 40, 288,
+ 289, 283, 283, 283, 290, 283, 283, 291,
+ 283, 283, 283, 283, 283, 283, 283, 283,
+ 283, 283, 283, 283, 283, 292, 283, 364,
+ 191, 365, 365, 84, 79, 194, 195, 363,
+ 363, 363, 197, 363, 363, 200, 363, 363,
+ 363, 363, 363, 363, 363, 363, 363, 363,
+ 363, 363, 363, 202, 363, 191, 365, 365,
+ 84, 79, 194, 195, 363, 363, 363, 197,
+ 363, 363, 200, 363, 363, 363, 363, 363,
+ 363, 363, 363, 363, 363, 363, 363, 363,
+ 202, 363, 366, 363, 363, 363, 98, 367,
+ 363, 79, 194, 195, 363, 363, 363, 368,
+ 363, 366, 363, 369, 370, 371, 372, 84,
+ 79, 194, 195, 363, 363, 115, 373, 363,
+ 363, 200, 363, 363, 363, 363, 363, 363,
+ 363, 363, 363, 363, 363, 363, 363, 202,
+ 363, 374, 370, 375, 375, 84, 79, 194,
+ 195, 363, 363, 363, 373, 363, 363, 200,
+ 363, 363, 363, 363, 363, 363, 363, 363,
+ 363, 363, 363, 363, 363, 202, 363, 370,
+ 375, 375, 84, 79, 194, 195, 363, 363,
+ 363, 373, 363, 363, 200, 363, 363, 363,
+ 363, 363, 363, 363, 363, 363, 363, 363,
+ 363, 363, 202, 363, 376, 363, 363, 363,
+ 98, 377, 363, 79, 194, 195, 363, 363,
+ 363, 368, 363, 376, 363, 378, 379, 380,
+ 381, 84, 79, 194, 195, 363, 363, 113,
+ 382, 363, 363, 200, 363, 363, 363, 363,
+ 363, 363, 363, 363, 363, 363, 363, 363,
+ 363, 202, 363, 383, 379, 384, 384, 84,
+ 79, 194, 195, 363, 363, 363, 382, 363,
+ 363, 200, 363, 363, 363, 363, 363, 363,
+ 363, 363, 363, 363, 363, 363, 363, 202,
+ 363, 379, 384, 384, 84, 79, 194, 195,
+ 363, 363, 363, 382, 363, 363, 200, 363,
+ 363, 363, 363, 363, 363, 363, 363, 363,
+ 363, 363, 363, 363, 202, 363, 385, 363,
+ 363, 363, 98, 386, 363, 79, 194, 195,
+ 363, 363, 363, 368, 363, 385, 363, 387,
+ 388, 389, 390, 84, 79, 194, 195, 363,
+ 363, 111, 391, 363, 363, 200, 363, 363,
+ 363, 363, 363, 363, 363, 363, 363, 363,
+ 363, 363, 363, 202, 363, 392, 388, 393,
+ 393, 84, 79, 194, 195, 363, 363, 363,
+ 391, 363, 363, 200, 363, 363, 363, 363,
+ 363, 363, 363, 363, 363, 363, 363, 363,
+ 363, 202, 363, 388, 393, 393, 84, 79,
+ 194, 195, 363, 363, 363, 391, 363, 363,
+ 200, 363, 363, 363, 363, 363, 363, 363,
+ 363, 363, 363, 363, 363, 363, 202, 363,
+ 394, 363, 363, 363, 98, 395, 363, 79,
+ 194, 195, 363, 363, 363, 368, 363, 394,
+ 363, 396, 397, 398, 399, 84, 79, 194,
+ 195, 363, 363, 109, 400, 363, 363, 200,
+ 363, 363, 363, 363, 363, 363, 363, 363,
+ 363, 363, 363, 363, 363, 202, 363, 401,
+ 397, 402, 402, 84, 79, 194, 195, 363,
+ 363, 363, 400, 363, 363, 200, 363, 363,
+ 363, 363, 363, 363, 363, 363, 363, 363,
+ 363, 363, 363, 202, 363, 397, 402, 402,
+ 84, 79, 194, 195, 363, 363, 363, 400,
+ 363, 363, 200, 363, 363, 363, 363, 363,
+ 363, 363, 363, 363, 363, 363, 363, 363,
+ 202, 363, 98, 403, 363, 79, 194, 195,
+ 363, 363, 363, 368, 363, 404, 404, 363,
+ 79, 194, 195, 363, 363, 363, 368, 363,
+ 405, 363, 363, 406, 194, 195, 363, 194,
+ 195, 363, 407, 363, 194, 408, 363, 194,
+ 409, 363, 194, 363, 405, 363, 363, 363,
+ 194, 195, 363, 410, 363, 411, 412, 363,
+ 79, 194, 195, 363, 363, 82, 363, 81,
+ 363, 404, 404, 363, 79, 194, 195, 363,
+ 404, 404, 363, 79, 194, 195, 363, 410,
+ 363, 404, 404, 363, 79, 194, 195, 363,
+ 410, 363, 411, 404, 363, 79, 194, 195,
+ 363, 363, 82, 363, 98, 363, 413, 413,
+ 84, 79, 194, 195, 363, 363, 363, 368,
+ 363, 414, 107, 415, 416, 88, 79, 194,
+ 195, 363, 363, 363, 368, 363, 107, 415,
+ 416, 88, 79, 194, 195, 363, 363, 363,
+ 368, 363, 415, 415, 88, 79, 194, 195,
+ 363, 363, 363, 368, 363, 417, 104, 418,
+ 419, 91, 79, 194, 195, 363, 363, 363,
+ 368, 363, 104, 418, 419, 91, 79, 194,
+ 195, 363, 363, 363, 368, 363, 418, 418,
+ 91, 79, 194, 195, 363, 363, 363, 368,
+ 363, 420, 101, 421, 422, 94, 79, 194,
+ 195, 363, 363, 363, 368, 363, 101, 421,
+ 422, 94, 79, 194, 195, 363, 363, 363,
+ 368, 363, 421, 421, 94, 79, 194, 195,
+ 363, 363, 363, 368, 363, 423, 98, 404,
+ 424, 363, 79, 194, 195, 363, 363, 363,
+ 368, 363, 98, 404, 424, 363, 79, 194,
+ 195, 363, 363, 363, 368, 363, 404, 425,
+ 363, 79, 194, 195, 363, 363, 363, 368,
+ 363, 98, 363, 404, 404, 363, 79, 194,
+ 195, 363, 363, 363, 368, 363, 80, 81,
+ 363, 363, 98, 403, 363, 79, 194, 195,
+ 363, 363, 363, 368, 363, 80, 363, 397,
+ 402, 402, 84, 79, 194, 195, 363, 363,
+ 363, 400, 363, 363, 363, 363, 363, 363,
+ 363, 363, 363, 363, 363, 363, 363, 363,
+ 363, 363, 202, 363, 397, 402, 402, 84,
+ 79, 194, 195, 363, 363, 363, 400, 363,
+ 396, 397, 402, 402, 84, 79, 194, 195,
+ 363, 363, 363, 400, 363, 363, 200, 363,
+ 363, 363, 363, 363, 363, 363, 363, 363,
+ 363, 363, 363, 363, 202, 363, 396, 397,
+ 398, 402, 84, 79, 194, 195, 363, 363,
+ 109, 400, 363, 363, 200, 363, 363, 363,
+ 363, 363, 363, 363, 363, 363, 363, 363,
+ 363, 363, 202, 363, 394, 363, 426, 363,
+ 413, 413, 84, 79, 194, 195, 363, 363,
+ 363, 368, 363, 394, 363, 394, 363, 363,
+ 363, 404, 404, 363, 79, 194, 195, 363,
+ 363, 363, 368, 363, 394, 363, 394, 363,
+ 363, 363, 404, 427, 363, 79, 194, 195,
+ 363, 363, 363, 368, 363, 394, 363, 394,
+ 363, 426, 363, 404, 404, 363, 79, 194,
+ 195, 363, 363, 363, 368, 363, 394, 363,
+ 394, 81, 363, 363, 98, 395, 363, 79,
+ 194, 195, 363, 363, 363, 368, 363, 394,
+ 363, 387, 388, 393, 393, 84, 79, 194,
+ 195, 363, 363, 363, 391, 363, 363, 200,
+ 363, 363, 363, 363, 363, 363, 363, 363,
+ 363, 363, 363, 363, 363, 202, 363, 387,
+ 388, 389, 393, 84, 79, 194, 195, 363,
+ 363, 111, 391, 363, 363, 200, 363, 363,
+ 363, 363, 363, 363, 363, 363, 363, 363,
+ 363, 363, 363, 202, 363, 385, 363, 428,
+ 363, 413, 413, 84, 79, 194, 195, 363,
+ 363, 363, 368, 363, 385, 363, 385, 363,
+ 363, 363, 404, 404, 363, 79, 194, 195,
+ 363, 363, 363, 368, 363, 385, 363, 385,
+ 363, 363, 363, 404, 429, 363, 79, 194,
+ 195, 363, 363, 363, 368, 363, 385, 363,
+ 385, 363, 428, 363, 404, 404, 363, 79,
+ 194, 195, 363, 363, 363, 368, 363, 385,
+ 363, 385, 81, 363, 363, 98, 386, 363,
+ 79, 194, 195, 363, 363, 363, 368, 363,
+ 385, 363, 378, 379, 384, 384, 84, 79,
+ 194, 195, 363, 363, 363, 382, 363, 363,
+ 200, 363, 363, 363, 363, 363, 363, 363,
+ 363, 363, 363, 363, 363, 363, 202, 363,
+ 378, 379, 380, 384, 84, 79, 194, 195,
+ 363, 363, 113, 382, 363, 363, 200, 363,
+ 363, 363, 363, 363, 363, 363, 363, 363,
+ 363, 363, 363, 363, 202, 363, 376, 363,
+ 430, 363, 413, 413, 84, 79, 194, 195,
+ 363, 363, 363, 368, 363, 376, 363, 376,
+ 363, 363, 363, 404, 404, 363, 79, 194,
+ 195, 363, 363, 363, 368, 363, 376, 363,
+ 376, 363, 363, 363, 404, 431, 363, 79,
+ 194, 195, 363, 363, 363, 368, 363, 376,
+ 363, 376, 363, 430, 363, 404, 404, 363,
+ 79, 194, 195, 363, 363, 363, 368, 363,
+ 376, 363, 376, 81, 363, 363, 98, 377,
+ 363, 79, 194, 195, 363, 363, 363, 368,
+ 363, 376, 363, 369, 370, 375, 375, 84,
+ 79, 194, 195, 363, 363, 363, 373, 363,
+ 363, 200, 363, 363, 363, 363, 363, 363,
+ 363, 363, 363, 363, 363, 363, 363, 202,
+ 363, 369, 370, 371, 375, 84, 79, 194,
+ 195, 363, 363, 115, 373, 363, 363, 200,
+ 363, 363, 363, 363, 363, 363, 363, 363,
+ 363, 363, 363, 363, 363, 202, 363, 366,
+ 363, 432, 363, 413, 413, 84, 79, 194,
+ 195, 363, 363, 363, 368, 363, 366, 363,
+ 366, 363, 363, 363, 404, 404, 363, 79,
+ 194, 195, 363, 363, 363, 368, 363, 366,
+ 363, 366, 363, 363, 363, 404, 433, 363,
+ 79, 194, 195, 363, 363, 363, 368, 363,
+ 366, 363, 366, 363, 432, 363, 404, 404,
+ 363, 79, 194, 195, 363, 363, 363, 368,
+ 363, 366, 363, 366, 81, 363, 363, 98,
+ 367, 363, 79, 194, 195, 363, 363, 363,
+ 368, 363, 366, 363, 116, 83, 83, 84,
+ 79, 434, 434, 434, 434, 156, 116, 434,
+ 190, 191, 365, 365, 84, 79, 194, 195,
+ 363, 363, 363, 197, 363, 363, 200, 363,
+ 363, 363, 363, 363, 363, 363, 363, 363,
+ 363, 363, 363, 363, 202, 363, 116, 83,
+ 83, 84, 79, 434, 434, 434, 434, 434,
+ 116, 434, 436, 437, 438, 439, 123, 118,
+ 440, 441, 435, 435, 155, 442, 435, 435,
+ 443, 435, 435, 435, 435, 435, 435, 435,
+ 435, 435, 435, 435, 435, 435, 444, 435,
+ 445, 437, 439, 439, 123, 118, 440, 441,
+ 435, 435, 435, 442, 435, 435, 443, 435,
+ 435, 435, 435, 435, 435, 435, 435, 435,
+ 435, 435, 435, 435, 444, 435, 437, 439,
+ 439, 123, 118, 440, 441, 435, 435, 435,
+ 442, 435, 435, 443, 435, 435, 435, 435,
+ 435, 435, 435, 435, 435, 435, 435, 435,
+ 435, 444, 435, 446, 435, 435, 435, 136,
+ 447, 435, 118, 440, 441, 435, 435, 435,
+ 448, 435, 446, 435, 449, 450, 451, 452,
+ 123, 118, 440, 441, 435, 435, 153, 453,
+ 435, 435, 443, 435, 435, 435, 435, 435,
+ 435, 435, 435, 435, 435, 435, 435, 435,
+ 444, 435, 454, 450, 455, 455, 123, 118,
+ 440, 441, 435, 435, 435, 453, 435, 435,
+ 443, 435, 435, 435, 435, 435, 435, 435,
+ 435, 435, 435, 435, 435, 435, 444, 435,
+ 450, 455, 455, 123, 118, 440, 441, 435,
+ 435, 435, 453, 435, 435, 443, 435, 435,
+ 435, 435, 435, 435, 435, 435, 435, 435,
+ 435, 435, 435, 444, 435, 456, 435, 435,
+ 435, 136, 457, 435, 118, 440, 441, 435,
+ 435, 435, 448, 435, 456, 435, 458, 459,
+ 460, 461, 123, 118, 440, 441, 435, 435,
+ 151, 462, 435, 435, 443, 435, 435, 435,
+ 435, 435, 435, 435, 435, 435, 435, 435,
+ 435, 435, 444, 435, 463, 459, 464, 464,
+ 123, 118, 440, 441, 435, 435, 435, 462,
+ 435, 435, 443, 435, 435, 435, 435, 435,
+ 435, 435, 435, 435, 435, 435, 435, 435,
+ 444, 435, 459, 464, 464, 123, 118, 440,
+ 441, 435, 435, 435, 462, 435, 435, 443,
+ 435, 435, 435, 435, 435, 435, 435, 435,
+ 435, 435, 435, 435, 435, 444, 435, 465,
+ 435, 435, 435, 136, 466, 435, 118, 440,
+ 441, 435, 435, 435, 448, 435, 465, 435,
+ 467, 468, 469, 470, 123, 118, 440, 441,
+ 435, 435, 149, 471, 435, 435, 443, 435,
+ 435, 435, 435, 435, 435, 435, 435, 435,
+ 435, 435, 435, 435, 444, 435, 472, 468,
+ 473, 473, 123, 118, 440, 441, 435, 435,
+ 435, 471, 435, 435, 443, 435, 435, 435,
+ 435, 435, 435, 435, 435, 435, 435, 435,
+ 435, 435, 444, 435, 468, 473, 473, 123,
+ 118, 440, 441, 435, 435, 435, 471, 435,
+ 435, 443, 435, 435, 435, 435, 435, 435,
+ 435, 435, 435, 435, 435, 435, 435, 444,
+ 435, 474, 435, 435, 435, 136, 475, 435,
+ 118, 440, 441, 435, 435, 435, 448, 435,
+ 474, 435, 476, 477, 478, 479, 123, 118,
+ 440, 441, 435, 435, 147, 480, 435, 435,
+ 443, 435, 435, 435, 435, 435, 435, 435,
+ 435, 435, 435, 435, 435, 435, 444, 435,
+ 481, 477, 482, 482, 123, 118, 440, 441,
+ 435, 435, 435, 480, 435, 435, 443, 435,
+ 435, 435, 435, 435, 435, 435, 435, 435,
+ 435, 435, 435, 435, 444, 435, 477, 482,
+ 482, 123, 118, 440, 441, 435, 435, 435,
+ 480, 435, 435, 443, 435, 435, 435, 435,
+ 435, 435, 435, 435, 435, 435, 435, 435,
+ 435, 444, 435, 136, 483, 435, 118, 440,
+ 441, 435, 435, 435, 448, 435, 484, 484,
+ 435, 118, 440, 441, 435, 435, 435, 448,
+ 435, 485, 435, 435, 486, 440, 441, 435,
+ 440, 441, 435, 487, 435, 440, 488, 435,
+ 440, 489, 435, 440, 435, 485, 435, 435,
+ 435, 440, 441, 435, 490, 435, 491, 492,
+ 435, 118, 440, 441, 435, 435, 121, 435,
+ 120, 435, 484, 484, 435, 118, 440, 441,
+ 435, 484, 484, 435, 118, 440, 441, 435,
+ 490, 435, 484, 484, 435, 118, 440, 441,
+ 435, 490, 435, 491, 484, 435, 118, 440,
+ 441, 435, 435, 121, 435, 136, 435, 493,
+ 493, 123, 118, 440, 441, 435, 435, 435,
+ 448, 435, 494, 145, 495, 496, 126, 118,
+ 440, 441, 435, 435, 435, 448, 435, 145,
+ 495, 496, 126, 118, 440, 441, 435, 435,
+ 435, 448, 435, 495, 495, 126, 118, 440,
+ 441, 435, 435, 435, 448, 435, 497, 142,
+ 498, 499, 129, 118, 440, 441, 435, 435,
+ 435, 448, 435, 142, 498, 499, 129, 118,
+ 440, 441, 435, 435, 435, 448, 435, 498,
+ 498, 129, 118, 440, 441, 435, 435, 435,
+ 448, 435, 500, 139, 501, 502, 132, 118,
+ 440, 441, 435, 435, 435, 448, 435, 139,
+ 501, 502, 132, 118, 440, 441, 435, 435,
+ 435, 448, 435, 501, 501, 132, 118, 440,
+ 441, 435, 435, 435, 448, 435, 503, 136,
+ 484, 504, 435, 118, 440, 441, 435, 435,
+ 435, 448, 435, 136, 484, 504, 435, 118,
+ 440, 441, 435, 435, 435, 448, 435, 484,
+ 505, 435, 118, 440, 441, 435, 435, 435,
+ 448, 435, 136, 435, 484, 484, 435, 118,
+ 440, 441, 435, 435, 435, 448, 435, 119,
+ 120, 435, 435, 136, 483, 435, 118, 440,
+ 441, 435, 435, 435, 448, 435, 119, 435,
+ 477, 482, 482, 123, 118, 440, 441, 435,
+ 435, 435, 480, 435, 435, 435, 435, 435,
+ 435, 435, 435, 435, 435, 435, 435, 435,
+ 435, 435, 435, 444, 435, 477, 482, 482,
+ 123, 118, 440, 441, 435, 435, 435, 480,
+ 435, 476, 477, 482, 482, 123, 118, 440,
+ 441, 435, 435, 435, 480, 435, 435, 443,
+ 435, 435, 435, 435, 435, 435, 435, 435,
+ 435, 435, 435, 435, 435, 444, 435, 476,
+ 477, 478, 482, 123, 118, 440, 441, 435,
+ 435, 147, 480, 435, 435, 443, 435, 435,
+ 435, 435, 435, 435, 435, 435, 435, 435,
+ 435, 435, 435, 444, 435, 474, 435, 506,
+ 435, 493, 493, 123, 118, 440, 441, 435,
+ 435, 435, 448, 435, 474, 435, 474, 435,
+ 435, 435, 484, 484, 435, 118, 440, 441,
+ 435, 435, 435, 448, 435, 474, 435, 474,
+ 435, 435, 435, 484, 507, 435, 118, 440,
+ 441, 435, 435, 435, 448, 435, 474, 435,
+ 474, 435, 506, 435, 484, 484, 435, 118,
+ 440, 441, 435, 435, 435, 448, 435, 474,
+ 435, 474, 120, 435, 435, 136, 475, 435,
+ 118, 440, 441, 435, 435, 435, 448, 435,
+ 474, 435, 467, 468, 473, 473, 123, 118,
+ 440, 441, 435, 435, 435, 471, 435, 435,
+ 443, 435, 435, 435, 435, 435, 435, 435,
+ 435, 435, 435, 435, 435, 435, 444, 435,
+ 467, 468, 469, 473, 123, 118, 440, 441,
+ 435, 435, 149, 471, 435, 435, 443, 435,
+ 435, 435, 435, 435, 435, 435, 435, 435,
+ 435, 435, 435, 435, 444, 435, 465, 435,
+ 508, 435, 493, 493, 123, 118, 440, 441,
+ 435, 435, 435, 448, 435, 465, 435, 465,
+ 435, 435, 435, 484, 484, 435, 118, 440,
+ 441, 435, 435, 435, 448, 435, 465, 435,
+ 465, 435, 435, 435, 484, 509, 435, 118,
+ 440, 441, 435, 435, 435, 448, 435, 465,
+ 435, 465, 435, 508, 435, 484, 484, 435,
+ 118, 440, 441, 435, 435, 435, 448, 435,
+ 465, 435, 465, 120, 435, 435, 136, 466,
+ 435, 118, 440, 441, 435, 435, 435, 448,
+ 435, 465, 435, 458, 459, 464, 464, 123,
+ 118, 440, 441, 435, 435, 435, 462, 435,
+ 435, 443, 435, 435, 435, 435, 435, 435,
+ 435, 435, 435, 435, 435, 435, 435, 444,
+ 435, 458, 459, 460, 464, 123, 118, 440,
+ 441, 435, 435, 151, 462, 435, 435, 443,
+ 435, 435, 435, 435, 435, 435, 435, 435,
+ 435, 435, 435, 435, 435, 444, 435, 456,
+ 435, 510, 435, 493, 493, 123, 118, 440,
+ 441, 435, 435, 435, 448, 435, 456, 435,
+ 456, 435, 435, 435, 484, 484, 435, 118,
+ 440, 441, 435, 435, 435, 448, 435, 456,
+ 435, 456, 435, 435, 435, 484, 511, 435,
+ 118, 440, 441, 435, 435, 435, 448, 435,
+ 456, 435, 456, 435, 510, 435, 484, 484,
+ 435, 118, 440, 441, 435, 435, 435, 448,
+ 435, 456, 435, 456, 120, 435, 435, 136,
+ 457, 435, 118, 440, 441, 435, 435, 435,
+ 448, 435, 456, 435, 449, 450, 455, 455,
+ 123, 118, 440, 441, 435, 435, 435, 453,
+ 435, 435, 443, 435, 435, 435, 435, 435,
+ 435, 435, 435, 435, 435, 435, 435, 435,
+ 444, 435, 449, 450, 451, 455, 123, 118,
+ 440, 441, 435, 435, 153, 453, 435, 435,
+ 443, 435, 435, 435, 435, 435, 435, 435,
+ 435, 435, 435, 435, 435, 435, 444, 435,
+ 446, 435, 512, 435, 493, 493, 123, 118,
+ 440, 441, 435, 435, 435, 448, 435, 446,
+ 435, 446, 435, 435, 435, 484, 484, 435,
+ 118, 440, 441, 435, 435, 435, 448, 435,
+ 446, 435, 446, 435, 435, 435, 484, 513,
+ 435, 118, 440, 441, 435, 435, 435, 448,
+ 435, 446, 435, 446, 435, 512, 435, 484,
+ 484, 435, 118, 440, 441, 435, 435, 435,
+ 448, 435, 446, 435, 446, 120, 435, 435,
+ 136, 447, 435, 118, 440, 441, 435, 435,
+ 435, 448, 435, 446, 435, 436, 437, 439,
+ 439, 123, 118, 440, 441, 435, 435, 435,
+ 442, 435, 435, 443, 435, 435, 435, 435,
+ 435, 435, 435, 435, 435, 435, 435, 435,
+ 435, 444, 435, 188, 189, 190, 191, 514,
+ 365, 84, 79, 194, 195, 196, 196, 156,
+ 197, 363, 188, 200, 363, 363, 363, 363,
+ 363, 363, 363, 363, 363, 363, 363, 363,
+ 363, 202, 363, 204, 515, 206, 207, 6,
+ 1, 208, 209, 203, 203, 38, 210, 203,
+ 203, 211, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 212,
+ 203, 215, 189, 190, 191, 516, 517, 84,
+ 157, 518, 519, 203, 196, 156, 520, 203,
+ 215, 200, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 202,
+ 203, 116, 521, 521, 84, 157, 208, 209,
+ 203, 203, 156, 522, 203, 523, 203, 203,
+ 524, 518, 519, 203, 518, 519, 203, 256,
+ 203, 518, 525, 203, 518, 526, 203, 518,
+ 203, 523, 203, 203, 203, 518, 519, 203,
+ 527, 3, 363, 363, 404, 433, 363, 79,
+ 194, 195, 363, 363, 363, 368, 363, 527,
+ 363, 528, 370, 529, 530, 84, 157, 518,
+ 519, 203, 203, 158, 373, 203, 203, 200,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 202, 203, 531,
+ 370, 532, 532, 84, 157, 518, 519, 203,
+ 203, 203, 373, 203, 203, 200, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 202, 203, 370, 532, 532,
+ 84, 157, 518, 519, 203, 203, 203, 373,
+ 203, 203, 200, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 202, 203, 528, 370, 532, 532, 84, 157,
+ 518, 519, 203, 203, 203, 373, 203, 203,
+ 200, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 203, 203, 202, 203,
+ 528, 370, 529, 532, 84, 157, 518, 519,
+ 203, 203, 158, 373, 203, 203, 200, 203,
+ 203, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 202, 203, 215, 203,
+ 281, 116, 533, 533, 160, 157, 208, 209,
+ 203, 203, 203, 522, 203, 215, 203, 534,
+ 184, 535, 536, 162, 157, 518, 519, 203,
+ 203, 203, 537, 203, 184, 535, 536, 162,
+ 157, 518, 519, 203, 203, 203, 537, 203,
+ 535, 535, 162, 157, 518, 519, 203, 203,
+ 203, 537, 203, 538, 181, 539, 540, 165,
+ 157, 518, 519, 203, 203, 203, 537, 203,
+ 181, 539, 540, 165, 157, 518, 519, 203,
+ 203, 203, 537, 203, 539, 539, 165, 157,
+ 518, 519, 203, 203, 203, 537, 203, 541,
+ 178, 542, 543, 168, 157, 518, 519, 203,
+ 203, 203, 537, 203, 178, 542, 543, 168,
+ 157, 518, 519, 203, 203, 203, 537, 203,
+ 542, 542, 168, 157, 518, 519, 203, 203,
+ 203, 537, 203, 544, 175, 545, 546, 203,
+ 157, 518, 519, 203, 203, 203, 537, 203,
+ 175, 545, 546, 203, 157, 518, 519, 203,
+ 203, 203, 537, 203, 545, 545, 203, 157,
+ 518, 519, 203, 203, 203, 537, 203, 547,
+ 203, 548, 549, 203, 157, 518, 519, 203,
+ 203, 172, 203, 171, 203, 545, 545, 203,
+ 157, 518, 519, 203, 545, 545, 203, 157,
+ 518, 519, 203, 547, 203, 545, 545, 203,
+ 157, 518, 519, 203, 547, 203, 548, 545,
+ 203, 157, 518, 519, 203, 203, 172, 203,
+ 527, 171, 363, 363, 98, 367, 363, 79,
+ 194, 195, 363, 363, 363, 368, 363, 527,
+ 363, 551, 550, 552, 552, 550, 186, 553,
+ 554, 550, 552, 552, 550, 186, 553, 554,
+ 550, 555, 550, 550, 556, 553, 554, 550,
+ 553, 554, 550, 557, 550, 553, 558, 550,
+ 553, 559, 550, 553, 550, 555, 550, 550,
+ 550, 553, 554, 550, 0
};
static const short _indic_syllable_machine_trans_targs[] = {
- 170, 199, 201, 202, 3, 205, 4, 6,
- 208, 7, 9, 211, 10, 12, 214, 13,
- 15, 16, 191, 18, 19, 213, 21, 22,
- 210, 24, 25, 207, 216, 221, 225, 228,
- 232, 235, 239, 242, 246, 249, 170, 279,
- 281, 282, 39, 285, 40, 42, 288, 43,
- 45, 291, 46, 48, 294, 49, 51, 52,
- 271, 54, 55, 293, 57, 58, 290, 60,
- 61, 287, 296, 301, 305, 308, 312, 315,
- 319, 322, 326, 330, 170, 358, 360, 361,
- 75, 364, 170, 76, 78, 367, 79, 81,
- 370, 82, 84, 373, 85, 87, 88, 350,
- 90, 91, 372, 93, 94, 369, 96, 97,
- 366, 375, 380, 384, 387, 391, 394, 398,
- 401, 405, 170, 439, 441, 442, 110, 445,
- 111, 113, 448, 114, 116, 451, 117, 119,
- 454, 120, 122, 123, 431, 125, 126, 453,
- 128, 129, 450, 131, 132, 447, 456, 461,
- 465, 468, 472, 475, 479, 482, 486, 489,
- 409, 505, 146, 508, 148, 511, 149, 151,
- 514, 152, 154, 517, 155, 520, 522, 523,
- 159, 160, 519, 162, 163, 516, 165, 166,
- 513, 168, 169, 510, 170, 171, 251, 331,
- 333, 408, 410, 351, 353, 354, 411, 407,
- 490, 491, 378, 526, 379, 170, 172, 174,
- 35, 250, 192, 194, 195, 248, 219, 220,
- 173, 34, 175, 244, 0, 176, 178, 33,
- 243, 241, 177, 32, 179, 237, 180, 182,
- 31, 236, 234, 181, 30, 183, 230, 184,
- 186, 29, 229, 227, 185, 28, 187, 223,
- 188, 190, 27, 222, 218, 189, 26, 204,
- 193, 198, 170, 196, 197, 200, 1, 203,
- 2, 206, 5, 23, 209, 8, 20, 212,
- 11, 17, 215, 14, 217, 224, 226, 231,
- 233, 238, 240, 245, 247, 170, 252, 254,
- 71, 328, 272, 274, 275, 329, 299, 300,
- 253, 70, 255, 324, 36, 256, 258, 69,
- 323, 321, 257, 68, 259, 317, 260, 262,
- 67, 316, 314, 261, 66, 263, 310, 264,
- 266, 65, 309, 307, 265, 64, 267, 303,
- 268, 270, 63, 302, 298, 269, 62, 284,
- 273, 278, 170, 276, 277, 280, 37, 283,
- 38, 286, 41, 59, 289, 44, 56, 292,
- 47, 53, 295, 50, 297, 304, 306, 311,
- 313, 318, 320, 325, 327, 170, 332, 106,
- 334, 403, 72, 335, 337, 105, 402, 400,
- 336, 104, 338, 396, 339, 341, 103, 395,
- 393, 340, 102, 342, 389, 343, 345, 101,
- 388, 386, 344, 100, 346, 382, 347, 349,
- 99, 381, 377, 348, 98, 363, 352, 357,
- 170, 355, 356, 359, 73, 362, 74, 365,
- 77, 95, 368, 80, 92, 371, 83, 89,
- 374, 86, 376, 383, 385, 390, 392, 397,
- 399, 404, 406, 170, 170, 412, 414, 142,
- 141, 432, 434, 435, 488, 459, 460, 413,
- 415, 484, 107, 416, 418, 140, 483, 481,
- 417, 139, 419, 477, 420, 422, 138, 476,
- 474, 421, 137, 423, 470, 424, 426, 136,
- 469, 467, 425, 135, 427, 463, 428, 430,
- 134, 462, 458, 429, 133, 444, 433, 438,
- 170, 436, 437, 440, 108, 443, 109, 446,
- 112, 130, 449, 115, 127, 452, 118, 124,
- 455, 121, 457, 464, 466, 471, 473, 478,
- 480, 485, 487, 143, 492, 493, 507, 498,
- 500, 501, 525, 494, 495, 496, 144, 506,
- 497, 499, 504, 502, 503, 145, 509, 147,
- 167, 156, 512, 150, 164, 515, 153, 161,
- 518, 158, 521, 157, 524, 170, 527, 528,
- 530, 531, 529, 534, 170, 532, 533
+ 178, 200, 207, 209, 210, 4, 213, 5,
+ 7, 216, 8, 10, 219, 11, 13, 222,
+ 14, 16, 17, 199, 19, 20, 221, 22,
+ 23, 218, 25, 26, 215, 224, 229, 233,
+ 236, 240, 243, 247, 250, 254, 257, 178,
+ 280, 287, 289, 290, 41, 293, 42, 44,
+ 296, 45, 47, 299, 48, 50, 302, 51,
+ 53, 54, 279, 56, 57, 301, 59, 60,
+ 298, 62, 63, 295, 304, 309, 313, 316,
+ 320, 323, 327, 330, 334, 338, 178, 359,
+ 366, 368, 369, 78, 372, 178, 79, 81,
+ 375, 82, 84, 378, 85, 87, 381, 88,
+ 90, 91, 358, 93, 94, 380, 96, 97,
+ 377, 99, 100, 374, 383, 388, 392, 395,
+ 399, 402, 406, 409, 413, 178, 440, 447,
+ 449, 450, 114, 453, 115, 117, 456, 118,
+ 120, 459, 121, 123, 462, 124, 126, 127,
+ 439, 129, 130, 461, 132, 133, 458, 135,
+ 136, 455, 464, 469, 473, 476, 480, 483,
+ 487, 490, 494, 497, 417, 502, 513, 152,
+ 516, 154, 519, 155, 157, 522, 158, 160,
+ 525, 161, 528, 530, 531, 166, 167, 527,
+ 169, 170, 524, 172, 173, 521, 175, 176,
+ 518, 178, 536, 178, 179, 259, 339, 341,
+ 416, 418, 361, 362, 419, 415, 498, 499,
+ 386, 534, 387, 178, 180, 182, 36, 258,
+ 202, 203, 256, 227, 228, 181, 35, 183,
+ 252, 1, 184, 186, 34, 251, 249, 185,
+ 33, 187, 245, 188, 190, 32, 244, 242,
+ 189, 31, 191, 238, 192, 194, 30, 237,
+ 235, 193, 29, 195, 231, 196, 198, 28,
+ 230, 226, 197, 27, 212, 0, 201, 206,
+ 178, 204, 205, 208, 2, 211, 3, 214,
+ 6, 24, 217, 9, 21, 220, 12, 18,
+ 223, 15, 225, 232, 234, 239, 241, 246,
+ 248, 253, 255, 178, 260, 262, 73, 336,
+ 282, 283, 337, 307, 308, 261, 72, 263,
+ 332, 38, 264, 266, 71, 331, 329, 265,
+ 70, 267, 325, 268, 270, 69, 324, 322,
+ 269, 68, 271, 318, 272, 274, 67, 317,
+ 315, 273, 66, 275, 311, 276, 278, 65,
+ 310, 306, 277, 64, 292, 37, 281, 286,
+ 178, 284, 285, 288, 39, 291, 40, 294,
+ 43, 61, 297, 46, 58, 300, 49, 55,
+ 303, 52, 305, 312, 314, 319, 321, 326,
+ 328, 333, 335, 178, 340, 109, 342, 411,
+ 75, 343, 345, 108, 410, 408, 344, 107,
+ 346, 404, 347, 349, 106, 403, 401, 348,
+ 105, 350, 397, 351, 353, 104, 396, 394,
+ 352, 103, 354, 390, 355, 357, 102, 389,
+ 385, 356, 101, 371, 74, 360, 365, 178,
+ 363, 364, 367, 76, 370, 77, 373, 80,
+ 98, 376, 83, 95, 379, 86, 92, 382,
+ 89, 384, 391, 393, 398, 400, 405, 407,
+ 412, 414, 178, 178, 420, 422, 146, 145,
+ 442, 443, 496, 467, 468, 421, 423, 492,
+ 111, 424, 426, 144, 491, 489, 425, 143,
+ 427, 485, 428, 430, 142, 484, 482, 429,
+ 141, 431, 478, 432, 434, 140, 477, 475,
+ 433, 139, 435, 471, 436, 438, 138, 470,
+ 466, 437, 137, 452, 110, 441, 446, 178,
+ 444, 445, 448, 112, 451, 113, 454, 116,
+ 134, 457, 119, 131, 460, 122, 128, 463,
+ 125, 465, 472, 474, 479, 481, 486, 488,
+ 493, 495, 147, 500, 501, 515, 504, 505,
+ 533, 148, 509, 503, 508, 506, 507, 510,
+ 511, 150, 514, 512, 149, 151, 517, 153,
+ 174, 163, 520, 156, 171, 523, 159, 168,
+ 526, 162, 165, 529, 164, 532, 178, 535,
+ 177, 538, 539, 537, 542, 178, 540, 541
};
static const char _indic_syllable_machine_trans_actions[] = {
- 1, 2, 0, 0, 0, 2, 0, 0,
+ 1, 0, 2, 2, 2, 0, 2, 0,
+ 0, 2, 0, 0, 2, 0, 0, 2,
+ 0, 0, 0, 2, 0, 0, 2, 0,
+ 0, 2, 0, 0, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 3,
+ 0, 2, 2, 2, 0, 2, 0, 0,
2, 0, 0, 2, 0, 0, 2, 0,
0, 0, 2, 0, 0, 2, 0, 0,
2, 0, 0, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 3, 2,
- 0, 0, 0, 2, 0, 0, 2, 0,
+ 2, 2, 2, 2, 2, 2, 4, 0,
+ 2, 2, 2, 0, 2, 5, 0, 0,
+ 2, 0, 0, 2, 0, 0, 2, 0,
+ 0, 0, 2, 0, 0, 2, 0, 0,
+ 2, 0, 0, 2, 2, 6, 2, 6,
+ 2, 6, 2, 6, 2, 7, 0, 2,
+ 2, 2, 0, 2, 0, 0, 2, 0,
0, 2, 0, 0, 2, 0, 0, 0,
2, 0, 0, 2, 0, 0, 2, 0,
0, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 4, 2, 0, 0,
- 0, 2, 5, 0, 0, 2, 0, 0,
- 2, 0, 0, 2, 0, 0, 0, 2,
+ 2, 2, 2, 2, 6, 0, 8, 0,
+ 2, 0, 2, 0, 0, 2, 0, 0,
+ 2, 0, 2, 2, 2, 0, 0, 2,
0, 0, 2, 0, 0, 2, 0, 0,
- 2, 2, 6, 2, 6, 2, 6, 2,
- 6, 2, 7, 2, 0, 0, 0, 2,
- 0, 0, 2, 0, 0, 2, 0, 0,
- 2, 0, 0, 0, 2, 0, 0, 2,
- 0, 0, 2, 0, 0, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2,
- 6, 8, 0, 2, 0, 2, 0, 0,
- 2, 0, 0, 2, 0, 2, 0, 0,
- 0, 0, 2, 0, 0, 2, 0, 0,
- 2, 0, 0, 2, 11, 2, 2, 6,
- 2, 12, 12, 0, 0, 0, 2, 2,
- 6, 2, 6, 0, 6, 13, 2, 2,
- 0, 2, 0, 0, 0, 2, 2, 2,
- 2, 0, 2, 2, 0, 2, 2, 0,
- 2, 2, 2, 0, 2, 2, 2, 2,
- 0, 2, 2, 2, 0, 2, 2, 2,
- 2, 0, 2, 2, 2, 0, 2, 2,
- 2, 2, 0, 2, 2, 2, 0, 2,
- 0, 0, 14, 0, 0, 0, 0, 2,
- 0, 2, 0, 0, 2, 0, 0, 2,
- 0, 0, 2, 0, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 15, 2, 2,
- 0, 2, 0, 0, 0, 2, 2, 2,
- 2, 0, 2, 2, 0, 2, 2, 0,
- 2, 2, 2, 0, 2, 2, 2, 2,
- 0, 2, 2, 2, 0, 2, 2, 2,
- 2, 0, 2, 2, 2, 0, 2, 2,
- 2, 2, 0, 2, 2, 2, 0, 2,
- 0, 0, 16, 0, 0, 0, 0, 2,
- 0, 2, 0, 0, 2, 0, 0, 2,
- 0, 0, 2, 0, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 17, 6, 0,
- 6, 6, 0, 6, 2, 0, 6, 2,
- 6, 0, 6, 6, 6, 2, 0, 6,
- 2, 6, 0, 6, 6, 6, 2, 0,
- 6, 2, 6, 0, 6, 6, 6, 2,
- 0, 6, 2, 6, 0, 6, 0, 0,
- 18, 0, 0, 0, 0, 2, 0, 2,
+ 2, 9, 0, 12, 2, 2, 6, 2,
+ 13, 13, 0, 0, 2, 2, 6, 2,
+ 6, 2, 6, 14, 2, 2, 0, 2,
+ 0, 0, 2, 2, 2, 2, 0, 2,
+ 2, 0, 2, 2, 0, 2, 2, 2,
+ 0, 2, 2, 2, 2, 0, 2, 2,
+ 2, 0, 2, 2, 2, 2, 0, 2,
+ 2, 2, 0, 2, 2, 2, 2, 0,
+ 2, 2, 2, 0, 2, 0, 0, 0,
+ 15, 0, 0, 2, 0, 2, 0, 2,
0, 0, 2, 0, 0, 2, 0, 0,
2, 0, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 19, 20, 2, 2, 0,
- 0, 0, 0, 0, 2, 2, 2, 2,
- 2, 2, 0, 2, 2, 0, 2, 2,
+ 2, 2, 2, 16, 2, 2, 0, 2,
+ 0, 0, 2, 2, 2, 2, 0, 2,
+ 2, 0, 2, 2, 0, 2, 2, 2,
+ 0, 2, 2, 2, 2, 0, 2, 2,
2, 0, 2, 2, 2, 2, 0, 2,
2, 2, 0, 2, 2, 2, 2, 0,
- 2, 2, 2, 0, 2, 2, 2, 2,
- 0, 2, 2, 2, 0, 2, 0, 0,
- 21, 0, 0, 0, 0, 2, 0, 2,
+ 2, 2, 2, 0, 2, 0, 0, 0,
+ 17, 0, 0, 2, 0, 2, 0, 2,
0, 0, 2, 0, 0, 2, 0, 0,
2, 0, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 0, 0, 8, 2, 0,
- 0, 0, 2, 2, 8, 8, 0, 8,
- 8, 0, 0, 0, 0, 0, 2, 0,
+ 2, 2, 2, 18, 6, 0, 6, 6,
+ 0, 6, 2, 0, 6, 2, 6, 0,
+ 6, 6, 6, 2, 0, 6, 2, 6,
+ 0, 6, 6, 6, 2, 0, 6, 2,
+ 6, 0, 6, 6, 6, 2, 0, 6,
+ 2, 6, 0, 6, 0, 0, 0, 19,
+ 0, 0, 2, 0, 2, 0, 2, 0,
+ 0, 2, 0, 0, 2, 0, 0, 2,
+ 0, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 20, 21, 2, 2, 0, 0,
+ 0, 0, 2, 2, 2, 2, 2, 2,
+ 0, 2, 2, 0, 2, 2, 2, 0,
+ 2, 2, 2, 2, 0, 2, 2, 2,
+ 0, 2, 2, 2, 2, 0, 2, 2,
+ 2, 0, 2, 2, 2, 2, 0, 2,
+ 2, 2, 0, 2, 0, 0, 0, 22,
+ 0, 0, 2, 0, 2, 0, 2, 0,
+ 0, 2, 0, 0, 2, 0, 0, 2,
+ 0, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 0, 0, 8, 2, 0, 0,
+ 2, 0, 2, 0, 0, 0, 0, 8,
+ 8, 0, 8, 8, 0, 0, 2, 0,
0, 0, 2, 0, 0, 2, 0, 0,
- 2, 0, 0, 0, 2, 22, 0, 0,
- 0, 0, 0, 0, 23, 0, 0
+ 2, 0, 0, 2, 0, 2, 23, 2,
+ 0, 0, 0, 0, 0, 24, 0, 0
};
static const char _indic_syllable_machine_to_state_actions[] = {
@@ -1331,7 +1354,8 @@ static const char _indic_syllable_machine_to_state_actions[] = {
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 9, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 10, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
@@ -1401,7 +1425,8 @@ static const char _indic_syllable_machine_from_state_actions[] = {
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 10, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 11, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
@@ -1454,83 +1479,84 @@ static const short _indic_syllable_machine_eof_trans[] = {
1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 39, 39, 39, 39,
- 39, 39, 39, 39, 39, 39, 39, 39,
- 39, 39, 39, 39, 39, 39, 39, 39,
- 39, 39, 39, 39, 39, 39, 39, 39,
- 39, 39, 39, 39, 39, 39, 39, 39,
- 77, 77, 77, 83, 83, 77, 77, 77,
- 77, 77, 77, 77, 77, 77, 77, 77,
- 77, 77, 77, 77, 77, 77, 77, 77,
- 77, 77, 77, 77, 77, 77, 77, 77,
- 83, 77, 77, 115, 115, 115, 115, 115,
- 115, 115, 115, 115, 115, 115, 115, 115,
- 115, 115, 115, 115, 115, 115, 115, 115,
- 115, 115, 115, 115, 115, 115, 115, 115,
- 115, 115, 115, 115, 115, 115, 115, 77,
+ 1, 1, 1, 1, 1, 40, 40, 40,
+ 40, 40, 40, 40, 40, 40, 40, 40,
+ 40, 40, 40, 40, 40, 40, 40, 40,
+ 40, 40, 40, 40, 40, 40, 40, 40,
+ 40, 40, 40, 40, 40, 40, 40, 40,
+ 40, 40, 79, 79, 79, 79, 86, 86,
+ 79, 79, 79, 79, 79, 79, 79, 79,
+ 79, 79, 79, 79, 79, 79, 79, 79,
+ 79, 79, 79, 79, 79, 79, 79, 79,
+ 79, 79, 79, 79, 79, 79, 118, 118,
+ 118, 118, 118, 118, 118, 118, 118, 118,
+ 118, 118, 118, 118, 118, 118, 118, 118,
+ 118, 118, 118, 118, 118, 118, 118, 118,
+ 118, 118, 118, 118, 118, 118, 118, 118,
+ 118, 118, 118, 79, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 0, 198, 198, 198, 198, 198,
- 198, 198, 198, 198, 198, 198, 198, 198,
- 198, 198, 198, 198, 198, 198, 198, 198,
- 198, 198, 198, 198, 198, 198, 198, 198,
- 198, 198, 198, 198, 198, 198, 198, 198,
- 198, 198, 198, 198, 198, 198, 198, 198,
- 198, 198, 198, 198, 198, 198, 198, 198,
- 198, 198, 198, 198, 198, 198, 198, 198,
- 198, 198, 198, 198, 198, 198, 198, 198,
- 198, 198, 198, 198, 198, 198, 198, 198,
- 198, 198, 198, 278, 278, 278, 278, 278,
- 278, 278, 278, 278, 278, 278, 278, 278,
- 278, 278, 278, 278, 278, 278, 278, 278,
- 278, 278, 278, 278, 278, 278, 278, 278,
- 278, 278, 278, 278, 278, 278, 278, 278,
- 278, 278, 278, 278, 278, 278, 278, 278,
- 278, 278, 278, 278, 278, 278, 278, 278,
- 278, 278, 278, 278, 278, 278, 278, 278,
- 278, 278, 278, 278, 278, 278, 278, 278,
- 278, 278, 278, 278, 278, 278, 278, 278,
- 278, 278, 278, 358, 358, 358, 358, 358,
- 358, 358, 358, 358, 358, 358, 358, 358,
- 358, 358, 358, 358, 358, 358, 358, 358,
- 358, 358, 358, 358, 358, 358, 358, 358,
- 358, 358, 358, 358, 358, 358, 358, 358,
- 358, 358, 358, 358, 358, 358, 358, 358,
- 358, 358, 358, 358, 358, 358, 358, 358,
- 358, 358, 358, 358, 358, 358, 358, 358,
- 358, 358, 358, 358, 358, 358, 358, 358,
- 358, 358, 358, 358, 358, 358, 358, 358,
- 428, 358, 428, 429, 429, 429, 429, 429,
- 429, 429, 429, 429, 429, 429, 429, 429,
- 429, 429, 429, 429, 429, 429, 429, 429,
- 429, 429, 429, 429, 429, 429, 429, 429,
- 429, 429, 429, 429, 429, 429, 429, 429,
- 429, 429, 429, 429, 429, 429, 429, 429,
- 429, 429, 429, 429, 429, 429, 429, 429,
- 429, 429, 429, 429, 429, 429, 429, 429,
- 429, 429, 429, 429, 429, 429, 429, 429,
- 429, 429, 429, 429, 429, 429, 429, 429,
- 429, 429, 358, 198, 198, 198, 358, 198,
- 198, 198, 198, 198, 198, 198, 198, 198,
- 198, 198, 198, 198, 198, 198, 198, 198,
- 198, 198, 198, 198, 198, 198, 198, 198,
- 198, 198, 198, 198, 198, 358, 542, 542,
- 542, 542, 542, 542, 542, 542, 542
+ 1, 186, 0, 204, 204, 204, 204, 204,
+ 204, 204, 204, 204, 204, 204, 204, 204,
+ 204, 204, 204, 204, 204, 204, 204, 204,
+ 204, 204, 204, 204, 204, 204, 204, 204,
+ 204, 204, 204, 204, 204, 204, 204, 204,
+ 204, 204, 204, 204, 204, 204, 204, 204,
+ 204, 204, 204, 204, 204, 204, 204, 204,
+ 204, 204, 204, 204, 204, 204, 204, 204,
+ 204, 204, 204, 204, 204, 204, 204, 204,
+ 204, 204, 204, 204, 204, 204, 204, 204,
+ 204, 204, 204, 284, 284, 284, 284, 284,
+ 284, 284, 284, 284, 284, 284, 284, 284,
+ 284, 284, 284, 284, 284, 284, 284, 284,
+ 284, 284, 284, 284, 284, 284, 284, 284,
+ 284, 284, 284, 284, 284, 284, 284, 284,
+ 284, 284, 284, 284, 284, 284, 284, 284,
+ 284, 284, 284, 284, 284, 284, 284, 284,
+ 284, 284, 284, 284, 284, 284, 284, 284,
+ 284, 284, 284, 284, 284, 284, 284, 284,
+ 284, 284, 284, 284, 284, 284, 284, 284,
+ 284, 284, 284, 364, 364, 364, 364, 364,
+ 364, 364, 364, 364, 364, 364, 364, 364,
+ 364, 364, 364, 364, 364, 364, 364, 364,
+ 364, 364, 364, 364, 364, 364, 364, 364,
+ 364, 364, 364, 364, 364, 364, 364, 364,
+ 364, 364, 364, 364, 364, 364, 364, 364,
+ 364, 364, 364, 364, 364, 364, 364, 364,
+ 364, 364, 364, 364, 364, 364, 364, 364,
+ 364, 364, 364, 364, 364, 364, 364, 364,
+ 364, 364, 364, 364, 364, 364, 364, 364,
+ 435, 364, 435, 436, 436, 436, 436, 436,
+ 436, 436, 436, 436, 436, 436, 436, 436,
+ 436, 436, 436, 436, 436, 436, 436, 436,
+ 436, 436, 436, 436, 436, 436, 436, 436,
+ 436, 436, 436, 436, 436, 436, 436, 436,
+ 436, 436, 436, 436, 436, 436, 436, 436,
+ 436, 436, 436, 436, 436, 436, 436, 436,
+ 436, 436, 436, 436, 436, 436, 436, 436,
+ 436, 436, 436, 436, 436, 436, 436, 436,
+ 436, 436, 436, 436, 436, 436, 436, 436,
+ 436, 436, 364, 204, 204, 204, 204, 204,
+ 204, 204, 204, 204, 204, 364, 204, 204,
+ 204, 204, 204, 204, 204, 204, 204, 204,
+ 204, 204, 204, 204, 204, 204, 204, 204,
+ 204, 204, 204, 204, 204, 364, 551, 551,
+ 551, 551, 551, 551, 551, 551, 551
};
-static const int indic_syllable_machine_start = 170;
-static const int indic_syllable_machine_first_final = 170;
+static const int indic_syllable_machine_start = 178;
+static const int indic_syllable_machine_first_final = 178;
static const int indic_syllable_machine_error = -1;
-static const int indic_syllable_machine_en_main = 170;
+static const int indic_syllable_machine_en_main = 178;
-#line 36 "../../src/hb-ot-shape-complex-indic-machine.rl"
+#line 36 "hb-ot-shape-complex-indic-machine.rl"
-#line 97 "../../src/hb-ot-shape-complex-indic-machine.rl"
+#line 97 "hb-ot-shape-complex-indic-machine.rl"
#define found_syllable(syllable_type) \
@@ -1550,7 +1576,7 @@ find_syllables (hb_buffer_t *buffer)
int cs;
hb_glyph_info_t *info = buffer->info;
-#line 1554 "../../src/hb-ot-shape-complex-indic-machine.hh.tmp"
+#line 1580 "hb-ot-shape-complex-indic-machine.hh"
{
cs = indic_syllable_machine_start;
ts = 0;
@@ -1558,7 +1584,7 @@ find_syllables (hb_buffer_t *buffer)
act = 0;
}
-#line 118 "../../src/hb-ot-shape-complex-indic-machine.rl"
+#line 118 "hb-ot-shape-complex-indic-machine.rl"
p = 0;
@@ -1567,7 +1593,7 @@ find_syllables (hb_buffer_t *buffer)
unsigned int last = 0;
unsigned int syllable_serial = 1;
-#line 1571 "../../src/hb-ot-shape-complex-indic-machine.hh.tmp"
+#line 1597 "hb-ot-shape-complex-indic-machine.hh"
{
int _slen;
int _trans;
@@ -1577,11 +1603,11 @@ find_syllables (hb_buffer_t *buffer)
goto _test_eof;
_resume:
switch ( _indic_syllable_machine_from_state_actions[cs] ) {
- case 10:
+ case 11:
#line 1 "NONE"
{ts = p;}
break;
-#line 1585 "../../src/hb-ot-shape-complex-indic-machine.hh.tmp"
+#line 1611 "hb-ot-shape-complex-indic-machine.hh"
}
_keys = _indic_syllable_machine_trans_keys + (cs<<1);
@@ -1603,68 +1629,72 @@ _eof_trans:
#line 1 "NONE"
{te = p+1;}
break;
- case 14:
-#line 88 "../../src/hb-ot-shape-complex-indic-machine.rl"
+ case 15:
+#line 88 "hb-ot-shape-complex-indic-machine.rl"
{te = p+1;{ found_syllable (consonant_syllable); }}
break;
- case 16:
-#line 89 "../../src/hb-ot-shape-complex-indic-machine.rl"
+ case 17:
+#line 89 "hb-ot-shape-complex-indic-machine.rl"
{te = p+1;{ found_syllable (vowel_syllable); }}
break;
- case 21:
-#line 90 "../../src/hb-ot-shape-complex-indic-machine.rl"
+ case 22:
+#line 90 "hb-ot-shape-complex-indic-machine.rl"
{te = p+1;{ found_syllable (standalone_cluster); }}
break;
- case 23:
-#line 91 "../../src/hb-ot-shape-complex-indic-machine.rl"
+ case 24:
+#line 91 "hb-ot-shape-complex-indic-machine.rl"
{te = p+1;{ found_syllable (symbol_cluster); }}
break;
- case 18:
-#line 92 "../../src/hb-ot-shape-complex-indic-machine.rl"
+ case 19:
+#line 92 "hb-ot-shape-complex-indic-machine.rl"
{te = p+1;{ found_syllable (broken_cluster); }}
break;
- case 11:
-#line 93 "../../src/hb-ot-shape-complex-indic-machine.rl"
+ case 12:
+#line 93 "hb-ot-shape-complex-indic-machine.rl"
{te = p+1;{ found_syllable (non_indic_cluster); }}
break;
- case 13:
-#line 88 "../../src/hb-ot-shape-complex-indic-machine.rl"
+ case 14:
+#line 88 "hb-ot-shape-complex-indic-machine.rl"
{te = p;p--;{ found_syllable (consonant_syllable); }}
break;
- case 15:
-#line 89 "../../src/hb-ot-shape-complex-indic-machine.rl"
+ case 16:
+#line 89 "hb-ot-shape-complex-indic-machine.rl"
{te = p;p--;{ found_syllable (vowel_syllable); }}
break;
- case 20:
-#line 90 "../../src/hb-ot-shape-complex-indic-machine.rl"
+ case 21:
+#line 90 "hb-ot-shape-complex-indic-machine.rl"
{te = p;p--;{ found_syllable (standalone_cluster); }}
break;
- case 22:
-#line 91 "../../src/hb-ot-shape-complex-indic-machine.rl"
+ case 23:
+#line 91 "hb-ot-shape-complex-indic-machine.rl"
{te = p;p--;{ found_syllable (symbol_cluster); }}
break;
- case 17:
-#line 92 "../../src/hb-ot-shape-complex-indic-machine.rl"
+ case 18:
+#line 92 "hb-ot-shape-complex-indic-machine.rl"
{te = p;p--;{ found_syllable (broken_cluster); }}
break;
- case 19:
-#line 93 "../../src/hb-ot-shape-complex-indic-machine.rl"
+ case 20:
+#line 93 "hb-ot-shape-complex-indic-machine.rl"
{te = p;p--;{ found_syllable (non_indic_cluster); }}
break;
case 1:
-#line 88 "../../src/hb-ot-shape-complex-indic-machine.rl"
+#line 88 "hb-ot-shape-complex-indic-machine.rl"
{{p = ((te))-1;}{ found_syllable (consonant_syllable); }}
break;
case 3:
-#line 89 "../../src/hb-ot-shape-complex-indic-machine.rl"
+#line 89 "hb-ot-shape-complex-indic-machine.rl"
{{p = ((te))-1;}{ found_syllable (vowel_syllable); }}
break;
case 7:
-#line 90 "../../src/hb-ot-shape-complex-indic-machine.rl"
+#line 90 "hb-ot-shape-complex-indic-machine.rl"
{{p = ((te))-1;}{ found_syllable (standalone_cluster); }}
break;
+ case 9:
+#line 91 "hb-ot-shape-complex-indic-machine.rl"
+ {{p = ((te))-1;}{ found_syllable (symbol_cluster); }}
+ break;
case 4:
-#line 92 "../../src/hb-ot-shape-complex-indic-machine.rl"
+#line 92 "hb-ot-shape-complex-indic-machine.rl"
{{p = ((te))-1;}{ found_syllable (broken_cluster); }}
break;
case 5:
@@ -1685,31 +1715,31 @@ _eof_trans:
case 8:
#line 1 "NONE"
{te = p+1;}
-#line 88 "../../src/hb-ot-shape-complex-indic-machine.rl"
+#line 88 "hb-ot-shape-complex-indic-machine.rl"
{act = 1;}
break;
case 6:
#line 1 "NONE"
{te = p+1;}
-#line 92 "../../src/hb-ot-shape-complex-indic-machine.rl"
+#line 92 "hb-ot-shape-complex-indic-machine.rl"
{act = 5;}
break;
- case 12:
+ case 13:
#line 1 "NONE"
{te = p+1;}
-#line 93 "../../src/hb-ot-shape-complex-indic-machine.rl"
+#line 93 "hb-ot-shape-complex-indic-machine.rl"
{act = 6;}
break;
-#line 1704 "../../src/hb-ot-shape-complex-indic-machine.hh.tmp"
+#line 1734 "hb-ot-shape-complex-indic-machine.hh"
}
_again:
switch ( _indic_syllable_machine_to_state_actions[cs] ) {
- case 9:
+ case 10:
#line 1 "NONE"
{ts = 0;}
break;
-#line 1713 "../../src/hb-ot-shape-complex-indic-machine.hh.tmp"
+#line 1743 "hb-ot-shape-complex-indic-machine.hh"
}
if ( ++p != pe )
@@ -1725,7 +1755,7 @@ _again:
}
-#line 127 "../../src/hb-ot-shape-complex-indic-machine.rl"
+#line 127 "hb-ot-shape-complex-indic-machine.rl"
}
diff --git a/src/hb-ot-shape-complex-indic-machine.rl b/src/hb-ot-shape-complex-indic-machine.rl
index f6768a5..694b235 100644
--- a/src/hb-ot-shape-complex-indic-machine.rl
+++ b/src/hb-ot-shape-complex-indic-machine.rl
@@ -69,7 +69,7 @@ cn = c.ZWJ?.n?;
forced_rakar = ZWJ H ZWJ Ra;
symbol = Symbol.N?;
matra_group = z{0,3}.M.N?.(H | forced_rakar)?;
-syllable_tail = (SM.SM?.ZWNJ?)? A{0,3}? VD{0,2};
+syllable_tail = (z?.SM.SM?.ZWNJ?)? A{0,3}? VD{0,2};
place_holder = PLACEHOLDER | DOTTEDCIRCLE;
halant_group = (z?.h.(ZWJ.N?)?);
final_halant_group = halant_group | h.ZWNJ;
diff --git a/src/hb-ot-shape-complex-indic-table.cc b/src/hb-ot-shape-complex-indic-table.cc
index f58380e..2e159a1 100644
--- a/src/hb-ot-shape-complex-indic-table.cc
+++ b/src/hb-ot-shape-complex-indic-table.cc
@@ -861,41 +861,41 @@ hb_indic_get_categories (hb_codepoint_t u)
switch (u >> 12)
{
case 0x0u:
- if (hb_in_range (u, 0x0028u, 0x0040u)) return indic_table[u - 0x0028u + indic_offset_0x0028u];
- if (hb_in_range (u, 0x00D0u, 0x00D8u)) return indic_table[u - 0x00D0u + indic_offset_0x00d0u];
- if (hb_in_range (u, 0x0900u, 0x0DF8u)) return indic_table[u - 0x0900u + indic_offset_0x0900u];
+ if (hb_in_range (u, 0x0028u, 0x003Fu)) return indic_table[u - 0x0028u + indic_offset_0x0028u];
+ 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;
case 0x1u:
- if (hb_in_range (u, 0x1000u, 0x10A0u)) return indic_table[u - 0x1000u + indic_offset_0x1000u];
- if (hb_in_range (u, 0x1700u, 0x17F0u)) return indic_table[u - 0x1700u + indic_offset_0x1700u];
- if (hb_in_range (u, 0x1900u, 0x1AA0u)) return indic_table[u - 0x1900u + indic_offset_0x1900u];
- if (hb_in_range (u, 0x1B00u, 0x1C50u)) return indic_table[u - 0x1B00u + indic_offset_0x1b00u];
- if (hb_in_range (u, 0x1CD0u, 0x1CF8u)) return indic_table[u - 0x1CD0u + indic_offset_0x1cd0u];
+ if (hb_in_range (u, 0x1000u, 0x109Fu)) return indic_table[u - 0x1000u + indic_offset_0x1000u];
+ 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, 0x1CF7u)) return indic_table[u - 0x1CD0u + indic_offset_0x1cd0u];
break;
case 0x2u:
- if (hb_in_range (u, 0x2008u, 0x2018u)) return indic_table[u - 0x2008u + indic_offset_0x2008u];
+ if (hb_in_range (u, 0x2008u, 0x2017u)) return indic_table[u - 0x2008u + indic_offset_0x2008u];
if (unlikely (u == 0x25CCu)) return _(CP,x);
break;
case 0xAu:
- if (hb_in_range (u, 0xA800u, 0xAAF8u)) return indic_table[u - 0xA800u + indic_offset_0xa800u];
- if (hb_in_range (u, 0xABC0u, 0xAC00u)) return indic_table[u - 0xABC0u + indic_offset_0xabc0u];
+ if (hb_in_range (u, 0xA800u, 0xAAF7u)) return indic_table[u - 0xA800u + indic_offset_0xa800u];
+ if (hb_in_range (u, 0xABC0u, 0xABFFu)) return indic_table[u - 0xABC0u + indic_offset_0xabc0u];
break;
case 0x10u:
- if (hb_in_range (u, 0x10A00u, 0x10A48u)) return indic_table[u - 0x10A00u + indic_offset_0x10a00u];
+ if (hb_in_range (u, 0x10A00u, 0x10A47u)) return indic_table[u - 0x10A00u + indic_offset_0x10a00u];
break;
case 0x11u:
- if (hb_in_range (u, 0x11000u, 0x110C0u)) return indic_table[u - 0x11000u + indic_offset_0x11000u];
- if (hb_in_range (u, 0x11100u, 0x11238u)) return indic_table[u - 0x11100u + indic_offset_0x11100u];
- if (hb_in_range (u, 0x112B0u, 0x11378u)) return indic_table[u - 0x112B0u + indic_offset_0x112b0u];
- if (hb_in_range (u, 0x11480u, 0x114E0u)) return indic_table[u - 0x11480u + indic_offset_0x11480u];
- if (hb_in_range (u, 0x11580u, 0x115C8u)) return indic_table[u - 0x11580u + indic_offset_0x11580u];
- if (hb_in_range (u, 0x11600u, 0x116D0u)) return indic_table[u - 0x11600u + indic_offset_0x11600u];
+ 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, 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, 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:
diff --git a/src/hb-ot-shape-complex-myanmar-machine.hh b/src/hb-ot-shape-complex-myanmar-machine.hh
index bb80d7a..29fdf9a 100644
--- a/src/hb-ot-shape-complex-myanmar-machine.hh
+++ b/src/hb-ot-shape-complex-myanmar-machine.hh
@@ -1,5 +1,5 @@
-#line 1 "../../src/hb-ot-shape-complex-myanmar-machine.rl"
+#line 1 "hb-ot-shape-complex-myanmar-machine.rl"
/*
* Copyright © 2011,2012 Google, Inc.
*
@@ -32,7 +32,7 @@
#include "hb-private.hh"
-#line 36 "hb-ot-shape-complex-myanmar-machine.hh.tmp"
+#line 36 "hb-ot-shape-complex-myanmar-machine.hh"
static const unsigned char _myanmar_syllable_machine_trans_keys[] = {
1u, 31u, 3u, 30u, 5u, 29u, 5u, 8u, 5u, 29u, 3u, 25u, 5u, 25u, 5u, 25u,
3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, 1u, 16u, 3u, 29u, 3u, 29u, 3u, 29u,
@@ -261,11 +261,11 @@ static const int myanmar_syllable_machine_error = -1;
static const int myanmar_syllable_machine_en_main = 0;
-#line 36 "../../src/hb-ot-shape-complex-myanmar-machine.rl"
+#line 36 "hb-ot-shape-complex-myanmar-machine.rl"
-#line 93 "../../src/hb-ot-shape-complex-myanmar-machine.rl"
+#line 93 "hb-ot-shape-complex-myanmar-machine.rl"
#define found_syllable(syllable_type) \
@@ -285,7 +285,7 @@ find_syllables (hb_buffer_t *buffer)
int cs;
hb_glyph_info_t *info = buffer->info;
-#line 289 "hb-ot-shape-complex-myanmar-machine.hh.tmp"
+#line 289 "hb-ot-shape-complex-myanmar-machine.hh"
{
cs = myanmar_syllable_machine_start;
ts = 0;
@@ -293,7 +293,7 @@ find_syllables (hb_buffer_t *buffer)
act = 0;
}
-#line 114 "../../src/hb-ot-shape-complex-myanmar-machine.rl"
+#line 114 "hb-ot-shape-complex-myanmar-machine.rl"
p = 0;
@@ -302,7 +302,7 @@ find_syllables (hb_buffer_t *buffer)
unsigned int last = 0;
unsigned int syllable_serial = 1;
-#line 306 "hb-ot-shape-complex-myanmar-machine.hh.tmp"
+#line 306 "hb-ot-shape-complex-myanmar-machine.hh"
{
int _slen;
int _trans;
@@ -316,7 +316,7 @@ _resume:
#line 1 "NONE"
{ts = p;}
break;
-#line 320 "hb-ot-shape-complex-myanmar-machine.hh.tmp"
+#line 320 "hb-ot-shape-complex-myanmar-machine.hh"
}
_keys = _myanmar_syllable_machine_trans_keys + (cs<<1);
@@ -335,38 +335,38 @@ _eof_trans:
switch ( _myanmar_syllable_machine_trans_actions[_trans] ) {
case 7:
-#line 85 "../../src/hb-ot-shape-complex-myanmar-machine.rl"
+#line 85 "hb-ot-shape-complex-myanmar-machine.rl"
{te = p+1;{ found_syllable (consonant_syllable); }}
break;
case 5:
-#line 86 "../../src/hb-ot-shape-complex-myanmar-machine.rl"
+#line 86 "hb-ot-shape-complex-myanmar-machine.rl"
{te = p+1;{ found_syllable (non_myanmar_cluster); }}
break;
case 10:
-#line 87 "../../src/hb-ot-shape-complex-myanmar-machine.rl"
+#line 87 "hb-ot-shape-complex-myanmar-machine.rl"
{te = p+1;{ found_syllable (punctuation_cluster); }}
break;
case 4:
-#line 88 "../../src/hb-ot-shape-complex-myanmar-machine.rl"
+#line 88 "hb-ot-shape-complex-myanmar-machine.rl"
{te = p+1;{ found_syllable (broken_cluster); }}
break;
case 3:
-#line 89 "../../src/hb-ot-shape-complex-myanmar-machine.rl"
+#line 89 "hb-ot-shape-complex-myanmar-machine.rl"
{te = p+1;{ found_syllable (non_myanmar_cluster); }}
break;
case 6:
-#line 85 "../../src/hb-ot-shape-complex-myanmar-machine.rl"
+#line 85 "hb-ot-shape-complex-myanmar-machine.rl"
{te = p;p--;{ found_syllable (consonant_syllable); }}
break;
case 8:
-#line 88 "../../src/hb-ot-shape-complex-myanmar-machine.rl"
+#line 88 "hb-ot-shape-complex-myanmar-machine.rl"
{te = p;p--;{ found_syllable (broken_cluster); }}
break;
case 9:
-#line 89 "../../src/hb-ot-shape-complex-myanmar-machine.rl"
+#line 89 "hb-ot-shape-complex-myanmar-machine.rl"
{te = p;p--;{ found_syllable (non_myanmar_cluster); }}
break;
-#line 370 "hb-ot-shape-complex-myanmar-machine.hh.tmp"
+#line 370 "hb-ot-shape-complex-myanmar-machine.hh"
}
_again:
@@ -375,7 +375,7 @@ _again:
#line 1 "NONE"
{ts = 0;}
break;
-#line 379 "hb-ot-shape-complex-myanmar-machine.hh.tmp"
+#line 379 "hb-ot-shape-complex-myanmar-machine.hh"
}
if ( ++p != pe )
@@ -391,7 +391,7 @@ _again:
}
-#line 123 "../../src/hb-ot-shape-complex-myanmar-machine.rl"
+#line 123 "hb-ot-shape-complex-myanmar-machine.rl"
}
diff --git a/src/hb-ot-shape-complex-private.hh b/src/hb-ot-shape-complex-private.hh
index 9a7afcb..e268933 100644
--- a/src/hb-ot-shape-complex-private.hh
+++ b/src/hb-ot-shape-complex-private.hh
@@ -259,6 +259,7 @@ hb_ot_shape_complex_categorize (const hb_ot_shape_planner_t *planner)
/* Unicode-4.1 additions */
case HB_SCRIPT_KHAROSHTHI:
+ case HB_SCRIPT_NEW_TAI_LUE:
case HB_SCRIPT_SYLOTI_NAGRI:
/* Unicode-5.1 additions */
@@ -339,7 +340,6 @@ hb_ot_shape_complex_categorize (const hb_ot_shape_planner_t *planner)
/* Unicode-4.1 additions */
case HB_SCRIPT_BUGINESE:
- case HB_SCRIPT_NEW_TAI_LUE:
/* Unicode-5.1 additions */
case HB_SCRIPT_CHAM:
diff --git a/src/hb-ot-shape-complex-sea-machine.hh b/src/hb-ot-shape-complex-sea-machine.hh
index 86b7ae7..15b862f 100644
--- a/src/hb-ot-shape-complex-sea-machine.hh
+++ b/src/hb-ot-shape-complex-sea-machine.hh
@@ -1,5 +1,5 @@
-#line 1 "../../src/hb-ot-shape-complex-sea-machine.rl"
+#line 1 "hb-ot-shape-complex-sea-machine.rl"
/*
* Copyright © 2011,2012,2013 Google, Inc.
*
@@ -32,7 +32,7 @@
#include "hb-private.hh"
-#line 36 "hb-ot-shape-complex-sea-machine.hh.tmp"
+#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
};
@@ -89,11 +89,11 @@ static const int sea_syllable_machine_error = -1;
static const int sea_syllable_machine_en_main = 2;
-#line 36 "../../src/hb-ot-shape-complex-sea-machine.rl"
+#line 36 "hb-ot-shape-complex-sea-machine.rl"
-#line 67 "../../src/hb-ot-shape-complex-sea-machine.rl"
+#line 67 "hb-ot-shape-complex-sea-machine.rl"
#define found_syllable(syllable_type) \
@@ -113,7 +113,7 @@ find_syllables (hb_buffer_t *buffer)
int cs;
hb_glyph_info_t *info = buffer->info;
-#line 117 "hb-ot-shape-complex-sea-machine.hh.tmp"
+#line 117 "hb-ot-shape-complex-sea-machine.hh"
{
cs = sea_syllable_machine_start;
ts = 0;
@@ -121,7 +121,7 @@ find_syllables (hb_buffer_t *buffer)
act = 0;
}
-#line 88 "../../src/hb-ot-shape-complex-sea-machine.rl"
+#line 88 "hb-ot-shape-complex-sea-machine.rl"
p = 0;
@@ -130,7 +130,7 @@ find_syllables (hb_buffer_t *buffer)
unsigned int last = 0;
unsigned int syllable_serial = 1;
-#line 134 "hb-ot-shape-complex-sea-machine.hh.tmp"
+#line 134 "hb-ot-shape-complex-sea-machine.hh"
{
int _slen;
int _trans;
@@ -144,7 +144,7 @@ _resume:
#line 1 "NONE"
{ts = p;}
break;
-#line 148 "hb-ot-shape-complex-sea-machine.hh.tmp"
+#line 148 "hb-ot-shape-complex-sea-machine.hh"
}
_keys = _sea_syllable_machine_trans_keys + (cs<<1);
@@ -167,30 +167,30 @@ _eof_trans:
{te = p+1;}
break;
case 6:
-#line 63 "../../src/hb-ot-shape-complex-sea-machine.rl"
+#line 63 "hb-ot-shape-complex-sea-machine.rl"
{te = p+1;{ found_syllable (non_sea_cluster); }}
break;
case 7:
-#line 61 "../../src/hb-ot-shape-complex-sea-machine.rl"
+#line 61 "hb-ot-shape-complex-sea-machine.rl"
{te = p;p--;{ found_syllable (consonant_syllable); }}
break;
case 8:
-#line 62 "../../src/hb-ot-shape-complex-sea-machine.rl"
+#line 62 "hb-ot-shape-complex-sea-machine.rl"
{te = p;p--;{ found_syllable (broken_cluster); }}
break;
case 9:
-#line 63 "../../src/hb-ot-shape-complex-sea-machine.rl"
+#line 63 "hb-ot-shape-complex-sea-machine.rl"
{te = p;p--;{ found_syllable (non_sea_cluster); }}
break;
case 1:
-#line 61 "../../src/hb-ot-shape-complex-sea-machine.rl"
+#line 61 "hb-ot-shape-complex-sea-machine.rl"
{{p = ((te))-1;}{ found_syllable (consonant_syllable); }}
break;
case 3:
-#line 62 "../../src/hb-ot-shape-complex-sea-machine.rl"
+#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.tmp"
+#line 194 "hb-ot-shape-complex-sea-machine.hh"
}
_again:
@@ -199,7 +199,7 @@ _again:
#line 1 "NONE"
{ts = 0;}
break;
-#line 203 "hb-ot-shape-complex-sea-machine.hh.tmp"
+#line 203 "hb-ot-shape-complex-sea-machine.hh"
}
if ( ++p != pe )
@@ -215,7 +215,7 @@ _again:
}
-#line 97 "../../src/hb-ot-shape-complex-sea-machine.rl"
+#line 97 "hb-ot-shape-complex-sea-machine.rl"
}
diff --git a/src/hb-ot-shape-fallback.cc b/src/hb-ot-shape-fallback.cc
index 80d7da8..53274b5 100644
--- a/src/hb-ot-shape-fallback.cc
+++ b/src/hb-ot-shape-fallback.cc
@@ -441,13 +441,15 @@ _hb_ot_shape_fallback_kern (const hb_ot_shape_plan_t *plan,
OT::hb_apply_context_t c (1, font, buffer);
c.set_lookup_mask (plan->kern_mask);
c.set_lookup_props (OT::LookupFlag::IgnoreMarks);
+ OT::hb_apply_context_t::skipping_iterator_t &skippy_iter = c.iter_input;
+ skippy_iter.init (&c);
unsigned int count = buffer->len;
hb_glyph_info_t *info = buffer->info;
hb_glyph_position_t *pos = buffer->pos;
for (unsigned int idx = 0; idx < count;)
{
- OT::hb_apply_context_t::skipping_forward_iterator_t skippy_iter (&c, idx, 1);
+ skippy_iter.reset (idx, 1);
if (!skippy_iter.next ())
{
idx++;
diff --git a/src/hb-ot-shape-normalize.cc b/src/hb-ot-shape-normalize.cc
index 4287253..8cc64af 100644
--- a/src/hb-ot-shape-normalize.cc
+++ b/src/hb-ot-shape-normalize.cc
@@ -197,16 +197,17 @@ static inline void
decompose_current_character (const hb_ot_shape_normalize_context_t *c, bool shortest)
{
hb_buffer_t * const buffer = c->buffer;
+ hb_codepoint_t u = buffer->cur().codepoint;
hb_codepoint_t glyph;
/* Kind of a cute waterfall here... */
- if (shortest && c->font->get_glyph (buffer->cur().codepoint, 0, &glyph))
+ if (shortest && c->font->get_glyph (u, 0, &glyph))
next_char (buffer, glyph);
- else if (decompose (c, shortest, buffer->cur().codepoint))
+ else if (decompose (c, shortest, u))
skip_char (buffer);
- else if (!shortest && c->font->get_glyph (buffer->cur().codepoint, 0, &glyph))
+ else if (!shortest && c->font->get_glyph (u, 0, &glyph))
next_char (buffer, glyph);
- else if (decompose_compatibility (c, buffer->cur().codepoint))
+ else if (decompose_compatibility (c, u))
skip_char (buffer);
else
next_char (buffer, glyph); /* glyph is initialized in earlier branches. */
diff --git a/src/hb-ot-shape.cc b/src/hb-ot-shape.cc
index a0b503a..07adb04 100644
--- a/src/hb-ot-shape.cc
+++ b/src/hb-ot-shape.cc
@@ -676,7 +676,7 @@ hb_ot_hide_default_ignorables (hb_ot_shape_context_t *c)
pos[i].y_advance = 0;
}
else
- continue; /* Delete it. */
+ continue; /* Delete it. XXX Merge clusters? */
}
if (j != i)
{
diff --git a/src/hb-private.hh b/src/hb-private.hh
index 80fd6c4..06b24a8 100644
--- a/src/hb-private.hh
+++ b/src/hb-private.hh
@@ -94,22 +94,6 @@
# endif
#endif
-#if (defined(__WIN32__) && !defined(__WINE__)) || defined(_MSC_VER)
-#define snprintf _snprintf
-/* Windows CE only has _strdup, while rest of Windows has both. */
-#define strdup _strdup
-#endif
-
-#ifdef _MSC_VER
-#undef inline
-#define inline __inline
-#endif
-
-#ifdef __STRICT_ANSI__
-#undef inline
-#define inline __inline__
-#endif
-
#if __GNUC__ >= 3
#define HB_FUNC __PRETTY_FUNCTION__
#elif defined(_MSC_VER)
@@ -128,16 +112,26 @@
# ifndef _WIN32_WINNT
# define _WIN32_WINNT 0x0600
# endif
-# define WIN32_LEAN_AND_MEAN
-# define STRICT
-#endif
+# ifndef WIN32_LEAN_AND_MEAN
+# define WIN32_LEAN_AND_MEAN 1
+# endif
+# ifndef STRICT
+# define STRICT 1
+# endif
-#ifdef _WIN32_WCE
-/* Some things not defined on Windows CE. */
-#define MemoryBarrier()
-#define getenv(Name) NULL
-#define setlocale(Category, Locale) "C"
+# if defined(_WIN32_WCE)
+ /* Some things not defined on Windows CE. */
+# define getenv(Name) NULL
+# define setlocale(Category, Locale) "C"
static int errno = 0; /* Use something better? */
+# elif defined(WINAPI_FAMILY) && (WINAPI_FAMILY==WINAPI_FAMILY_PC_APP || WINAPI_FAMILY==WINAPI_FAMILY_PHONE_APP)
+# define getenv(Name) NULL
+# endif
+# if (defined(__WIN32__) && !defined(__WINE__)) || defined(_MSC_VER)
+# define snprintf _snprintf
+ /* Windows CE only has _strdup, while rest of Windows has both. */
+# define strdup _strdup
+# endif
#endif
#if HAVE_ATEXIT
@@ -535,47 +529,6 @@ struct hb_lockable_set_t
};
-
-
-/* Big-endian handling */
-
-static inline uint16_t hb_be_uint16 (const uint16_t v)
-{
- const uint8_t *V = (const uint8_t *) &v;
- return (V[0] << 8) | V[1];
-}
-
-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);
-}
-
-/* Note, of the following macros, uint16_get is the one called many many times.
- * If there is any optimizations to be done, it's in that macro. However, I
- * already confirmed that on my T400 ThinkPad at least, using bswap_16(), which
- * results in a single ror instruction, does NOT speed this up. In fact, it
- * resulted in a minor slowdown. At any rate, note that v may not be correctly
- * aligned, so I think the current implementation is optimal.
- */
-
-#define hb_be_uint16_put(v,V) HB_STMT_START { v[0] = (V>>8); v[1] = (V); } HB_STMT_END
-#define hb_be_uint16_get(v) (uint16_t) ((v[0] << 8) + v[1])
-#define hb_be_uint16_eq(a,b) (a[0] == b[0] && a[1] == b[1])
-
-#define hb_be_uint32_put(v,V) HB_STMT_START { v[0] = (V>>24); v[1] = (V>>16); v[2] = (V>>8); v[3] = (V); } HB_STMT_END
-#define hb_be_uint32_get(v) (uint32_t) ((v[0] << 24) + (v[1] << 16) + (v[2] << 8) + v[3])
-#define hb_be_uint32_eq(a,b) (a[0] == b[0] && a[1] == b[1] && a[2] == b[2] && a[3] == b[3])
-
-#define hb_be_uint24_put(v,V) HB_STMT_START { v[0] = (V>>16); v[1] = (V>>8); v[2] = (V); } HB_STMT_END
-#define hb_be_uint24_get(v) (uint32_t) ((v[0] << 16) + (v[1] << 8) + v[2])
-#define hb_be_uint24_eq(a,b) (a[0] == b[0] && a[1] == b[1] && a[2] == b[2])
-
-
/* ASCII tag/character handling */
static inline bool ISALPHA (unsigned char c)
@@ -620,6 +573,30 @@ _hb_debug (unsigned int level,
#define DEBUG_LEVEL_ENABLED(WHAT, LEVEL) (_hb_debug ((LEVEL), HB_DEBUG_##WHAT))
#define DEBUG_ENABLED(WHAT) (DEBUG_LEVEL_ENABLED (WHAT, 0))
+static inline void
+_hb_print_func (const char *func)
+{
+ if (func)
+ {
+ unsigned int func_len = strlen (func);
+ /* Skip "static" */
+ if (0 == strncmp (func, "static ", 7))
+ func += 7;
+ /* Skip "typename" */
+ if (0 == strncmp (func, "typename ", 9))
+ func += 9;
+ /* Skip return type */
+ const char *space = strchr (func, ' ');
+ if (space)
+ func = space + 1;
+ /* Skip parameter list */
+ const char *paren = strchr (func, '(');
+ if (paren)
+ func_len = paren - func;
+ fprintf (stderr, "%.*s", func_len, func);
+ }
+}
+
template <int max_level> static inline void
_hb_debug_msg_va (const char *what,
const void *obj,
@@ -665,27 +642,13 @@ _hb_debug_msg_va (const char *what,
} else
fprintf (stderr, " " VRBAR LBAR);
- if (func)
- {
- unsigned int func_len = strlen (func);
-#ifndef HB_DEBUG_VERBOSE
- /* Skip "typename" */
- if (0 == strncmp (func, "typename ", 9))
- func += 9;
- /* Skip return type */
- const char *space = strchr (func, ' ');
- if (space)
- func = space + 1;
- /* Skip parameter list */
- const char *paren = strchr (func, '(');
- if (paren)
- func_len = paren - func;
-#endif
- fprintf (stderr, "%.*s: ", func_len, func);
- }
+ _hb_print_func (func);
if (message)
+ {
+ fprintf (stderr, ": ");
vfprintf (stderr, message, ap);
+ }
fprintf (stderr, "\n");
}
@@ -752,7 +715,9 @@ _hb_debug_msg<0> (const char *what HB_UNUSED,
*/
template <typename T>
-struct hb_printer_t {};
+struct hb_printer_t {
+ const char *print (const T&) { return "something"; }
+};
template <>
struct hb_printer_t<bool> {
@@ -855,7 +820,7 @@ hb_in_range (T u, T lo, T hi)
/* The sizeof() is here to force template instantiation.
* I'm sure there are better ways to do this but can't think of
* one right now. Declaring a variable won't work as HB_UNUSED
- * is unsable on some platforms and unused types are less likely
+ * is unusable on some platforms and unused types are less likely
* to generate a warning than unused variables. */
ASSERT_STATIC (sizeof (hb_assert_unsigned_t<T>) >= 0);
@@ -885,7 +850,7 @@ hb_in_ranges (T u, T lo1, T hi1, T lo2, T hi2, T lo3, T hi3)
#define FLAG_RANGE(x,y) (ASSERT_STATIC_EXPR_ZERO ((x) < (y)) + FLAG(y+1) - FLAG(x))
-template <typename T, typename T2> inline void
+template <typename T, typename T2> static inline void
hb_bubble_sort (T *array, unsigned int len, int(*compar)(const T *, const T *), T2 *array2)
{
if (unlikely (!len))
@@ -918,7 +883,7 @@ hb_bubble_sort (T *array, unsigned int len, int(*compar)(const T *, const T *),
} while (k);
}
-template <typename T> inline void
+template <typename T> static inline void
hb_bubble_sort (T *array, unsigned int len, int(*compar)(const T *, const T *))
{
hb_bubble_sort (array, len, compar, (int *) NULL);
@@ -947,12 +912,12 @@ hb_codepoint_parse (const char *s, unsigned int len, int base, hb_codepoint_t *o
struct hb_options_t
{
- int initialized : 1;
- int uniscribe_bug_compatible : 1;
+ unsigned int initialized : 1;
+ unsigned int uniscribe_bug_compatible : 1;
};
union hb_options_union_t {
- int i;
+ unsigned int i;
hb_options_t opts;
};
ASSERT_STATIC (sizeof (int) == sizeof (hb_options_union_t));
diff --git a/src/hb-set-private.hh b/src/hb-set-private.hh
index 705f554..acba4e9 100644
--- a/src/hb-set-private.hh
+++ b/src/hb-set-private.hh
@@ -145,12 +145,14 @@ typedef hb_set_digest_combiner_t
struct hb_set_t
{
+ friend struct hb_frozen_set_t;
+
hb_object_header_t header;
ASSERT_POD ();
bool in_error;
inline void init (void) {
- header.init ();
+ hb_object_init (this);
clear ();
}
inline void fini (void) {
@@ -326,7 +328,7 @@ struct hb_set_t
static const hb_codepoint_t INVALID = HB_SET_VALUE_INVALID;
elt_t &elt (hb_codepoint_t g) { return elts[g >> SHIFT]; }
- elt_t elt (hb_codepoint_t g) const { return elts[g >> SHIFT]; }
+ elt_t const &elt (hb_codepoint_t g) const { return elts[g >> SHIFT]; }
elt_t mask (hb_codepoint_t g) const { return elt_t (1) << (g & MASK); }
elt_t elts[ELTS]; /* XXX 8kb */
@@ -335,6 +337,59 @@ struct hb_set_t
ASSERT_STATIC (sizeof (elt_t) * 8 * ELTS > MAX_G);
};
+struct hb_frozen_set_t
+{
+ static const unsigned int SHIFT = hb_set_t::SHIFT;
+ static const unsigned int BITS = hb_set_t::BITS;
+ static const unsigned int MASK = hb_set_t::MASK;
+ typedef hb_set_t::elt_t elt_t;
+
+ inline void init (const hb_set_t &set)
+ {
+ start = count = 0;
+ elts = NULL;
+
+ unsigned int max = set.get_max ();
+ if (max == set.INVALID)
+ 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;
+ unsigned int num_elts = (count + BITS - 1) / BITS;
+ unsigned int elts_size = num_elts * sizeof (elt_t);
+ elts = (elt_t *) malloc (elts_size);
+ if (unlikely (!elts))
+ {
+ start = count = 0;
+ return;
+ }
+ memcpy (elts, &min_elt, elts_size);
+ }
+
+ inline void fini (void)
+ {
+ if (elts)
+ free (elts);
+ }
+
+ inline bool has (hb_codepoint_t g) const
+ {
+ /* hb_codepoint_t is unsigned. */
+ g -= start;
+ if (unlikely (g > count)) return false;
+ return !!(elt (g) & mask (g));
+ }
+
+ elt_t const &elt (hb_codepoint_t g) const { return elts[g >> SHIFT]; }
+ elt_t mask (hb_codepoint_t g) const { return elt_t (1) << (g & MASK); }
+
+ private:
+ hb_codepoint_t start, count;
+ elt_t *elts;
+};
#endif /* HB_SET_PRIVATE_HH */
diff --git a/src/hb-shape.cc b/src/hb-shape.cc
index 74747f8..9a59c08 100644
--- a/src/hb-shape.cc
+++ b/src/hb-shape.cc
@@ -200,7 +200,7 @@ parse_one_feature (const char **pp, const char *end, hb_feature_t *feature)
* hb_feature_from_string:
* @str: (array length=len):
* @len:
- * @feature: (out) (allow-none):
+ * @feature: (out) (optional):
*
*
*
@@ -279,11 +279,13 @@ hb_feature_to_string (hb_feature_t *feature,
static const char **static_shaper_list;
-static inline
+#ifdef HB_USE_ATEXIT
+static
void free_static_shaper_list (void)
{
free (static_shaper_list);
}
+#endif
/**
* hb_shape_list_shapers:
diff --git a/src/hb-shaper-private.hh b/src/hb-shaper-private.hh
index 29c4493..d1d1146 100644
--- a/src/hb-shaper-private.hh
+++ b/src/hb-shaper-private.hh
@@ -79,10 +79,9 @@ struct hb_shaper_data_t {
HB_SHAPER_DATA_DESTROY_FUNC (shaper, object) (HB_SHAPER_DATA_TYPE (shaper, object) *data)
#define HB_SHAPER_DATA_DESTROY(shaper, object) \
- if (object->shaper_data.shaper && \
- object->shaper_data.shaper != HB_SHAPER_DATA_INVALID && \
- object->shaper_data.shaper != HB_SHAPER_DATA_SUCCEEDED) \
- HB_SHAPER_DATA_DESTROY_FUNC (shaper, object) (HB_SHAPER_DATA (shaper, object));
+ if (HB_SHAPER_DATA_TYPE (shaper, object) *data = HB_SHAPER_DATA (shaper, object)) \
+ if (data != HB_SHAPER_DATA_INVALID && data != HB_SHAPER_DATA_SUCCEEDED) \
+ HB_SHAPER_DATA_DESTROY_FUNC (shaper, object) (data);
#define HB_SHAPER_DATA_ENSURE_DECLARE(shaper, object) \
static inline bool \
diff --git a/src/hb-shaper.cc b/src/hb-shaper.cc
index 6ae2601..580b95c 100644
--- a/src/hb-shaper.cc
+++ b/src/hb-shaper.cc
@@ -40,12 +40,14 @@ static const hb_shaper_pair_t all_shapers[] = {
static const hb_shaper_pair_t *static_shapers;
-static inline
+#ifdef HB_USE_ATEXIT
+static
void free_static_shapers (void)
{
if (unlikely (static_shapers != all_shapers))
free ((void *) static_shapers);
}
+#endif
const hb_shaper_pair_t *
_hb_shapers_get (void)
diff --git a/src/hb-unicode.cc b/src/hb-unicode.cc
index d59dfb2..fc19006 100644
--- a/src/hb-unicode.cc
+++ b/src/hb-unicode.cc
@@ -157,7 +157,7 @@ hb_unicode_funcs_get_default (void)
/**
* hb_unicode_funcs_create: (Xconstructor)
- * @parent: (allow-none):
+ * @parent: (nullable):
*
*
*
diff --git a/src/hb-uniscribe.cc b/src/hb-uniscribe.cc
index 74ae3a3..e7bcad2 100644
--- a/src/hb-uniscribe.cc
+++ b/src/hb-uniscribe.cc
@@ -43,6 +43,12 @@
#endif
+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); }
+
+
typedef HRESULT (WINAPI *SIOT) /*ScriptItemizeOpenType*/(
const WCHAR *pwcInChars,
int cInChars,
diff --git a/src/hb-utf-private.hh b/src/hb-utf-private.hh
index 0b798a0..14d3c2e 100644
--- a/src/hb-utf-private.hh
+++ b/src/hb-utf-private.hh
@@ -29,14 +29,11 @@
#include "hb-private.hh"
-template <typename T, bool validate=true> struct hb_utf_t;
-
-/* UTF-8 */
-
-template <>
-struct hb_utf_t<uint8_t, true>
+struct hb_utf8_t
{
+ typedef uint8_t codepoint_t;
+
static inline const uint8_t *
next (const uint8_t *text,
const uint8_t *end,
@@ -131,11 +128,10 @@ struct hb_utf_t<uint8_t, true>
};
-/* UTF-16 */
-
-template <>
-struct hb_utf_t<uint16_t, true>
+struct hb_utf16_t
{
+ typedef uint16_t codepoint_t;
+
static inline const uint16_t *
next (const uint16_t *text,
const uint16_t *end,
@@ -204,11 +200,11 @@ struct hb_utf_t<uint16_t, true>
};
-/* UTF-32 */
-
-template <bool validate>
-struct hb_utf_t<uint32_t, validate>
+template <bool validate=true>
+struct hb_utf32_t
{
+ typedef uint32_t codepoint_t;
+
static inline const uint32_t *
next (const uint32_t *text,
const uint32_t *end HB_UNUSED,
@@ -246,4 +242,37 @@ struct hb_utf_t<uint32_t, validate>
};
+struct hb_latin1_t
+{
+ typedef uint8_t codepoint_t;
+
+ static inline const uint8_t *
+ next (const uint8_t *text,
+ const uint8_t *end HB_UNUSED,
+ hb_codepoint_t *unicode,
+ hb_codepoint_t replacement HB_UNUSED)
+ {
+ *unicode = *text++;
+ return text;
+ }
+
+ static inline const uint8_t *
+ prev (const uint8_t *text,
+ const uint8_t *start HB_UNUSED,
+ hb_codepoint_t *unicode,
+ hb_codepoint_t replacement)
+ {
+ *unicode = *--text;
+ return text;
+ }
+
+ static inline unsigned int
+ strlen (const uint8_t *text)
+ {
+ unsigned int l = 0;
+ while (*text++) l++;
+ return l;
+ }
+};
+
#endif /* HB_UTF_PRIVATE_HH */
diff --git a/src/hb-version.h b/src/hb-version.h
index e1a5f61..648a46f 100644
--- a/src/hb-version.h
+++ b/src/hb-version.h
@@ -38,9 +38,9 @@ HB_BEGIN_DECLS
#define HB_VERSION_MAJOR 0
#define HB_VERSION_MINOR 9
-#define HB_VERSION_MICRO 35
+#define HB_VERSION_MICRO 40
-#define HB_VERSION_STRING "0.9.35"
+#define HB_VERSION_STRING "0.9.40"
#define HB_VERSION_ATLEAST(major,minor,micro) \
((major)*10000+(minor)*100+(micro) <= \
diff --git a/test/api/test-blob.c b/test/api/test-blob.c
index bbb7e2e..f671331 100644
--- a/test/api/test-blob.c
+++ b/test/api/test-blob.c
@@ -53,6 +53,9 @@ test_blob_empty (void)
g_assert (hb_blob_is_immutable (hb_blob_get_empty ()));
g_assert (hb_blob_get_empty () != NULL);
g_assert (hb_blob_get_empty () == hb_blob_create (NULL, 0, HB_MEMORY_MODE_READONLY, NULL, NULL));
+ g_assert (hb_blob_get_empty () == hb_blob_create ("asdf", 0, HB_MEMORY_MODE_READONLY, NULL, NULL));
+ g_assert (hb_blob_get_empty () == hb_blob_create (NULL, -1, HB_MEMORY_MODE_READONLY, NULL, NULL));
+ g_assert (hb_blob_get_empty () == hb_blob_create ("asdfg", -1, HB_MEMORY_MODE_READONLY, NULL, NULL));
blob = hb_blob_get_empty ();
g_assert (blob == hb_blob_get_empty ());
diff --git a/test/shaping/Makefile.am b/test/shaping/Makefile.am
index e2dcc98..70bcdd5 100644
--- a/test/shaping/Makefile.am
+++ b/test/shaping/Makefile.am
@@ -40,6 +40,7 @@ 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/mongolian-variation-selector.tests \
diff --git a/test/shaping/Makefile.in b/test/shaping/Makefile.in
index e5f1224..8e726ff 100644
--- a/test/shaping/Makefile.in
+++ b/test/shaping/Makefile.in
@@ -81,8 +81,8 @@ build_triplet = @build@
host_triplet = @host@
TESTS = tests/arabic-fallback-shaping.tests \
tests/arabic-feature-order.tests tests/context-matching.tests \
- tests/hangul-jamo.tests tests/indic-old-spec.tests \
- tests/indic-pref-blocking.tests \
+ tests/hangul-jamo.tests tests/indic-joiner-candrabindu.tests \
+ tests/indic-old-spec.tests tests/indic-pref-blocking.tests \
tests/mongolian-variation-selector.tests \
tests/zero-width-marks.tests $(am__EXEEXT_1)
subdir = test/shaping
diff --git a/test/shaping/fonts/sha1sum/5028afb650b1bb718ed2131e872fbcce57828fff.ttf b/test/shaping/fonts/sha1sum/5028afb650b1bb718ed2131e872fbcce57828fff.ttf
new file mode 100644
index 0000000..8fb2f16
--- /dev/null
+++ b/test/shaping/fonts/sha1sum/5028afb650b1bb718ed2131e872fbcce57828fff.ttf
Binary files differ
diff --git a/test/shaping/fonts/sha1sum/MANIFEST b/test/shaping/fonts/sha1sum/MANIFEST
index c51639b..924732d 100644
--- a/test/shaping/fonts/sha1sum/MANIFEST
+++ b/test/shaping/fonts/sha1sum/MANIFEST
@@ -2,6 +2,7 @@
270b89df543a7e48e206a2d830c0e10e5265c630.ttf
37033cc5cf37bb223d7355153016b6ccece93b28.ttf
4cce528e99f600ed9c25a2b69e32eb94a03b4ae8.ttf
+5028afb650b1bb718ed2131e872fbcce57828fff.ttf
57a9d9f83020155cbb1d2be1f43d82388cbecc88.ttf
757ebd573617a24aa9dfbf0b885c54875c6fe06b.ttf
7e14e7883ed152baa158b80e207b66114c823a8b.ttf
diff --git a/test/shaping/hb_test_tools.py b/test/shaping/hb_test_tools.py
index 7674fdf..a370e5e 100644
--- a/test/shaping/hb_test_tools.py
+++ b/test/shaping/hb_test_tools.py
@@ -411,7 +411,7 @@ class Unicode:
def parse (s):
s = re.sub (r"0[xX]", " ", s)
s = re.sub (r"[<+>,;&#\\xXuU\n ]", " ", s)
- return [int (x, 16) for x in s.split (' ') if len (x)]
+ return [int (x, 16) for x in s.split ()]
@staticmethod
def encode (s):
diff --git a/test/shaping/tests/arabic-fallback-shaping.tests b/test/shaping/tests/arabic-fallback-shaping.tests
index 0240448..e3eaf3f 100644
--- a/test/shaping/tests/arabic-fallback-shaping.tests
+++ b/test/shaping/tests/arabic-fallback-shaping.tests
@@ -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@208,0+0|uni0651=2@272,768+0|uni064E=2@944,1216+0|uni0651=2@1008,768+0|uni06440627.fina=2+1470|uni064F=0@576,-32+0|uni0633.init=0+1585]
+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]
diff --git a/test/shaping/tests/hangul-jamo.tests b/test/shaping/tests/hangul-jamo.tests
index 7c1ef6b..667a1cc 100644
--- a/test/shaping/tests/hangul-jamo.tests
+++ b/test/shaping/tests/hangul-jamo.tests
@@ -1,11 +1,2 @@
-[gid64252=0+920|gid64568=0+0]
-[gid3=0+920|gid4=0+0]
-win/util/hb-view.exe --viewr uniscribe
-[gid64252=0+920|gid64568=0+0]
-[gid3=0+920|gid4=0+0]
-win/util/hb-shape.exe --shaper uniscribe
-win/util/hb-view.exe --viewr uniscribe
-[gid64252=0+920|gid64568=0+0]
-[gid3=0+920|gid4=0+0]
fonts/sha1sum/757ebd573617a24aa9dfbf0b885c54875c6fe06b.ttf:U+115F,U+11A2:[gid3=0+920|gid4=0+0]
fonts/sha1sum/7e14e7883ed152baa158b80e207b66114c823a8b.ttf:U+11A2:[gid1=0+920]
diff --git a/test/shaping/tests/indic-joiner-candrabindu.tests b/test/shaping/tests/indic-joiner-candrabindu.tests
new file mode 100644
index 0000000..351e927
--- /dev/null
+++ b/test/shaping/tests/indic-joiner-candrabindu.tests
@@ -0,0 +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=1+0|candrabinduorya=1+0]
diff --git a/util/Makefile.am b/util/Makefile.am
index 266681c..3f23bab 100644
--- a/util/Makefile.am
+++ b/util/Makefile.am
@@ -6,6 +6,10 @@ CLEANFILES =
DISTCLEANFILES =
MAINTAINERCLEANFILES =
+# Convenience targets:
+lib:
+ @$(MAKE) $(AM_MAKEFLAGS) -C $(top_builddir)/src lib
+
bin_PROGRAMS =
AM_CPPFLAGS = \
diff --git a/util/Makefile.in b/util/Makefile.in
index 4bc79ac..6fecdd0 100644
--- a/util/Makefile.in
+++ b/util/Makefile.in
@@ -820,6 +820,10 @@ uninstall-am: uninstall-binPROGRAMS
uninstall-am uninstall-binPROGRAMS
+# 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.
diff --git a/util/hb-ot-shape-closure.cc b/util/hb-ot-shape-closure.cc
index 03de7e6..859f9a6 100644
--- a/util/hb-ot-shape-closure.cc
+++ b/util/hb-ot-shape-closure.cc
@@ -110,6 +110,6 @@ struct shape_closure_consumer_t : option_group_t
int
main (int argc, char **argv)
{
- main_font_text_t<shape_closure_consumer_t> driver;
+ main_font_text_t<shape_closure_consumer_t, FONT_SIZE_NONE, 0> driver;
return driver.main (argc, argv);
}
diff --git a/util/hb-shape.cc b/util/hb-shape.cc
index 01081ea..f38f387 100644
--- a/util/hb-shape.cc
+++ b/util/hb-shape.cc
@@ -126,6 +126,6 @@ struct output_buffer_t
int
main (int argc, char **argv)
{
- main_font_text_t<shape_consumer_t<output_buffer_t> > driver;
+ main_font_text_t<shape_consumer_t<output_buffer_t>, FONT_SIZE_UPEM, 0> driver;
return driver.main (argc, argv);
}
diff --git a/util/hb-view.cc b/util/hb-view.cc
index 26fad66..ef75e6d 100644
--- a/util/hb-view.cc
+++ b/util/hb-view.cc
@@ -29,9 +29,12 @@
#include "shape-consumer.hh"
#include "view-cairo.hh"
+#define DEFAULT_FONT_SIZE 256
+#define SUBPIXEL_BITS 8
+
int
main (int argc, char **argv)
{
- main_font_text_t<shape_consumer_t<view_cairo_t> > driver;
+ main_font_text_t<shape_consumer_t<view_cairo_t>, DEFAULT_FONT_SIZE, SUBPIXEL_BITS> driver;
return driver.main (argc, argv);
}
diff --git a/util/helper-cairo-ansi.cc b/util/helper-cairo-ansi.cc
index 376bf2b..50f9eb4 100644
--- a/util/helper-cairo-ansi.cc
+++ b/util/helper-cairo-ansi.cc
@@ -63,10 +63,10 @@ helper_cairo_surface_write_to_ansi_stream (cairo_surface_t *surface,
* Find the tight image top/bottom and only print in between. */
/* Use corner color as background color. */
- uint32_t bg_color = * (uint32_t *) data;
+ uint32_t bg_color = data ? * (uint32_t *) data : 0;
/* Drop first row while empty */
- while (height)
+ while (height)
{
unsigned int i;
for (i = 0; i < width; i++)
diff --git a/util/helper-cairo.cc b/util/helper-cairo.cc
index ee940ae..d576c3f 100644
--- a/util/helper-cairo.cc
+++ b/util/helper-cairo.cc
@@ -70,8 +70,7 @@ void free_ft_library (void)
}
cairo_scaled_font_t *
-helper_cairo_create_scaled_font (const font_options_t *font_opts,
- double font_size)
+helper_cairo_create_scaled_font (const font_options_t *font_opts)
{
hb_font_t *font = hb_font_reference (font_opts->get_font ());
@@ -105,7 +104,8 @@ helper_cairo_create_scaled_font (const font_options_t *font_opts,
cairo_matrix_init_identity (&ctm);
cairo_matrix_init_scale (&font_matrix,
- font_size, font_size);
+ font_opts->font_size_x,
+ font_opts->font_size_y);
font_options = cairo_font_options_create ();
cairo_font_options_set_hint_style (font_options, CAIRO_HINT_STYLE_NONE);
cairo_font_options_set_hint_metrics (font_options, CAIRO_HINT_METRICS_OFF);
@@ -423,7 +423,7 @@ helper_cairo_line_from_buffer (helper_cairo_line_t *l,
hb_buffer_t *buffer,
const char *text,
unsigned int text_len,
- double scale,
+ int scale_bits,
hb_bool_t utf8_clusters)
{
memset (l, 0, sizeof (*l));
@@ -456,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 = ( hb_position->x_offset + x) * scale;
- l->glyphs[i].y = (-hb_position->y_offset + y) * scale;
+ 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 = x * scale;
- l->glyphs[i].y = y * scale;
+ 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]));
diff --git a/util/helper-cairo.hh b/util/helper-cairo.hh
index 567777e..ed55a45 100644
--- a/util/helper-cairo.hh
+++ b/util/helper-cairo.hh
@@ -33,8 +33,7 @@
cairo_scaled_font_t *
-helper_cairo_create_scaled_font (const font_options_t *font_opts,
- double font_size);
+helper_cairo_create_scaled_font (const font_options_t *font_opts);
extern const char *helper_cairo_supported_formats[];
@@ -76,7 +75,7 @@ helper_cairo_line_from_buffer (helper_cairo_line_t *l,
hb_buffer_t *buffer,
const char *text,
unsigned int text_len,
- double scale,
+ int scale_bits,
hb_bool_t utf8_clusters);
#endif
diff --git a/util/main-font-text.hh b/util/main-font-text.hh
index ac51b2d..628cdf9 100644
--- a/util/main-font-text.hh
+++ b/util/main-font-text.hh
@@ -31,12 +31,12 @@
/* main() body for utilities taking font and processing text.*/
-template <typename consumer_t>
+template <typename consumer_t, int default_font_size, int subpixel_bits>
struct main_font_text_t
{
main_font_text_t (void)
: options ("[FONT-FILE] [TEXT]"),
- font_opts (&options),
+ font_opts (&options, default_font_size, subpixel_bits),
input (&options),
consumer (&options) {}
diff --git a/util/options.cc b/util/options.cc
index 0adc179..7387a56 100644
--- a/util/options.cc
+++ b/util/options.cc
@@ -55,6 +55,7 @@ fail (hb_bool_t suggest_help, const char *format, ...)
va_list vap;
va_start (vap, format);
msg = g_strdup_vprintf (format, vap);
+ va_end (vap);
const char *prgname = g_get_prgname ();
g_printerr ("%s: %s\n", prgname, msg);
if (suggest_help)
@@ -264,7 +265,6 @@ view_options_t::add_options (option_parser_t *parser)
{"foreground", 0, 0, G_OPTION_ARG_STRING, &this->fore, "Set foreground color (default: " DEFAULT_FORE ")", "rrggbb/rrggbbaa"},
{"line-space", 0, 0, G_OPTION_ARG_DOUBLE, &this->line_space, "Set space between lines (default: 0)", "units"},
{"margin", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_margin, "Margin around output (default: " G_STRINGIFY(DEFAULT_MARGIN) ")","one to four numbers"},
- {"font-size", 0, 0, G_OPTION_ARG_DOUBLE, &this->font_size, "Font size (default: " G_STRINGIFY(DEFAULT_FONT_SIZE) ")","size"},
{NULL}
};
parser->add_group (entries,
@@ -349,6 +349,28 @@ shape_options_t::add_options (option_parser_t *parser)
this);
}
+static gboolean
+parse_font_size (const char *name G_GNUC_UNUSED,
+ const char *arg,
+ gpointer data,
+ GError **error G_GNUC_UNUSED)
+{
+ font_options_t *font_opts = (font_options_t *) data;
+ if (0 == strcmp (arg, "upem"))
+ {
+ 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)) {
+ case 1: font_opts->font_size_y = font_opts->font_size_x;
+ case 2: return true;
+ default:
+ g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE,
+ "%s argument should be one to four space-separated numbers",
+ name);
+ return false;
+ }
+}
void
font_options_t::add_options (option_parser_t *parser)
{
@@ -369,11 +391,22 @@ font_options_t::add_options (option_parser_t *parser)
parser->free_later (text);
}
+ char *font_size_text;
+ if (default_font_size == FONT_SIZE_UPEM)
+ font_size_text = (char *) "Font size (default: upem)";
+ else
+ {
+ font_size_text = g_strdup_printf ("Font size (default: %d)", default_font_size);
+ parser->free_later (font_size_text);
+ }
+
GOptionEntry entries[] =
{
{"font-file", 0, 0, G_OPTION_ARG_STRING, &this->font_file, "Set font file-name", "filename"},
{"face-index", 0, 0, G_OPTION_ARG_INT, &this->face_index, "Set face index (default: 0)", "index"},
- {"font-funcs", 0, 0, G_OPTION_ARG_STRING, &this->font_funcs, text, "format"},
+ {"font-size", 0, default_font_size ? 0 : G_OPTION_FLAG_HIDDEN,
+ G_OPTION_ARG_CALLBACK, (gpointer) &parse_font_size, font_size_text, "1/2 numbers or 'upem'"},
+ {"font-funcs", 0, 0, G_OPTION_ARG_STRING, &this->font_funcs, text, "impl"},
{NULL}
};
parser->add_group (entries,
@@ -514,8 +547,14 @@ font_options_t::get_font (void) const
font = hb_font_create (face);
- unsigned int upem = hb_face_get_upem (face);
- hb_font_set_scale (font, upem, upem);
+ if (font_size_x == FONT_SIZE_UPEM)
+ font_size_x = hb_face_get_upem (face);
+ if (font_size_y == FONT_SIZE_UPEM)
+ font_size_y = hb_face_get_upem (face);
+
+ int scale_x = (int) scalbnf (font_size_x, subpixel_bits);
+ int scale_y = (int) scalbnf (font_size_y, subpixel_bits);
+ hb_font_set_scale (font, scale_x, scale_y);
hb_face_destroy (face);
void (*set_font_funcs) (hb_font_t *) = NULL;
diff --git a/util/options.hh b/util/options.hh
index 223778d..8b9b10e 100644
--- a/util/options.hh
+++ b/util/options.hh
@@ -143,7 +143,8 @@ struct option_parser_t
#define DEFAULT_MARGIN 16
#define DEFAULT_FORE "#000000"
#define DEFAULT_BACK "#FFFFFF"
-#define DEFAULT_FONT_SIZE 256
+#define FONT_SIZE_UPEM 0x7FFFFFFF
+#define FONT_SIZE_NONE 0
struct view_options_t : option_group_t
{
@@ -153,7 +154,6 @@ struct view_options_t : option_group_t
back = DEFAULT_BACK;
line_space = 0;
margin.t = margin.r = margin.b = margin.l = DEFAULT_MARGIN;
- font_size = DEFAULT_FONT_SIZE;
add_options (parser);
}
@@ -167,7 +167,6 @@ struct view_options_t : option_group_t
struct margin_t {
double t, r, b, l;
} margin;
- double font_size;
};
@@ -273,9 +272,14 @@ struct shape_options_t : option_group_t
struct font_options_t : option_group_t
{
- font_options_t (option_parser_t *parser) {
+ font_options_t (option_parser_t *parser,
+ int default_font_size_,
+ unsigned int subpixel_bits_) {
+ default_font_size = default_font_size_;
+ subpixel_bits = subpixel_bits_;
font_file = NULL;
face_index = 0;
+ font_size_x = font_size_y = default_font_size;
font_funcs = NULL;
font = NULL;
@@ -292,6 +296,10 @@ struct font_options_t : option_group_t
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;
const char *font_funcs;
private:
diff --git a/util/view-cairo.cc b/util/view-cairo.cc
index 666013e..160250e 100644
--- a/util/view-cairo.cc
+++ b/util/view-cairo.cc
@@ -54,7 +54,7 @@ view_cairo_t::get_surface_size (cairo_scaled_font_t *scaled_font,
void
view_cairo_t::render (const font_options_t *font_opts)
{
- cairo_scaled_font_t *scaled_font = helper_cairo_create_scaled_font (font_opts, view_options.font_size);
+ 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);
diff --git a/util/view-cairo.hh b/util/view-cairo.hh
index 9dea06e..cb52373 100644
--- a/util/view-cairo.hh
+++ b/util/view-cairo.hh
@@ -37,7 +37,7 @@ struct view_cairo_t
: output_options (parser, helper_cairo_supported_formats),
view_options (parser),
direction (HB_DIRECTION_INVALID),
- lines (0), scale (1.0) {}
+ lines (0), scale_bits (0) {}
~view_cairo_t (void) {
if (debug)
cairo_debug_reset_static_data ();
@@ -46,7 +46,7 @@ struct view_cairo_t
void init (const font_options_t *font_opts)
{
lines = g_array_new (false, false, sizeof (helper_cairo_line_t));
- scale = double (view_options.font_size) / hb_face_get_upem (hb_font_get_face (font_opts->get_font ()));
+ scale_bits = -font_opts->subpixel_bits;
}
void new_line (void)
{
@@ -71,7 +71,7 @@ struct view_cairo_t
{
direction = hb_buffer_get_direction (buffer);
helper_cairo_line_t l;
- helper_cairo_line_from_buffer (&l, buffer, text, text_len, scale, utf8_clusters);
+ helper_cairo_line_from_buffer (&l, buffer, text, text_len, scale_bits, utf8_clusters);
g_array_append_val (lines, l);
}
void finish (const font_options_t *font_opts)
@@ -100,7 +100,7 @@ struct view_cairo_t
hb_direction_t direction; // Remove this, make segment_properties accessible
GArray *lines;
- double scale;
+ int scale_bits;
};
#endif