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.
Files changed (876) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +57 -0
  3. data/LICENSE.txt +36 -0
  4. data/README.org +34 -0
  5. data/ext/laag/harfbuzz/extconf.rb +16 -0
  6. data/laag-harfbuzz.gemspec +20 -0
  7. data/lib/laag/harfbuzz.rb +29 -0
  8. data/vendor/github.com/harfbuzz/harfbuzz/.ci/deploy-docs.sh +36 -0
  9. data/vendor/github.com/harfbuzz/harfbuzz/.ci/fail.sh +18 -0
  10. data/vendor/github.com/harfbuzz/harfbuzz/.ci/run-coveralls.sh +14 -0
  11. data/vendor/github.com/harfbuzz/harfbuzz/.ci/trigger-coverity.sh +11 -0
  12. data/vendor/github.com/harfbuzz/harfbuzz/.circleci/config.yml +190 -0
  13. data/vendor/github.com/harfbuzz/harfbuzz/.editorconfig +18 -0
  14. data/vendor/github.com/harfbuzz/harfbuzz/.travis.yml +89 -0
  15. data/vendor/github.com/harfbuzz/harfbuzz/AUTHORS +9 -0
  16. data/vendor/github.com/harfbuzz/harfbuzz/BUILD.md +50 -0
  17. data/vendor/github.com/harfbuzz/harfbuzz/CMakeLists.txt +848 -0
  18. data/vendor/github.com/harfbuzz/harfbuzz/COPYING +36 -0
  19. data/vendor/github.com/harfbuzz/harfbuzz/Makefile.am +85 -0
  20. data/vendor/github.com/harfbuzz/harfbuzz/NEWS +1832 -0
  21. data/vendor/github.com/harfbuzz/harfbuzz/README +16 -0
  22. data/vendor/github.com/harfbuzz/harfbuzz/README.md +1 -0
  23. data/vendor/github.com/harfbuzz/harfbuzz/README.python +30 -0
  24. data/vendor/github.com/harfbuzz/harfbuzz/RELEASING.md +99 -0
  25. data/vendor/github.com/harfbuzz/harfbuzz/THANKS +7 -0
  26. data/vendor/github.com/harfbuzz/harfbuzz/TODO +42 -0
  27. data/vendor/github.com/harfbuzz/harfbuzz/appveyor.yml +61 -0
  28. data/vendor/github.com/harfbuzz/harfbuzz/autogen.sh +48 -0
  29. data/vendor/github.com/harfbuzz/harfbuzz/configure.ac +542 -0
  30. data/vendor/github.com/harfbuzz/harfbuzz/docs/HarfBuzz.png +0 -0
  31. data/vendor/github.com/harfbuzz/harfbuzz/docs/HarfBuzz.svg +277 -0
  32. data/vendor/github.com/harfbuzz/harfbuzz/docs/Makefile.am +123 -0
  33. data/vendor/github.com/harfbuzz/harfbuzz/docs/harfbuzz-docs.xml +210 -0
  34. data/vendor/github.com/harfbuzz/harfbuzz/docs/harfbuzz-overrides.txt +0 -0
  35. data/vendor/github.com/harfbuzz/harfbuzz/docs/harfbuzz-sections.txt +627 -0
  36. data/vendor/github.com/harfbuzz/harfbuzz/docs/usermanual-buffers-language-script-and-direction.xml +77 -0
  37. data/vendor/github.com/harfbuzz/harfbuzz/docs/usermanual-clusters.xml +304 -0
  38. data/vendor/github.com/harfbuzz/harfbuzz/docs/usermanual-fonts-and-faces.xml +18 -0
  39. data/vendor/github.com/harfbuzz/harfbuzz/docs/usermanual-glyph-information.xml +8 -0
  40. data/vendor/github.com/harfbuzz/harfbuzz/docs/usermanual-hello-harfbuzz.xml +183 -0
  41. data/vendor/github.com/harfbuzz/harfbuzz/docs/usermanual-install-harfbuzz.xml +70 -0
  42. data/vendor/github.com/harfbuzz/harfbuzz/docs/usermanual-opentype-features.xml +13 -0
  43. data/vendor/github.com/harfbuzz/harfbuzz/docs/usermanual-what-is-harfbuzz.xml +115 -0
  44. data/vendor/github.com/harfbuzz/harfbuzz/docs/version.xml.in +1 -0
  45. data/vendor/github.com/harfbuzz/harfbuzz/git.mk +400 -0
  46. data/vendor/github.com/harfbuzz/harfbuzz/harfbuzz.doap +24 -0
  47. data/vendor/github.com/harfbuzz/harfbuzz/m4/ax_code_coverage.m4 +264 -0
  48. data/vendor/github.com/harfbuzz/harfbuzz/m4/ax_cxx_compile_stdcxx.m4 +982 -0
  49. data/vendor/github.com/harfbuzz/harfbuzz/m4/ax_pthread.m4 +485 -0
  50. data/vendor/github.com/harfbuzz/harfbuzz/m4/pkg.m4 +157 -0
  51. data/vendor/github.com/harfbuzz/harfbuzz/mingw32.sh +22 -0
  52. data/vendor/github.com/harfbuzz/harfbuzz/mingw64.sh +22 -0
  53. data/vendor/github.com/harfbuzz/harfbuzz/replace-enum-strings.cmake +21 -0
  54. data/vendor/github.com/harfbuzz/harfbuzz/src/Makefile.am +445 -0
  55. data/vendor/github.com/harfbuzz/harfbuzz/src/Makefile.sources +214 -0
  56. data/vendor/github.com/harfbuzz/harfbuzz/src/check-c-linkage-decls.sh +27 -0
  57. data/vendor/github.com/harfbuzz/harfbuzz/src/check-externs.sh +22 -0
  58. data/vendor/github.com/harfbuzz/harfbuzz/src/check-header-guards.sh +24 -0
  59. data/vendor/github.com/harfbuzz/harfbuzz/src/check-includes.sh +44 -0
  60. data/vendor/github.com/harfbuzz/harfbuzz/src/check-libstdc++.sh +44 -0
  61. data/vendor/github.com/harfbuzz/harfbuzz/src/check-static-inits.sh +40 -0
  62. data/vendor/github.com/harfbuzz/harfbuzz/src/check-symbols.sh +62 -0
  63. data/vendor/github.com/harfbuzz/harfbuzz/src/dev-run.sh +98 -0
  64. data/vendor/github.com/harfbuzz/harfbuzz/src/dump-indic-data.cc +43 -0
  65. data/vendor/github.com/harfbuzz/harfbuzz/src/dump-khmer-data.cc +43 -0
  66. data/vendor/github.com/harfbuzz/harfbuzz/src/dump-myanmar-data.cc +43 -0
  67. data/vendor/github.com/harfbuzz/harfbuzz/src/dump-use-data.cc +38 -0
  68. data/vendor/github.com/harfbuzz/harfbuzz/src/gen-arabic-table.py +269 -0
  69. data/vendor/github.com/harfbuzz/harfbuzz/src/gen-def.py +19 -0
  70. data/vendor/github.com/harfbuzz/harfbuzz/src/gen-indic-table.py +260 -0
  71. data/vendor/github.com/harfbuzz/harfbuzz/src/gen-unicode-ranges.py +52 -0
  72. data/vendor/github.com/harfbuzz/harfbuzz/src/gen-use-table.py +484 -0
  73. data/vendor/github.com/harfbuzz/harfbuzz/src/harfbuzz-config.cmake.in +82 -0
  74. data/vendor/github.com/harfbuzz/harfbuzz/src/harfbuzz-gobject.pc.in +12 -0
  75. data/vendor/github.com/harfbuzz/harfbuzz/src/harfbuzz-icu.pc.in +13 -0
  76. data/vendor/github.com/harfbuzz/harfbuzz/src/harfbuzz-subset.pc.in +12 -0
  77. data/vendor/github.com/harfbuzz/harfbuzz/src/harfbuzz.pc.in +13 -0
  78. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-aat-layout-ankr-table.hh +80 -0
  79. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-aat-layout-common-private.hh +728 -0
  80. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-aat-layout-kerx-table.hh +339 -0
  81. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-aat-layout-morx-table.hh +728 -0
  82. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-aat-layout-private.hh +43 -0
  83. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-aat-layout-trak-table.hh +201 -0
  84. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-aat-layout.cc +143 -0
  85. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-atomic-private.hh +189 -0
  86. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-blob.cc +504 -0
  87. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-blob.h +129 -0
  88. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-buffer-deserialize-json.hh +643 -0
  89. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-buffer-deserialize-json.rl +132 -0
  90. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-buffer-deserialize-text.hh +571 -0
  91. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-buffer-deserialize-text.rl +126 -0
  92. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-buffer-private.hh +388 -0
  93. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-buffer-serialize.cc +486 -0
  94. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-buffer.cc +2010 -0
  95. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-buffer.h +562 -0
  96. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-common.cc +1050 -0
  97. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-common.h +397 -0
  98. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-coretext.cc +1401 -0
  99. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-coretext.h +64 -0
  100. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-debug.hh +444 -0
  101. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-deprecated.h +65 -0
  102. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-directwrite.cc +931 -0
  103. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-directwrite.h +38 -0
  104. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-dsalgs.hh +161 -0
  105. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-face-private.hh +111 -0
  106. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-face.cc +506 -0
  107. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-face.h +121 -0
  108. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-fallback-shape.cc +149 -0
  109. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-font-private.hh +561 -0
  110. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-font.cc +1846 -0
  111. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-font.h +641 -0
  112. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ft.cc +783 -0
  113. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ft.h +132 -0
  114. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-glib.cc +431 -0
  115. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-glib.h +56 -0
  116. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-gobject-enums.cc.tmpl +73 -0
  117. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-gobject-enums.h.tmpl +56 -0
  118. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-gobject-structs.cc +83 -0
  119. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-gobject-structs.h +138 -0
  120. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-gobject.h +40 -0
  121. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-graphite2.cc +421 -0
  122. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-graphite2.h +52 -0
  123. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-icu.cc +394 -0
  124. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-icu.h +52 -0
  125. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-mutex-private.hh +141 -0
  126. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-object-private.hh +196 -0
  127. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-open-file-private.hh +372 -0
  128. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-open-type-private.hh +1238 -0
  129. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-cmap-table.hh +789 -0
  130. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-color-cbdt-table.hh +471 -0
  131. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-color-colr-table.hh +142 -0
  132. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-color-cpal-table.hh +208 -0
  133. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-color.cc +183 -0
  134. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-font.cc +281 -0
  135. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-font.h +45 -0
  136. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-glyf-table.hh +473 -0
  137. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-hdmx-table.hh +198 -0
  138. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-head-table.hh +154 -0
  139. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-hhea-table.hh +98 -0
  140. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-hmtx-table.hh +328 -0
  141. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-kern-table.hh +394 -0
  142. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-layout-base-table.hh +655 -0
  143. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-layout-common-private.hh +1773 -0
  144. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-layout-gdef-table.hh +459 -0
  145. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-layout-gpos-table.hh +1654 -0
  146. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-layout-gsub-table.hh +1364 -0
  147. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-layout-gsubgpos-private.hh +2374 -0
  148. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-layout-jstf-table.hh +234 -0
  149. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-layout-private.hh +683 -0
  150. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-layout.cc +1313 -0
  151. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-layout.h +338 -0
  152. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-map-private.hh +250 -0
  153. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-map.cc +336 -0
  154. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-math-table.hh +722 -0
  155. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-math.cc +253 -0
  156. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-math.h +209 -0
  157. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-maxp-table.hh +148 -0
  158. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-name-table.hh +138 -0
  159. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-os2-table.hh +181 -0
  160. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-os2-unicode-ranges.hh +247 -0
  161. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-post-macroman.hh +294 -0
  162. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-post-table.hh +282 -0
  163. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-arabic-fallback.hh +354 -0
  164. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-arabic-private.hh +50 -0
  165. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-arabic-table.hh +398 -0
  166. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-arabic-win1256.hh +323 -0
  167. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-arabic.cc +721 -0
  168. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-default.cc +46 -0
  169. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-hangul.cc +431 -0
  170. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-hebrew.cc +186 -0
  171. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-indic-machine.hh +1319 -0
  172. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-indic-machine.rl +125 -0
  173. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-indic-private.hh +401 -0
  174. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-indic-table.cc +486 -0
  175. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-indic.cc +1569 -0
  176. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-khmer-machine.hh +294 -0
  177. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-khmer-machine.rl +107 -0
  178. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-khmer-private.hh +124 -0
  179. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-khmer.cc +835 -0
  180. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-myanmar-machine.hh +413 -0
  181. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-myanmar-machine.rl +129 -0
  182. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-myanmar-private.hh +171 -0
  183. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-myanmar.cc +401 -0
  184. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-private.hh +397 -0
  185. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-thai.cc +383 -0
  186. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-tibetan.cc +63 -0
  187. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-use-machine.hh +502 -0
  188. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-use-machine.rl +176 -0
  189. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-use-private.hh +97 -0
  190. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-use-table.cc +788 -0
  191. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-use.cc +612 -0
  192. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-fallback-private.hh +53 -0
  193. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-fallback.cc +559 -0
  194. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-normalize-private.hh +69 -0
  195. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-normalize.cc +433 -0
  196. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-private.hh +108 -0
  197. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape.cc +970 -0
  198. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape.h +53 -0
  199. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-tag.cc +1094 -0
  200. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-tag.h +59 -0
  201. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-var-avar-table.hh +149 -0
  202. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-var-fvar-table.hh +209 -0
  203. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-var-hvar-table.hh +165 -0
  204. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-var-mvar-table.hh +114 -0
  205. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-var.cc +159 -0
  206. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-var.h +105 -0
  207. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot.h +45 -0
  208. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-private.hh +1073 -0
  209. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-set-digest-private.hh +179 -0
  210. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-set-private.hh +658 -0
  211. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-set.cc +519 -0
  212. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-set.h +165 -0
  213. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-shape-plan-private.hh +67 -0
  214. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-shape-plan.cc +578 -0
  215. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-shape-plan.h +108 -0
  216. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-shape.cc +161 -0
  217. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-shape.h +62 -0
  218. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-shaper-impl-private.hh +43 -0
  219. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-shaper-list.hh +58 -0
  220. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-shaper-private.hh +124 -0
  221. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-shaper.cc +111 -0
  222. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-string-array.hh +81 -0
  223. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-subset-glyf.cc +307 -0
  224. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-subset-glyf.hh +40 -0
  225. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-subset-input.cc +119 -0
  226. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-subset-plan.cc +227 -0
  227. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-subset-plan.hh +85 -0
  228. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-subset-private.hh +62 -0
  229. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-subset.cc +339 -0
  230. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-subset.h +83 -0
  231. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ucdn.cc +273 -0
  232. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ucdn/COPYING +13 -0
  233. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ucdn/Makefile.am +16 -0
  234. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ucdn/Makefile.sources +7 -0
  235. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ucdn/README +40 -0
  236. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ucdn/ucdn.c +360 -0
  237. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ucdn/ucdn.h +453 -0
  238. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ucdn/ucdn_db.h +5540 -0
  239. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-unicode-private.hh +371 -0
  240. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-unicode.cc +563 -0
  241. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-unicode.h +471 -0
  242. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-uniscribe.cc +1039 -0
  243. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-uniscribe.h +46 -0
  244. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-utf-private.hh +282 -0
  245. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-version.h +66 -0
  246. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-version.h.in +66 -0
  247. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-warning.cc +39 -0
  248. data/vendor/github.com/harfbuzz/harfbuzz/src/hb.h +51 -0
  249. data/vendor/github.com/harfbuzz/harfbuzz/src/main.cc +201 -0
  250. data/vendor/github.com/harfbuzz/harfbuzz/src/sample.py +78 -0
  251. data/vendor/github.com/harfbuzz/harfbuzz/src/test-buffer-serialize.cc +129 -0
  252. data/vendor/github.com/harfbuzz/harfbuzz/src/test-size-params.cc +94 -0
  253. data/vendor/github.com/harfbuzz/harfbuzz/src/test-unicode-ranges.cc +67 -0
  254. data/vendor/github.com/harfbuzz/harfbuzz/src/test-would-substitute.cc +104 -0
  255. data/vendor/github.com/harfbuzz/harfbuzz/src/test.cc +134 -0
  256. data/vendor/github.com/harfbuzz/harfbuzz/test/CMakeLists.txt +4 -0
  257. data/vendor/github.com/harfbuzz/harfbuzz/test/Makefile.am +15 -0
  258. data/vendor/github.com/harfbuzz/harfbuzz/test/api/.valgrind-suppressions +0 -0
  259. data/vendor/github.com/harfbuzz/harfbuzz/test/api/CMakeLists.txt +29 -0
  260. data/vendor/github.com/harfbuzz/harfbuzz/test/api/Makefile.am +169 -0
  261. data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/Inconsolata-Regular.ab.ttf +0 -0
  262. data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/Inconsolata-Regular.abc.ttf +0 -0
  263. data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/Inconsolata-Regular.abc.widerc.ttf +0 -0
  264. data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/Inconsolata-Regular.ac.ttf +0 -0
  265. data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/Inconsolata-Regular.ac.widerc.ttf +0 -0
  266. data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/MathTestFontEmpty.otf +0 -0
  267. data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/MathTestFontFull.otf +0 -0
  268. data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/MathTestFontNone.otf +0 -0
  269. data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/MathTestFontPartial1.otf +0 -0
  270. data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/MathTestFontPartial2.otf +0 -0
  271. data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/MathTestFontPartial3.otf +0 -0
  272. data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/MathTestFontPartial4.otf +0 -0
  273. data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/README +3 -0
  274. data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/Roboto-Regular.abc.cmap-format12-only.ttf +0 -0
  275. data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/Roboto-Regular.abc.ttf +0 -0
  276. data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/Roboto-Regular.ac.cmap-format12-only.ttf +0 -0
  277. data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/Roboto-Regular.ac.nohints.ttf +0 -0
  278. data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/Roboto-Regular.ac.ttf +0 -0
  279. data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/Roboto-Regular.b.ttf +0 -0
  280. data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/Roboto-Regular.components.1fc.nohints.ttf +0 -0
  281. data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/Roboto-Regular.components.subset.ttf +0 -0
  282. data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/Roboto-Regular.components.ttf +0 -0
  283. data/vendor/github.com/harfbuzz/harfbuzz/test/api/hb-subset-test.h +136 -0
  284. data/vendor/github.com/harfbuzz/harfbuzz/test/api/hb-test.h +314 -0
  285. data/vendor/github.com/harfbuzz/harfbuzz/test/api/test-blob.c +349 -0
  286. data/vendor/github.com/harfbuzz/harfbuzz/test/api/test-buffer.c +884 -0
  287. data/vendor/github.com/harfbuzz/harfbuzz/test/api/test-c.c +64 -0
  288. data/vendor/github.com/harfbuzz/harfbuzz/test/api/test-common.c +225 -0
  289. data/vendor/github.com/harfbuzz/harfbuzz/test/api/test-cplusplus.cc +30 -0
  290. data/vendor/github.com/harfbuzz/harfbuzz/test/api/test-font.c +550 -0
  291. data/vendor/github.com/harfbuzz/harfbuzz/test/api/test-object.c +375 -0
  292. data/vendor/github.com/harfbuzz/harfbuzz/test/api/test-ot-color.c +319 -0
  293. data/vendor/github.com/harfbuzz/harfbuzz/test/api/test-ot-math.c +712 -0
  294. data/vendor/github.com/harfbuzz/harfbuzz/test/api/test-ot-tag.c +320 -0
  295. data/vendor/github.com/harfbuzz/harfbuzz/test/api/test-set.c +399 -0
  296. data/vendor/github.com/harfbuzz/harfbuzz/test/api/test-shape.c +208 -0
  297. data/vendor/github.com/harfbuzz/harfbuzz/test/api/test-subset-cmap.c +82 -0
  298. data/vendor/github.com/harfbuzz/harfbuzz/test/api/test-subset-glyf.c +183 -0
  299. data/vendor/github.com/harfbuzz/harfbuzz/test/api/test-subset-hdmx.c +81 -0
  300. data/vendor/github.com/harfbuzz/harfbuzz/test/api/test-subset-hmtx.c +162 -0
  301. data/vendor/github.com/harfbuzz/harfbuzz/test/api/test-subset-os2.c +59 -0
  302. data/vendor/github.com/harfbuzz/harfbuzz/test/api/test-unicode.c +937 -0
  303. data/vendor/github.com/harfbuzz/harfbuzz/test/api/test-version.c +81 -0
  304. data/vendor/github.com/harfbuzz/harfbuzz/test/fuzzing/CMakeLists.txt +18 -0
  305. data/vendor/github.com/harfbuzz/harfbuzz/test/fuzzing/Makefile.am +52 -0
  306. data/vendor/github.com/harfbuzz/harfbuzz/test/fuzzing/README +21 -0
  307. data/vendor/github.com/harfbuzz/harfbuzz/test/fuzzing/hb-fuzzer.cc +52 -0
  308. data/vendor/github.com/harfbuzz/harfbuzz/test/fuzzing/hb-fuzzer.hh +4 -0
  309. data/vendor/github.com/harfbuzz/harfbuzz/test/fuzzing/main.cc +21 -0
  310. data/vendor/github.com/harfbuzz/harfbuzz/test/fuzzing/run-fuzzer-tests.py +32 -0
  311. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/CMakeLists.txt +17 -0
  312. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/Makefile.am +35 -0
  313. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/README.md +41 -0
  314. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/Makefile.am +13 -0
  315. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/COPYING +95 -0
  316. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/Makefile.am +20 -0
  317. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/Makefile.sources +47 -0
  318. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/0509e80afb379d16560e9e47bdd7d888bebdebc6.ttf +0 -0
  319. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/051d92f8bc6ff724511b296c27623f824de256e9.ttf +0 -0
  320. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/074a5ae6b19de8f29772fdd5df2d3d833f81f5e6.ttf +0 -0
  321. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/07f054357ff8638bac3711b422a1e31180bba863.ttf +0 -0
  322. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/15dfc433a135a658b9f4b1a861b5cdd9658ccbb9.ttf +0 -0
  323. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/1735326da89f0818cd8c51a0600e9789812c0f94.ttf +0 -0
  324. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/191826b9643e3f124d865d617ae609db6a2ce203.ttf +0 -0
  325. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/1a3d8f381387dd29be1e897e4b5100ac8b4829e1.ttf +0 -0
  326. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/1a6f1687b7a221f9f2c834b0b360d3c8463b6daf.ttf +0 -0
  327. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/1c04a16f32a39c26c851b7fc014d2e8d298ba2b8.ttf +0 -0
  328. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/1c2c3fc37b2d4c3cb2ef726c6cdaaabd4b7f3eb9.ttf +0 -0
  329. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf +0 -0
  330. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/1ed7e9064f008f62de6ff0207bb4dd29409597a5.ttf +0 -0
  331. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/205edd09bd3d141cc9580f650109556cc28b22cb.ttf +0 -0
  332. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/217a934cfe15c548b572c203dceb2befdf026462.ttf +0 -0
  333. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/21b7fb9c1eeae260473809fbc1fe330f66a507cd.ttf +0 -0
  334. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/226bc2deab3846f1a682085f70c67d0421014144.ttf +0 -0
  335. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/233c1e252e737ca79e03a9fd56b71aaa4a230f2b.ttf +0 -0
  336. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/243798dd281c1c77c065958e1ff467420faa9bde.ttf +0 -0
  337. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/24b8d24d00ae86f49791b746da4c9d3f717a51a8.ttf +0 -0
  338. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/270b89df543a7e48e206a2d830c0e10e5265c630.ttf +0 -0
  339. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/298c9e1d955f10f6f72c6915c3c6ff9bf9695cec.ttf +0 -0
  340. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf +0 -0
  341. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/319f5d7ebffbefc5c5e6569f8cea73444d7a7268.ttf +0 -0
  342. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/341421e629668b1a1242245d39238ca48432d35d.ttf +0 -0
  343. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/3493e92eaded2661cadde752a39f9d58b11f0326.ttf +0 -0
  344. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/3511ff5c1647150595846ac414c595cccac34f18.ttf +0 -0
  345. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/37033cc5cf37bb223d7355153016b6ccece93b28.ttf +0 -0
  346. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/373e67bf41ca264e260a9716162b71a23549e885.ttf +0 -0
  347. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/375d6ae32a3cbe52fbf81a4e5777e3377675d5a3.ttf +0 -0
  348. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/3cae6bfe5b57c07ba81ddbd54c02fe4f3a1e3bf6.ttf +0 -0
  349. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/3d0b77a2360aa6faa1385aaa510509ab70dfbeff.ttf +0 -0
  350. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/43979b90b2dd929723cf4fe1715990bcb9c9a56b.ttf +0 -0
  351. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/43ef465752be9af900745f72fe29cb853a1401a5.ttf +0 -0
  352. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/45855bc8d46332b39c4ab9e2ee1a26b1f896da6b.ttf +0 -0
  353. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/49c9f7485c1392fa09a1b801bc2ffea79275f22e.ttf +0 -0
  354. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/4cce528e99f600ed9c25a2b69e32eb94a03b4ae8.ttf +0 -0
  355. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/4fac3929fc3332834e93673780ec0fe94342d193.ttf +0 -0
  356. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/5028afb650b1bb718ed2131e872fbcce57828fff.ttf +0 -0
  357. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/53374c7ca3657be37efde7ed02ae34229a56ae1f.ttf +0 -0
  358. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/54674a3111d209fb6be0ed31745314b7a8d2c244.ttf +0 -0
  359. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/558661aa659912f4d30ecd27bd09835171a8e2b0.ttf +0 -0
  360. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/55c88ebbe938680b08f92c3de20713183e0c7481.ttf +0 -0
  361. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/56cfd0e18d07f41c38e9598545a6d369127fc6f9.ttf +0 -0
  362. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/573d3a3177c9a8646e94c8a0d7b224334340946a.ttf +0 -0
  363. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/57a9d9f83020155cbb1d2be1f43d82388cbecc88.ttf +0 -0
  364. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/59a585a63b3df608fbeef00956c8c108deec7de6.ttf +0 -0
  365. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/5a5daf5eb5a4db77a2baa3ad9c7a6ed6e0655fa8.ttf +0 -0
  366. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/5dfad7735c6a67085f1b90d4d497e32907db4c78.ttf +0 -0
  367. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/641bd9db850193064d17575053ae2bf8ec149ddc.ttf +0 -0
  368. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/663aef6b019dbf45ffd74089e2b5f2496ceceb18.ttf +0 -0
  369. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/6991b13ce889466be6de3f66e891de2bc0f117ee.ttf +0 -0
  370. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/6ff0fbead4462d9f229167b4e6839eceb8465058.ttf +0 -0
  371. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/706c5d7b625f207bc0d874c67237aad6f1e9cd6f.ttf +0 -0
  372. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/757ebd573617a24aa9dfbf0b885c54875c6fe06b.ttf +0 -0
  373. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/7a37dc4d5bf018456aea291cee06daf004c0221c.ttf +0 -0
  374. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/7e14e7883ed152baa158b80e207b66114c823a8b.ttf +0 -0
  375. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/8099955657a54e9ee38a6ba1d6f950ce58e3cc25.ttf +0 -0
  376. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/813c2f8e5512187fd982417a7fb4286728e6f4a8.ttf +0 -0
  377. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/81c368a33816fb20e9f647e8f24e2180f4720263.ttf +0 -0
  378. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/8228d035fcd65d62ec9728fb34f42c63be93a5d3.ttf +0 -0
  379. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/8240789f6d12d4cfc4b5e8e6f246c3701bcf861f.ttf +0 -0
  380. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/82f4f3b57bb55344e72e70231380202a52af5805.ttf +0 -0
  381. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/8454d22037f892e76614e1645d066689a0200e61.ttf +0 -0
  382. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf +0 -0
  383. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/856ff9562451293cbeff6f396d4e3877c4f0a436.ttf +0 -0
  384. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/85fe0be440c64ac77699e21c2f1bd933a919167e.ttf +0 -0
  385. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/87f85d17d26f1fe9ad28d7365101958edaefb967.ttf +0 -0
  386. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/8a9fea2a7384f2116e5b84a9b31f83be7850ce21.ttf +0 -0
  387. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/94a5d6fb15a27521fba9ea4aee9cb39b2d03322a.ttf +0 -0
  388. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/96490dd2ff81233b335a650e7eb660e0e7b2eeea.ttf +0 -0
  389. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/98b7887cff91f722b92a8ff800120954606354f9.ttf +0 -0
  390. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/9d8a94a67932a3ab75a596fc8b5c6d0392ca9e49.ttf +0 -0
  391. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/a014549f766436cf55b2ceb40e462038938ee899.ttf +0 -0
  392. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf +0 -0
  393. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/a34a7b00f22ffb5fd7eef6933b81c7e71bc2cdfb.ttf +0 -0
  394. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/a34a9191d9376bda419836effeef7e75c1386016.ttf +0 -0
  395. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/a69118c2c2ada48ff803d9149daa54c9ebdae30e.ttf +0 -0
  396. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/a6c76d1bafde4a0b1026ebcc932d2e5c6fd02442.ttf +0 -0
  397. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/a919b33197965846f21074b24e30250d67277bce.ttf +0 -0
  398. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/a98e908e2ed21b22228ea59ebcc0f05034c86f2e.ttf +0 -0
  399. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/af3086380b743099c54a3b11b96766039ea62fcd.ttf +0 -0
  400. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/b151cfcdaa77585d77f17a42158e0873fc8e2633.ttf +0 -0
  401. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/b6acef662e0beb8d5fcf5b61c6b0ca69537b7402.ttf +0 -0
  402. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/b9e2aaa0d75fcef6971ec3a96d806ba4a6b31fe2.ttf +0 -0
  403. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/bb0c53752e85c3d28973ebc913287b8987d3dfe8.ttf +0 -0
  404. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/bb29ce50df2bdba2d10726427c6b7609bf460e04.ttf +0 -0
  405. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/bb9473d2403488714043bcfb946c9f78b86ad627.ttf +0 -0
  406. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/bbf4a308c402f0678c3e82844892a4da2ebe598f.ttf +0 -0
  407. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/bf39b0e91ef9807f15a9e283a21a14a209fd2cfc.ttf +0 -0
  408. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/bf962d3202883a820aed019d9b5c1838c2ff69c6.ttf +0 -0
  409. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/c4e48b0886ef460f532fb49f00047ec92c432ec0.ttf +0 -0
  410. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/cc5f3d2d717fb6bd4dfae1c16d48a2cb8e12233b.ttf +0 -0
  411. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf +0 -0
  412. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/d629e7fedc0b350222d7987345fe61613fa3929a.ttf +0 -0
  413. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/d9b8bc10985f24796826c29f7ccba3d0ae11ec02.ttf +0 -0
  414. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/dd9f0c7c7c36f75a18be0cab1cddf8f3ab0f366b.ttf +0 -0
  415. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/df768b9c257e0c9c35786c47cae15c46571d56be.ttf +0 -0
  416. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/e207635780b42f898d58654b65098763e340f5c7.ttf +0 -0
  417. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/e68a88939e0f06e34d2bc911f09b70890289c8fd.ttf +0 -0
  418. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/e88c339237f52d21e01c55f01b9c1b4cc14a0467.ttf +0 -0
  419. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/e90374e5e439e00725b4fe7a8d73db57c5a97f82.ttf +0 -0
  420. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/ee39587d13b2afa5499cc79e45780aa79293bbd4.ttf +0 -0
  421. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/ef2511f215aa3ca847cbfffbf861793b42170875.ttf +0 -0
  422. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/ef86fe710cfea877bbe0dbb6946a1f88d0661031.ttf +0 -0
  423. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/f22416c692720a7d46fadf4af99f4c9e094f00b9.ttf +0 -0
  424. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/f443753e8ffe8e8aae606cfba158e00334b6efb1.ttf +0 -0
  425. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/f499fbc23865022234775c43503bba2e63978fe1.ttf +0 -0
  426. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/f518eb6f6b5eec2946c9fbbbde44e45d46f5e2ac.ttf +0 -0
  427. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/f9b1dd4dcb515e757789a22cb4241107746fd3d0.ttf +0 -0
  428. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/fab39d60d758cb586db5a504f218442cd1395725.ttf +0 -0
  429. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/fbb6c84c9e1fe0c39e152fbe845e51fd81f6748e.ttf +0 -0
  430. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/fcdcffbdf1c4c97c05308d7600e4c283eb47dbca.ttf +0 -0
  431. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/ffa0f5d2d9025486d8469d8b1fdd983e7632499b.ttf +0 -0
  432. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/arabic-fallback-shaping.tests +1 -0
  433. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/arabic-feature-order.tests +4 -0
  434. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/arabic-like-joining.tests +1 -0
  435. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/arabic-mark-order.tests +6 -0
  436. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/arabic-stch.tests +1 -0
  437. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/automatic-fractions.tests +3 -0
  438. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/cluster.tests +2 -0
  439. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/color-fonts.tests +1 -0
  440. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/context-matching.tests +3 -0
  441. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/cursive-positioning.tests +4 -0
  442. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/default-ignorables.tests +2 -0
  443. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/emoji-flag-tags.tests +2 -0
  444. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/fallback-positioning.tests +2 -0
  445. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/fuzzed.tests +23 -0
  446. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/hangul-jamo.tests +2 -0
  447. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/hyphens.tests +2 -0
  448. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/indic-consonant-with-stacker.tests +4 -0
  449. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/indic-init.tests +1 -0
  450. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/indic-joiner-candrabindu.tests +2 -0
  451. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/indic-joiners.tests +2 -0
  452. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/indic-old-spec.tests +2 -0
  453. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/indic-pref-blocking.tests +2 -0
  454. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/indic-script-extensions.tests +2 -0
  455. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/indic-special-cases.tests +3 -0
  456. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/indic-syllable.tests +8 -0
  457. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/language-tags.tests +12 -0
  458. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/ligature-id.tests +36 -0
  459. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/mark-attachment.tests +1 -0
  460. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/mark-filtering-sets.tests +5 -0
  461. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/mongolian-variation-selector.tests +4 -0
  462. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/myanmar-syllable.tests +1 -0
  463. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/simple.tests +2 -0
  464. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/spaces.tests +17 -0
  465. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/tibetan-contractions-1.tests +60 -0
  466. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/tibetan-contractions-2.tests +53 -0
  467. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/tibetan-vowels.tests +11 -0
  468. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/use-marchen.tests +35 -0
  469. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/use-syllable.tests +8 -0
  470. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/use.tests +5 -0
  471. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/variations-rvrn.tests +100 -0
  472. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/vertical.tests +3 -0
  473. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/zero-width-marks.tests +11 -0
  474. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/COPYING +13 -0
  475. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/DISABLED +35 -0
  476. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/Makefile.am +26 -0
  477. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/Makefile.sources +66 -0
  478. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/README +7 -0
  479. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/extract-tests.py +49 -0
  480. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/AdobeVFPrototype-Subset.otf +0 -0
  481. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/FDArrayTest257.otf +0 -0
  482. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/FDArrayTest65535.otf +0 -0
  483. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/NotoSansBalinese-Regular.ttf +0 -0
  484. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/NotoSansKannada-Regular.ttf +0 -0
  485. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/NotoSerifKannada-Regular.ttf +0 -0
  486. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/Selawik-README.md +60 -0
  487. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/Selawik-variable.ttf +0 -0
  488. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestAVAR.ttf +0 -0
  489. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestCMAP14.otf +0 -0
  490. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestCMAPMacTurkish.ttf +0 -0
  491. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestCVARGVAROne.ttf +0 -0
  492. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestCVARGVARTwo.ttf +0 -0
  493. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestGLYFOne.ttf +0 -0
  494. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestGPOSFour.ttf +0 -0
  495. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestGPOSOne.ttf +0 -0
  496. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestGPOSThree.ttf +0 -0
  497. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestGPOSTwo.otf +0 -0
  498. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestGSUBOne.otf +0 -0
  499. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestGVAREight.ttf +0 -0
  500. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestGVARFour.ttf +0 -0
  501. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestGVARNine.ttf +0 -0
  502. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestGVAROne.ttf +0 -0
  503. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestGVARThree.ttf +0 -0
  504. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestGVARTwo.ttf +0 -0
  505. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestHVAROne.otf +0 -0
  506. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestHVARTwo.ttf +0 -0
  507. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestKERNOne.otf +0 -0
  508. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXEight.ttf +0 -0
  509. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXEighteen.ttf +0 -0
  510. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXEleven.ttf +0 -0
  511. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXFour.ttf +0 -0
  512. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXFourteen.ttf +0 -0
  513. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXNine.ttf +0 -0
  514. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXOne.ttf +0 -0
  515. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXSeventeen.ttf +0 -0
  516. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXSixteen.ttf +0 -0
  517. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXTen.ttf +0 -0
  518. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXThirteen.ttf +0 -0
  519. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXThree.ttf +0 -0
  520. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXTwelve.ttf +0 -0
  521. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXTwenty.ttf +0 -0
  522. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXTwentyfive.ttf +0 -0
  523. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXTwentyone.ttf +0 -0
  524. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXTwentysix.ttf +0 -0
  525. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXTwentythree.ttf +0 -0
  526. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXTwentytwo.ttf +0 -0
  527. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXTwo.ttf +0 -0
  528. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestShapeAran.ttf +0 -0
  529. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestShapeEthi.ttf +0 -0
  530. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/Zycon.ttf +0 -0
  531. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/AVAR-1.tests +17 -0
  532. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/CFF-1.tests +13 -0
  533. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/CFF-2.tests +13 -0
  534. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/CFF2-1.tests +9 -0
  535. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/CMAP-1.tests +4 -0
  536. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/CMAP-2.tests +2 -0
  537. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/CMAP-3.tests +20 -0
  538. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/CVAR-1.tests +3 -0
  539. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/CVAR-2.tests +3 -0
  540. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/GLYF-1.tests +1 -0
  541. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/GPOS-1.tests +19 -0
  542. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/GPOS-2.tests +3 -0
  543. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/GPOS-3.tests +4 -0
  544. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/GPOS-4.tests +4 -0
  545. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/GPOS-5.tests +5 -0
  546. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/GSUB-1.tests +1 -0
  547. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/GSUB-2.tests +11 -0
  548. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/GVAR-1.tests +9 -0
  549. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/GVAR-2.tests +9 -0
  550. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/GVAR-3.tests +9 -0
  551. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/GVAR-4.tests +11 -0
  552. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/GVAR-5.tests +11 -0
  553. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/GVAR-6.tests +11 -0
  554. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/GVAR-7.tests +7 -0
  555. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/GVAR-8.tests +6 -0
  556. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/GVAR-9.tests +10 -0
  557. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/HVAR-1.tests +6 -0
  558. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/HVAR-2.tests +6 -0
  559. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/KERN-1.tests +1 -0
  560. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/KERN-2.tests +1 -0
  561. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-1.tests +1 -0
  562. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-10.tests +1 -0
  563. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-11.tests +1 -0
  564. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-12.tests +3 -0
  565. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-13.tests +1 -0
  566. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-14.tests +2 -0
  567. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-16.tests +1 -0
  568. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-17.tests +1 -0
  569. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-18.tests +4 -0
  570. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-19.tests +2 -0
  571. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-2.tests +16 -0
  572. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-20.tests +7 -0
  573. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-21.tests +1 -0
  574. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-22.tests +1 -0
  575. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-23.tests +1 -0
  576. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-25.tests +9 -0
  577. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-26.tests +2 -0
  578. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-3.tests +16 -0
  579. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-4.tests +15 -0
  580. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-5.tests +25 -0
  581. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-6.tests +1 -0
  582. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-7.tests +1 -0
  583. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-8.tests +3 -0
  584. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-9.tests +1 -0
  585. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/SHARAN-1.tests +6 -0
  586. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/SHBALI-1.tests +22 -0
  587. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/SHBALI-2.tests +12 -0
  588. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/SHBALI-3.tests +9 -0
  589. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/SHKNDA-1.tests +34 -0
  590. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/SHKNDA-2.tests +16 -0
  591. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/SHKNDA-3.tests +31 -0
  592. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/update.sh +46 -0
  593. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/hb-diff +10 -0
  594. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/hb-diff-colorize +7 -0
  595. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/hb-diff-filter-failures +5 -0
  596. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/hb-diff-stat +5 -0
  597. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/hb-unicode-decode +5 -0
  598. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/hb-unicode-encode +5 -0
  599. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/hb-unicode-prettyname +6 -0
  600. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/hb_test_tools.py +571 -0
  601. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/record-test.sh +107 -0
  602. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/run-tests.py +98 -0
  603. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-arabic/language-persian/mehran.txt +8 -0
  604. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/2grams.txt +601 -0
  605. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/3grams.txt +3415 -0
  606. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/4grams.txt +6316 -0
  607. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/5grams.txt +5029 -0
  608. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/6grams.txt +1542 -0
  609. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/7grams.txt +354 -0
  610. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/8grams.txt +26 -0
  611. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/LICENSE +3 -0
  612. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/README +16 -0
  613. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/SOURCES +4 -0
  614. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/lam-alef.txt +28 -0
  615. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/language-arabic.txt +695 -0
  616. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/language-persian.txt +48 -0
  617. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/language-urdu.txt +188 -0
  618. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/ligature-components.txt +18 -0
  619. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/ligature-diacritics.txt +1 -0
  620. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/mark-skipping.txt +10 -0
  621. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-mongolian/misc/misc.txt +6 -0
  622. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-mongolian/misc/non-joining.txt +8 -0
  623. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-mongolian/misc/poem.txt +4 -0
  624. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-mongolian/misc/variation-selectors.txt +8 -0
  625. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-nko/misc/misc.txt +5 -0
  626. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-phags-pa/misc/misc.txt +14 -0
  627. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-syriac/misc/abbreviation-mark.txt +11 -0
  628. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-syriac/misc/alaph.txt +98 -0
  629. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-default/script-ethiopic/misc/misc.txt +1 -0
  630. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-default/script-han/misc/cjk-compat.txt +3 -0
  631. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-default/script-hiragana/misc/kazuraki-liga-lines.txt +8 -0
  632. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-default/script-hiragana/misc/kazuraki-liga.txt +53 -0
  633. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-default/script-linear-b/misc/misc.txt +1 -0
  634. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-default/script-tifinagh/misc/misc.txt +10 -0
  635. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-hangul/script-hangul/misc/misc.txt +4 -0
  636. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-hebrew/script-hebrew/misc/diacritics.txt +16 -0
  637. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/LICENSE +19 -0
  638. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/README +13 -0
  639. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/SOURCES +2 -0
  640. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt +4 -0
  641. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt +40 -0
  642. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt +10 -0
  643. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt +10 -0
  644. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt +11 -0
  645. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt +2 -0
  646. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt +6 -0
  647. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt +59 -0
  648. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt +131 -0
  649. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/gsub/IndicFontFeatureGSUB.txt +139 -0
  650. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-bengali/misc/misc.txt +53 -0
  651. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-bengali/misc/reph.txt +14 -0
  652. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/LICENSE +19 -0
  653. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/README +13 -0
  654. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/SOURCES +2 -0
  655. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt +1 -0
  656. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt +36 -0
  657. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt +10 -0
  658. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt +10 -0
  659. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt +12 -0
  660. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt +2 -0
  661. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt +6 -0
  662. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt +58 -0
  663. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt +119 -0
  664. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/gsub/IndicFontFeatureGSUB.txt +215 -0
  665. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/misc/dottedcircle.txt +8 -0
  666. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/misc/eyelash.txt +3 -0
  667. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/misc/joiners.txt +19 -0
  668. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/misc/misc.txt +36 -0
  669. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/misc/spec-deviations.txt +1 -0
  670. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/misc/tricky-reordering.txt +5 -0
  671. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/LICENSE +19 -0
  672. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/README +13 -0
  673. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/SOURCES +2 -0
  674. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalConsonants.txt +8 -0
  675. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt +4 -0
  676. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt +45 -0
  677. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt +14 -0
  678. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-DevnagariSpecificAddition.txt +1 -0
  679. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt +10 -0
  680. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-GenericPunctuation.txt +2 -0
  681. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt +16 -0
  682. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt +10 -0
  683. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt +185 -0
  684. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt +185 -0
  685. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/gsub/IndicFontFeatureGSUB.txt +1367 -0
  686. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/LICENSE +19 -0
  687. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/README +13 -0
  688. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/SOURCES +2 -0
  689. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt +1 -0
  690. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt +34 -0
  691. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt +12 -0
  692. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt +10 -0
  693. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt +13 -0
  694. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt +2 -0
  695. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt +7 -0
  696. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt +170 -0
  697. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt +170 -0
  698. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/gsub/IndicFontFeatureGSUB.txt +1156 -0
  699. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/misc/misc.txt +2 -0
  700. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/LICENSE +19 -0
  701. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/README +13 -0
  702. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/SOURCES +2 -0
  703. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt +38 -0
  704. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt +9 -0
  705. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt +10 -0
  706. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-GurmukhiSpecific.txt +6 -0
  707. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt +10 -0
  708. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt +2 -0
  709. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt +6 -0
  710. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt +22 -0
  711. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt +2 -0
  712. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/gsub/IndicFontFeatureGSUB.txt +152 -0
  713. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-kannada/misc/misc.txt +20 -0
  714. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-kannada/misc/right-matras.txt +7 -0
  715. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/LICENSE +19 -0
  716. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/README +13 -0
  717. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/SOURCES +2 -0
  718. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalConsonants.txt +1 -0
  719. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt +4 -0
  720. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt +40 -0
  721. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt +13 -0
  722. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt +10 -0
  723. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt +14 -0
  724. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt +2 -0
  725. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt +9 -0
  726. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt +188 -0
  727. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/gsub/IndicFontFeatureGSUB.txt +306 -0
  728. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/misc/cibu.txt +188 -0
  729. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/misc/dot-reph.txt +15 -0
  730. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/misc/misc.txt +65 -0
  731. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/utrrs/LICENSE +19 -0
  732. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/utrrs/README +13 -0
  733. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/utrrs/SOURCES +2 -0
  734. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt +2 -0
  735. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt +36 -0
  736. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt +12 -0
  737. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt +10 -0
  738. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt +14 -0
  739. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt +2 -0
  740. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt +4 -0
  741. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/utrrs/gsub/IndicFontFeatureGSUB.txt +254 -0
  742. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-oriya/misc/bindu.txt +2 -0
  743. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-oriya/misc/misc.txt +28 -0
  744. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/LICENSE +19 -0
  745. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/README +13 -0
  746. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/SOURCES +2 -0
  747. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalConsonants.txt +3 -0
  748. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt +2 -0
  749. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt +34 -0
  750. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt +12 -0
  751. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt +10 -0
  752. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt +12 -0
  753. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-OriyaSpecific.txt +2 -0
  754. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt +2 -0
  755. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt +8 -0
  756. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/gsub/IndicFontFeatureGSUB.txt +170 -0
  757. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/misc/extensive.txt +4390 -0
  758. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/misc/misc.txt +41 -0
  759. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/misc/reph.txt +3 -0
  760. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/misc/split-matras.txt +4 -0
  761. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/LICENSE +19 -0
  762. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/README +13 -0
  763. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/SOURCES +2 -0
  764. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt +41 -0
  765. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt +17 -0
  766. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt +18 -0
  767. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-Punctuation.txt +1 -0
  768. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt +3 -0
  769. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/gpos/IndicFontFeatureGPOS.txt +162 -0
  770. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Conjunct.txt +1 -0
  771. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Rakaaraansaya.txt +41 -0
  772. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Repaya.txt +42 -0
  773. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Special-Cases.txt +2 -0
  774. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-TouchingLetters.txt +1 -0
  775. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Yansaya.txt +41 -0
  776. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB.txt +1 -0
  777. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/misc/misc.txt +43 -0
  778. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/LICENSE +19 -0
  779. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/README +13 -0
  780. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/SOURCES +2 -0
  781. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt +23 -0
  782. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-CurrencySymbols.txt +1 -0
  783. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt +11 -0
  784. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt +10 -0
  785. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt +12 -0
  786. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Numerics.txt +3 -0
  787. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt +2 -0
  788. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Symbols.txt +6 -0
  789. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-TamilSymbol.txt +1 -0
  790. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt +4 -0
  791. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt +64 -0
  792. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt +44 -0
  793. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/gsub/IndicFontFeatureGSUB.txt +4 -0
  794. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-telugu/misc/misc.txt +12 -0
  795. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-telugu/utrrs/LICENSE +19 -0
  796. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-telugu/utrrs/README +13 -0
  797. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-telugu/utrrs/SOURCES +2 -0
  798. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt +2 -0
  799. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt +38 -0
  800. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt +13 -0
  801. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt +10 -0
  802. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt +14 -0
  803. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt +2 -0
  804. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt +6 -0
  805. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-telugu/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt +385 -0
  806. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-telugu/utrrs/gsub/IndicFontFeatureGSUB.txt +287 -0
  807. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/south-east-asian/script-javanese/misc.txt +54 -0
  808. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/south-east-asian/script-khmer/misc/misc.txt +23 -0
  809. 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
  810. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/south-east-asian/script-khmer/misc/other-marks.txt +7 -0
  811. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-myanmar/script-myanmar/misc/misc.txt +7 -0
  812. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-myanmar/script-myanmar/misc/otspec.txt +1 -0
  813. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-myanmar/script-myanmar/misc/utn11.txt +34 -0
  814. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-thai/script-lao/misc/sara-am.txt +20 -0
  815. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-thai/script-thai/misc/misc.txt +11 -0
  816. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-thai/script-thai/misc/phinthu.txt +16 -0
  817. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-thai/script-thai/misc/pua-shaping.txt +11 -0
  818. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-thai/script-thai/misc/sara-am.txt +20 -0
  819. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-tibetan/script-tibetan/misc/contractions.txt +612 -0
  820. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-tibetan/script-tibetan/misc/misc.txt +2 -0
  821. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-use/script-batak/misc.txt +9 -0
  822. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-use/script-buginese/misc.txt +70 -0
  823. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-use/script-cham/misc.txt +3 -0
  824. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-use/script-kaithi/misc.txt +6 -0
  825. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-use/script-kharoshti/misc.txt +36 -0
  826. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-use/script-tai-tham/misc.txt +2 -0
  827. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-use/script-tai-tham/torture.txt +23 -0
  828. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/CMakeLists.txt +10 -0
  829. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/Makefile.am +22 -0
  830. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/Makefile.am +24 -0
  831. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/Makefile.sources +10 -0
  832. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/expected/basics/Roboto-Regular.abc.default.61,62,63.ttf +0 -0
  833. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/expected/basics/Roboto-Regular.abc.default.61,63.ttf +0 -0
  834. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/expected/basics/Roboto-Regular.abc.default.61.ttf +0 -0
  835. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/expected/basics/Roboto-Regular.abc.default.62.ttf +0 -0
  836. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/expected/basics/Roboto-Regular.abc.default.63.ttf +0 -0
  837. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/expected/basics/Roboto-Regular.abc.drop-hints.61,62,63.ttf +0 -0
  838. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/expected/basics/Roboto-Regular.abc.drop-hints.61,63.ttf +0 -0
  839. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/expected/basics/Roboto-Regular.abc.drop-hints.61.ttf +0 -0
  840. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/expected/basics/Roboto-Regular.abc.drop-hints.62.ttf +0 -0
  841. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/expected/basics/Roboto-Regular.abc.drop-hints.63.ttf +0 -0
  842. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/expected/full-font/Roboto-Regular.default.1FC,21,41,20,62,63.ttf +0 -0
  843. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/expected/full-font/Roboto-Regular.default.61,62,63.ttf +0 -0
  844. 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
  845. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/expected/full-font/Roboto-Regular.drop-hints.61,62,63.ttf +0 -0
  846. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/fonts/Roboto-Regular.abc.ttf +0 -0
  847. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/fonts/Roboto-Regular.ttf +0 -0
  848. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/profiles/default.txt +0 -0
  849. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/profiles/drop-hints.txt +1 -0
  850. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/tests/basics.tests +13 -0
  851. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/tests/full-font.tests +11 -0
  852. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/generate-expected-outputs.py +47 -0
  853. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/run-tests.py +133 -0
  854. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/subset_test_suite.py +87 -0
  855. data/vendor/github.com/harfbuzz/harfbuzz/util/Makefile.am +75 -0
  856. data/vendor/github.com/harfbuzz/harfbuzz/util/Makefile.sources +37 -0
  857. data/vendor/github.com/harfbuzz/harfbuzz/util/ansi-print.cc +427 -0
  858. data/vendor/github.com/harfbuzz/harfbuzz/util/ansi-print.hh +40 -0
  859. data/vendor/github.com/harfbuzz/harfbuzz/util/hb-fc-list.c +222 -0
  860. data/vendor/github.com/harfbuzz/harfbuzz/util/hb-fc.cc +149 -0
  861. data/vendor/github.com/harfbuzz/harfbuzz/util/hb-fc.h +46 -0
  862. data/vendor/github.com/harfbuzz/harfbuzz/util/hb-ot-shape-closure.cc +119 -0
  863. data/vendor/github.com/harfbuzz/harfbuzz/util/hb-shape.cc +165 -0
  864. data/vendor/github.com/harfbuzz/harfbuzz/util/hb-subset.cc +127 -0
  865. data/vendor/github.com/harfbuzz/harfbuzz/util/hb-view.cc +40 -0
  866. data/vendor/github.com/harfbuzz/harfbuzz/util/helper-cairo-ansi.cc +102 -0
  867. data/vendor/github.com/harfbuzz/harfbuzz/util/helper-cairo-ansi.hh +40 -0
  868. data/vendor/github.com/harfbuzz/harfbuzz/util/helper-cairo.cc +553 -0
  869. data/vendor/github.com/harfbuzz/harfbuzz/util/helper-cairo.hh +86 -0
  870. data/vendor/github.com/harfbuzz/harfbuzz/util/main-font-text.hh +96 -0
  871. data/vendor/github.com/harfbuzz/harfbuzz/util/options.cc +1026 -0
  872. data/vendor/github.com/harfbuzz/harfbuzz/util/options.hh +690 -0
  873. data/vendor/github.com/harfbuzz/harfbuzz/util/shape-consumer.hh +101 -0
  874. data/vendor/github.com/harfbuzz/harfbuzz/util/view-cairo.cc +133 -0
  875. data/vendor/github.com/harfbuzz/harfbuzz/util/view-cairo.hh +102 -0
  876. 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
+ }