laag-harfbuzz 1.7.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +57 -0
- data/LICENSE.txt +36 -0
- data/README.org +34 -0
- data/ext/laag/harfbuzz/extconf.rb +16 -0
- data/laag-harfbuzz.gemspec +20 -0
- data/lib/laag/harfbuzz.rb +29 -0
- data/vendor/github.com/harfbuzz/harfbuzz/.ci/deploy-docs.sh +36 -0
- data/vendor/github.com/harfbuzz/harfbuzz/.ci/fail.sh +18 -0
- data/vendor/github.com/harfbuzz/harfbuzz/.ci/run-coveralls.sh +14 -0
- data/vendor/github.com/harfbuzz/harfbuzz/.ci/trigger-coverity.sh +11 -0
- data/vendor/github.com/harfbuzz/harfbuzz/.circleci/config.yml +190 -0
- data/vendor/github.com/harfbuzz/harfbuzz/.editorconfig +18 -0
- data/vendor/github.com/harfbuzz/harfbuzz/.travis.yml +89 -0
- data/vendor/github.com/harfbuzz/harfbuzz/AUTHORS +9 -0
- data/vendor/github.com/harfbuzz/harfbuzz/BUILD.md +50 -0
- data/vendor/github.com/harfbuzz/harfbuzz/CMakeLists.txt +848 -0
- data/vendor/github.com/harfbuzz/harfbuzz/COPYING +36 -0
- data/vendor/github.com/harfbuzz/harfbuzz/Makefile.am +85 -0
- data/vendor/github.com/harfbuzz/harfbuzz/NEWS +1832 -0
- data/vendor/github.com/harfbuzz/harfbuzz/README +16 -0
- data/vendor/github.com/harfbuzz/harfbuzz/README.md +1 -0
- data/vendor/github.com/harfbuzz/harfbuzz/README.python +30 -0
- data/vendor/github.com/harfbuzz/harfbuzz/RELEASING.md +99 -0
- data/vendor/github.com/harfbuzz/harfbuzz/THANKS +7 -0
- data/vendor/github.com/harfbuzz/harfbuzz/TODO +42 -0
- data/vendor/github.com/harfbuzz/harfbuzz/appveyor.yml +61 -0
- data/vendor/github.com/harfbuzz/harfbuzz/autogen.sh +48 -0
- data/vendor/github.com/harfbuzz/harfbuzz/configure.ac +542 -0
- data/vendor/github.com/harfbuzz/harfbuzz/docs/HarfBuzz.png +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/docs/HarfBuzz.svg +277 -0
- data/vendor/github.com/harfbuzz/harfbuzz/docs/Makefile.am +123 -0
- data/vendor/github.com/harfbuzz/harfbuzz/docs/harfbuzz-docs.xml +210 -0
- data/vendor/github.com/harfbuzz/harfbuzz/docs/harfbuzz-overrides.txt +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/docs/harfbuzz-sections.txt +627 -0
- data/vendor/github.com/harfbuzz/harfbuzz/docs/usermanual-buffers-language-script-and-direction.xml +77 -0
- data/vendor/github.com/harfbuzz/harfbuzz/docs/usermanual-clusters.xml +304 -0
- data/vendor/github.com/harfbuzz/harfbuzz/docs/usermanual-fonts-and-faces.xml +18 -0
- data/vendor/github.com/harfbuzz/harfbuzz/docs/usermanual-glyph-information.xml +8 -0
- data/vendor/github.com/harfbuzz/harfbuzz/docs/usermanual-hello-harfbuzz.xml +183 -0
- data/vendor/github.com/harfbuzz/harfbuzz/docs/usermanual-install-harfbuzz.xml +70 -0
- data/vendor/github.com/harfbuzz/harfbuzz/docs/usermanual-opentype-features.xml +13 -0
- data/vendor/github.com/harfbuzz/harfbuzz/docs/usermanual-what-is-harfbuzz.xml +115 -0
- data/vendor/github.com/harfbuzz/harfbuzz/docs/version.xml.in +1 -0
- data/vendor/github.com/harfbuzz/harfbuzz/git.mk +400 -0
- data/vendor/github.com/harfbuzz/harfbuzz/harfbuzz.doap +24 -0
- data/vendor/github.com/harfbuzz/harfbuzz/m4/ax_code_coverage.m4 +264 -0
- data/vendor/github.com/harfbuzz/harfbuzz/m4/ax_cxx_compile_stdcxx.m4 +982 -0
- data/vendor/github.com/harfbuzz/harfbuzz/m4/ax_pthread.m4 +485 -0
- data/vendor/github.com/harfbuzz/harfbuzz/m4/pkg.m4 +157 -0
- data/vendor/github.com/harfbuzz/harfbuzz/mingw32.sh +22 -0
- data/vendor/github.com/harfbuzz/harfbuzz/mingw64.sh +22 -0
- data/vendor/github.com/harfbuzz/harfbuzz/replace-enum-strings.cmake +21 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/Makefile.am +445 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/Makefile.sources +214 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/check-c-linkage-decls.sh +27 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/check-externs.sh +22 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/check-header-guards.sh +24 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/check-includes.sh +44 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/check-libstdc++.sh +44 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/check-static-inits.sh +40 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/check-symbols.sh +62 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/dev-run.sh +98 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/dump-indic-data.cc +43 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/dump-khmer-data.cc +43 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/dump-myanmar-data.cc +43 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/dump-use-data.cc +38 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/gen-arabic-table.py +269 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/gen-def.py +19 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/gen-indic-table.py +260 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/gen-unicode-ranges.py +52 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/gen-use-table.py +484 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/harfbuzz-config.cmake.in +82 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/harfbuzz-gobject.pc.in +12 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/harfbuzz-icu.pc.in +13 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/harfbuzz-subset.pc.in +12 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/harfbuzz.pc.in +13 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-aat-layout-ankr-table.hh +80 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-aat-layout-common-private.hh +728 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-aat-layout-kerx-table.hh +339 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-aat-layout-morx-table.hh +728 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-aat-layout-private.hh +43 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-aat-layout-trak-table.hh +201 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-aat-layout.cc +143 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-atomic-private.hh +189 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-blob.cc +504 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-blob.h +129 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-buffer-deserialize-json.hh +643 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-buffer-deserialize-json.rl +132 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-buffer-deserialize-text.hh +571 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-buffer-deserialize-text.rl +126 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-buffer-private.hh +388 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-buffer-serialize.cc +486 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-buffer.cc +2010 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-buffer.h +562 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-common.cc +1050 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-common.h +397 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-coretext.cc +1401 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-coretext.h +64 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-debug.hh +444 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-deprecated.h +65 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-directwrite.cc +931 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-directwrite.h +38 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-dsalgs.hh +161 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-face-private.hh +111 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-face.cc +506 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-face.h +121 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-fallback-shape.cc +149 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-font-private.hh +561 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-font.cc +1846 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-font.h +641 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ft.cc +783 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ft.h +132 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-glib.cc +431 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-glib.h +56 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-gobject-enums.cc.tmpl +73 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-gobject-enums.h.tmpl +56 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-gobject-structs.cc +83 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-gobject-structs.h +138 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-gobject.h +40 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-graphite2.cc +421 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-graphite2.h +52 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-icu.cc +394 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-icu.h +52 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-mutex-private.hh +141 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-object-private.hh +196 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-open-file-private.hh +372 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-open-type-private.hh +1238 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-cmap-table.hh +789 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-color-cbdt-table.hh +471 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-color-colr-table.hh +142 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-color-cpal-table.hh +208 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-color.cc +183 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-font.cc +281 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-font.h +45 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-glyf-table.hh +473 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-hdmx-table.hh +198 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-head-table.hh +154 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-hhea-table.hh +98 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-hmtx-table.hh +328 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-kern-table.hh +394 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-layout-base-table.hh +655 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-layout-common-private.hh +1773 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-layout-gdef-table.hh +459 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-layout-gpos-table.hh +1654 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-layout-gsub-table.hh +1364 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-layout-gsubgpos-private.hh +2374 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-layout-jstf-table.hh +234 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-layout-private.hh +683 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-layout.cc +1313 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-layout.h +338 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-map-private.hh +250 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-map.cc +336 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-math-table.hh +722 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-math.cc +253 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-math.h +209 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-maxp-table.hh +148 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-name-table.hh +138 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-os2-table.hh +181 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-os2-unicode-ranges.hh +247 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-post-macroman.hh +294 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-post-table.hh +282 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-arabic-fallback.hh +354 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-arabic-private.hh +50 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-arabic-table.hh +398 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-arabic-win1256.hh +323 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-arabic.cc +721 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-default.cc +46 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-hangul.cc +431 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-hebrew.cc +186 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-indic-machine.hh +1319 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-indic-machine.rl +125 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-indic-private.hh +401 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-indic-table.cc +486 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-indic.cc +1569 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-khmer-machine.hh +294 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-khmer-machine.rl +107 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-khmer-private.hh +124 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-khmer.cc +835 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-myanmar-machine.hh +413 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-myanmar-machine.rl +129 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-myanmar-private.hh +171 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-myanmar.cc +401 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-private.hh +397 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-thai.cc +383 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-tibetan.cc +63 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-use-machine.hh +502 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-use-machine.rl +176 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-use-private.hh +97 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-use-table.cc +788 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-use.cc +612 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-fallback-private.hh +53 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-fallback.cc +559 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-normalize-private.hh +69 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-normalize.cc +433 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-private.hh +108 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape.cc +970 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape.h +53 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-tag.cc +1094 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-tag.h +59 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-var-avar-table.hh +149 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-var-fvar-table.hh +209 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-var-hvar-table.hh +165 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-var-mvar-table.hh +114 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-var.cc +159 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-var.h +105 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot.h +45 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-private.hh +1073 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-set-digest-private.hh +179 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-set-private.hh +658 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-set.cc +519 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-set.h +165 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-shape-plan-private.hh +67 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-shape-plan.cc +578 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-shape-plan.h +108 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-shape.cc +161 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-shape.h +62 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-shaper-impl-private.hh +43 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-shaper-list.hh +58 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-shaper-private.hh +124 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-shaper.cc +111 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-string-array.hh +81 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-subset-glyf.cc +307 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-subset-glyf.hh +40 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-subset-input.cc +119 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-subset-plan.cc +227 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-subset-plan.hh +85 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-subset-private.hh +62 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-subset.cc +339 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-subset.h +83 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ucdn.cc +273 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ucdn/COPYING +13 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ucdn/Makefile.am +16 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ucdn/Makefile.sources +7 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ucdn/README +40 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ucdn/ucdn.c +360 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ucdn/ucdn.h +453 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ucdn/ucdn_db.h +5540 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-unicode-private.hh +371 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-unicode.cc +563 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-unicode.h +471 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-uniscribe.cc +1039 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-uniscribe.h +46 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-utf-private.hh +282 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-version.h +66 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-version.h.in +66 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb-warning.cc +39 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/hb.h +51 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/main.cc +201 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/sample.py +78 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/test-buffer-serialize.cc +129 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/test-size-params.cc +94 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/test-unicode-ranges.cc +67 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/test-would-substitute.cc +104 -0
- data/vendor/github.com/harfbuzz/harfbuzz/src/test.cc +134 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/CMakeLists.txt +4 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/Makefile.am +15 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/api/.valgrind-suppressions +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/api/CMakeLists.txt +29 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/api/Makefile.am +169 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/Inconsolata-Regular.ab.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/Inconsolata-Regular.abc.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/Inconsolata-Regular.abc.widerc.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/Inconsolata-Regular.ac.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/Inconsolata-Regular.ac.widerc.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/MathTestFontEmpty.otf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/MathTestFontFull.otf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/MathTestFontNone.otf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/MathTestFontPartial1.otf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/MathTestFontPartial2.otf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/MathTestFontPartial3.otf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/MathTestFontPartial4.otf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/README +3 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/Roboto-Regular.abc.cmap-format12-only.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/Roboto-Regular.abc.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/Roboto-Regular.ac.cmap-format12-only.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/Roboto-Regular.ac.nohints.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/Roboto-Regular.ac.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/Roboto-Regular.b.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/Roboto-Regular.components.1fc.nohints.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/Roboto-Regular.components.subset.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/Roboto-Regular.components.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/api/hb-subset-test.h +136 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/api/hb-test.h +314 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/api/test-blob.c +349 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/api/test-buffer.c +884 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/api/test-c.c +64 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/api/test-common.c +225 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/api/test-cplusplus.cc +30 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/api/test-font.c +550 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/api/test-object.c +375 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/api/test-ot-color.c +319 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/api/test-ot-math.c +712 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/api/test-ot-tag.c +320 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/api/test-set.c +399 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/api/test-shape.c +208 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/api/test-subset-cmap.c +82 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/api/test-subset-glyf.c +183 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/api/test-subset-hdmx.c +81 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/api/test-subset-hmtx.c +162 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/api/test-subset-os2.c +59 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/api/test-unicode.c +937 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/api/test-version.c +81 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/fuzzing/CMakeLists.txt +18 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/fuzzing/Makefile.am +52 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/fuzzing/README +21 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/fuzzing/hb-fuzzer.cc +52 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/fuzzing/hb-fuzzer.hh +4 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/fuzzing/main.cc +21 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/fuzzing/run-fuzzer-tests.py +32 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/CMakeLists.txt +17 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/Makefile.am +35 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/README.md +41 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/Makefile.am +13 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/COPYING +95 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/Makefile.am +20 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/Makefile.sources +47 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/0509e80afb379d16560e9e47bdd7d888bebdebc6.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/051d92f8bc6ff724511b296c27623f824de256e9.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/074a5ae6b19de8f29772fdd5df2d3d833f81f5e6.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/07f054357ff8638bac3711b422a1e31180bba863.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/15dfc433a135a658b9f4b1a861b5cdd9658ccbb9.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/1735326da89f0818cd8c51a0600e9789812c0f94.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/191826b9643e3f124d865d617ae609db6a2ce203.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/1a3d8f381387dd29be1e897e4b5100ac8b4829e1.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/1a6f1687b7a221f9f2c834b0b360d3c8463b6daf.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/1c04a16f32a39c26c851b7fc014d2e8d298ba2b8.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/1c2c3fc37b2d4c3cb2ef726c6cdaaabd4b7f3eb9.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/1ed7e9064f008f62de6ff0207bb4dd29409597a5.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/205edd09bd3d141cc9580f650109556cc28b22cb.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/217a934cfe15c548b572c203dceb2befdf026462.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/21b7fb9c1eeae260473809fbc1fe330f66a507cd.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/226bc2deab3846f1a682085f70c67d0421014144.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/233c1e252e737ca79e03a9fd56b71aaa4a230f2b.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/243798dd281c1c77c065958e1ff467420faa9bde.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/24b8d24d00ae86f49791b746da4c9d3f717a51a8.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/270b89df543a7e48e206a2d830c0e10e5265c630.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/298c9e1d955f10f6f72c6915c3c6ff9bf9695cec.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/319f5d7ebffbefc5c5e6569f8cea73444d7a7268.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/341421e629668b1a1242245d39238ca48432d35d.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/3493e92eaded2661cadde752a39f9d58b11f0326.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/3511ff5c1647150595846ac414c595cccac34f18.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/37033cc5cf37bb223d7355153016b6ccece93b28.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/373e67bf41ca264e260a9716162b71a23549e885.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/375d6ae32a3cbe52fbf81a4e5777e3377675d5a3.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/3cae6bfe5b57c07ba81ddbd54c02fe4f3a1e3bf6.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/3d0b77a2360aa6faa1385aaa510509ab70dfbeff.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/43979b90b2dd929723cf4fe1715990bcb9c9a56b.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/43ef465752be9af900745f72fe29cb853a1401a5.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/45855bc8d46332b39c4ab9e2ee1a26b1f896da6b.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/49c9f7485c1392fa09a1b801bc2ffea79275f22e.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/4cce528e99f600ed9c25a2b69e32eb94a03b4ae8.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/4fac3929fc3332834e93673780ec0fe94342d193.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/5028afb650b1bb718ed2131e872fbcce57828fff.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/53374c7ca3657be37efde7ed02ae34229a56ae1f.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/54674a3111d209fb6be0ed31745314b7a8d2c244.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/558661aa659912f4d30ecd27bd09835171a8e2b0.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/55c88ebbe938680b08f92c3de20713183e0c7481.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/56cfd0e18d07f41c38e9598545a6d369127fc6f9.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/573d3a3177c9a8646e94c8a0d7b224334340946a.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/57a9d9f83020155cbb1d2be1f43d82388cbecc88.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/59a585a63b3df608fbeef00956c8c108deec7de6.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/5a5daf5eb5a4db77a2baa3ad9c7a6ed6e0655fa8.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/5dfad7735c6a67085f1b90d4d497e32907db4c78.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/641bd9db850193064d17575053ae2bf8ec149ddc.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/663aef6b019dbf45ffd74089e2b5f2496ceceb18.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/6991b13ce889466be6de3f66e891de2bc0f117ee.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/6ff0fbead4462d9f229167b4e6839eceb8465058.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/706c5d7b625f207bc0d874c67237aad6f1e9cd6f.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/757ebd573617a24aa9dfbf0b885c54875c6fe06b.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/7a37dc4d5bf018456aea291cee06daf004c0221c.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/7e14e7883ed152baa158b80e207b66114c823a8b.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/8099955657a54e9ee38a6ba1d6f950ce58e3cc25.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/813c2f8e5512187fd982417a7fb4286728e6f4a8.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/81c368a33816fb20e9f647e8f24e2180f4720263.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/8228d035fcd65d62ec9728fb34f42c63be93a5d3.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/8240789f6d12d4cfc4b5e8e6f246c3701bcf861f.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/82f4f3b57bb55344e72e70231380202a52af5805.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/8454d22037f892e76614e1645d066689a0200e61.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/856ff9562451293cbeff6f396d4e3877c4f0a436.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/85fe0be440c64ac77699e21c2f1bd933a919167e.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/87f85d17d26f1fe9ad28d7365101958edaefb967.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/8a9fea2a7384f2116e5b84a9b31f83be7850ce21.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/94a5d6fb15a27521fba9ea4aee9cb39b2d03322a.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/96490dd2ff81233b335a650e7eb660e0e7b2eeea.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/98b7887cff91f722b92a8ff800120954606354f9.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/9d8a94a67932a3ab75a596fc8b5c6d0392ca9e49.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/a014549f766436cf55b2ceb40e462038938ee899.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/a34a7b00f22ffb5fd7eef6933b81c7e71bc2cdfb.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/a34a9191d9376bda419836effeef7e75c1386016.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/a69118c2c2ada48ff803d9149daa54c9ebdae30e.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/a6c76d1bafde4a0b1026ebcc932d2e5c6fd02442.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/a919b33197965846f21074b24e30250d67277bce.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/a98e908e2ed21b22228ea59ebcc0f05034c86f2e.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/af3086380b743099c54a3b11b96766039ea62fcd.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/b151cfcdaa77585d77f17a42158e0873fc8e2633.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/b6acef662e0beb8d5fcf5b61c6b0ca69537b7402.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/b9e2aaa0d75fcef6971ec3a96d806ba4a6b31fe2.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/bb0c53752e85c3d28973ebc913287b8987d3dfe8.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/bb29ce50df2bdba2d10726427c6b7609bf460e04.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/bb9473d2403488714043bcfb946c9f78b86ad627.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/bbf4a308c402f0678c3e82844892a4da2ebe598f.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/bf39b0e91ef9807f15a9e283a21a14a209fd2cfc.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/bf962d3202883a820aed019d9b5c1838c2ff69c6.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/c4e48b0886ef460f532fb49f00047ec92c432ec0.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/cc5f3d2d717fb6bd4dfae1c16d48a2cb8e12233b.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/d629e7fedc0b350222d7987345fe61613fa3929a.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/d9b8bc10985f24796826c29f7ccba3d0ae11ec02.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/dd9f0c7c7c36f75a18be0cab1cddf8f3ab0f366b.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/df768b9c257e0c9c35786c47cae15c46571d56be.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/e207635780b42f898d58654b65098763e340f5c7.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/e68a88939e0f06e34d2bc911f09b70890289c8fd.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/e88c339237f52d21e01c55f01b9c1b4cc14a0467.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/e90374e5e439e00725b4fe7a8d73db57c5a97f82.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/ee39587d13b2afa5499cc79e45780aa79293bbd4.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/ef2511f215aa3ca847cbfffbf861793b42170875.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/ef86fe710cfea877bbe0dbb6946a1f88d0661031.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/f22416c692720a7d46fadf4af99f4c9e094f00b9.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/f443753e8ffe8e8aae606cfba158e00334b6efb1.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/f499fbc23865022234775c43503bba2e63978fe1.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/f518eb6f6b5eec2946c9fbbbde44e45d46f5e2ac.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/f9b1dd4dcb515e757789a22cb4241107746fd3d0.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/fab39d60d758cb586db5a504f218442cd1395725.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/fbb6c84c9e1fe0c39e152fbe845e51fd81f6748e.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/fcdcffbdf1c4c97c05308d7600e4c283eb47dbca.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/ffa0f5d2d9025486d8469d8b1fdd983e7632499b.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/arabic-fallback-shaping.tests +1 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/arabic-feature-order.tests +4 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/arabic-like-joining.tests +1 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/arabic-mark-order.tests +6 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/arabic-stch.tests +1 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/automatic-fractions.tests +3 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/cluster.tests +2 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/color-fonts.tests +1 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/context-matching.tests +3 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/cursive-positioning.tests +4 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/default-ignorables.tests +2 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/emoji-flag-tags.tests +2 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/fallback-positioning.tests +2 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/fuzzed.tests +23 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/hangul-jamo.tests +2 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/hyphens.tests +2 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/indic-consonant-with-stacker.tests +4 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/indic-init.tests +1 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/indic-joiner-candrabindu.tests +2 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/indic-joiners.tests +2 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/indic-old-spec.tests +2 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/indic-pref-blocking.tests +2 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/indic-script-extensions.tests +2 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/indic-special-cases.tests +3 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/indic-syllable.tests +8 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/language-tags.tests +12 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/ligature-id.tests +36 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/mark-attachment.tests +1 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/mark-filtering-sets.tests +5 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/mongolian-variation-selector.tests +4 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/myanmar-syllable.tests +1 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/simple.tests +2 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/spaces.tests +17 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/tibetan-contractions-1.tests +60 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/tibetan-contractions-2.tests +53 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/tibetan-vowels.tests +11 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/use-marchen.tests +35 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/use-syllable.tests +8 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/use.tests +5 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/variations-rvrn.tests +100 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/vertical.tests +3 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/zero-width-marks.tests +11 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/COPYING +13 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/DISABLED +35 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/Makefile.am +26 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/Makefile.sources +66 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/README +7 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/extract-tests.py +49 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/AdobeVFPrototype-Subset.otf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/FDArrayTest257.otf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/FDArrayTest65535.otf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/NotoSansBalinese-Regular.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/NotoSansKannada-Regular.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/NotoSerifKannada-Regular.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/Selawik-README.md +60 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/Selawik-variable.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestAVAR.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestCMAP14.otf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestCMAPMacTurkish.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestCVARGVAROne.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestCVARGVARTwo.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestGLYFOne.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestGPOSFour.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestGPOSOne.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestGPOSThree.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestGPOSTwo.otf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestGSUBOne.otf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestGVAREight.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestGVARFour.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestGVARNine.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestGVAROne.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestGVARThree.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestGVARTwo.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestHVAROne.otf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestHVARTwo.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestKERNOne.otf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXEight.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXEighteen.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXEleven.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXFour.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXFourteen.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXNine.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXOne.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXSeventeen.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXSixteen.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXTen.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXThirteen.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXThree.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXTwelve.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXTwenty.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXTwentyfive.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXTwentyone.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXTwentysix.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXTwentythree.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXTwentytwo.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXTwo.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestShapeAran.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestShapeEthi.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/Zycon.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/AVAR-1.tests +17 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/CFF-1.tests +13 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/CFF-2.tests +13 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/CFF2-1.tests +9 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/CMAP-1.tests +4 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/CMAP-2.tests +2 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/CMAP-3.tests +20 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/CVAR-1.tests +3 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/CVAR-2.tests +3 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/GLYF-1.tests +1 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/GPOS-1.tests +19 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/GPOS-2.tests +3 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/GPOS-3.tests +4 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/GPOS-4.tests +4 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/GPOS-5.tests +5 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/GSUB-1.tests +1 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/GSUB-2.tests +11 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/GVAR-1.tests +9 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/GVAR-2.tests +9 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/GVAR-3.tests +9 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/GVAR-4.tests +11 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/GVAR-5.tests +11 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/GVAR-6.tests +11 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/GVAR-7.tests +7 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/GVAR-8.tests +6 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/GVAR-9.tests +10 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/HVAR-1.tests +6 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/HVAR-2.tests +6 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/KERN-1.tests +1 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/KERN-2.tests +1 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-1.tests +1 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-10.tests +1 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-11.tests +1 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-12.tests +3 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-13.tests +1 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-14.tests +2 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-16.tests +1 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-17.tests +1 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-18.tests +4 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-19.tests +2 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-2.tests +16 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-20.tests +7 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-21.tests +1 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-22.tests +1 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-23.tests +1 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-25.tests +9 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-26.tests +2 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-3.tests +16 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-4.tests +15 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-5.tests +25 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-6.tests +1 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-7.tests +1 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-8.tests +3 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-9.tests +1 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/SHARAN-1.tests +6 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/SHBALI-1.tests +22 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/SHBALI-2.tests +12 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/SHBALI-3.tests +9 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/SHKNDA-1.tests +34 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/SHKNDA-2.tests +16 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/SHKNDA-3.tests +31 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/update.sh +46 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/hb-diff +10 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/hb-diff-colorize +7 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/hb-diff-filter-failures +5 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/hb-diff-stat +5 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/hb-unicode-decode +5 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/hb-unicode-encode +5 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/hb-unicode-prettyname +6 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/hb_test_tools.py +571 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/record-test.sh +107 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/run-tests.py +98 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-arabic/language-persian/mehran.txt +8 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/2grams.txt +601 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/3grams.txt +3415 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/4grams.txt +6316 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/5grams.txt +5029 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/6grams.txt +1542 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/7grams.txt +354 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/8grams.txt +26 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/LICENSE +3 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/README +16 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/SOURCES +4 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/lam-alef.txt +28 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/language-arabic.txt +695 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/language-persian.txt +48 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/language-urdu.txt +188 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/ligature-components.txt +18 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/ligature-diacritics.txt +1 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/mark-skipping.txt +10 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-mongolian/misc/misc.txt +6 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-mongolian/misc/non-joining.txt +8 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-mongolian/misc/poem.txt +4 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-mongolian/misc/variation-selectors.txt +8 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-nko/misc/misc.txt +5 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-phags-pa/misc/misc.txt +14 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-syriac/misc/abbreviation-mark.txt +11 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-syriac/misc/alaph.txt +98 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-default/script-ethiopic/misc/misc.txt +1 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-default/script-han/misc/cjk-compat.txt +3 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-default/script-hiragana/misc/kazuraki-liga-lines.txt +8 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-default/script-hiragana/misc/kazuraki-liga.txt +53 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-default/script-linear-b/misc/misc.txt +1 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-default/script-tifinagh/misc/misc.txt +10 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-hangul/script-hangul/misc/misc.txt +4 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-hebrew/script-hebrew/misc/diacritics.txt +16 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/LICENSE +19 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/README +13 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/SOURCES +2 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt +4 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt +40 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt +10 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt +10 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt +11 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt +2 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt +6 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt +59 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt +131 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/gsub/IndicFontFeatureGSUB.txt +139 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-bengali/misc/misc.txt +53 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-bengali/misc/reph.txt +14 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/LICENSE +19 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/README +13 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/SOURCES +2 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt +1 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt +36 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt +10 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt +10 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt +12 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt +2 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt +6 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt +58 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt +119 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/gsub/IndicFontFeatureGSUB.txt +215 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/misc/dottedcircle.txt +8 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/misc/eyelash.txt +3 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/misc/joiners.txt +19 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/misc/misc.txt +36 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/misc/spec-deviations.txt +1 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/misc/tricky-reordering.txt +5 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/LICENSE +19 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/README +13 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/SOURCES +2 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalConsonants.txt +8 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt +4 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt +45 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt +14 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-DevnagariSpecificAddition.txt +1 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt +10 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-GenericPunctuation.txt +2 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt +16 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt +10 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt +185 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt +185 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/gsub/IndicFontFeatureGSUB.txt +1367 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/LICENSE +19 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/README +13 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/SOURCES +2 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt +1 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt +34 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt +12 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt +10 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt +13 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt +2 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt +7 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt +170 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt +170 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/gsub/IndicFontFeatureGSUB.txt +1156 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/misc/misc.txt +2 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/LICENSE +19 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/README +13 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/SOURCES +2 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt +38 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt +9 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt +10 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-GurmukhiSpecific.txt +6 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt +10 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt +2 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt +6 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt +22 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt +2 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/gsub/IndicFontFeatureGSUB.txt +152 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-kannada/misc/misc.txt +20 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-kannada/misc/right-matras.txt +7 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/LICENSE +19 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/README +13 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/SOURCES +2 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalConsonants.txt +1 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt +4 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt +40 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt +13 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt +10 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt +14 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt +2 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt +9 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt +188 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/gsub/IndicFontFeatureGSUB.txt +306 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/misc/cibu.txt +188 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/misc/dot-reph.txt +15 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/misc/misc.txt +65 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/utrrs/LICENSE +19 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/utrrs/README +13 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/utrrs/SOURCES +2 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt +2 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt +36 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt +12 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt +10 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt +14 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt +2 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt +4 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/utrrs/gsub/IndicFontFeatureGSUB.txt +254 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-oriya/misc/bindu.txt +2 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-oriya/misc/misc.txt +28 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/LICENSE +19 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/README +13 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/SOURCES +2 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalConsonants.txt +3 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt +2 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt +34 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt +12 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt +10 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt +12 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-OriyaSpecific.txt +2 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt +2 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt +8 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/gsub/IndicFontFeatureGSUB.txt +170 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/misc/extensive.txt +4390 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/misc/misc.txt +41 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/misc/reph.txt +3 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/misc/split-matras.txt +4 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/LICENSE +19 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/README +13 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/SOURCES +2 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt +41 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt +17 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt +18 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-Punctuation.txt +1 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt +3 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/gpos/IndicFontFeatureGPOS.txt +162 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Conjunct.txt +1 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Rakaaraansaya.txt +41 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Repaya.txt +42 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Special-Cases.txt +2 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-TouchingLetters.txt +1 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Yansaya.txt +41 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB.txt +1 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/misc/misc.txt +43 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/LICENSE +19 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/README +13 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/SOURCES +2 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt +23 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-CurrencySymbols.txt +1 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt +11 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt +10 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt +12 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Numerics.txt +3 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt +2 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Symbols.txt +6 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-TamilSymbol.txt +1 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt +4 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt +64 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt +44 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/gsub/IndicFontFeatureGSUB.txt +4 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-telugu/misc/misc.txt +12 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-telugu/utrrs/LICENSE +19 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-telugu/utrrs/README +13 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-telugu/utrrs/SOURCES +2 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt +2 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt +38 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt +13 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt +10 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt +14 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt +2 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt +6 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-telugu/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt +385 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-telugu/utrrs/gsub/IndicFontFeatureGSUB.txt +287 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/south-east-asian/script-javanese/misc.txt +54 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/south-east-asian/script-khmer/misc/misc.txt +23 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/south-east-asian/script-khmer/misc/other-marks-invalid.txt +4 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/south-east-asian/script-khmer/misc/other-marks.txt +7 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-myanmar/script-myanmar/misc/misc.txt +7 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-myanmar/script-myanmar/misc/otspec.txt +1 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-myanmar/script-myanmar/misc/utn11.txt +34 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-thai/script-lao/misc/sara-am.txt +20 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-thai/script-thai/misc/misc.txt +11 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-thai/script-thai/misc/phinthu.txt +16 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-thai/script-thai/misc/pua-shaping.txt +11 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-thai/script-thai/misc/sara-am.txt +20 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-tibetan/script-tibetan/misc/contractions.txt +612 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-tibetan/script-tibetan/misc/misc.txt +2 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-use/script-batak/misc.txt +9 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-use/script-buginese/misc.txt +70 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-use/script-cham/misc.txt +3 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-use/script-kaithi/misc.txt +6 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-use/script-kharoshti/misc.txt +36 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-use/script-tai-tham/misc.txt +2 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-use/script-tai-tham/torture.txt +23 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/subset/CMakeLists.txt +10 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/subset/Makefile.am +22 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/Makefile.am +24 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/Makefile.sources +10 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/expected/basics/Roboto-Regular.abc.default.61,62,63.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/expected/basics/Roboto-Regular.abc.default.61,63.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/expected/basics/Roboto-Regular.abc.default.61.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/expected/basics/Roboto-Regular.abc.default.62.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/expected/basics/Roboto-Regular.abc.default.63.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/expected/basics/Roboto-Regular.abc.drop-hints.61,62,63.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/expected/basics/Roboto-Regular.abc.drop-hints.61,63.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/expected/basics/Roboto-Regular.abc.drop-hints.61.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/expected/basics/Roboto-Regular.abc.drop-hints.62.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/expected/basics/Roboto-Regular.abc.drop-hints.63.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/expected/full-font/Roboto-Regular.default.1FC,21,41,20,62,63.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/expected/full-font/Roboto-Regular.default.61,62,63.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/expected/full-font/Roboto-Regular.drop-hints.1FC,21,41,20,62,63.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/expected/full-font/Roboto-Regular.drop-hints.61,62,63.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/fonts/Roboto-Regular.abc.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/fonts/Roboto-Regular.ttf +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/profiles/default.txt +0 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/profiles/drop-hints.txt +1 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/tests/basics.tests +13 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/tests/full-font.tests +11 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/subset/generate-expected-outputs.py +47 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/subset/run-tests.py +133 -0
- data/vendor/github.com/harfbuzz/harfbuzz/test/subset/subset_test_suite.py +87 -0
- data/vendor/github.com/harfbuzz/harfbuzz/util/Makefile.am +75 -0
- data/vendor/github.com/harfbuzz/harfbuzz/util/Makefile.sources +37 -0
- data/vendor/github.com/harfbuzz/harfbuzz/util/ansi-print.cc +427 -0
- data/vendor/github.com/harfbuzz/harfbuzz/util/ansi-print.hh +40 -0
- data/vendor/github.com/harfbuzz/harfbuzz/util/hb-fc-list.c +222 -0
- data/vendor/github.com/harfbuzz/harfbuzz/util/hb-fc.cc +149 -0
- data/vendor/github.com/harfbuzz/harfbuzz/util/hb-fc.h +46 -0
- data/vendor/github.com/harfbuzz/harfbuzz/util/hb-ot-shape-closure.cc +119 -0
- data/vendor/github.com/harfbuzz/harfbuzz/util/hb-shape.cc +165 -0
- data/vendor/github.com/harfbuzz/harfbuzz/util/hb-subset.cc +127 -0
- data/vendor/github.com/harfbuzz/harfbuzz/util/hb-view.cc +40 -0
- data/vendor/github.com/harfbuzz/harfbuzz/util/helper-cairo-ansi.cc +102 -0
- data/vendor/github.com/harfbuzz/harfbuzz/util/helper-cairo-ansi.hh +40 -0
- data/vendor/github.com/harfbuzz/harfbuzz/util/helper-cairo.cc +553 -0
- data/vendor/github.com/harfbuzz/harfbuzz/util/helper-cairo.hh +86 -0
- data/vendor/github.com/harfbuzz/harfbuzz/util/main-font-text.hh +96 -0
- data/vendor/github.com/harfbuzz/harfbuzz/util/options.cc +1026 -0
- data/vendor/github.com/harfbuzz/harfbuzz/util/options.hh +690 -0
- data/vendor/github.com/harfbuzz/harfbuzz/util/shape-consumer.hh +101 -0
- data/vendor/github.com/harfbuzz/harfbuzz/util/view-cairo.cc +133 -0
- data/vendor/github.com/harfbuzz/harfbuzz/util/view-cairo.hh +102 -0
- metadata +939 -0
|
@@ -0,0 +1,397 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright © 2007,2008,2009 Red Hat, Inc.
|
|
3
|
+
* Copyright © 2011,2012 Google, Inc.
|
|
4
|
+
*
|
|
5
|
+
* This is part of HarfBuzz, a text shaping library.
|
|
6
|
+
*
|
|
7
|
+
* Permission is hereby granted, without written agreement and without
|
|
8
|
+
* license or royalty fees, to use, copy, modify, and distribute this
|
|
9
|
+
* software and its documentation for any purpose, provided that the
|
|
10
|
+
* above copyright notice and the following two paragraphs appear in
|
|
11
|
+
* all copies of this software.
|
|
12
|
+
*
|
|
13
|
+
* IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
|
|
14
|
+
* DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
|
|
15
|
+
* ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
|
|
16
|
+
* IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
|
|
17
|
+
* DAMAGE.
|
|
18
|
+
*
|
|
19
|
+
* THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
|
|
20
|
+
* BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
|
21
|
+
* FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
|
|
22
|
+
* ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
|
|
23
|
+
* PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
|
|
24
|
+
*
|
|
25
|
+
* Red Hat Author(s): Behdad Esfahbod
|
|
26
|
+
* Google Author(s): Behdad Esfahbod
|
|
27
|
+
*/
|
|
28
|
+
|
|
29
|
+
#ifndef HB_H_IN
|
|
30
|
+
#error "Include <hb.h> instead."
|
|
31
|
+
#endif
|
|
32
|
+
|
|
33
|
+
#ifndef HB_COMMON_H
|
|
34
|
+
#define HB_COMMON_H
|
|
35
|
+
|
|
36
|
+
#ifndef HB_BEGIN_DECLS
|
|
37
|
+
# ifdef __cplusplus
|
|
38
|
+
# define HB_BEGIN_DECLS extern "C" {
|
|
39
|
+
# define HB_END_DECLS }
|
|
40
|
+
# else /* !__cplusplus */
|
|
41
|
+
# define HB_BEGIN_DECLS
|
|
42
|
+
# define HB_END_DECLS
|
|
43
|
+
# endif /* !__cplusplus */
|
|
44
|
+
#endif
|
|
45
|
+
|
|
46
|
+
#if defined (_SVR4) || defined (SVR4) || defined (__OpenBSD__) || \
|
|
47
|
+
defined (_sgi) || defined (__sun) || defined (sun) || \
|
|
48
|
+
defined (__digital__) || defined (__HP_cc)
|
|
49
|
+
# include <inttypes.h>
|
|
50
|
+
#elif defined (_AIX)
|
|
51
|
+
# include <sys/inttypes.h>
|
|
52
|
+
#else
|
|
53
|
+
# include <stdint.h>
|
|
54
|
+
#endif
|
|
55
|
+
|
|
56
|
+
HB_BEGIN_DECLS
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
typedef int hb_bool_t;
|
|
60
|
+
|
|
61
|
+
typedef uint32_t hb_codepoint_t;
|
|
62
|
+
typedef int32_t hb_position_t;
|
|
63
|
+
typedef uint32_t hb_mask_t;
|
|
64
|
+
|
|
65
|
+
typedef union _hb_var_int_t {
|
|
66
|
+
uint32_t u32;
|
|
67
|
+
int32_t i32;
|
|
68
|
+
uint16_t u16[2];
|
|
69
|
+
int16_t i16[2];
|
|
70
|
+
uint8_t u8[4];
|
|
71
|
+
int8_t i8[4];
|
|
72
|
+
} hb_var_int_t;
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
/* hb_tag_t */
|
|
76
|
+
|
|
77
|
+
typedef uint32_t hb_tag_t;
|
|
78
|
+
|
|
79
|
+
#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint8_t)(c1))<<24)|(((uint8_t)(c2))<<16)|(((uint8_t)(c3))<<8)|((uint8_t)(c4))))
|
|
80
|
+
#define HB_UNTAG(tag) ((uint8_t)((tag)>>24)), ((uint8_t)((tag)>>16)), ((uint8_t)((tag)>>8)), ((uint8_t)(tag))
|
|
81
|
+
|
|
82
|
+
#define HB_TAG_NONE HB_TAG(0,0,0,0)
|
|
83
|
+
#define HB_TAG_MAX HB_TAG(0xff,0xff,0xff,0xff)
|
|
84
|
+
#define HB_TAG_MAX_SIGNED HB_TAG(0x7f,0xff,0xff,0xff)
|
|
85
|
+
|
|
86
|
+
/* len=-1 means str is NUL-terminated. */
|
|
87
|
+
HB_EXTERN hb_tag_t
|
|
88
|
+
hb_tag_from_string (const char *str, int len);
|
|
89
|
+
|
|
90
|
+
/* buf should have 4 bytes. */
|
|
91
|
+
HB_EXTERN void
|
|
92
|
+
hb_tag_to_string (hb_tag_t tag, char *buf);
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* hb_direction_t:
|
|
97
|
+
* @HB_DIRECTION_INVALID: Initial, unset direction.
|
|
98
|
+
* @HB_DIRECTION_LTR: Text is set horizontally from left to right.
|
|
99
|
+
* @HB_DIRECTION_RTL: Text is set horizontally from right to left.
|
|
100
|
+
* @HB_DIRECTION_TTB: Text is set vertically from top to bottom.
|
|
101
|
+
* @HB_DIRECTION_BTT: Text is set vertically from bottom to top.
|
|
102
|
+
*/
|
|
103
|
+
typedef enum {
|
|
104
|
+
HB_DIRECTION_INVALID = 0,
|
|
105
|
+
HB_DIRECTION_LTR = 4,
|
|
106
|
+
HB_DIRECTION_RTL,
|
|
107
|
+
HB_DIRECTION_TTB,
|
|
108
|
+
HB_DIRECTION_BTT
|
|
109
|
+
} hb_direction_t;
|
|
110
|
+
|
|
111
|
+
/* len=-1 means str is NUL-terminated */
|
|
112
|
+
HB_EXTERN hb_direction_t
|
|
113
|
+
hb_direction_from_string (const char *str, int len);
|
|
114
|
+
|
|
115
|
+
HB_EXTERN const char *
|
|
116
|
+
hb_direction_to_string (hb_direction_t direction);
|
|
117
|
+
|
|
118
|
+
#define HB_DIRECTION_IS_VALID(dir) ((((unsigned int) (dir)) & ~3U) == 4)
|
|
119
|
+
/* Direction must be valid for the following */
|
|
120
|
+
#define HB_DIRECTION_IS_HORIZONTAL(dir) ((((unsigned int) (dir)) & ~1U) == 4)
|
|
121
|
+
#define HB_DIRECTION_IS_VERTICAL(dir) ((((unsigned int) (dir)) & ~1U) == 6)
|
|
122
|
+
#define HB_DIRECTION_IS_FORWARD(dir) ((((unsigned int) (dir)) & ~2U) == 4)
|
|
123
|
+
#define HB_DIRECTION_IS_BACKWARD(dir) ((((unsigned int) (dir)) & ~2U) == 5)
|
|
124
|
+
#define HB_DIRECTION_REVERSE(dir) ((hb_direction_t) (((unsigned int) (dir)) ^ 1))
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
/* hb_language_t */
|
|
128
|
+
|
|
129
|
+
typedef const struct hb_language_impl_t *hb_language_t;
|
|
130
|
+
|
|
131
|
+
HB_EXTERN hb_language_t
|
|
132
|
+
hb_language_from_string (const char *str, int len);
|
|
133
|
+
|
|
134
|
+
HB_EXTERN const char *
|
|
135
|
+
hb_language_to_string (hb_language_t language);
|
|
136
|
+
|
|
137
|
+
#define HB_LANGUAGE_INVALID ((hb_language_t) 0)
|
|
138
|
+
|
|
139
|
+
HB_EXTERN hb_language_t
|
|
140
|
+
hb_language_get_default (void);
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
/* hb_script_t */
|
|
144
|
+
|
|
145
|
+
/* http://unicode.org/iso15924/ */
|
|
146
|
+
/* http://goo.gl/x9ilM */
|
|
147
|
+
/* Unicode Character Database property: Script (sc) */
|
|
148
|
+
typedef enum
|
|
149
|
+
{
|
|
150
|
+
/*1.1*/ HB_SCRIPT_COMMON = HB_TAG ('Z','y','y','y'),
|
|
151
|
+
/*1.1*/ HB_SCRIPT_INHERITED = HB_TAG ('Z','i','n','h'),
|
|
152
|
+
/*5.0*/ HB_SCRIPT_UNKNOWN = HB_TAG ('Z','z','z','z'),
|
|
153
|
+
|
|
154
|
+
/*1.1*/ HB_SCRIPT_ARABIC = HB_TAG ('A','r','a','b'),
|
|
155
|
+
/*1.1*/ HB_SCRIPT_ARMENIAN = HB_TAG ('A','r','m','n'),
|
|
156
|
+
/*1.1*/ HB_SCRIPT_BENGALI = HB_TAG ('B','e','n','g'),
|
|
157
|
+
/*1.1*/ HB_SCRIPT_CYRILLIC = HB_TAG ('C','y','r','l'),
|
|
158
|
+
/*1.1*/ HB_SCRIPT_DEVANAGARI = HB_TAG ('D','e','v','a'),
|
|
159
|
+
/*1.1*/ HB_SCRIPT_GEORGIAN = HB_TAG ('G','e','o','r'),
|
|
160
|
+
/*1.1*/ HB_SCRIPT_GREEK = HB_TAG ('G','r','e','k'),
|
|
161
|
+
/*1.1*/ HB_SCRIPT_GUJARATI = HB_TAG ('G','u','j','r'),
|
|
162
|
+
/*1.1*/ HB_SCRIPT_GURMUKHI = HB_TAG ('G','u','r','u'),
|
|
163
|
+
/*1.1*/ HB_SCRIPT_HANGUL = HB_TAG ('H','a','n','g'),
|
|
164
|
+
/*1.1*/ HB_SCRIPT_HAN = HB_TAG ('H','a','n','i'),
|
|
165
|
+
/*1.1*/ HB_SCRIPT_HEBREW = HB_TAG ('H','e','b','r'),
|
|
166
|
+
/*1.1*/ HB_SCRIPT_HIRAGANA = HB_TAG ('H','i','r','a'),
|
|
167
|
+
/*1.1*/ HB_SCRIPT_KANNADA = HB_TAG ('K','n','d','a'),
|
|
168
|
+
/*1.1*/ HB_SCRIPT_KATAKANA = HB_TAG ('K','a','n','a'),
|
|
169
|
+
/*1.1*/ HB_SCRIPT_LAO = HB_TAG ('L','a','o','o'),
|
|
170
|
+
/*1.1*/ HB_SCRIPT_LATIN = HB_TAG ('L','a','t','n'),
|
|
171
|
+
/*1.1*/ HB_SCRIPT_MALAYALAM = HB_TAG ('M','l','y','m'),
|
|
172
|
+
/*1.1*/ HB_SCRIPT_ORIYA = HB_TAG ('O','r','y','a'),
|
|
173
|
+
/*1.1*/ HB_SCRIPT_TAMIL = HB_TAG ('T','a','m','l'),
|
|
174
|
+
/*1.1*/ HB_SCRIPT_TELUGU = HB_TAG ('T','e','l','u'),
|
|
175
|
+
/*1.1*/ HB_SCRIPT_THAI = HB_TAG ('T','h','a','i'),
|
|
176
|
+
|
|
177
|
+
/*2.0*/ HB_SCRIPT_TIBETAN = HB_TAG ('T','i','b','t'),
|
|
178
|
+
|
|
179
|
+
/*3.0*/ HB_SCRIPT_BOPOMOFO = HB_TAG ('B','o','p','o'),
|
|
180
|
+
/*3.0*/ HB_SCRIPT_BRAILLE = HB_TAG ('B','r','a','i'),
|
|
181
|
+
/*3.0*/ HB_SCRIPT_CANADIAN_SYLLABICS = HB_TAG ('C','a','n','s'),
|
|
182
|
+
/*3.0*/ HB_SCRIPT_CHEROKEE = HB_TAG ('C','h','e','r'),
|
|
183
|
+
/*3.0*/ HB_SCRIPT_ETHIOPIC = HB_TAG ('E','t','h','i'),
|
|
184
|
+
/*3.0*/ HB_SCRIPT_KHMER = HB_TAG ('K','h','m','r'),
|
|
185
|
+
/*3.0*/ HB_SCRIPT_MONGOLIAN = HB_TAG ('M','o','n','g'),
|
|
186
|
+
/*3.0*/ HB_SCRIPT_MYANMAR = HB_TAG ('M','y','m','r'),
|
|
187
|
+
/*3.0*/ HB_SCRIPT_OGHAM = HB_TAG ('O','g','a','m'),
|
|
188
|
+
/*3.0*/ HB_SCRIPT_RUNIC = HB_TAG ('R','u','n','r'),
|
|
189
|
+
/*3.0*/ HB_SCRIPT_SINHALA = HB_TAG ('S','i','n','h'),
|
|
190
|
+
/*3.0*/ HB_SCRIPT_SYRIAC = HB_TAG ('S','y','r','c'),
|
|
191
|
+
/*3.0*/ HB_SCRIPT_THAANA = HB_TAG ('T','h','a','a'),
|
|
192
|
+
/*3.0*/ HB_SCRIPT_YI = HB_TAG ('Y','i','i','i'),
|
|
193
|
+
|
|
194
|
+
/*3.1*/ HB_SCRIPT_DESERET = HB_TAG ('D','s','r','t'),
|
|
195
|
+
/*3.1*/ HB_SCRIPT_GOTHIC = HB_TAG ('G','o','t','h'),
|
|
196
|
+
/*3.1*/ HB_SCRIPT_OLD_ITALIC = HB_TAG ('I','t','a','l'),
|
|
197
|
+
|
|
198
|
+
/*3.2*/ HB_SCRIPT_BUHID = HB_TAG ('B','u','h','d'),
|
|
199
|
+
/*3.2*/ HB_SCRIPT_HANUNOO = HB_TAG ('H','a','n','o'),
|
|
200
|
+
/*3.2*/ HB_SCRIPT_TAGALOG = HB_TAG ('T','g','l','g'),
|
|
201
|
+
/*3.2*/ HB_SCRIPT_TAGBANWA = HB_TAG ('T','a','g','b'),
|
|
202
|
+
|
|
203
|
+
/*4.0*/ HB_SCRIPT_CYPRIOT = HB_TAG ('C','p','r','t'),
|
|
204
|
+
/*4.0*/ HB_SCRIPT_LIMBU = HB_TAG ('L','i','m','b'),
|
|
205
|
+
/*4.0*/ HB_SCRIPT_LINEAR_B = HB_TAG ('L','i','n','b'),
|
|
206
|
+
/*4.0*/ HB_SCRIPT_OSMANYA = HB_TAG ('O','s','m','a'),
|
|
207
|
+
/*4.0*/ HB_SCRIPT_SHAVIAN = HB_TAG ('S','h','a','w'),
|
|
208
|
+
/*4.0*/ HB_SCRIPT_TAI_LE = HB_TAG ('T','a','l','e'),
|
|
209
|
+
/*4.0*/ HB_SCRIPT_UGARITIC = HB_TAG ('U','g','a','r'),
|
|
210
|
+
|
|
211
|
+
/*4.1*/ HB_SCRIPT_BUGINESE = HB_TAG ('B','u','g','i'),
|
|
212
|
+
/*4.1*/ HB_SCRIPT_COPTIC = HB_TAG ('C','o','p','t'),
|
|
213
|
+
/*4.1*/ HB_SCRIPT_GLAGOLITIC = HB_TAG ('G','l','a','g'),
|
|
214
|
+
/*4.1*/ HB_SCRIPT_KHAROSHTHI = HB_TAG ('K','h','a','r'),
|
|
215
|
+
/*4.1*/ HB_SCRIPT_NEW_TAI_LUE = HB_TAG ('T','a','l','u'),
|
|
216
|
+
/*4.1*/ HB_SCRIPT_OLD_PERSIAN = HB_TAG ('X','p','e','o'),
|
|
217
|
+
/*4.1*/ HB_SCRIPT_SYLOTI_NAGRI = HB_TAG ('S','y','l','o'),
|
|
218
|
+
/*4.1*/ HB_SCRIPT_TIFINAGH = HB_TAG ('T','f','n','g'),
|
|
219
|
+
|
|
220
|
+
/*5.0*/ HB_SCRIPT_BALINESE = HB_TAG ('B','a','l','i'),
|
|
221
|
+
/*5.0*/ HB_SCRIPT_CUNEIFORM = HB_TAG ('X','s','u','x'),
|
|
222
|
+
/*5.0*/ HB_SCRIPT_NKO = HB_TAG ('N','k','o','o'),
|
|
223
|
+
/*5.0*/ HB_SCRIPT_PHAGS_PA = HB_TAG ('P','h','a','g'),
|
|
224
|
+
/*5.0*/ HB_SCRIPT_PHOENICIAN = HB_TAG ('P','h','n','x'),
|
|
225
|
+
|
|
226
|
+
/*5.1*/ HB_SCRIPT_CARIAN = HB_TAG ('C','a','r','i'),
|
|
227
|
+
/*5.1*/ HB_SCRIPT_CHAM = HB_TAG ('C','h','a','m'),
|
|
228
|
+
/*5.1*/ HB_SCRIPT_KAYAH_LI = HB_TAG ('K','a','l','i'),
|
|
229
|
+
/*5.1*/ HB_SCRIPT_LEPCHA = HB_TAG ('L','e','p','c'),
|
|
230
|
+
/*5.1*/ HB_SCRIPT_LYCIAN = HB_TAG ('L','y','c','i'),
|
|
231
|
+
/*5.1*/ HB_SCRIPT_LYDIAN = HB_TAG ('L','y','d','i'),
|
|
232
|
+
/*5.1*/ HB_SCRIPT_OL_CHIKI = HB_TAG ('O','l','c','k'),
|
|
233
|
+
/*5.1*/ HB_SCRIPT_REJANG = HB_TAG ('R','j','n','g'),
|
|
234
|
+
/*5.1*/ HB_SCRIPT_SAURASHTRA = HB_TAG ('S','a','u','r'),
|
|
235
|
+
/*5.1*/ HB_SCRIPT_SUNDANESE = HB_TAG ('S','u','n','d'),
|
|
236
|
+
/*5.1*/ HB_SCRIPT_VAI = HB_TAG ('V','a','i','i'),
|
|
237
|
+
|
|
238
|
+
/*5.2*/ HB_SCRIPT_AVESTAN = HB_TAG ('A','v','s','t'),
|
|
239
|
+
/*5.2*/ HB_SCRIPT_BAMUM = HB_TAG ('B','a','m','u'),
|
|
240
|
+
/*5.2*/ HB_SCRIPT_EGYPTIAN_HIEROGLYPHS = HB_TAG ('E','g','y','p'),
|
|
241
|
+
/*5.2*/ HB_SCRIPT_IMPERIAL_ARAMAIC = HB_TAG ('A','r','m','i'),
|
|
242
|
+
/*5.2*/ HB_SCRIPT_INSCRIPTIONAL_PAHLAVI = HB_TAG ('P','h','l','i'),
|
|
243
|
+
/*5.2*/ HB_SCRIPT_INSCRIPTIONAL_PARTHIAN = HB_TAG ('P','r','t','i'),
|
|
244
|
+
/*5.2*/ HB_SCRIPT_JAVANESE = HB_TAG ('J','a','v','a'),
|
|
245
|
+
/*5.2*/ HB_SCRIPT_KAITHI = HB_TAG ('K','t','h','i'),
|
|
246
|
+
/*5.2*/ HB_SCRIPT_LISU = HB_TAG ('L','i','s','u'),
|
|
247
|
+
/*5.2*/ HB_SCRIPT_MEETEI_MAYEK = HB_TAG ('M','t','e','i'),
|
|
248
|
+
/*5.2*/ HB_SCRIPT_OLD_SOUTH_ARABIAN = HB_TAG ('S','a','r','b'),
|
|
249
|
+
/*5.2*/ HB_SCRIPT_OLD_TURKIC = HB_TAG ('O','r','k','h'),
|
|
250
|
+
/*5.2*/ HB_SCRIPT_SAMARITAN = HB_TAG ('S','a','m','r'),
|
|
251
|
+
/*5.2*/ HB_SCRIPT_TAI_THAM = HB_TAG ('L','a','n','a'),
|
|
252
|
+
/*5.2*/ HB_SCRIPT_TAI_VIET = HB_TAG ('T','a','v','t'),
|
|
253
|
+
|
|
254
|
+
/*6.0*/ HB_SCRIPT_BATAK = HB_TAG ('B','a','t','k'),
|
|
255
|
+
/*6.0*/ HB_SCRIPT_BRAHMI = HB_TAG ('B','r','a','h'),
|
|
256
|
+
/*6.0*/ HB_SCRIPT_MANDAIC = HB_TAG ('M','a','n','d'),
|
|
257
|
+
|
|
258
|
+
/*6.1*/ HB_SCRIPT_CHAKMA = HB_TAG ('C','a','k','m'),
|
|
259
|
+
/*6.1*/ HB_SCRIPT_MEROITIC_CURSIVE = HB_TAG ('M','e','r','c'),
|
|
260
|
+
/*6.1*/ HB_SCRIPT_MEROITIC_HIEROGLYPHS = HB_TAG ('M','e','r','o'),
|
|
261
|
+
/*6.1*/ HB_SCRIPT_MIAO = HB_TAG ('P','l','r','d'),
|
|
262
|
+
/*6.1*/ HB_SCRIPT_SHARADA = HB_TAG ('S','h','r','d'),
|
|
263
|
+
/*6.1*/ HB_SCRIPT_SORA_SOMPENG = HB_TAG ('S','o','r','a'),
|
|
264
|
+
/*6.1*/ HB_SCRIPT_TAKRI = HB_TAG ('T','a','k','r'),
|
|
265
|
+
|
|
266
|
+
/*
|
|
267
|
+
* Since: 0.9.30
|
|
268
|
+
*/
|
|
269
|
+
/*7.0*/ HB_SCRIPT_BASSA_VAH = HB_TAG ('B','a','s','s'),
|
|
270
|
+
/*7.0*/ HB_SCRIPT_CAUCASIAN_ALBANIAN = HB_TAG ('A','g','h','b'),
|
|
271
|
+
/*7.0*/ HB_SCRIPT_DUPLOYAN = HB_TAG ('D','u','p','l'),
|
|
272
|
+
/*7.0*/ HB_SCRIPT_ELBASAN = HB_TAG ('E','l','b','a'),
|
|
273
|
+
/*7.0*/ HB_SCRIPT_GRANTHA = HB_TAG ('G','r','a','n'),
|
|
274
|
+
/*7.0*/ HB_SCRIPT_KHOJKI = HB_TAG ('K','h','o','j'),
|
|
275
|
+
/*7.0*/ HB_SCRIPT_KHUDAWADI = HB_TAG ('S','i','n','d'),
|
|
276
|
+
/*7.0*/ HB_SCRIPT_LINEAR_A = HB_TAG ('L','i','n','a'),
|
|
277
|
+
/*7.0*/ HB_SCRIPT_MAHAJANI = HB_TAG ('M','a','h','j'),
|
|
278
|
+
/*7.0*/ HB_SCRIPT_MANICHAEAN = HB_TAG ('M','a','n','i'),
|
|
279
|
+
/*7.0*/ HB_SCRIPT_MENDE_KIKAKUI = HB_TAG ('M','e','n','d'),
|
|
280
|
+
/*7.0*/ HB_SCRIPT_MODI = HB_TAG ('M','o','d','i'),
|
|
281
|
+
/*7.0*/ HB_SCRIPT_MRO = HB_TAG ('M','r','o','o'),
|
|
282
|
+
/*7.0*/ HB_SCRIPT_NABATAEAN = HB_TAG ('N','b','a','t'),
|
|
283
|
+
/*7.0*/ HB_SCRIPT_OLD_NORTH_ARABIAN = HB_TAG ('N','a','r','b'),
|
|
284
|
+
/*7.0*/ HB_SCRIPT_OLD_PERMIC = HB_TAG ('P','e','r','m'),
|
|
285
|
+
/*7.0*/ HB_SCRIPT_PAHAWH_HMONG = HB_TAG ('H','m','n','g'),
|
|
286
|
+
/*7.0*/ HB_SCRIPT_PALMYRENE = HB_TAG ('P','a','l','m'),
|
|
287
|
+
/*7.0*/ HB_SCRIPT_PAU_CIN_HAU = HB_TAG ('P','a','u','c'),
|
|
288
|
+
/*7.0*/ HB_SCRIPT_PSALTER_PAHLAVI = HB_TAG ('P','h','l','p'),
|
|
289
|
+
/*7.0*/ HB_SCRIPT_SIDDHAM = HB_TAG ('S','i','d','d'),
|
|
290
|
+
/*7.0*/ HB_SCRIPT_TIRHUTA = HB_TAG ('T','i','r','h'),
|
|
291
|
+
/*7.0*/ HB_SCRIPT_WARANG_CITI = HB_TAG ('W','a','r','a'),
|
|
292
|
+
|
|
293
|
+
/*8.0*/ HB_SCRIPT_AHOM = HB_TAG ('A','h','o','m'),
|
|
294
|
+
/*8.0*/ HB_SCRIPT_ANATOLIAN_HIEROGLYPHS = HB_TAG ('H','l','u','w'),
|
|
295
|
+
/*8.0*/ HB_SCRIPT_HATRAN = HB_TAG ('H','a','t','r'),
|
|
296
|
+
/*8.0*/ HB_SCRIPT_MULTANI = HB_TAG ('M','u','l','t'),
|
|
297
|
+
/*8.0*/ HB_SCRIPT_OLD_HUNGARIAN = HB_TAG ('H','u','n','g'),
|
|
298
|
+
/*8.0*/ HB_SCRIPT_SIGNWRITING = HB_TAG ('S','g','n','w'),
|
|
299
|
+
|
|
300
|
+
/*
|
|
301
|
+
* Since 1.3.0
|
|
302
|
+
*/
|
|
303
|
+
/*9.0*/ HB_SCRIPT_ADLAM = HB_TAG ('A','d','l','m'),
|
|
304
|
+
/*9.0*/ HB_SCRIPT_BHAIKSUKI = HB_TAG ('B','h','k','s'),
|
|
305
|
+
/*9.0*/ HB_SCRIPT_MARCHEN = HB_TAG ('M','a','r','c'),
|
|
306
|
+
/*9.0*/ HB_SCRIPT_OSAGE = HB_TAG ('O','s','g','e'),
|
|
307
|
+
/*9.0*/ HB_SCRIPT_TANGUT = HB_TAG ('T','a','n','g'),
|
|
308
|
+
/*9.0*/ HB_SCRIPT_NEWA = HB_TAG ('N','e','w','a'),
|
|
309
|
+
|
|
310
|
+
/*
|
|
311
|
+
* Since 1.6.0
|
|
312
|
+
*/
|
|
313
|
+
/*10.0*/HB_SCRIPT_MASARAM_GONDI = HB_TAG ('G','o','n','m'),
|
|
314
|
+
/*10.0*/HB_SCRIPT_NUSHU = HB_TAG ('N','s','h','u'),
|
|
315
|
+
/*10.0*/HB_SCRIPT_SOYOMBO = HB_TAG ('S','o','y','o'),
|
|
316
|
+
/*10.0*/HB_SCRIPT_ZANABAZAR_SQUARE = HB_TAG ('Z','a','n','b'),
|
|
317
|
+
|
|
318
|
+
/* No script set. */
|
|
319
|
+
HB_SCRIPT_INVALID = HB_TAG_NONE,
|
|
320
|
+
|
|
321
|
+
/* Dummy values to ensure any hb_tag_t value can be passed/stored as hb_script_t
|
|
322
|
+
* without risking undefined behavior. Include both a signed and unsigned max,
|
|
323
|
+
* since technically enums are int, and indeed, hb_script_t ends up being signed.
|
|
324
|
+
* See this thread for technicalities:
|
|
325
|
+
*
|
|
326
|
+
* http://lists.freedesktop.org/archives/harfbuzz/2014-March/004150.html
|
|
327
|
+
*/
|
|
328
|
+
_HB_SCRIPT_MAX_VALUE = HB_TAG_MAX, /*< skip >*/
|
|
329
|
+
_HB_SCRIPT_MAX_VALUE_SIGNED = HB_TAG_MAX_SIGNED /*< skip >*/
|
|
330
|
+
|
|
331
|
+
} hb_script_t;
|
|
332
|
+
|
|
333
|
+
|
|
334
|
+
/* Script functions */
|
|
335
|
+
|
|
336
|
+
HB_EXTERN hb_script_t
|
|
337
|
+
hb_script_from_iso15924_tag (hb_tag_t tag);
|
|
338
|
+
|
|
339
|
+
HB_EXTERN hb_script_t
|
|
340
|
+
hb_script_from_string (const char *str, int len);
|
|
341
|
+
|
|
342
|
+
HB_EXTERN hb_tag_t
|
|
343
|
+
hb_script_to_iso15924_tag (hb_script_t script);
|
|
344
|
+
|
|
345
|
+
HB_EXTERN hb_direction_t
|
|
346
|
+
hb_script_get_horizontal_direction (hb_script_t script);
|
|
347
|
+
|
|
348
|
+
|
|
349
|
+
/* User data */
|
|
350
|
+
|
|
351
|
+
typedef struct hb_user_data_key_t {
|
|
352
|
+
/*< private >*/
|
|
353
|
+
char unused;
|
|
354
|
+
} hb_user_data_key_t;
|
|
355
|
+
|
|
356
|
+
typedef void (*hb_destroy_func_t) (void *user_data);
|
|
357
|
+
|
|
358
|
+
|
|
359
|
+
/* Font features and variations. */
|
|
360
|
+
|
|
361
|
+
typedef struct hb_feature_t {
|
|
362
|
+
hb_tag_t tag;
|
|
363
|
+
uint32_t value;
|
|
364
|
+
unsigned int start;
|
|
365
|
+
unsigned int end;
|
|
366
|
+
} hb_feature_t;
|
|
367
|
+
|
|
368
|
+
HB_EXTERN hb_bool_t
|
|
369
|
+
hb_feature_from_string (const char *str, int len,
|
|
370
|
+
hb_feature_t *feature);
|
|
371
|
+
|
|
372
|
+
HB_EXTERN void
|
|
373
|
+
hb_feature_to_string (hb_feature_t *feature,
|
|
374
|
+
char *buf, unsigned int size);
|
|
375
|
+
|
|
376
|
+
/**
|
|
377
|
+
* hb_variation_t:
|
|
378
|
+
*
|
|
379
|
+
* Since: 1.4.2
|
|
380
|
+
*/
|
|
381
|
+
typedef struct hb_variation_t {
|
|
382
|
+
hb_tag_t tag;
|
|
383
|
+
float value;
|
|
384
|
+
} hb_variation_t;
|
|
385
|
+
|
|
386
|
+
HB_EXTERN hb_bool_t
|
|
387
|
+
hb_variation_from_string (const char *str, int len,
|
|
388
|
+
hb_variation_t *variation);
|
|
389
|
+
|
|
390
|
+
HB_EXTERN void
|
|
391
|
+
hb_variation_to_string (hb_variation_t *variation,
|
|
392
|
+
char *buf, unsigned int size);
|
|
393
|
+
|
|
394
|
+
|
|
395
|
+
HB_END_DECLS
|
|
396
|
+
|
|
397
|
+
#endif /* HB_COMMON_H */
|
|
@@ -0,0 +1,1401 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright © 2012,2013 Mozilla Foundation.
|
|
3
|
+
* Copyright © 2012,2013 Google, Inc.
|
|
4
|
+
*
|
|
5
|
+
* This is part of HarfBuzz, a text shaping library.
|
|
6
|
+
*
|
|
7
|
+
* Permission is hereby granted, without written agreement and without
|
|
8
|
+
* license or royalty fees, to use, copy, modify, and distribute this
|
|
9
|
+
* software and its documentation for any purpose, provided that the
|
|
10
|
+
* above copyright notice and the following two paragraphs appear in
|
|
11
|
+
* all copies of this software.
|
|
12
|
+
*
|
|
13
|
+
* IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
|
|
14
|
+
* DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
|
|
15
|
+
* ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
|
|
16
|
+
* IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
|
|
17
|
+
* DAMAGE.
|
|
18
|
+
*
|
|
19
|
+
* THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
|
|
20
|
+
* BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
|
21
|
+
* FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
|
|
22
|
+
* ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
|
|
23
|
+
* PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
|
|
24
|
+
*
|
|
25
|
+
* Mozilla Author(s): Jonathan Kew
|
|
26
|
+
* Google Author(s): Behdad Esfahbod
|
|
27
|
+
*/
|
|
28
|
+
|
|
29
|
+
#define HB_SHAPER coretext
|
|
30
|
+
|
|
31
|
+
#include "hb-private.hh"
|
|
32
|
+
#include "hb-debug.hh"
|
|
33
|
+
#include "hb-shaper-impl-private.hh"
|
|
34
|
+
|
|
35
|
+
#include "hb-coretext.h"
|
|
36
|
+
#include <math.h>
|
|
37
|
+
|
|
38
|
+
/* https://developer.apple.com/documentation/coretext/1508745-ctfontcreatewithgraphicsfont */
|
|
39
|
+
#define HB_CORETEXT_DEFAULT_FONT_SIZE 12.f
|
|
40
|
+
|
|
41
|
+
static CGFloat
|
|
42
|
+
coretext_font_size_from_ptem (float ptem)
|
|
43
|
+
{
|
|
44
|
+
/* CoreText points are CSS pixels (96 per inch),
|
|
45
|
+
* NOT typographic points (72 per inch).
|
|
46
|
+
*
|
|
47
|
+
* https://developer.apple.com/library/content/documentation/GraphicsAnimation/Conceptual/HighResolutionOSX/Explained/Explained.html
|
|
48
|
+
*/
|
|
49
|
+
ptem *= 96.f / 72.f;
|
|
50
|
+
return ptem <= 0.f ? HB_CORETEXT_DEFAULT_FONT_SIZE : ptem;
|
|
51
|
+
}
|
|
52
|
+
static float
|
|
53
|
+
coretext_font_size_to_ptem (CGFloat size)
|
|
54
|
+
{
|
|
55
|
+
size *= 72.f / 96.f;
|
|
56
|
+
return size <= 0.f ? 0 : size;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
static void
|
|
60
|
+
release_table_data (void *user_data)
|
|
61
|
+
{
|
|
62
|
+
CFDataRef cf_data = reinterpret_cast<CFDataRef> (user_data);
|
|
63
|
+
CFRelease(cf_data);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
static hb_blob_t *
|
|
67
|
+
reference_table (hb_face_t *face HB_UNUSED, hb_tag_t tag, void *user_data)
|
|
68
|
+
{
|
|
69
|
+
CGFontRef cg_font = reinterpret_cast<CGFontRef> (user_data);
|
|
70
|
+
CFDataRef cf_data = CGFontCopyTableForTag (cg_font, tag);
|
|
71
|
+
if (unlikely (!cf_data))
|
|
72
|
+
return nullptr;
|
|
73
|
+
|
|
74
|
+
const char *data = reinterpret_cast<const char*> (CFDataGetBytePtr (cf_data));
|
|
75
|
+
const size_t length = CFDataGetLength (cf_data);
|
|
76
|
+
if (!data || !length)
|
|
77
|
+
{
|
|
78
|
+
CFRelease (cf_data);
|
|
79
|
+
return nullptr;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
return hb_blob_create (data, length, HB_MEMORY_MODE_READONLY,
|
|
83
|
+
reinterpret_cast<void *> (const_cast<__CFData *> (cf_data)),
|
|
84
|
+
release_table_data);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
static void
|
|
88
|
+
_hb_cg_font_release (void *data)
|
|
89
|
+
{
|
|
90
|
+
CGFontRelease ((CGFontRef) data);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
HB_SHAPER_DATA_ENSURE_DEFINE(coretext, face)
|
|
95
|
+
HB_SHAPER_DATA_ENSURE_DEFINE_WITH_CONDITION(coretext, font,
|
|
96
|
+
fabs (CTFontGetSize((CTFontRef) data) - coretext_font_size_from_ptem (font->ptem)) <= .5
|
|
97
|
+
)
|
|
98
|
+
|
|
99
|
+
static CTFontDescriptorRef
|
|
100
|
+
get_last_resort_font_desc (void)
|
|
101
|
+
{
|
|
102
|
+
// TODO Handle allocation failures?
|
|
103
|
+
CTFontDescriptorRef last_resort = CTFontDescriptorCreateWithNameAndSize (CFSTR("LastResort"), 0);
|
|
104
|
+
CFArrayRef cascade_list = CFArrayCreate (kCFAllocatorDefault,
|
|
105
|
+
(const void **) &last_resort,
|
|
106
|
+
1,
|
|
107
|
+
&kCFTypeArrayCallBacks);
|
|
108
|
+
CFRelease (last_resort);
|
|
109
|
+
CFDictionaryRef attributes = CFDictionaryCreate (kCFAllocatorDefault,
|
|
110
|
+
(const void **) &kCTFontCascadeListAttribute,
|
|
111
|
+
(const void **) &cascade_list,
|
|
112
|
+
1,
|
|
113
|
+
&kCFTypeDictionaryKeyCallBacks,
|
|
114
|
+
&kCFTypeDictionaryValueCallBacks);
|
|
115
|
+
CFRelease (cascade_list);
|
|
116
|
+
|
|
117
|
+
CTFontDescriptorRef font_desc = CTFontDescriptorCreateWithAttributes (attributes);
|
|
118
|
+
CFRelease (attributes);
|
|
119
|
+
return font_desc;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
static void
|
|
123
|
+
release_data (void *info, const void *data, size_t size)
|
|
124
|
+
{
|
|
125
|
+
assert (hb_blob_get_length ((hb_blob_t *) info) == size &&
|
|
126
|
+
hb_blob_get_data ((hb_blob_t *) info, nullptr) == data);
|
|
127
|
+
|
|
128
|
+
hb_blob_destroy ((hb_blob_t *) info);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
static CGFontRef
|
|
132
|
+
create_cg_font (hb_face_t *face)
|
|
133
|
+
{
|
|
134
|
+
CGFontRef cg_font = nullptr;
|
|
135
|
+
if (face->destroy == _hb_cg_font_release)
|
|
136
|
+
{
|
|
137
|
+
cg_font = CGFontRetain ((CGFontRef) face->user_data);
|
|
138
|
+
}
|
|
139
|
+
else
|
|
140
|
+
{
|
|
141
|
+
hb_blob_t *blob = hb_face_reference_blob (face);
|
|
142
|
+
unsigned int blob_length;
|
|
143
|
+
const char *blob_data = hb_blob_get_data (blob, &blob_length);
|
|
144
|
+
if (unlikely (!blob_length))
|
|
145
|
+
DEBUG_MSG (CORETEXT, face, "Face has empty blob");
|
|
146
|
+
|
|
147
|
+
CGDataProviderRef provider = CGDataProviderCreateWithData (blob, blob_data, blob_length, &release_data);
|
|
148
|
+
if (likely (provider))
|
|
149
|
+
{
|
|
150
|
+
cg_font = CGFontCreateWithDataProvider (provider);
|
|
151
|
+
if (unlikely (!cg_font))
|
|
152
|
+
DEBUG_MSG (CORETEXT, face, "Face CGFontCreateWithDataProvider() failed");
|
|
153
|
+
CGDataProviderRelease (provider);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
return cg_font;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
static CTFontRef
|
|
160
|
+
create_ct_font (CGFontRef cg_font, CGFloat font_size)
|
|
161
|
+
{
|
|
162
|
+
CTFontRef ct_font = nullptr;
|
|
163
|
+
|
|
164
|
+
/* CoreText does not enable trak table usage / tracking when creating a CTFont
|
|
165
|
+
* using CTFontCreateWithGraphicsFont. The only way of enabling tracking seems
|
|
166
|
+
* to be through the CTFontCreateUIFontForLanguage call. */
|
|
167
|
+
CFStringRef cg_postscript_name = CGFontCopyPostScriptName (cg_font);
|
|
168
|
+
if (CFStringHasPrefix (cg_postscript_name, CFSTR (".SFNSText")) ||
|
|
169
|
+
CFStringHasPrefix (cg_postscript_name, CFSTR (".SFNSDisplay")))
|
|
170
|
+
{
|
|
171
|
+
CTFontUIFontType font_type = kCTFontUIFontSystem;
|
|
172
|
+
if (CFStringHasSuffix (cg_postscript_name, CFSTR ("-Bold")))
|
|
173
|
+
font_type = kCTFontUIFontEmphasizedSystem;
|
|
174
|
+
|
|
175
|
+
ct_font = CTFontCreateUIFontForLanguage (font_type, font_size, nullptr);
|
|
176
|
+
CFStringRef ct_result_name = CTFontCopyPostScriptName(ct_font);
|
|
177
|
+
if (CFStringCompare (ct_result_name, cg_postscript_name, 0) != kCFCompareEqualTo)
|
|
178
|
+
{
|
|
179
|
+
CFRelease(ct_font);
|
|
180
|
+
ct_font = nullptr;
|
|
181
|
+
}
|
|
182
|
+
CFRelease (ct_result_name);
|
|
183
|
+
}
|
|
184
|
+
CFRelease (cg_postscript_name);
|
|
185
|
+
|
|
186
|
+
if (!ct_font)
|
|
187
|
+
ct_font = CTFontCreateWithGraphicsFont (cg_font, font_size, nullptr, nullptr);
|
|
188
|
+
|
|
189
|
+
if (unlikely (!ct_font)) {
|
|
190
|
+
DEBUG_MSG (CORETEXT, cg_font, "Font CTFontCreateWithGraphicsFont() failed");
|
|
191
|
+
return nullptr;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
/* crbug.com/576941 and crbug.com/625902 and the investigation in the latter
|
|
195
|
+
* bug indicate that the cascade list reconfiguration occasionally causes
|
|
196
|
+
* crashes in CoreText on OS X 10.9, thus let's skip this step on older
|
|
197
|
+
* operating system versions. Except for the emoji font, where _not_
|
|
198
|
+
* reconfiguring the cascade list causes CoreText crashes. For details, see
|
|
199
|
+
* crbug.com/549610 */
|
|
200
|
+
// 0x00070000 stands for "kCTVersionNumber10_10", see CoreText.h
|
|
201
|
+
if (&CTGetCoreTextVersion != nullptr && CTGetCoreTextVersion() < 0x00070000) {
|
|
202
|
+
CFStringRef fontName = CTFontCopyPostScriptName (ct_font);
|
|
203
|
+
bool isEmojiFont = CFStringCompare (fontName, CFSTR("AppleColorEmoji"), 0) == kCFCompareEqualTo;
|
|
204
|
+
CFRelease (fontName);
|
|
205
|
+
if (!isEmojiFont)
|
|
206
|
+
return ct_font;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
CFURLRef original_url = (CFURLRef)CTFontCopyAttribute(ct_font, kCTFontURLAttribute);
|
|
210
|
+
|
|
211
|
+
/* Create font copy with cascade list that has LastResort first; this speeds up CoreText
|
|
212
|
+
* font fallback which we don't need anyway. */
|
|
213
|
+
{
|
|
214
|
+
CTFontDescriptorRef last_resort_font_desc = get_last_resort_font_desc ();
|
|
215
|
+
CTFontRef new_ct_font = CTFontCreateCopyWithAttributes (ct_font, 0.0, nullptr, last_resort_font_desc);
|
|
216
|
+
CFRelease (last_resort_font_desc);
|
|
217
|
+
if (new_ct_font)
|
|
218
|
+
{
|
|
219
|
+
/* The CTFontCreateCopyWithAttributes call fails to stay on the same font
|
|
220
|
+
* when reconfiguring the cascade list and may switch to a different font
|
|
221
|
+
* when there are fonts that go by the same name, since the descriptor is
|
|
222
|
+
* just name and size.
|
|
223
|
+
*
|
|
224
|
+
* Avoid reconfiguring the cascade lists if the new font is outside the
|
|
225
|
+
* system locations that we cannot access from the sandboxed renderer
|
|
226
|
+
* process in Blink. This can be detected by the new file URL location
|
|
227
|
+
* that the newly found font points to. */
|
|
228
|
+
CFURLRef new_url = (CFURLRef) CTFontCopyAttribute (new_ct_font, kCTFontURLAttribute);
|
|
229
|
+
// Keep reconfigured font if URL cannot be retrieved (seems to be the case
|
|
230
|
+
// on Mac OS 10.12 Sierra), speculative fix for crbug.com/625606
|
|
231
|
+
if (!original_url || !new_url || CFEqual (original_url, new_url)) {
|
|
232
|
+
CFRelease (ct_font);
|
|
233
|
+
ct_font = new_ct_font;
|
|
234
|
+
} else {
|
|
235
|
+
CFRelease (new_ct_font);
|
|
236
|
+
DEBUG_MSG (CORETEXT, ct_font, "Discarding reconfigured CTFont, location changed.");
|
|
237
|
+
}
|
|
238
|
+
if (new_url)
|
|
239
|
+
CFRelease (new_url);
|
|
240
|
+
}
|
|
241
|
+
else
|
|
242
|
+
DEBUG_MSG (CORETEXT, ct_font, "Font copy with empty cascade list failed");
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
if (original_url)
|
|
246
|
+
CFRelease (original_url);
|
|
247
|
+
return ct_font;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
hb_coretext_shaper_face_data_t *
|
|
251
|
+
_hb_coretext_shaper_face_data_create (hb_face_t *face)
|
|
252
|
+
{
|
|
253
|
+
CGFontRef cg_font = create_cg_font (face);
|
|
254
|
+
|
|
255
|
+
if (unlikely (!cg_font))
|
|
256
|
+
{
|
|
257
|
+
DEBUG_MSG (CORETEXT, face, "CGFont creation failed..");
|
|
258
|
+
return nullptr;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
return (hb_coretext_shaper_face_data_t *) cg_font;
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
void
|
|
265
|
+
_hb_coretext_shaper_face_data_destroy (hb_coretext_shaper_face_data_t *data)
|
|
266
|
+
{
|
|
267
|
+
CFRelease ((CGFontRef) data);
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
hb_face_t *
|
|
271
|
+
hb_coretext_face_create (CGFontRef cg_font)
|
|
272
|
+
{
|
|
273
|
+
return hb_face_create_for_tables (reference_table, CGFontRetain (cg_font), _hb_cg_font_release);
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
/*
|
|
277
|
+
* Since: 0.9.10
|
|
278
|
+
*/
|
|
279
|
+
CGFontRef
|
|
280
|
+
hb_coretext_face_get_cg_font (hb_face_t *face)
|
|
281
|
+
{
|
|
282
|
+
if (unlikely (!hb_coretext_shaper_face_data_ensure (face))) return nullptr;
|
|
283
|
+
return (CGFontRef) HB_SHAPER_DATA_GET (face);
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
|
|
287
|
+
hb_coretext_shaper_font_data_t *
|
|
288
|
+
_hb_coretext_shaper_font_data_create (hb_font_t *font)
|
|
289
|
+
{
|
|
290
|
+
hb_face_t *face = font->face;
|
|
291
|
+
if (unlikely (!hb_coretext_shaper_face_data_ensure (face))) return nullptr;
|
|
292
|
+
CGFontRef cg_font = (CGFontRef) HB_SHAPER_DATA_GET (face);
|
|
293
|
+
|
|
294
|
+
CTFontRef ct_font = create_ct_font (cg_font, coretext_font_size_from_ptem (font->ptem));
|
|
295
|
+
|
|
296
|
+
if (unlikely (!ct_font))
|
|
297
|
+
{
|
|
298
|
+
DEBUG_MSG (CORETEXT, font, "CGFont creation failed..");
|
|
299
|
+
return nullptr;
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
return (hb_coretext_shaper_font_data_t *) ct_font;
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
void
|
|
306
|
+
_hb_coretext_shaper_font_data_destroy (hb_coretext_shaper_font_data_t *data)
|
|
307
|
+
{
|
|
308
|
+
CFRelease ((CTFontRef) data);
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
/*
|
|
312
|
+
* Since: 1.7.2
|
|
313
|
+
*/
|
|
314
|
+
hb_font_t *
|
|
315
|
+
hb_coretext_font_create (CTFontRef ct_font)
|
|
316
|
+
{
|
|
317
|
+
CGFontRef cg_font = CTFontCopyGraphicsFont (ct_font, nullptr);
|
|
318
|
+
hb_face_t *face = hb_coretext_face_create (cg_font);
|
|
319
|
+
CFRelease (cg_font);
|
|
320
|
+
hb_font_t *font = hb_font_create (face);
|
|
321
|
+
hb_face_destroy (face);
|
|
322
|
+
|
|
323
|
+
if (unlikely (hb_object_is_inert (font)))
|
|
324
|
+
return font;
|
|
325
|
+
|
|
326
|
+
hb_font_set_ptem (font, coretext_font_size_to_ptem (CTFontGetSize(ct_font)));
|
|
327
|
+
|
|
328
|
+
/* Let there be dragons here... */
|
|
329
|
+
HB_SHAPER_DATA_GET (font) = (hb_coretext_shaper_font_data_t *) CFRetain (ct_font);
|
|
330
|
+
|
|
331
|
+
return font;
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
CTFontRef
|
|
335
|
+
hb_coretext_font_get_ct_font (hb_font_t *font)
|
|
336
|
+
{
|
|
337
|
+
if (unlikely (!hb_coretext_shaper_font_data_ensure (font))) return nullptr;
|
|
338
|
+
return (CTFontRef) HB_SHAPER_DATA_GET (font);
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
|
|
342
|
+
|
|
343
|
+
/*
|
|
344
|
+
* shaper shape_plan data
|
|
345
|
+
*/
|
|
346
|
+
|
|
347
|
+
struct hb_coretext_shaper_shape_plan_data_t {};
|
|
348
|
+
|
|
349
|
+
hb_coretext_shaper_shape_plan_data_t *
|
|
350
|
+
_hb_coretext_shaper_shape_plan_data_create (hb_shape_plan_t *shape_plan HB_UNUSED,
|
|
351
|
+
const hb_feature_t *user_features HB_UNUSED,
|
|
352
|
+
unsigned int num_user_features HB_UNUSED,
|
|
353
|
+
const int *coords HB_UNUSED,
|
|
354
|
+
unsigned int num_coords HB_UNUSED)
|
|
355
|
+
{
|
|
356
|
+
return (hb_coretext_shaper_shape_plan_data_t *) HB_SHAPER_DATA_SUCCEEDED;
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
void
|
|
360
|
+
_hb_coretext_shaper_shape_plan_data_destroy (hb_coretext_shaper_shape_plan_data_t *data HB_UNUSED)
|
|
361
|
+
{
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
|
|
365
|
+
/*
|
|
366
|
+
* shaper
|
|
367
|
+
*/
|
|
368
|
+
|
|
369
|
+
struct feature_record_t {
|
|
370
|
+
unsigned int feature;
|
|
371
|
+
unsigned int setting;
|
|
372
|
+
};
|
|
373
|
+
|
|
374
|
+
struct active_feature_t {
|
|
375
|
+
feature_record_t rec;
|
|
376
|
+
unsigned int order;
|
|
377
|
+
|
|
378
|
+
static int cmp (const void *pa, const void *pb) {
|
|
379
|
+
const active_feature_t *a = (const active_feature_t *) pa;
|
|
380
|
+
const active_feature_t *b = (const active_feature_t *) pb;
|
|
381
|
+
return a->rec.feature < b->rec.feature ? -1 : a->rec.feature > b->rec.feature ? 1 :
|
|
382
|
+
a->order < b->order ? -1 : a->order > b->order ? 1 :
|
|
383
|
+
a->rec.setting < b->rec.setting ? -1 : a->rec.setting > b->rec.setting ? 1 :
|
|
384
|
+
0;
|
|
385
|
+
}
|
|
386
|
+
bool operator== (const active_feature_t *f) {
|
|
387
|
+
return cmp (this, f) == 0;
|
|
388
|
+
}
|
|
389
|
+
};
|
|
390
|
+
|
|
391
|
+
struct feature_event_t {
|
|
392
|
+
unsigned int index;
|
|
393
|
+
bool start;
|
|
394
|
+
active_feature_t feature;
|
|
395
|
+
|
|
396
|
+
static int cmp (const void *pa, const void *pb) {
|
|
397
|
+
const feature_event_t *a = (const feature_event_t *) pa;
|
|
398
|
+
const feature_event_t *b = (const feature_event_t *) pb;
|
|
399
|
+
return a->index < b->index ? -1 : a->index > b->index ? 1 :
|
|
400
|
+
a->start < b->start ? -1 : a->start > b->start ? 1 :
|
|
401
|
+
active_feature_t::cmp (&a->feature, &b->feature);
|
|
402
|
+
}
|
|
403
|
+
};
|
|
404
|
+
|
|
405
|
+
struct range_record_t {
|
|
406
|
+
CTFontRef font;
|
|
407
|
+
unsigned int index_first; /* == start */
|
|
408
|
+
unsigned int index_last; /* == end - 1 */
|
|
409
|
+
};
|
|
410
|
+
|
|
411
|
+
|
|
412
|
+
/* The following enum members are added in OS X 10.8. */
|
|
413
|
+
#define kAltHalfWidthTextSelector 6
|
|
414
|
+
#define kAltProportionalTextSelector 5
|
|
415
|
+
#define kAlternateHorizKanaOffSelector 1
|
|
416
|
+
#define kAlternateHorizKanaOnSelector 0
|
|
417
|
+
#define kAlternateKanaType 34
|
|
418
|
+
#define kAlternateVertKanaOffSelector 3
|
|
419
|
+
#define kAlternateVertKanaOnSelector 2
|
|
420
|
+
#define kCaseSensitiveLayoutOffSelector 1
|
|
421
|
+
#define kCaseSensitiveLayoutOnSelector 0
|
|
422
|
+
#define kCaseSensitiveLayoutType 33
|
|
423
|
+
#define kCaseSensitiveSpacingOffSelector 3
|
|
424
|
+
#define kCaseSensitiveSpacingOnSelector 2
|
|
425
|
+
#define kContextualAlternatesOffSelector 1
|
|
426
|
+
#define kContextualAlternatesOnSelector 0
|
|
427
|
+
#define kContextualAlternatesType 36
|
|
428
|
+
#define kContextualLigaturesOffSelector 19
|
|
429
|
+
#define kContextualLigaturesOnSelector 18
|
|
430
|
+
#define kContextualSwashAlternatesOffSelector 5
|
|
431
|
+
#define kContextualSwashAlternatesOnSelector 4
|
|
432
|
+
#define kDefaultLowerCaseSelector 0
|
|
433
|
+
#define kDefaultUpperCaseSelector 0
|
|
434
|
+
#define kHistoricalLigaturesOffSelector 21
|
|
435
|
+
#define kHistoricalLigaturesOnSelector 20
|
|
436
|
+
#define kHojoCharactersSelector 12
|
|
437
|
+
#define kJIS2004CharactersSelector 11
|
|
438
|
+
#define kLowerCasePetiteCapsSelector 2
|
|
439
|
+
#define kLowerCaseSmallCapsSelector 1
|
|
440
|
+
#define kLowerCaseType 37
|
|
441
|
+
#define kMathematicalGreekOffSelector 11
|
|
442
|
+
#define kMathematicalGreekOnSelector 10
|
|
443
|
+
#define kNLCCharactersSelector 13
|
|
444
|
+
#define kQuarterWidthTextSelector 4
|
|
445
|
+
#define kScientificInferiorsSelector 4
|
|
446
|
+
#define kStylisticAltEightOffSelector 17
|
|
447
|
+
#define kStylisticAltEightOnSelector 16
|
|
448
|
+
#define kStylisticAltEighteenOffSelector 37
|
|
449
|
+
#define kStylisticAltEighteenOnSelector 36
|
|
450
|
+
#define kStylisticAltElevenOffSelector 23
|
|
451
|
+
#define kStylisticAltElevenOnSelector 22
|
|
452
|
+
#define kStylisticAltFifteenOffSelector 31
|
|
453
|
+
#define kStylisticAltFifteenOnSelector 30
|
|
454
|
+
#define kStylisticAltFiveOffSelector 11
|
|
455
|
+
#define kStylisticAltFiveOnSelector 10
|
|
456
|
+
#define kStylisticAltFourOffSelector 9
|
|
457
|
+
#define kStylisticAltFourOnSelector 8
|
|
458
|
+
#define kStylisticAltFourteenOffSelector 29
|
|
459
|
+
#define kStylisticAltFourteenOnSelector 28
|
|
460
|
+
#define kStylisticAltNineOffSelector 19
|
|
461
|
+
#define kStylisticAltNineOnSelector 18
|
|
462
|
+
#define kStylisticAltNineteenOffSelector 39
|
|
463
|
+
#define kStylisticAltNineteenOnSelector 38
|
|
464
|
+
#define kStylisticAltOneOffSelector 3
|
|
465
|
+
#define kStylisticAltOneOnSelector 2
|
|
466
|
+
#define kStylisticAltSevenOffSelector 15
|
|
467
|
+
#define kStylisticAltSevenOnSelector 14
|
|
468
|
+
#define kStylisticAltSeventeenOffSelector 35
|
|
469
|
+
#define kStylisticAltSeventeenOnSelector 34
|
|
470
|
+
#define kStylisticAltSixOffSelector 13
|
|
471
|
+
#define kStylisticAltSixOnSelector 12
|
|
472
|
+
#define kStylisticAltSixteenOffSelector 33
|
|
473
|
+
#define kStylisticAltSixteenOnSelector 32
|
|
474
|
+
#define kStylisticAltTenOffSelector 21
|
|
475
|
+
#define kStylisticAltTenOnSelector 20
|
|
476
|
+
#define kStylisticAltThirteenOffSelector 27
|
|
477
|
+
#define kStylisticAltThirteenOnSelector 26
|
|
478
|
+
#define kStylisticAltThreeOffSelector 7
|
|
479
|
+
#define kStylisticAltThreeOnSelector 6
|
|
480
|
+
#define kStylisticAltTwelveOffSelector 25
|
|
481
|
+
#define kStylisticAltTwelveOnSelector 24
|
|
482
|
+
#define kStylisticAltTwentyOffSelector 41
|
|
483
|
+
#define kStylisticAltTwentyOnSelector 40
|
|
484
|
+
#define kStylisticAltTwoOffSelector 5
|
|
485
|
+
#define kStylisticAltTwoOnSelector 4
|
|
486
|
+
#define kStylisticAlternativesType 35
|
|
487
|
+
#define kSwashAlternatesOffSelector 3
|
|
488
|
+
#define kSwashAlternatesOnSelector 2
|
|
489
|
+
#define kThirdWidthTextSelector 3
|
|
490
|
+
#define kTraditionalNamesCharactersSelector 14
|
|
491
|
+
#define kUpperCasePetiteCapsSelector 2
|
|
492
|
+
#define kUpperCaseSmallCapsSelector 1
|
|
493
|
+
#define kUpperCaseType 38
|
|
494
|
+
|
|
495
|
+
/* Table data courtesy of Apple. */
|
|
496
|
+
static const struct feature_mapping_t {
|
|
497
|
+
FourCharCode otFeatureTag;
|
|
498
|
+
uint16_t aatFeatureType;
|
|
499
|
+
uint16_t selectorToEnable;
|
|
500
|
+
uint16_t selectorToDisable;
|
|
501
|
+
} feature_mappings[] = {
|
|
502
|
+
{ 'c2pc', kUpperCaseType, kUpperCasePetiteCapsSelector, kDefaultUpperCaseSelector },
|
|
503
|
+
{ 'c2sc', kUpperCaseType, kUpperCaseSmallCapsSelector, kDefaultUpperCaseSelector },
|
|
504
|
+
{ 'calt', kContextualAlternatesType, kContextualAlternatesOnSelector, kContextualAlternatesOffSelector },
|
|
505
|
+
{ 'case', kCaseSensitiveLayoutType, kCaseSensitiveLayoutOnSelector, kCaseSensitiveLayoutOffSelector },
|
|
506
|
+
{ 'clig', kLigaturesType, kContextualLigaturesOnSelector, kContextualLigaturesOffSelector },
|
|
507
|
+
{ 'cpsp', kCaseSensitiveLayoutType, kCaseSensitiveSpacingOnSelector, kCaseSensitiveSpacingOffSelector },
|
|
508
|
+
{ 'cswh', kContextualAlternatesType, kContextualSwashAlternatesOnSelector, kContextualSwashAlternatesOffSelector },
|
|
509
|
+
{ 'dlig', kLigaturesType, kRareLigaturesOnSelector, kRareLigaturesOffSelector },
|
|
510
|
+
{ 'expt', kCharacterShapeType, kExpertCharactersSelector, 16 },
|
|
511
|
+
{ 'frac', kFractionsType, kDiagonalFractionsSelector, kNoFractionsSelector },
|
|
512
|
+
{ 'fwid', kTextSpacingType, kMonospacedTextSelector, 7 },
|
|
513
|
+
{ 'halt', kTextSpacingType, kAltHalfWidthTextSelector, 7 },
|
|
514
|
+
{ 'hist', kLigaturesType, kHistoricalLigaturesOnSelector, kHistoricalLigaturesOffSelector },
|
|
515
|
+
{ 'hkna', kAlternateKanaType, kAlternateHorizKanaOnSelector, kAlternateHorizKanaOffSelector, },
|
|
516
|
+
{ 'hlig', kLigaturesType, kHistoricalLigaturesOnSelector, kHistoricalLigaturesOffSelector },
|
|
517
|
+
{ 'hngl', kTransliterationType, kHanjaToHangulSelector, kNoTransliterationSelector },
|
|
518
|
+
{ 'hojo', kCharacterShapeType, kHojoCharactersSelector, 16 },
|
|
519
|
+
{ 'hwid', kTextSpacingType, kHalfWidthTextSelector, 7 },
|
|
520
|
+
{ 'ital', kItalicCJKRomanType, kCJKItalicRomanOnSelector, kCJKItalicRomanOffSelector },
|
|
521
|
+
{ 'jp04', kCharacterShapeType, kJIS2004CharactersSelector, 16 },
|
|
522
|
+
{ 'jp78', kCharacterShapeType, kJIS1978CharactersSelector, 16 },
|
|
523
|
+
{ 'jp83', kCharacterShapeType, kJIS1983CharactersSelector, 16 },
|
|
524
|
+
{ 'jp90', kCharacterShapeType, kJIS1990CharactersSelector, 16 },
|
|
525
|
+
{ 'liga', kLigaturesType, kCommonLigaturesOnSelector, kCommonLigaturesOffSelector },
|
|
526
|
+
{ 'lnum', kNumberCaseType, kUpperCaseNumbersSelector, 2 },
|
|
527
|
+
{ 'mgrk', kMathematicalExtrasType, kMathematicalGreekOnSelector, kMathematicalGreekOffSelector },
|
|
528
|
+
{ 'nlck', kCharacterShapeType, kNLCCharactersSelector, 16 },
|
|
529
|
+
{ 'onum', kNumberCaseType, kLowerCaseNumbersSelector, 2 },
|
|
530
|
+
{ 'ordn', kVerticalPositionType, kOrdinalsSelector, kNormalPositionSelector },
|
|
531
|
+
{ 'palt', kTextSpacingType, kAltProportionalTextSelector, 7 },
|
|
532
|
+
{ 'pcap', kLowerCaseType, kLowerCasePetiteCapsSelector, kDefaultLowerCaseSelector },
|
|
533
|
+
{ 'pkna', kTextSpacingType, kProportionalTextSelector, 7 },
|
|
534
|
+
{ 'pnum', kNumberSpacingType, kProportionalNumbersSelector, 4 },
|
|
535
|
+
{ 'pwid', kTextSpacingType, kProportionalTextSelector, 7 },
|
|
536
|
+
{ 'qwid', kTextSpacingType, kQuarterWidthTextSelector, 7 },
|
|
537
|
+
{ 'ruby', kRubyKanaType, kRubyKanaOnSelector, kRubyKanaOffSelector },
|
|
538
|
+
{ 'sinf', kVerticalPositionType, kScientificInferiorsSelector, kNormalPositionSelector },
|
|
539
|
+
{ 'smcp', kLowerCaseType, kLowerCaseSmallCapsSelector, kDefaultLowerCaseSelector },
|
|
540
|
+
{ 'smpl', kCharacterShapeType, kSimplifiedCharactersSelector, 16 },
|
|
541
|
+
{ 'ss01', kStylisticAlternativesType, kStylisticAltOneOnSelector, kStylisticAltOneOffSelector },
|
|
542
|
+
{ 'ss02', kStylisticAlternativesType, kStylisticAltTwoOnSelector, kStylisticAltTwoOffSelector },
|
|
543
|
+
{ 'ss03', kStylisticAlternativesType, kStylisticAltThreeOnSelector, kStylisticAltThreeOffSelector },
|
|
544
|
+
{ 'ss04', kStylisticAlternativesType, kStylisticAltFourOnSelector, kStylisticAltFourOffSelector },
|
|
545
|
+
{ 'ss05', kStylisticAlternativesType, kStylisticAltFiveOnSelector, kStylisticAltFiveOffSelector },
|
|
546
|
+
{ 'ss06', kStylisticAlternativesType, kStylisticAltSixOnSelector, kStylisticAltSixOffSelector },
|
|
547
|
+
{ 'ss07', kStylisticAlternativesType, kStylisticAltSevenOnSelector, kStylisticAltSevenOffSelector },
|
|
548
|
+
{ 'ss08', kStylisticAlternativesType, kStylisticAltEightOnSelector, kStylisticAltEightOffSelector },
|
|
549
|
+
{ 'ss09', kStylisticAlternativesType, kStylisticAltNineOnSelector, kStylisticAltNineOffSelector },
|
|
550
|
+
{ 'ss10', kStylisticAlternativesType, kStylisticAltTenOnSelector, kStylisticAltTenOffSelector },
|
|
551
|
+
{ 'ss11', kStylisticAlternativesType, kStylisticAltElevenOnSelector, kStylisticAltElevenOffSelector },
|
|
552
|
+
{ 'ss12', kStylisticAlternativesType, kStylisticAltTwelveOnSelector, kStylisticAltTwelveOffSelector },
|
|
553
|
+
{ 'ss13', kStylisticAlternativesType, kStylisticAltThirteenOnSelector, kStylisticAltThirteenOffSelector },
|
|
554
|
+
{ 'ss14', kStylisticAlternativesType, kStylisticAltFourteenOnSelector, kStylisticAltFourteenOffSelector },
|
|
555
|
+
{ 'ss15', kStylisticAlternativesType, kStylisticAltFifteenOnSelector, kStylisticAltFifteenOffSelector },
|
|
556
|
+
{ 'ss16', kStylisticAlternativesType, kStylisticAltSixteenOnSelector, kStylisticAltSixteenOffSelector },
|
|
557
|
+
{ 'ss17', kStylisticAlternativesType, kStylisticAltSeventeenOnSelector, kStylisticAltSeventeenOffSelector },
|
|
558
|
+
{ 'ss18', kStylisticAlternativesType, kStylisticAltEighteenOnSelector, kStylisticAltEighteenOffSelector },
|
|
559
|
+
{ 'ss19', kStylisticAlternativesType, kStylisticAltNineteenOnSelector, kStylisticAltNineteenOffSelector },
|
|
560
|
+
{ 'ss20', kStylisticAlternativesType, kStylisticAltTwentyOnSelector, kStylisticAltTwentyOffSelector },
|
|
561
|
+
{ 'subs', kVerticalPositionType, kInferiorsSelector, kNormalPositionSelector },
|
|
562
|
+
{ 'sups', kVerticalPositionType, kSuperiorsSelector, kNormalPositionSelector },
|
|
563
|
+
{ 'swsh', kContextualAlternatesType, kSwashAlternatesOnSelector, kSwashAlternatesOffSelector },
|
|
564
|
+
{ 'titl', kStyleOptionsType, kTitlingCapsSelector, kNoStyleOptionsSelector },
|
|
565
|
+
{ 'tnam', kCharacterShapeType, kTraditionalNamesCharactersSelector, 16 },
|
|
566
|
+
{ 'tnum', kNumberSpacingType, kMonospacedNumbersSelector, 4 },
|
|
567
|
+
{ 'trad', kCharacterShapeType, kTraditionalCharactersSelector, 16 },
|
|
568
|
+
{ 'twid', kTextSpacingType, kThirdWidthTextSelector, 7 },
|
|
569
|
+
{ 'unic', kLetterCaseType, 14, 15 },
|
|
570
|
+
{ 'valt', kTextSpacingType, kAltProportionalTextSelector, 7 },
|
|
571
|
+
{ 'vert', kVerticalSubstitutionType, kSubstituteVerticalFormsOnSelector, kSubstituteVerticalFormsOffSelector },
|
|
572
|
+
{ 'vhal', kTextSpacingType, kAltHalfWidthTextSelector, 7 },
|
|
573
|
+
{ 'vkna', kAlternateKanaType, kAlternateVertKanaOnSelector, kAlternateVertKanaOffSelector },
|
|
574
|
+
{ 'vpal', kTextSpacingType, kAltProportionalTextSelector, 7 },
|
|
575
|
+
{ 'vrt2', kVerticalSubstitutionType, kSubstituteVerticalFormsOnSelector, kSubstituteVerticalFormsOffSelector },
|
|
576
|
+
{ 'zero', kTypographicExtrasType, kSlashedZeroOnSelector, kSlashedZeroOffSelector },
|
|
577
|
+
};
|
|
578
|
+
|
|
579
|
+
static int
|
|
580
|
+
_hb_feature_mapping_cmp (const void *key_, const void *entry_)
|
|
581
|
+
{
|
|
582
|
+
unsigned int key = * (unsigned int *) key_;
|
|
583
|
+
const feature_mapping_t * entry = (const feature_mapping_t *) entry_;
|
|
584
|
+
return key < entry->otFeatureTag ? -1 :
|
|
585
|
+
key > entry->otFeatureTag ? 1 :
|
|
586
|
+
0;
|
|
587
|
+
}
|
|
588
|
+
|
|
589
|
+
hb_bool_t
|
|
590
|
+
_hb_coretext_shape (hb_shape_plan_t *shape_plan,
|
|
591
|
+
hb_font_t *font,
|
|
592
|
+
hb_buffer_t *buffer,
|
|
593
|
+
const hb_feature_t *features,
|
|
594
|
+
unsigned int num_features)
|
|
595
|
+
{
|
|
596
|
+
hb_face_t *face = font->face;
|
|
597
|
+
CGFontRef cg_font = (CGFontRef) HB_SHAPER_DATA_GET (face);
|
|
598
|
+
CTFontRef ct_font = (CTFontRef) HB_SHAPER_DATA_GET (font);
|
|
599
|
+
|
|
600
|
+
CGFloat ct_font_size = CTFontGetSize (ct_font);
|
|
601
|
+
CGFloat x_mult = (CGFloat) font->x_scale / ct_font_size;
|
|
602
|
+
CGFloat y_mult = (CGFloat) font->y_scale / ct_font_size;
|
|
603
|
+
|
|
604
|
+
/* Attach marks to their bases, to match the 'ot' shaper.
|
|
605
|
+
* Adapted from hb-ot-shape:hb_form_clusters().
|
|
606
|
+
* Note that this only makes us be closer to the 'ot' shaper,
|
|
607
|
+
* but by no means the same. For example, if there's
|
|
608
|
+
* B1 M1 B2 M2, and B1-B2 form a ligature, M2's cluster will
|
|
609
|
+
* continue pointing to B2 even though B2 was merged into B1's
|
|
610
|
+
* cluster... */
|
|
611
|
+
if (buffer->cluster_level == HB_BUFFER_CLUSTER_LEVEL_MONOTONE_GRAPHEMES)
|
|
612
|
+
{
|
|
613
|
+
hb_unicode_funcs_t *unicode = buffer->unicode;
|
|
614
|
+
unsigned int count = buffer->len;
|
|
615
|
+
hb_glyph_info_t *info = buffer->info;
|
|
616
|
+
for (unsigned int i = 1; i < count; i++)
|
|
617
|
+
if (HB_UNICODE_GENERAL_CATEGORY_IS_MARK (unicode->general_category (info[i].codepoint)))
|
|
618
|
+
buffer->merge_clusters (i - 1, i + 1);
|
|
619
|
+
}
|
|
620
|
+
|
|
621
|
+
hb_auto_array_t<feature_record_t> feature_records;
|
|
622
|
+
hb_auto_array_t<range_record_t> range_records;
|
|
623
|
+
|
|
624
|
+
/*
|
|
625
|
+
* Set up features.
|
|
626
|
+
* (copied + modified from code from hb-uniscribe.cc)
|
|
627
|
+
*/
|
|
628
|
+
if (num_features)
|
|
629
|
+
{
|
|
630
|
+
/* Sort features by start/end events. */
|
|
631
|
+
hb_auto_array_t<feature_event_t> feature_events;
|
|
632
|
+
for (unsigned int i = 0; i < num_features; i++)
|
|
633
|
+
{
|
|
634
|
+
const feature_mapping_t * mapping = (const feature_mapping_t *) bsearch (&features[i].tag,
|
|
635
|
+
feature_mappings,
|
|
636
|
+
ARRAY_LENGTH (feature_mappings),
|
|
637
|
+
sizeof (feature_mappings[0]),
|
|
638
|
+
_hb_feature_mapping_cmp);
|
|
639
|
+
if (!mapping)
|
|
640
|
+
continue;
|
|
641
|
+
|
|
642
|
+
active_feature_t feature;
|
|
643
|
+
feature.rec.feature = mapping->aatFeatureType;
|
|
644
|
+
feature.rec.setting = features[i].value ? mapping->selectorToEnable : mapping->selectorToDisable;
|
|
645
|
+
feature.order = i;
|
|
646
|
+
|
|
647
|
+
feature_event_t *event;
|
|
648
|
+
|
|
649
|
+
event = feature_events.push ();
|
|
650
|
+
if (unlikely (!event))
|
|
651
|
+
goto fail_features;
|
|
652
|
+
event->index = features[i].start;
|
|
653
|
+
event->start = true;
|
|
654
|
+
event->feature = feature;
|
|
655
|
+
|
|
656
|
+
event = feature_events.push ();
|
|
657
|
+
if (unlikely (!event))
|
|
658
|
+
goto fail_features;
|
|
659
|
+
event->index = features[i].end;
|
|
660
|
+
event->start = false;
|
|
661
|
+
event->feature = feature;
|
|
662
|
+
}
|
|
663
|
+
feature_events.qsort ();
|
|
664
|
+
/* Add a strategic final event. */
|
|
665
|
+
{
|
|
666
|
+
active_feature_t feature;
|
|
667
|
+
feature.rec.feature = HB_TAG_NONE;
|
|
668
|
+
feature.rec.setting = 0;
|
|
669
|
+
feature.order = num_features + 1;
|
|
670
|
+
|
|
671
|
+
feature_event_t *event = feature_events.push ();
|
|
672
|
+
if (unlikely (!event))
|
|
673
|
+
goto fail_features;
|
|
674
|
+
event->index = 0; /* This value does magic. */
|
|
675
|
+
event->start = false;
|
|
676
|
+
event->feature = feature;
|
|
677
|
+
}
|
|
678
|
+
|
|
679
|
+
/* Scan events and save features for each range. */
|
|
680
|
+
hb_auto_array_t<active_feature_t> active_features;
|
|
681
|
+
unsigned int last_index = 0;
|
|
682
|
+
for (unsigned int i = 0; i < feature_events.len; i++)
|
|
683
|
+
{
|
|
684
|
+
feature_event_t *event = &feature_events[i];
|
|
685
|
+
|
|
686
|
+
if (event->index != last_index)
|
|
687
|
+
{
|
|
688
|
+
/* Save a snapshot of active features and the range. */
|
|
689
|
+
range_record_t *range = range_records.push ();
|
|
690
|
+
if (unlikely (!range))
|
|
691
|
+
goto fail_features;
|
|
692
|
+
|
|
693
|
+
if (active_features.len)
|
|
694
|
+
{
|
|
695
|
+
CFMutableArrayRef features_array = CFArrayCreateMutable(kCFAllocatorDefault, 0, &kCFTypeArrayCallBacks);
|
|
696
|
+
|
|
697
|
+
/* TODO sort and resolve conflicting features? */
|
|
698
|
+
/* active_features.qsort (); */
|
|
699
|
+
for (unsigned int j = 0; j < active_features.len; j++)
|
|
700
|
+
{
|
|
701
|
+
CFStringRef keys[] = {
|
|
702
|
+
kCTFontFeatureTypeIdentifierKey,
|
|
703
|
+
kCTFontFeatureSelectorIdentifierKey
|
|
704
|
+
};
|
|
705
|
+
CFNumberRef values[] = {
|
|
706
|
+
CFNumberCreate (kCFAllocatorDefault, kCFNumberIntType, &active_features[j].rec.feature),
|
|
707
|
+
CFNumberCreate (kCFAllocatorDefault, kCFNumberIntType, &active_features[j].rec.setting)
|
|
708
|
+
};
|
|
709
|
+
static_assert ((ARRAY_LENGTH_CONST (keys) == ARRAY_LENGTH_CONST (values)), "");
|
|
710
|
+
CFDictionaryRef dict = CFDictionaryCreate (kCFAllocatorDefault,
|
|
711
|
+
(const void **) keys,
|
|
712
|
+
(const void **) values,
|
|
713
|
+
ARRAY_LENGTH (keys),
|
|
714
|
+
&kCFTypeDictionaryKeyCallBacks,
|
|
715
|
+
&kCFTypeDictionaryValueCallBacks);
|
|
716
|
+
for (unsigned int i = 0; i < ARRAY_LENGTH (values); i++)
|
|
717
|
+
CFRelease (values[i]);
|
|
718
|
+
|
|
719
|
+
CFArrayAppendValue (features_array, dict);
|
|
720
|
+
CFRelease (dict);
|
|
721
|
+
|
|
722
|
+
}
|
|
723
|
+
|
|
724
|
+
CFDictionaryRef attributes = CFDictionaryCreate (kCFAllocatorDefault,
|
|
725
|
+
(const void **) &kCTFontFeatureSettingsAttribute,
|
|
726
|
+
(const void **) &features_array,
|
|
727
|
+
1,
|
|
728
|
+
&kCFTypeDictionaryKeyCallBacks,
|
|
729
|
+
&kCFTypeDictionaryValueCallBacks);
|
|
730
|
+
CFRelease (features_array);
|
|
731
|
+
|
|
732
|
+
CTFontDescriptorRef font_desc = CTFontDescriptorCreateWithAttributes (attributes);
|
|
733
|
+
CFRelease (attributes);
|
|
734
|
+
|
|
735
|
+
range->font = CTFontCreateCopyWithAttributes (ct_font, 0.0, nullptr, font_desc);
|
|
736
|
+
CFRelease (font_desc);
|
|
737
|
+
}
|
|
738
|
+
else
|
|
739
|
+
{
|
|
740
|
+
range->font = nullptr;
|
|
741
|
+
}
|
|
742
|
+
|
|
743
|
+
range->index_first = last_index;
|
|
744
|
+
range->index_last = event->index - 1;
|
|
745
|
+
|
|
746
|
+
last_index = event->index;
|
|
747
|
+
}
|
|
748
|
+
|
|
749
|
+
if (event->start) {
|
|
750
|
+
active_feature_t *feature = active_features.push ();
|
|
751
|
+
if (unlikely (!feature))
|
|
752
|
+
goto fail_features;
|
|
753
|
+
*feature = event->feature;
|
|
754
|
+
} else {
|
|
755
|
+
active_feature_t *feature = active_features.find (&event->feature);
|
|
756
|
+
if (feature)
|
|
757
|
+
active_features.remove (feature - active_features.array);
|
|
758
|
+
}
|
|
759
|
+
}
|
|
760
|
+
}
|
|
761
|
+
else
|
|
762
|
+
{
|
|
763
|
+
fail_features:
|
|
764
|
+
num_features = 0;
|
|
765
|
+
}
|
|
766
|
+
|
|
767
|
+
unsigned int scratch_size;
|
|
768
|
+
hb_buffer_t::scratch_buffer_t *scratch = buffer->get_scratch_buffer (&scratch_size);
|
|
769
|
+
|
|
770
|
+
#define ALLOCATE_ARRAY(Type, name, len, on_no_room) \
|
|
771
|
+
Type *name = (Type *) scratch; \
|
|
772
|
+
{ \
|
|
773
|
+
unsigned int _consumed = DIV_CEIL ((len) * sizeof (Type), sizeof (*scratch)); \
|
|
774
|
+
if (unlikely (_consumed > scratch_size)) \
|
|
775
|
+
{ \
|
|
776
|
+
on_no_room; \
|
|
777
|
+
assert (0); \
|
|
778
|
+
} \
|
|
779
|
+
scratch += _consumed; \
|
|
780
|
+
scratch_size -= _consumed; \
|
|
781
|
+
}
|
|
782
|
+
|
|
783
|
+
ALLOCATE_ARRAY (UniChar, pchars, buffer->len * 2, /*nothing*/);
|
|
784
|
+
unsigned int chars_len = 0;
|
|
785
|
+
for (unsigned int i = 0; i < buffer->len; i++) {
|
|
786
|
+
hb_codepoint_t c = buffer->info[i].codepoint;
|
|
787
|
+
if (likely (c <= 0xFFFFu))
|
|
788
|
+
pchars[chars_len++] = c;
|
|
789
|
+
else if (unlikely (c > 0x10FFFFu))
|
|
790
|
+
pchars[chars_len++] = 0xFFFDu;
|
|
791
|
+
else {
|
|
792
|
+
pchars[chars_len++] = 0xD800u + ((c - 0x10000u) >> 10);
|
|
793
|
+
pchars[chars_len++] = 0xDC00u + ((c - 0x10000u) & ((1u << 10) - 1));
|
|
794
|
+
}
|
|
795
|
+
}
|
|
796
|
+
|
|
797
|
+
ALLOCATE_ARRAY (unsigned int, log_clusters, chars_len, /*nothing*/);
|
|
798
|
+
chars_len = 0;
|
|
799
|
+
for (unsigned int i = 0; i < buffer->len; i++)
|
|
800
|
+
{
|
|
801
|
+
hb_codepoint_t c = buffer->info[i].codepoint;
|
|
802
|
+
unsigned int cluster = buffer->info[i].cluster;
|
|
803
|
+
log_clusters[chars_len++] = cluster;
|
|
804
|
+
if (hb_in_range (c, 0x10000u, 0x10FFFFu))
|
|
805
|
+
log_clusters[chars_len++] = cluster; /* Surrogates. */
|
|
806
|
+
}
|
|
807
|
+
|
|
808
|
+
#define FAIL(...) \
|
|
809
|
+
HB_STMT_START { \
|
|
810
|
+
DEBUG_MSG (CORETEXT, nullptr, __VA_ARGS__); \
|
|
811
|
+
ret = false; \
|
|
812
|
+
goto fail; \
|
|
813
|
+
} HB_STMT_END;
|
|
814
|
+
|
|
815
|
+
bool ret = true;
|
|
816
|
+
CFStringRef string_ref = nullptr;
|
|
817
|
+
CTLineRef line = nullptr;
|
|
818
|
+
|
|
819
|
+
if (0)
|
|
820
|
+
{
|
|
821
|
+
resize_and_retry:
|
|
822
|
+
DEBUG_MSG (CORETEXT, buffer, "Buffer resize");
|
|
823
|
+
/* string_ref uses the scratch-buffer for backing store, and line references
|
|
824
|
+
* string_ref (via attr_string). We must release those before resizing buffer. */
|
|
825
|
+
assert (string_ref);
|
|
826
|
+
assert (line);
|
|
827
|
+
CFRelease (string_ref);
|
|
828
|
+
CFRelease (line);
|
|
829
|
+
string_ref = nullptr;
|
|
830
|
+
line = nullptr;
|
|
831
|
+
|
|
832
|
+
/* Get previous start-of-scratch-area, that we use later for readjusting
|
|
833
|
+
* our existing scratch arrays. */
|
|
834
|
+
unsigned int old_scratch_used;
|
|
835
|
+
hb_buffer_t::scratch_buffer_t *old_scratch;
|
|
836
|
+
old_scratch = buffer->get_scratch_buffer (&old_scratch_used);
|
|
837
|
+
old_scratch_used = scratch - old_scratch;
|
|
838
|
+
|
|
839
|
+
if (unlikely (!buffer->ensure (buffer->allocated * 2)))
|
|
840
|
+
FAIL ("Buffer resize failed");
|
|
841
|
+
|
|
842
|
+
/* Adjust scratch, pchars, and log_cluster arrays. This is ugly, but really the
|
|
843
|
+
* cleanest way to do without completely restructuring the rest of this shaper. */
|
|
844
|
+
scratch = buffer->get_scratch_buffer (&scratch_size);
|
|
845
|
+
pchars = reinterpret_cast<UniChar *> (((char *) scratch + ((char *) pchars - (char *) old_scratch)));
|
|
846
|
+
log_clusters = reinterpret_cast<unsigned int *> (((char *) scratch + ((char *) log_clusters - (char *) old_scratch)));
|
|
847
|
+
scratch += old_scratch_used;
|
|
848
|
+
scratch_size -= old_scratch_used;
|
|
849
|
+
}
|
|
850
|
+
{
|
|
851
|
+
string_ref = CFStringCreateWithCharactersNoCopy (nullptr,
|
|
852
|
+
pchars, chars_len,
|
|
853
|
+
kCFAllocatorNull);
|
|
854
|
+
if (unlikely (!string_ref))
|
|
855
|
+
FAIL ("CFStringCreateWithCharactersNoCopy failed");
|
|
856
|
+
|
|
857
|
+
/* Create an attributed string, populate it, and create a line from it, then release attributed string. */
|
|
858
|
+
{
|
|
859
|
+
CFMutableAttributedStringRef attr_string = CFAttributedStringCreateMutable (kCFAllocatorDefault,
|
|
860
|
+
chars_len);
|
|
861
|
+
if (unlikely (!attr_string))
|
|
862
|
+
FAIL ("CFAttributedStringCreateMutable failed");
|
|
863
|
+
CFAttributedStringReplaceString (attr_string, CFRangeMake (0, 0), string_ref);
|
|
864
|
+
if (HB_DIRECTION_IS_VERTICAL (buffer->props.direction))
|
|
865
|
+
{
|
|
866
|
+
CFAttributedStringSetAttribute (attr_string, CFRangeMake (0, chars_len),
|
|
867
|
+
kCTVerticalFormsAttributeName, kCFBooleanTrue);
|
|
868
|
+
}
|
|
869
|
+
|
|
870
|
+
if (buffer->props.language)
|
|
871
|
+
{
|
|
872
|
+
/* What's the iOS equivalent of this check?
|
|
873
|
+
* The symbols was introduced in iOS 7.0.
|
|
874
|
+
* At any rate, our fallback is safe and works fine. */
|
|
875
|
+
#if MAC_OS_X_VERSION_MIN_REQUIRED < 1090
|
|
876
|
+
# define kCTLanguageAttributeName CFSTR ("NSLanguage")
|
|
877
|
+
#endif
|
|
878
|
+
CFStringRef lang = CFStringCreateWithCStringNoCopy (kCFAllocatorDefault,
|
|
879
|
+
hb_language_to_string (buffer->props.language),
|
|
880
|
+
kCFStringEncodingUTF8,
|
|
881
|
+
kCFAllocatorNull);
|
|
882
|
+
if (unlikely (!lang))
|
|
883
|
+
{
|
|
884
|
+
CFRelease (attr_string);
|
|
885
|
+
FAIL ("CFStringCreateWithCStringNoCopy failed");
|
|
886
|
+
}
|
|
887
|
+
CFAttributedStringSetAttribute (attr_string, CFRangeMake (0, chars_len),
|
|
888
|
+
kCTLanguageAttributeName, lang);
|
|
889
|
+
CFRelease (lang);
|
|
890
|
+
}
|
|
891
|
+
CFAttributedStringSetAttribute (attr_string, CFRangeMake (0, chars_len),
|
|
892
|
+
kCTFontAttributeName, ct_font);
|
|
893
|
+
|
|
894
|
+
if (num_features && range_records.len)
|
|
895
|
+
{
|
|
896
|
+
unsigned int start = 0;
|
|
897
|
+
range_record_t *last_range = &range_records[0];
|
|
898
|
+
for (unsigned int k = 0; k < chars_len; k++)
|
|
899
|
+
{
|
|
900
|
+
range_record_t *range = last_range;
|
|
901
|
+
while (log_clusters[k] < range->index_first)
|
|
902
|
+
range--;
|
|
903
|
+
while (log_clusters[k] > range->index_last)
|
|
904
|
+
range++;
|
|
905
|
+
if (range != last_range)
|
|
906
|
+
{
|
|
907
|
+
if (last_range->font)
|
|
908
|
+
CFAttributedStringSetAttribute (attr_string, CFRangeMake (start, k - start),
|
|
909
|
+
kCTFontAttributeName, last_range->font);
|
|
910
|
+
|
|
911
|
+
start = k;
|
|
912
|
+
}
|
|
913
|
+
|
|
914
|
+
last_range = range;
|
|
915
|
+
}
|
|
916
|
+
if (start != chars_len && last_range->font)
|
|
917
|
+
CFAttributedStringSetAttribute (attr_string, CFRangeMake (start, chars_len - start),
|
|
918
|
+
kCTFontAttributeName, last_range->font);
|
|
919
|
+
}
|
|
920
|
+
/* Enable/disable kern if requested.
|
|
921
|
+
*
|
|
922
|
+
* Note: once kern is disabled, reenabling it doesn't currently seem to work in CoreText.
|
|
923
|
+
*/
|
|
924
|
+
if (num_features)
|
|
925
|
+
{
|
|
926
|
+
unsigned int zeroint = 0;
|
|
927
|
+
CFNumberRef zero = CFNumberCreate (kCFAllocatorDefault, kCFNumberIntType, &zeroint);
|
|
928
|
+
for (unsigned int i = 0; i < num_features; i++)
|
|
929
|
+
{
|
|
930
|
+
const hb_feature_t &feature = features[i];
|
|
931
|
+
if (feature.tag == HB_TAG('k','e','r','n') &&
|
|
932
|
+
feature.start < chars_len && feature.start < feature.end)
|
|
933
|
+
{
|
|
934
|
+
CFRange feature_range = CFRangeMake (feature.start,
|
|
935
|
+
MIN (feature.end, chars_len) - feature.start);
|
|
936
|
+
if (feature.value)
|
|
937
|
+
CFAttributedStringRemoveAttribute (attr_string, feature_range, kCTKernAttributeName);
|
|
938
|
+
else
|
|
939
|
+
CFAttributedStringSetAttribute (attr_string, feature_range, kCTKernAttributeName, zero);
|
|
940
|
+
}
|
|
941
|
+
}
|
|
942
|
+
CFRelease (zero);
|
|
943
|
+
}
|
|
944
|
+
|
|
945
|
+
int level = HB_DIRECTION_IS_FORWARD (buffer->props.direction) ? 0 : 1;
|
|
946
|
+
CFNumberRef level_number = CFNumberCreate (kCFAllocatorDefault, kCFNumberIntType, &level);
|
|
947
|
+
CFDictionaryRef options = CFDictionaryCreate (kCFAllocatorDefault,
|
|
948
|
+
(const void **) &kCTTypesetterOptionForcedEmbeddingLevel,
|
|
949
|
+
(const void **) &level_number,
|
|
950
|
+
1,
|
|
951
|
+
&kCFTypeDictionaryKeyCallBacks,
|
|
952
|
+
&kCFTypeDictionaryValueCallBacks);
|
|
953
|
+
CFRelease (level_number);
|
|
954
|
+
if (unlikely (!options))
|
|
955
|
+
{
|
|
956
|
+
CFRelease (attr_string);
|
|
957
|
+
FAIL ("CFDictionaryCreate failed");
|
|
958
|
+
}
|
|
959
|
+
|
|
960
|
+
CTTypesetterRef typesetter = CTTypesetterCreateWithAttributedStringAndOptions (attr_string, options);
|
|
961
|
+
CFRelease (options);
|
|
962
|
+
CFRelease (attr_string);
|
|
963
|
+
if (unlikely (!typesetter))
|
|
964
|
+
FAIL ("CTTypesetterCreateWithAttributedStringAndOptions failed");
|
|
965
|
+
|
|
966
|
+
line = CTTypesetterCreateLine (typesetter, CFRangeMake(0, 0));
|
|
967
|
+
CFRelease (typesetter);
|
|
968
|
+
if (unlikely (!line))
|
|
969
|
+
FAIL ("CTTypesetterCreateLine failed");
|
|
970
|
+
}
|
|
971
|
+
|
|
972
|
+
CFArrayRef glyph_runs = CTLineGetGlyphRuns (line);
|
|
973
|
+
unsigned int num_runs = CFArrayGetCount (glyph_runs);
|
|
974
|
+
DEBUG_MSG (CORETEXT, nullptr, "Num runs: %d", num_runs);
|
|
975
|
+
|
|
976
|
+
buffer->len = 0;
|
|
977
|
+
uint32_t status_and = ~0, status_or = 0;
|
|
978
|
+
double advances_so_far = 0;
|
|
979
|
+
/* For right-to-left runs, CoreText returns the glyphs positioned such that
|
|
980
|
+
* any trailing whitespace is to the left of (0,0). Adjust coordinate system
|
|
981
|
+
* to fix for that. Test with any RTL string with trailing spaces.
|
|
982
|
+
* https://code.google.com/p/chromium/issues/detail?id=469028
|
|
983
|
+
*/
|
|
984
|
+
if (HB_DIRECTION_IS_BACKWARD (buffer->props.direction))
|
|
985
|
+
{
|
|
986
|
+
advances_so_far -= CTLineGetTrailingWhitespaceWidth (line);
|
|
987
|
+
if (HB_DIRECTION_IS_VERTICAL (buffer->props.direction))
|
|
988
|
+
advances_so_far = -advances_so_far;
|
|
989
|
+
}
|
|
990
|
+
|
|
991
|
+
const CFRange range_all = CFRangeMake (0, 0);
|
|
992
|
+
|
|
993
|
+
for (unsigned int i = 0; i < num_runs; i++)
|
|
994
|
+
{
|
|
995
|
+
CTRunRef run = static_cast<CTRunRef>(CFArrayGetValueAtIndex (glyph_runs, i));
|
|
996
|
+
CTRunStatus run_status = CTRunGetStatus (run);
|
|
997
|
+
status_or |= run_status;
|
|
998
|
+
status_and &= run_status;
|
|
999
|
+
DEBUG_MSG (CORETEXT, run, "CTRunStatus: %x", run_status);
|
|
1000
|
+
double run_advance = CTRunGetTypographicBounds (run, range_all, nullptr, nullptr, nullptr);
|
|
1001
|
+
if (HB_DIRECTION_IS_VERTICAL (buffer->props.direction))
|
|
1002
|
+
run_advance = -run_advance;
|
|
1003
|
+
DEBUG_MSG (CORETEXT, run, "Run advance: %g", run_advance);
|
|
1004
|
+
|
|
1005
|
+
/* CoreText does automatic font fallback (AKA "cascading") for characters
|
|
1006
|
+
* not supported by the requested font, and provides no way to turn it off,
|
|
1007
|
+
* so we must detect if the returned run uses a font other than the requested
|
|
1008
|
+
* one and fill in the buffer with .notdef glyphs instead of random glyph
|
|
1009
|
+
* indices from a different font.
|
|
1010
|
+
*/
|
|
1011
|
+
CFDictionaryRef attributes = CTRunGetAttributes (run);
|
|
1012
|
+
CTFontRef run_ct_font = static_cast<CTFontRef>(CFDictionaryGetValue (attributes, kCTFontAttributeName));
|
|
1013
|
+
if (!CFEqual (run_ct_font, ct_font))
|
|
1014
|
+
{
|
|
1015
|
+
/* The run doesn't use our main font instance. We have to figure out
|
|
1016
|
+
* whether font fallback happened, or this is just CoreText giving us
|
|
1017
|
+
* another CTFont using the same underlying CGFont. CoreText seems
|
|
1018
|
+
* to do that in a variety of situations, one of which being vertical
|
|
1019
|
+
* text, but also perhaps for caching reasons.
|
|
1020
|
+
*
|
|
1021
|
+
* First, see if it uses any of our subfonts created to set font features...
|
|
1022
|
+
*
|
|
1023
|
+
* Next, compare the CGFont to the one we used to create our fonts.
|
|
1024
|
+
* Even this doesn't work all the time.
|
|
1025
|
+
*
|
|
1026
|
+
* Finally, we compare PS names, which I don't think are unique...
|
|
1027
|
+
*
|
|
1028
|
+
* Looks like if we really want to be sure here we have to modify the
|
|
1029
|
+
* font to change the name table, similar to what we do in the uniscribe
|
|
1030
|
+
* backend.
|
|
1031
|
+
*
|
|
1032
|
+
* However, even that wouldn't work if we were passed in the CGFont to
|
|
1033
|
+
* construct a hb_face to begin with.
|
|
1034
|
+
*
|
|
1035
|
+
* See: http://github.com/harfbuzz/harfbuzz/pull/36
|
|
1036
|
+
*
|
|
1037
|
+
* Also see: https://bugs.chromium.org/p/chromium/issues/detail?id=597098
|
|
1038
|
+
*/
|
|
1039
|
+
bool matched = false;
|
|
1040
|
+
for (unsigned int i = 0; i < range_records.len; i++)
|
|
1041
|
+
if (range_records[i].font && CFEqual (run_ct_font, range_records[i].font))
|
|
1042
|
+
{
|
|
1043
|
+
matched = true;
|
|
1044
|
+
break;
|
|
1045
|
+
}
|
|
1046
|
+
if (!matched)
|
|
1047
|
+
{
|
|
1048
|
+
CGFontRef run_cg_font = CTFontCopyGraphicsFont (run_ct_font, nullptr);
|
|
1049
|
+
if (run_cg_font)
|
|
1050
|
+
{
|
|
1051
|
+
matched = CFEqual (run_cg_font, cg_font);
|
|
1052
|
+
CFRelease (run_cg_font);
|
|
1053
|
+
}
|
|
1054
|
+
}
|
|
1055
|
+
if (!matched)
|
|
1056
|
+
{
|
|
1057
|
+
CFStringRef font_ps_name = CTFontCopyName (ct_font, kCTFontPostScriptNameKey);
|
|
1058
|
+
CFStringRef run_ps_name = CTFontCopyName (run_ct_font, kCTFontPostScriptNameKey);
|
|
1059
|
+
CFComparisonResult result = CFStringCompare (run_ps_name, font_ps_name, 0);
|
|
1060
|
+
CFRelease (run_ps_name);
|
|
1061
|
+
CFRelease (font_ps_name);
|
|
1062
|
+
if (result == kCFCompareEqualTo)
|
|
1063
|
+
matched = true;
|
|
1064
|
+
}
|
|
1065
|
+
if (!matched)
|
|
1066
|
+
{
|
|
1067
|
+
CFRange range = CTRunGetStringRange (run);
|
|
1068
|
+
DEBUG_MSG (CORETEXT, run, "Run used fallback font: %ld..%ld",
|
|
1069
|
+
range.location, range.location + range.length);
|
|
1070
|
+
if (!buffer->ensure_inplace (buffer->len + range.length))
|
|
1071
|
+
goto resize_and_retry;
|
|
1072
|
+
hb_glyph_info_t *info = buffer->info + buffer->len;
|
|
1073
|
+
|
|
1074
|
+
hb_codepoint_t notdef = 0;
|
|
1075
|
+
hb_direction_t dir = buffer->props.direction;
|
|
1076
|
+
hb_position_t x_advance, y_advance, x_offset, y_offset;
|
|
1077
|
+
hb_font_get_glyph_advance_for_direction (font, notdef, dir, &x_advance, &y_advance);
|
|
1078
|
+
hb_font_get_glyph_origin_for_direction (font, notdef, dir, &x_offset, &y_offset);
|
|
1079
|
+
hb_position_t advance = x_advance + y_advance;
|
|
1080
|
+
x_offset = -x_offset;
|
|
1081
|
+
y_offset = -y_offset;
|
|
1082
|
+
|
|
1083
|
+
unsigned int old_len = buffer->len;
|
|
1084
|
+
for (CFIndex j = range.location; j < range.location + range.length; j++)
|
|
1085
|
+
{
|
|
1086
|
+
UniChar ch = CFStringGetCharacterAtIndex (string_ref, j);
|
|
1087
|
+
if (hb_in_range<UniChar> (ch, 0xDC00u, 0xDFFFu) && range.location < j)
|
|
1088
|
+
{
|
|
1089
|
+
ch = CFStringGetCharacterAtIndex (string_ref, j - 1);
|
|
1090
|
+
if (hb_in_range<UniChar> (ch, 0xD800u, 0xDBFFu))
|
|
1091
|
+
/* This is the second of a surrogate pair. Don't need .notdef
|
|
1092
|
+
* for this one. */
|
|
1093
|
+
continue;
|
|
1094
|
+
}
|
|
1095
|
+
if (buffer->unicode->is_default_ignorable (ch))
|
|
1096
|
+
continue;
|
|
1097
|
+
|
|
1098
|
+
info->codepoint = notdef;
|
|
1099
|
+
info->cluster = log_clusters[j];
|
|
1100
|
+
|
|
1101
|
+
info->mask = advance;
|
|
1102
|
+
info->var1.i32 = x_offset;
|
|
1103
|
+
info->var2.i32 = y_offset;
|
|
1104
|
+
|
|
1105
|
+
info++;
|
|
1106
|
+
buffer->len++;
|
|
1107
|
+
}
|
|
1108
|
+
if (HB_DIRECTION_IS_BACKWARD (buffer->props.direction))
|
|
1109
|
+
buffer->reverse_range (old_len, buffer->len);
|
|
1110
|
+
advances_so_far += run_advance;
|
|
1111
|
+
continue;
|
|
1112
|
+
}
|
|
1113
|
+
}
|
|
1114
|
+
|
|
1115
|
+
unsigned int num_glyphs = CTRunGetGlyphCount (run);
|
|
1116
|
+
if (num_glyphs == 0)
|
|
1117
|
+
continue;
|
|
1118
|
+
|
|
1119
|
+
if (!buffer->ensure_inplace (buffer->len + num_glyphs))
|
|
1120
|
+
goto resize_and_retry;
|
|
1121
|
+
|
|
1122
|
+
hb_glyph_info_t *run_info = buffer->info + buffer->len;
|
|
1123
|
+
|
|
1124
|
+
/* Testing used to indicate that CTRunGetGlyphsPtr, etc (almost?) always
|
|
1125
|
+
* succeed, and so copying data to our own buffer will be rare. Reports
|
|
1126
|
+
* have it that this changed in OS X 10.10 Yosemite, and nullptr is returned
|
|
1127
|
+
* frequently. At any rate, we can test that codepath by setting USE_PTR
|
|
1128
|
+
* to false. */
|
|
1129
|
+
|
|
1130
|
+
#define USE_PTR true
|
|
1131
|
+
|
|
1132
|
+
#define SCRATCH_SAVE() \
|
|
1133
|
+
unsigned int scratch_size_saved = scratch_size; \
|
|
1134
|
+
hb_buffer_t::scratch_buffer_t *scratch_saved = scratch
|
|
1135
|
+
|
|
1136
|
+
#define SCRATCH_RESTORE() \
|
|
1137
|
+
scratch_size = scratch_size_saved; \
|
|
1138
|
+
scratch = scratch_saved;
|
|
1139
|
+
|
|
1140
|
+
{ /* Setup glyphs */
|
|
1141
|
+
SCRATCH_SAVE();
|
|
1142
|
+
const CGGlyph* glyphs = USE_PTR ? CTRunGetGlyphsPtr (run) : nullptr;
|
|
1143
|
+
if (!glyphs) {
|
|
1144
|
+
ALLOCATE_ARRAY (CGGlyph, glyph_buf, num_glyphs, goto resize_and_retry);
|
|
1145
|
+
CTRunGetGlyphs (run, range_all, glyph_buf);
|
|
1146
|
+
glyphs = glyph_buf;
|
|
1147
|
+
}
|
|
1148
|
+
const CFIndex* string_indices = USE_PTR ? CTRunGetStringIndicesPtr (run) : nullptr;
|
|
1149
|
+
if (!string_indices) {
|
|
1150
|
+
ALLOCATE_ARRAY (CFIndex, index_buf, num_glyphs, goto resize_and_retry);
|
|
1151
|
+
CTRunGetStringIndices (run, range_all, index_buf);
|
|
1152
|
+
string_indices = index_buf;
|
|
1153
|
+
}
|
|
1154
|
+
hb_glyph_info_t *info = run_info;
|
|
1155
|
+
for (unsigned int j = 0; j < num_glyphs; j++)
|
|
1156
|
+
{
|
|
1157
|
+
info->codepoint = glyphs[j];
|
|
1158
|
+
info->cluster = log_clusters[string_indices[j]];
|
|
1159
|
+
info++;
|
|
1160
|
+
}
|
|
1161
|
+
SCRATCH_RESTORE();
|
|
1162
|
+
}
|
|
1163
|
+
{
|
|
1164
|
+
/* Setup positions.
|
|
1165
|
+
* Note that CoreText does not return advances for glyphs. As such,
|
|
1166
|
+
* for all but last glyph, we use the delta position to next glyph as
|
|
1167
|
+
* advance (in the advance direction only), and for last glyph we set
|
|
1168
|
+
* whatever is needed to make the whole run's advance add up. */
|
|
1169
|
+
SCRATCH_SAVE();
|
|
1170
|
+
const CGPoint* positions = USE_PTR ? CTRunGetPositionsPtr (run) : nullptr;
|
|
1171
|
+
if (!positions) {
|
|
1172
|
+
ALLOCATE_ARRAY (CGPoint, position_buf, num_glyphs, goto resize_and_retry);
|
|
1173
|
+
CTRunGetPositions (run, range_all, position_buf);
|
|
1174
|
+
positions = position_buf;
|
|
1175
|
+
}
|
|
1176
|
+
hb_glyph_info_t *info = run_info;
|
|
1177
|
+
if (HB_DIRECTION_IS_HORIZONTAL (buffer->props.direction))
|
|
1178
|
+
{
|
|
1179
|
+
hb_position_t x_offset = (positions[0].x - advances_so_far) * x_mult;
|
|
1180
|
+
for (unsigned int j = 0; j < num_glyphs; j++)
|
|
1181
|
+
{
|
|
1182
|
+
double advance;
|
|
1183
|
+
if (likely (j + 1 < num_glyphs))
|
|
1184
|
+
advance = positions[j + 1].x - positions[j].x;
|
|
1185
|
+
else /* last glyph */
|
|
1186
|
+
advance = run_advance - (positions[j].x - positions[0].x);
|
|
1187
|
+
info->mask = advance * x_mult;
|
|
1188
|
+
info->var1.i32 = x_offset;
|
|
1189
|
+
info->var2.i32 = positions[j].y * y_mult;
|
|
1190
|
+
info++;
|
|
1191
|
+
}
|
|
1192
|
+
}
|
|
1193
|
+
else
|
|
1194
|
+
{
|
|
1195
|
+
hb_position_t y_offset = (positions[0].y - advances_so_far) * y_mult;
|
|
1196
|
+
for (unsigned int j = 0; j < num_glyphs; j++)
|
|
1197
|
+
{
|
|
1198
|
+
double advance;
|
|
1199
|
+
if (likely (j + 1 < num_glyphs))
|
|
1200
|
+
advance = positions[j + 1].y - positions[j].y;
|
|
1201
|
+
else /* last glyph */
|
|
1202
|
+
advance = run_advance - (positions[j].y - positions[0].y);
|
|
1203
|
+
info->mask = advance * y_mult;
|
|
1204
|
+
info->var1.i32 = positions[j].x * x_mult;
|
|
1205
|
+
info->var2.i32 = y_offset;
|
|
1206
|
+
info++;
|
|
1207
|
+
}
|
|
1208
|
+
}
|
|
1209
|
+
SCRATCH_RESTORE();
|
|
1210
|
+
advances_so_far += run_advance;
|
|
1211
|
+
}
|
|
1212
|
+
#undef SCRATCH_RESTORE
|
|
1213
|
+
#undef SCRATCH_SAVE
|
|
1214
|
+
#undef USE_PTR
|
|
1215
|
+
#undef ALLOCATE_ARRAY
|
|
1216
|
+
|
|
1217
|
+
buffer->len += num_glyphs;
|
|
1218
|
+
}
|
|
1219
|
+
|
|
1220
|
+
/* Mac OS 10.6 doesn't have kCTTypesetterOptionForcedEmbeddingLevel,
|
|
1221
|
+
* or if it does, it doesn't respect it. So we get runs with wrong
|
|
1222
|
+
* directions. As such, disable the assert... It wouldn't crash, but
|
|
1223
|
+
* cursoring will be off...
|
|
1224
|
+
*
|
|
1225
|
+
* http://crbug.com/419769
|
|
1226
|
+
*/
|
|
1227
|
+
if (0)
|
|
1228
|
+
{
|
|
1229
|
+
/* Make sure all runs had the expected direction. */
|
|
1230
|
+
bool backward = HB_DIRECTION_IS_BACKWARD (buffer->props.direction);
|
|
1231
|
+
assert (bool (status_and & kCTRunStatusRightToLeft) == backward);
|
|
1232
|
+
assert (bool (status_or & kCTRunStatusRightToLeft) == backward);
|
|
1233
|
+
}
|
|
1234
|
+
|
|
1235
|
+
buffer->clear_positions ();
|
|
1236
|
+
|
|
1237
|
+
unsigned int count = buffer->len;
|
|
1238
|
+
hb_glyph_info_t *info = buffer->info;
|
|
1239
|
+
hb_glyph_position_t *pos = buffer->pos;
|
|
1240
|
+
if (HB_DIRECTION_IS_HORIZONTAL (buffer->props.direction))
|
|
1241
|
+
for (unsigned int i = 0; i < count; i++)
|
|
1242
|
+
{
|
|
1243
|
+
pos->x_advance = info->mask;
|
|
1244
|
+
pos->x_offset = info->var1.i32;
|
|
1245
|
+
pos->y_offset = info->var2.i32;
|
|
1246
|
+
|
|
1247
|
+
info++, pos++;
|
|
1248
|
+
}
|
|
1249
|
+
else
|
|
1250
|
+
for (unsigned int i = 0; i < count; i++)
|
|
1251
|
+
{
|
|
1252
|
+
pos->y_advance = info->mask;
|
|
1253
|
+
pos->x_offset = info->var1.i32;
|
|
1254
|
+
pos->y_offset = info->var2.i32;
|
|
1255
|
+
|
|
1256
|
+
info++, pos++;
|
|
1257
|
+
}
|
|
1258
|
+
|
|
1259
|
+
/* Fix up clusters so that we never return out-of-order indices;
|
|
1260
|
+
* if core text has reordered glyphs, we'll merge them to the
|
|
1261
|
+
* beginning of the reordered cluster. CoreText is nice enough
|
|
1262
|
+
* to tell us whenever it has produced nonmonotonic results...
|
|
1263
|
+
* Note that we assume the input clusters were nonmonotonic to
|
|
1264
|
+
* begin with.
|
|
1265
|
+
*
|
|
1266
|
+
* This does *not* mean we'll form the same clusters as Uniscribe
|
|
1267
|
+
* or the native OT backend, only that the cluster indices will be
|
|
1268
|
+
* monotonic in the output buffer. */
|
|
1269
|
+
if (count > 1 && (status_or & kCTRunStatusNonMonotonic))
|
|
1270
|
+
{
|
|
1271
|
+
hb_glyph_info_t *info = buffer->info;
|
|
1272
|
+
if (HB_DIRECTION_IS_FORWARD (buffer->props.direction))
|
|
1273
|
+
{
|
|
1274
|
+
unsigned int cluster = info[count - 1].cluster;
|
|
1275
|
+
for (unsigned int i = count - 1; i > 0; i--)
|
|
1276
|
+
{
|
|
1277
|
+
cluster = MIN (cluster, info[i - 1].cluster);
|
|
1278
|
+
info[i - 1].cluster = cluster;
|
|
1279
|
+
}
|
|
1280
|
+
}
|
|
1281
|
+
else
|
|
1282
|
+
{
|
|
1283
|
+
unsigned int cluster = info[0].cluster;
|
|
1284
|
+
for (unsigned int i = 1; i < count; i++)
|
|
1285
|
+
{
|
|
1286
|
+
cluster = MIN (cluster, info[i].cluster);
|
|
1287
|
+
info[i].cluster = cluster;
|
|
1288
|
+
}
|
|
1289
|
+
}
|
|
1290
|
+
}
|
|
1291
|
+
}
|
|
1292
|
+
|
|
1293
|
+
buffer->unsafe_to_break_all ();
|
|
1294
|
+
|
|
1295
|
+
#undef FAIL
|
|
1296
|
+
|
|
1297
|
+
fail:
|
|
1298
|
+
if (string_ref)
|
|
1299
|
+
CFRelease (string_ref);
|
|
1300
|
+
if (line)
|
|
1301
|
+
CFRelease (line);
|
|
1302
|
+
|
|
1303
|
+
for (unsigned int i = 0; i < range_records.len; i++)
|
|
1304
|
+
if (range_records[i].font)
|
|
1305
|
+
CFRelease (range_records[i].font);
|
|
1306
|
+
|
|
1307
|
+
return ret;
|
|
1308
|
+
}
|
|
1309
|
+
|
|
1310
|
+
|
|
1311
|
+
/*
|
|
1312
|
+
* AAT shaper
|
|
1313
|
+
*/
|
|
1314
|
+
|
|
1315
|
+
HB_SHAPER_DATA_ENSURE_DEFINE(coretext_aat, face)
|
|
1316
|
+
HB_SHAPER_DATA_ENSURE_DEFINE(coretext_aat, font)
|
|
1317
|
+
|
|
1318
|
+
/*
|
|
1319
|
+
* shaper face data
|
|
1320
|
+
*/
|
|
1321
|
+
|
|
1322
|
+
struct hb_coretext_aat_shaper_face_data_t {};
|
|
1323
|
+
|
|
1324
|
+
hb_coretext_aat_shaper_face_data_t *
|
|
1325
|
+
_hb_coretext_aat_shaper_face_data_create (hb_face_t *face)
|
|
1326
|
+
{
|
|
1327
|
+
static const hb_tag_t tags[] = {HB_CORETEXT_TAG_MORX, HB_CORETEXT_TAG_MORT, HB_CORETEXT_TAG_KERX};
|
|
1328
|
+
|
|
1329
|
+
for (unsigned int i = 0; i < ARRAY_LENGTH (tags); i++)
|
|
1330
|
+
{
|
|
1331
|
+
hb_blob_t *blob = face->reference_table (tags[i]);
|
|
1332
|
+
if (hb_blob_get_length (blob))
|
|
1333
|
+
{
|
|
1334
|
+
hb_blob_destroy (blob);
|
|
1335
|
+
return hb_coretext_shaper_face_data_ensure (face) ? (hb_coretext_aat_shaper_face_data_t *) HB_SHAPER_DATA_SUCCEEDED : nullptr;
|
|
1336
|
+
}
|
|
1337
|
+
hb_blob_destroy (blob);
|
|
1338
|
+
}
|
|
1339
|
+
|
|
1340
|
+
return nullptr;
|
|
1341
|
+
}
|
|
1342
|
+
|
|
1343
|
+
void
|
|
1344
|
+
_hb_coretext_aat_shaper_face_data_destroy (hb_coretext_aat_shaper_face_data_t *data HB_UNUSED)
|
|
1345
|
+
{
|
|
1346
|
+
}
|
|
1347
|
+
|
|
1348
|
+
|
|
1349
|
+
/*
|
|
1350
|
+
* shaper font data
|
|
1351
|
+
*/
|
|
1352
|
+
|
|
1353
|
+
struct hb_coretext_aat_shaper_font_data_t {};
|
|
1354
|
+
|
|
1355
|
+
hb_coretext_aat_shaper_font_data_t *
|
|
1356
|
+
_hb_coretext_aat_shaper_font_data_create (hb_font_t *font)
|
|
1357
|
+
{
|
|
1358
|
+
return hb_coretext_shaper_font_data_ensure (font) ? (hb_coretext_aat_shaper_font_data_t *) HB_SHAPER_DATA_SUCCEEDED : nullptr;
|
|
1359
|
+
}
|
|
1360
|
+
|
|
1361
|
+
void
|
|
1362
|
+
_hb_coretext_aat_shaper_font_data_destroy (hb_coretext_aat_shaper_font_data_t *data HB_UNUSED)
|
|
1363
|
+
{
|
|
1364
|
+
}
|
|
1365
|
+
|
|
1366
|
+
|
|
1367
|
+
/*
|
|
1368
|
+
* shaper shape_plan data
|
|
1369
|
+
*/
|
|
1370
|
+
|
|
1371
|
+
struct hb_coretext_aat_shaper_shape_plan_data_t {};
|
|
1372
|
+
|
|
1373
|
+
hb_coretext_aat_shaper_shape_plan_data_t *
|
|
1374
|
+
_hb_coretext_aat_shaper_shape_plan_data_create (hb_shape_plan_t *shape_plan HB_UNUSED,
|
|
1375
|
+
const hb_feature_t *user_features HB_UNUSED,
|
|
1376
|
+
unsigned int num_user_features HB_UNUSED,
|
|
1377
|
+
const int *coords HB_UNUSED,
|
|
1378
|
+
unsigned int num_coords HB_UNUSED)
|
|
1379
|
+
{
|
|
1380
|
+
return (hb_coretext_aat_shaper_shape_plan_data_t *) HB_SHAPER_DATA_SUCCEEDED;
|
|
1381
|
+
}
|
|
1382
|
+
|
|
1383
|
+
void
|
|
1384
|
+
_hb_coretext_aat_shaper_shape_plan_data_destroy (hb_coretext_aat_shaper_shape_plan_data_t *data HB_UNUSED)
|
|
1385
|
+
{
|
|
1386
|
+
}
|
|
1387
|
+
|
|
1388
|
+
|
|
1389
|
+
/*
|
|
1390
|
+
* shaper
|
|
1391
|
+
*/
|
|
1392
|
+
|
|
1393
|
+
hb_bool_t
|
|
1394
|
+
_hb_coretext_aat_shape (hb_shape_plan_t *shape_plan,
|
|
1395
|
+
hb_font_t *font,
|
|
1396
|
+
hb_buffer_t *buffer,
|
|
1397
|
+
const hb_feature_t *features,
|
|
1398
|
+
unsigned int num_features)
|
|
1399
|
+
{
|
|
1400
|
+
return _hb_coretext_shape (shape_plan, font, buffer, features, num_features);
|
|
1401
|
+
}
|