laag-harfbuzz 1.7.6.1

Sign up to get free protection for your applications and to get access to all the features.
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,2374 @@
1
+ /*
2
+ * Copyright © 2007,2008,2009,2010 Red Hat, Inc.
3
+ * Copyright © 2010,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_OT_LAYOUT_GSUBGPOS_PRIVATE_HH
30
+ #define HB_OT_LAYOUT_GSUBGPOS_PRIVATE_HH
31
+
32
+ #include "hb-private.hh"
33
+ #include "hb-debug.hh"
34
+ #include "hb-buffer-private.hh"
35
+ #include "hb-ot-layout-gdef-table.hh"
36
+ #include "hb-set-private.hh"
37
+
38
+
39
+ namespace OT {
40
+
41
+
42
+ struct hb_closure_context_t :
43
+ hb_dispatch_context_t<hb_closure_context_t, hb_void_t, HB_DEBUG_CLOSURE>
44
+ {
45
+ inline const char *get_name (void) { return "CLOSURE"; }
46
+ typedef return_t (*recurse_func_t) (hb_closure_context_t *c, unsigned int lookup_index);
47
+ template <typename T>
48
+ inline return_t dispatch (const T &obj) { obj.closure (this); return HB_VOID; }
49
+ static return_t default_return_value (void) { return HB_VOID; }
50
+ bool stop_sublookup_iteration (return_t r HB_UNUSED) const { return false; }
51
+ return_t recurse (unsigned int lookup_index)
52
+ {
53
+ if (unlikely (nesting_level_left == 0 || !recurse_func))
54
+ return default_return_value ();
55
+
56
+ nesting_level_left--;
57
+ recurse_func (this, lookup_index);
58
+ nesting_level_left++;
59
+ return HB_VOID;
60
+ }
61
+
62
+ hb_face_t *face;
63
+ hb_set_t *glyphs;
64
+ recurse_func_t recurse_func;
65
+ unsigned int nesting_level_left;
66
+ unsigned int debug_depth;
67
+
68
+ hb_closure_context_t (hb_face_t *face_,
69
+ hb_set_t *glyphs_,
70
+ unsigned int nesting_level_left_ = HB_MAX_NESTING_LEVEL) :
71
+ face (face_),
72
+ glyphs (glyphs_),
73
+ recurse_func (nullptr),
74
+ nesting_level_left (nesting_level_left_),
75
+ debug_depth (0) {}
76
+
77
+ void set_recurse_func (recurse_func_t func) { recurse_func = func; }
78
+ };
79
+
80
+
81
+ struct hb_would_apply_context_t :
82
+ hb_dispatch_context_t<hb_would_apply_context_t, bool, HB_DEBUG_WOULD_APPLY>
83
+ {
84
+ inline const char *get_name (void) { return "WOULD_APPLY"; }
85
+ template <typename T>
86
+ inline return_t dispatch (const T &obj) { return obj.would_apply (this); }
87
+ static return_t default_return_value (void) { return false; }
88
+ bool stop_sublookup_iteration (return_t r) const { return r; }
89
+
90
+ hb_face_t *face;
91
+ const hb_codepoint_t *glyphs;
92
+ unsigned int len;
93
+ bool zero_context;
94
+ unsigned int debug_depth;
95
+
96
+ hb_would_apply_context_t (hb_face_t *face_,
97
+ const hb_codepoint_t *glyphs_,
98
+ unsigned int len_,
99
+ bool zero_context_) :
100
+ face (face_),
101
+ glyphs (glyphs_),
102
+ len (len_),
103
+ zero_context (zero_context_),
104
+ debug_depth (0) {}
105
+ };
106
+
107
+
108
+ struct hb_collect_glyphs_context_t :
109
+ hb_dispatch_context_t<hb_collect_glyphs_context_t, hb_void_t, HB_DEBUG_COLLECT_GLYPHS>
110
+ {
111
+ inline const char *get_name (void) { return "COLLECT_GLYPHS"; }
112
+ typedef return_t (*recurse_func_t) (hb_collect_glyphs_context_t *c, unsigned int lookup_index);
113
+ template <typename T>
114
+ inline return_t dispatch (const T &obj) { obj.collect_glyphs (this); return HB_VOID; }
115
+ static return_t default_return_value (void) { return HB_VOID; }
116
+ bool stop_sublookup_iteration (return_t r HB_UNUSED) const { return false; }
117
+ return_t recurse (unsigned int lookup_index)
118
+ {
119
+ if (unlikely (nesting_level_left == 0 || !recurse_func))
120
+ return default_return_value ();
121
+
122
+ /* Note that GPOS sets recurse_func to nullptr already, so it doesn't get
123
+ * past the previous check. For GSUB, we only want to collect the output
124
+ * glyphs in the recursion. If output is not requested, we can go home now.
125
+ *
126
+ * Note further, that the above is not exactly correct. A recursed lookup
127
+ * is allowed to match input that is not matched in the context, but that's
128
+ * not how most fonts are built. It's possible to relax that and recurse
129
+ * with all sets here if it proves to be an issue.
130
+ */
131
+
132
+ if (output == hb_set_get_empty ())
133
+ return HB_VOID;
134
+
135
+ /* Return if new lookup was recursed to before. */
136
+ if (recursed_lookups->has (lookup_index))
137
+ return HB_VOID;
138
+
139
+ hb_set_t *old_before = before;
140
+ hb_set_t *old_input = input;
141
+ hb_set_t *old_after = after;
142
+ before = input = after = hb_set_get_empty ();
143
+
144
+ nesting_level_left--;
145
+ recurse_func (this, lookup_index);
146
+ nesting_level_left++;
147
+
148
+ before = old_before;
149
+ input = old_input;
150
+ after = old_after;
151
+
152
+ recursed_lookups->add (lookup_index);
153
+
154
+ return HB_VOID;
155
+ }
156
+
157
+ hb_face_t *face;
158
+ hb_set_t *before;
159
+ hb_set_t *input;
160
+ hb_set_t *after;
161
+ hb_set_t *output;
162
+ recurse_func_t recurse_func;
163
+ hb_set_t *recursed_lookups;
164
+ unsigned int nesting_level_left;
165
+ unsigned int debug_depth;
166
+
167
+ hb_collect_glyphs_context_t (hb_face_t *face_,
168
+ hb_set_t *glyphs_before, /* OUT. May be nullptr */
169
+ hb_set_t *glyphs_input, /* OUT. May be nullptr */
170
+ hb_set_t *glyphs_after, /* OUT. May be nullptr */
171
+ hb_set_t *glyphs_output, /* OUT. May be nullptr */
172
+ unsigned int nesting_level_left_ = HB_MAX_NESTING_LEVEL) :
173
+ face (face_),
174
+ before (glyphs_before ? glyphs_before : hb_set_get_empty ()),
175
+ input (glyphs_input ? glyphs_input : hb_set_get_empty ()),
176
+ after (glyphs_after ? glyphs_after : hb_set_get_empty ()),
177
+ output (glyphs_output ? glyphs_output : hb_set_get_empty ()),
178
+ recurse_func (nullptr),
179
+ recursed_lookups (nullptr),
180
+ nesting_level_left (nesting_level_left_),
181
+ debug_depth (0)
182
+ {
183
+ recursed_lookups = hb_set_create ();
184
+ }
185
+ ~hb_collect_glyphs_context_t (void)
186
+ {
187
+ hb_set_destroy (recursed_lookups);
188
+ }
189
+
190
+ void set_recurse_func (recurse_func_t func) { recurse_func = func; }
191
+ };
192
+
193
+
194
+
195
+ /* XXX Can we remove this? */
196
+
197
+ template <typename set_t>
198
+ struct hb_add_coverage_context_t :
199
+ hb_dispatch_context_t<hb_add_coverage_context_t<set_t>, const Coverage &, HB_DEBUG_GET_COVERAGE>
200
+ {
201
+ inline const char *get_name (void) { return "GET_COVERAGE"; }
202
+ typedef const Coverage &return_t;
203
+ template <typename T>
204
+ inline return_t dispatch (const T &obj) { return obj.get_coverage (); }
205
+ static return_t default_return_value (void) { return Null(Coverage); }
206
+ bool stop_sublookup_iteration (return_t r) const
207
+ {
208
+ r.add_coverage (set);
209
+ return false;
210
+ }
211
+
212
+ hb_add_coverage_context_t (set_t *set_) :
213
+ set (set_),
214
+ debug_depth (0) {}
215
+
216
+ set_t *set;
217
+ unsigned int debug_depth;
218
+ };
219
+
220
+
221
+ struct hb_ot_apply_context_t :
222
+ hb_dispatch_context_t<hb_ot_apply_context_t, bool, HB_DEBUG_APPLY>
223
+ {
224
+ struct matcher_t
225
+ {
226
+ inline matcher_t (void) :
227
+ lookup_props (0),
228
+ ignore_zwnj (false),
229
+ ignore_zwj (false),
230
+ mask (-1),
231
+ #define arg1(arg) (arg) /* Remove the macro to see why it's needed! */
232
+ syllable arg1(0),
233
+ #undef arg1
234
+ match_func (nullptr),
235
+ match_data (nullptr) {};
236
+
237
+ typedef bool (*match_func_t) (hb_codepoint_t glyph_id, const HBUINT16 &value, const void *data);
238
+
239
+ inline void set_ignore_zwnj (bool ignore_zwnj_) { ignore_zwnj = ignore_zwnj_; }
240
+ inline void set_ignore_zwj (bool ignore_zwj_) { ignore_zwj = ignore_zwj_; }
241
+ inline void set_lookup_props (unsigned int lookup_props_) { lookup_props = lookup_props_; }
242
+ inline void set_mask (hb_mask_t mask_) { mask = mask_; }
243
+ inline void set_syllable (uint8_t syllable_) { syllable = syllable_; }
244
+ inline void set_match_func (match_func_t match_func_,
245
+ const void *match_data_)
246
+ { match_func = match_func_; match_data = match_data_; }
247
+
248
+ enum may_match_t {
249
+ MATCH_NO,
250
+ MATCH_YES,
251
+ MATCH_MAYBE
252
+ };
253
+
254
+ inline may_match_t may_match (const hb_glyph_info_t &info,
255
+ const HBUINT16 *glyph_data) const
256
+ {
257
+ if (!(info.mask & mask) ||
258
+ (syllable && syllable != info.syllable ()))
259
+ return MATCH_NO;
260
+
261
+ if (match_func)
262
+ return match_func (info.codepoint, *glyph_data, match_data) ? MATCH_YES : MATCH_NO;
263
+
264
+ return MATCH_MAYBE;
265
+ }
266
+
267
+ enum may_skip_t {
268
+ SKIP_NO,
269
+ SKIP_YES,
270
+ SKIP_MAYBE
271
+ };
272
+
273
+ inline may_skip_t
274
+ may_skip (const hb_ot_apply_context_t *c,
275
+ const hb_glyph_info_t &info) const
276
+ {
277
+ if (!c->check_glyph_property (&info, lookup_props))
278
+ return SKIP_YES;
279
+
280
+ if (unlikely (_hb_glyph_info_is_default_ignorable_and_not_hidden (&info) &&
281
+ (ignore_zwnj || !_hb_glyph_info_is_zwnj (&info)) &&
282
+ (ignore_zwj || !_hb_glyph_info_is_zwj (&info))))
283
+ return SKIP_MAYBE;
284
+
285
+ return SKIP_NO;
286
+ }
287
+
288
+ protected:
289
+ unsigned int lookup_props;
290
+ bool ignore_zwnj;
291
+ bool ignore_zwj;
292
+ hb_mask_t mask;
293
+ uint8_t syllable;
294
+ match_func_t match_func;
295
+ const void *match_data;
296
+ };
297
+
298
+ struct skipping_iterator_t
299
+ {
300
+ inline void init (hb_ot_apply_context_t *c_, bool context_match = false)
301
+ {
302
+ c = c_;
303
+ match_glyph_data = nullptr;
304
+ matcher.set_match_func (nullptr, nullptr);
305
+ matcher.set_lookup_props (c->lookup_props);
306
+ /* Ignore ZWNJ if we are matching GSUB context, or matching GPOS. */
307
+ matcher.set_ignore_zwnj (c->table_index == 1 || (context_match && c->auto_zwnj));
308
+ /* Ignore ZWJ if we are matching GSUB context, or matching GPOS, or if asked to. */
309
+ matcher.set_ignore_zwj (c->table_index == 1 || (context_match || c->auto_zwj));
310
+ matcher.set_mask (context_match ? -1 : c->lookup_mask);
311
+ }
312
+ inline void set_lookup_props (unsigned int lookup_props)
313
+ {
314
+ matcher.set_lookup_props (lookup_props);
315
+ }
316
+ inline void set_match_func (matcher_t::match_func_t match_func_,
317
+ const void *match_data_,
318
+ const HBUINT16 glyph_data[])
319
+ {
320
+ matcher.set_match_func (match_func_, match_data_);
321
+ match_glyph_data = glyph_data;
322
+ }
323
+
324
+ inline void reset (unsigned int start_index_,
325
+ unsigned int num_items_)
326
+ {
327
+ idx = start_index_;
328
+ num_items = num_items_;
329
+ end = c->buffer->len;
330
+ matcher.set_syllable (start_index_ == c->buffer->idx ? c->buffer->cur().syllable () : 0);
331
+ }
332
+
333
+ inline void reject (void) { num_items++; match_glyph_data--; }
334
+
335
+ inline matcher_t::may_skip_t
336
+ may_skip (const hb_glyph_info_t &info) const
337
+ {
338
+ return matcher.may_skip (c, info);
339
+ }
340
+
341
+ inline bool next (void)
342
+ {
343
+ assert (num_items > 0);
344
+ while (idx + num_items < end)
345
+ {
346
+ idx++;
347
+ const hb_glyph_info_t &info = c->buffer->info[idx];
348
+
349
+ matcher_t::may_skip_t skip = matcher.may_skip (c, info);
350
+ if (unlikely (skip == matcher_t::SKIP_YES))
351
+ continue;
352
+
353
+ matcher_t::may_match_t match = matcher.may_match (info, match_glyph_data);
354
+ if (match == matcher_t::MATCH_YES ||
355
+ (match == matcher_t::MATCH_MAYBE &&
356
+ skip == matcher_t::SKIP_NO))
357
+ {
358
+ num_items--;
359
+ match_glyph_data++;
360
+ return true;
361
+ }
362
+
363
+ if (skip == matcher_t::SKIP_NO)
364
+ return false;
365
+ }
366
+ return false;
367
+ }
368
+ inline bool prev (void)
369
+ {
370
+ assert (num_items > 0);
371
+ while (idx >= num_items)
372
+ {
373
+ idx--;
374
+ const hb_glyph_info_t &info = c->buffer->out_info[idx];
375
+
376
+ matcher_t::may_skip_t skip = matcher.may_skip (c, info);
377
+ if (unlikely (skip == matcher_t::SKIP_YES))
378
+ continue;
379
+
380
+ matcher_t::may_match_t match = matcher.may_match (info, match_glyph_data);
381
+ if (match == matcher_t::MATCH_YES ||
382
+ (match == matcher_t::MATCH_MAYBE &&
383
+ skip == matcher_t::SKIP_NO))
384
+ {
385
+ num_items--;
386
+ match_glyph_data++;
387
+ return true;
388
+ }
389
+
390
+ if (skip == matcher_t::SKIP_NO)
391
+ return false;
392
+ }
393
+ return false;
394
+ }
395
+
396
+ unsigned int idx;
397
+ protected:
398
+ hb_ot_apply_context_t *c;
399
+ matcher_t matcher;
400
+ const HBUINT16 *match_glyph_data;
401
+
402
+ unsigned int num_items;
403
+ unsigned int end;
404
+ };
405
+
406
+
407
+ inline const char *get_name (void) { return "APPLY"; }
408
+ typedef return_t (*recurse_func_t) (hb_ot_apply_context_t *c, unsigned int lookup_index);
409
+ template <typename T>
410
+ inline return_t dispatch (const T &obj) { return obj.apply (this); }
411
+ static return_t default_return_value (void) { return false; }
412
+ bool stop_sublookup_iteration (return_t r) const { return r; }
413
+ return_t recurse (unsigned int sub_lookup_index)
414
+ {
415
+ if (unlikely (nesting_level_left == 0 || !recurse_func || buffer->max_ops-- <= 0))
416
+ return default_return_value ();
417
+
418
+ nesting_level_left--;
419
+ bool ret = recurse_func (this, sub_lookup_index);
420
+ nesting_level_left++;
421
+ return ret;
422
+ }
423
+
424
+ skipping_iterator_t iter_input, iter_context;
425
+
426
+ hb_font_t *font;
427
+ hb_face_t *face;
428
+ hb_buffer_t *buffer;
429
+ recurse_func_t recurse_func;
430
+ const GDEF &gdef;
431
+ const VariationStore &var_store;
432
+
433
+ hb_direction_t direction;
434
+ hb_mask_t lookup_mask;
435
+ unsigned int table_index; /* GSUB/GPOS */
436
+ unsigned int lookup_index;
437
+ unsigned int lookup_props;
438
+ unsigned int nesting_level_left;
439
+ unsigned int debug_depth;
440
+
441
+ bool auto_zwnj;
442
+ bool auto_zwj;
443
+ bool has_glyph_classes;
444
+
445
+
446
+ hb_ot_apply_context_t (unsigned int table_index_,
447
+ hb_font_t *font_,
448
+ hb_buffer_t *buffer_) :
449
+ iter_input (), iter_context (),
450
+ font (font_), face (font->face), buffer (buffer_),
451
+ recurse_func (nullptr),
452
+ gdef (*hb_ot_layout_from_face (face)->gdef),
453
+ var_store (gdef.get_var_store ()),
454
+ direction (buffer_->props.direction),
455
+ lookup_mask (1),
456
+ table_index (table_index_),
457
+ lookup_index ((unsigned int) -1),
458
+ lookup_props (0),
459
+ nesting_level_left (HB_MAX_NESTING_LEVEL),
460
+ debug_depth (0),
461
+ auto_zwnj (true),
462
+ auto_zwj (true),
463
+ has_glyph_classes (gdef.has_glyph_classes ()) {}
464
+
465
+ inline void set_lookup_mask (hb_mask_t mask) { lookup_mask = mask; }
466
+ inline void set_auto_zwj (bool auto_zwj_) { auto_zwj = auto_zwj_; }
467
+ inline void set_auto_zwnj (bool auto_zwnj_) { auto_zwnj = auto_zwnj_; }
468
+ inline void set_recurse_func (recurse_func_t func) { recurse_func = func; }
469
+ inline void set_lookup_index (unsigned int lookup_index_) { lookup_index = lookup_index_; }
470
+ inline void set_lookup_props (unsigned int lookup_props_)
471
+ {
472
+ lookup_props = lookup_props_;
473
+ iter_input.init (this, false);
474
+ iter_context.init (this, true);
475
+ }
476
+
477
+ inline bool
478
+ match_properties_mark (hb_codepoint_t glyph,
479
+ unsigned int glyph_props,
480
+ unsigned int match_props) const
481
+ {
482
+ /* If using mark filtering sets, the high short of
483
+ * match_props has the set index.
484
+ */
485
+ if (match_props & LookupFlag::UseMarkFilteringSet)
486
+ return gdef.mark_set_covers (match_props >> 16, glyph);
487
+
488
+ /* The second byte of match_props has the meaning
489
+ * "ignore marks of attachment type different than
490
+ * the attachment type specified."
491
+ */
492
+ if (match_props & LookupFlag::MarkAttachmentType)
493
+ return (match_props & LookupFlag::MarkAttachmentType) == (glyph_props & LookupFlag::MarkAttachmentType);
494
+
495
+ return true;
496
+ }
497
+
498
+ inline bool
499
+ check_glyph_property (const hb_glyph_info_t *info,
500
+ unsigned int match_props) const
501
+ {
502
+ hb_codepoint_t glyph = info->codepoint;
503
+ unsigned int glyph_props = _hb_glyph_info_get_glyph_props (info);
504
+
505
+ /* Not covered, if, for example, glyph class is ligature and
506
+ * match_props includes LookupFlags::IgnoreLigatures
507
+ */
508
+ if (glyph_props & match_props & LookupFlag::IgnoreFlags)
509
+ return false;
510
+
511
+ if (unlikely (glyph_props & HB_OT_LAYOUT_GLYPH_PROPS_MARK))
512
+ return match_properties_mark (glyph, glyph_props, match_props);
513
+
514
+ return true;
515
+ }
516
+
517
+ inline void _set_glyph_props (hb_codepoint_t glyph_index,
518
+ unsigned int class_guess = 0,
519
+ bool ligature = false,
520
+ bool component = false) const
521
+ {
522
+ unsigned int add_in = _hb_glyph_info_get_glyph_props (&buffer->cur()) &
523
+ HB_OT_LAYOUT_GLYPH_PROPS_PRESERVE;
524
+ add_in |= HB_OT_LAYOUT_GLYPH_PROPS_SUBSTITUTED;
525
+ if (ligature)
526
+ {
527
+ add_in |= HB_OT_LAYOUT_GLYPH_PROPS_LIGATED;
528
+ /* In the only place that the MULTIPLIED bit is used, Uniscribe
529
+ * seems to only care about the "last" transformation between
530
+ * Ligature and Multiple substitions. Ie. if you ligate, expand,
531
+ * and ligate again, it forgives the multiplication and acts as
532
+ * if only ligation happened. As such, clear MULTIPLIED bit.
533
+ */
534
+ add_in &= ~HB_OT_LAYOUT_GLYPH_PROPS_MULTIPLIED;
535
+ }
536
+ if (component)
537
+ add_in |= HB_OT_LAYOUT_GLYPH_PROPS_MULTIPLIED;
538
+ if (likely (has_glyph_classes))
539
+ _hb_glyph_info_set_glyph_props (&buffer->cur(), add_in | gdef.get_glyph_props (glyph_index));
540
+ else if (class_guess)
541
+ _hb_glyph_info_set_glyph_props (&buffer->cur(), add_in | class_guess);
542
+ }
543
+
544
+ inline void replace_glyph (hb_codepoint_t glyph_index) const
545
+ {
546
+ _set_glyph_props (glyph_index);
547
+ buffer->replace_glyph (glyph_index);
548
+ }
549
+ inline void replace_glyph_inplace (hb_codepoint_t glyph_index) const
550
+ {
551
+ _set_glyph_props (glyph_index);
552
+ buffer->cur().codepoint = glyph_index;
553
+ }
554
+ inline void replace_glyph_with_ligature (hb_codepoint_t glyph_index,
555
+ unsigned int class_guess) const
556
+ {
557
+ _set_glyph_props (glyph_index, class_guess, true);
558
+ buffer->replace_glyph (glyph_index);
559
+ }
560
+ inline void output_glyph_for_component (hb_codepoint_t glyph_index,
561
+ unsigned int class_guess) const
562
+ {
563
+ _set_glyph_props (glyph_index, class_guess, false, true);
564
+ buffer->output_glyph (glyph_index);
565
+ }
566
+ };
567
+
568
+
569
+
570
+ typedef bool (*intersects_func_t) (hb_set_t *glyphs, const HBUINT16 &value, const void *data);
571
+ typedef void (*collect_glyphs_func_t) (hb_set_t *glyphs, const HBUINT16 &value, const void *data);
572
+ typedef bool (*match_func_t) (hb_codepoint_t glyph_id, const HBUINT16 &value, const void *data);
573
+
574
+ struct ContextClosureFuncs
575
+ {
576
+ intersects_func_t intersects;
577
+ };
578
+ struct ContextCollectGlyphsFuncs
579
+ {
580
+ collect_glyphs_func_t collect;
581
+ };
582
+ struct ContextApplyFuncs
583
+ {
584
+ match_func_t match;
585
+ };
586
+
587
+
588
+ static inline bool intersects_glyph (hb_set_t *glyphs, const HBUINT16 &value, const void *data HB_UNUSED)
589
+ {
590
+ return glyphs->has (value);
591
+ }
592
+ static inline bool intersects_class (hb_set_t *glyphs, const HBUINT16 &value, const void *data)
593
+ {
594
+ const ClassDef &class_def = *reinterpret_cast<const ClassDef *>(data);
595
+ return class_def.intersects_class (glyphs, value);
596
+ }
597
+ static inline bool intersects_coverage (hb_set_t *glyphs, const HBUINT16 &value, const void *data)
598
+ {
599
+ const OffsetTo<Coverage> &coverage = (const OffsetTo<Coverage>&)value;
600
+ return (data+coverage).intersects (glyphs);
601
+ }
602
+
603
+ static inline bool intersects_array (hb_closure_context_t *c,
604
+ unsigned int count,
605
+ const HBUINT16 values[],
606
+ intersects_func_t intersects_func,
607
+ const void *intersects_data)
608
+ {
609
+ for (unsigned int i = 0; i < count; i++)
610
+ if (likely (!intersects_func (c->glyphs, values[i], intersects_data)))
611
+ return false;
612
+ return true;
613
+ }
614
+
615
+
616
+ static inline void collect_glyph (hb_set_t *glyphs, const HBUINT16 &value, const void *data HB_UNUSED)
617
+ {
618
+ glyphs->add (value);
619
+ }
620
+ static inline void collect_class (hb_set_t *glyphs, const HBUINT16 &value, const void *data)
621
+ {
622
+ const ClassDef &class_def = *reinterpret_cast<const ClassDef *>(data);
623
+ class_def.add_class (glyphs, value);
624
+ }
625
+ static inline void collect_coverage (hb_set_t *glyphs, const HBUINT16 &value, const void *data)
626
+ {
627
+ const OffsetTo<Coverage> &coverage = (const OffsetTo<Coverage>&)value;
628
+ (data+coverage).add_coverage (glyphs);
629
+ }
630
+ static inline void collect_array (hb_collect_glyphs_context_t *c HB_UNUSED,
631
+ hb_set_t *glyphs,
632
+ unsigned int count,
633
+ const HBUINT16 values[],
634
+ collect_glyphs_func_t collect_func,
635
+ const void *collect_data)
636
+ {
637
+ for (unsigned int i = 0; i < count; i++)
638
+ collect_func (glyphs, values[i], collect_data);
639
+ }
640
+
641
+
642
+ static inline bool match_glyph (hb_codepoint_t glyph_id, const HBUINT16 &value, const void *data HB_UNUSED)
643
+ {
644
+ return glyph_id == value;
645
+ }
646
+ static inline bool match_class (hb_codepoint_t glyph_id, const HBUINT16 &value, const void *data)
647
+ {
648
+ const ClassDef &class_def = *reinterpret_cast<const ClassDef *>(data);
649
+ return class_def.get_class (glyph_id) == value;
650
+ }
651
+ static inline bool match_coverage (hb_codepoint_t glyph_id, const HBUINT16 &value, const void *data)
652
+ {
653
+ const OffsetTo<Coverage> &coverage = (const OffsetTo<Coverage>&)value;
654
+ return (data+coverage).get_coverage (glyph_id) != NOT_COVERED;
655
+ }
656
+
657
+ static inline bool would_match_input (hb_would_apply_context_t *c,
658
+ unsigned int count, /* Including the first glyph (not matched) */
659
+ const HBUINT16 input[], /* Array of input values--start with second glyph */
660
+ match_func_t match_func,
661
+ const void *match_data)
662
+ {
663
+ if (count != c->len)
664
+ return false;
665
+
666
+ for (unsigned int i = 1; i < count; i++)
667
+ if (likely (!match_func (c->glyphs[i], input[i - 1], match_data)))
668
+ return false;
669
+
670
+ return true;
671
+ }
672
+ static inline bool match_input (hb_ot_apply_context_t *c,
673
+ unsigned int count, /* Including the first glyph (not matched) */
674
+ const HBUINT16 input[], /* Array of input values--start with second glyph */
675
+ match_func_t match_func,
676
+ const void *match_data,
677
+ unsigned int *end_offset,
678
+ unsigned int match_positions[HB_MAX_CONTEXT_LENGTH],
679
+ bool *p_is_mark_ligature = nullptr,
680
+ unsigned int *p_total_component_count = nullptr)
681
+ {
682
+ TRACE_APPLY (nullptr);
683
+
684
+ if (unlikely (count > HB_MAX_CONTEXT_LENGTH)) return_trace (false);
685
+
686
+ hb_buffer_t *buffer = c->buffer;
687
+
688
+ hb_ot_apply_context_t::skipping_iterator_t &skippy_iter = c->iter_input;
689
+ skippy_iter.reset (buffer->idx, count - 1);
690
+ skippy_iter.set_match_func (match_func, match_data, input);
691
+
692
+ /*
693
+ * This is perhaps the trickiest part of OpenType... Remarks:
694
+ *
695
+ * - If all components of the ligature were marks, we call this a mark ligature.
696
+ *
697
+ * - If there is no GDEF, and the ligature is NOT a mark ligature, we categorize
698
+ * it as a ligature glyph.
699
+ *
700
+ * - Ligatures cannot be formed across glyphs attached to different components
701
+ * of previous ligatures. Eg. the sequence is LAM,SHADDA,LAM,FATHA,HEH, and
702
+ * LAM,LAM,HEH form a ligature, leaving SHADDA,FATHA next to eachother.
703
+ * However, it would be wrong to ligate that SHADDA,FATHA sequence.
704
+ * There are a couple of exceptions to this:
705
+ *
706
+ * o If a ligature tries ligating with marks that belong to it itself, go ahead,
707
+ * assuming that the font designer knows what they are doing (otherwise it can
708
+ * break Indic stuff when a matra wants to ligate with a conjunct,
709
+ *
710
+ * o If two marks want to ligate and they belong to different components of the
711
+ * same ligature glyph, and said ligature glyph is to be ignored according to
712
+ * mark-filtering rules, then allow.
713
+ * https://github.com/harfbuzz/harfbuzz/issues/545
714
+ */
715
+
716
+ bool is_mark_ligature = _hb_glyph_info_is_mark (&buffer->cur());
717
+
718
+ unsigned int total_component_count = 0;
719
+ total_component_count += _hb_glyph_info_get_lig_num_comps (&buffer->cur());
720
+
721
+ unsigned int first_lig_id = _hb_glyph_info_get_lig_id (&buffer->cur());
722
+ unsigned int first_lig_comp = _hb_glyph_info_get_lig_comp (&buffer->cur());
723
+
724
+ enum {
725
+ LIGBASE_NOT_CHECKED,
726
+ LIGBASE_MAY_NOT_SKIP,
727
+ LIGBASE_MAY_SKIP
728
+ } ligbase = LIGBASE_NOT_CHECKED;
729
+
730
+ match_positions[0] = buffer->idx;
731
+ for (unsigned int i = 1; i < count; i++)
732
+ {
733
+ if (!skippy_iter.next ()) return_trace (false);
734
+
735
+ match_positions[i] = skippy_iter.idx;
736
+
737
+ unsigned int this_lig_id = _hb_glyph_info_get_lig_id (&buffer->info[skippy_iter.idx]);
738
+ unsigned int this_lig_comp = _hb_glyph_info_get_lig_comp (&buffer->info[skippy_iter.idx]);
739
+
740
+ if (first_lig_id && first_lig_comp)
741
+ {
742
+ /* If first component was attached to a previous ligature component,
743
+ * all subsequent components should be attached to the same ligature
744
+ * component, otherwise we shouldn't ligate them... */
745
+ if (first_lig_id != this_lig_id || first_lig_comp != this_lig_comp)
746
+ {
747
+ /* ...unless, we are attached to a base ligature and that base
748
+ * ligature is ignorable. */
749
+ if (ligbase == LIGBASE_NOT_CHECKED)
750
+ {
751
+ bool found = false;
752
+ const hb_glyph_info_t *out = buffer->out_info;
753
+ unsigned int j = buffer->out_len;
754
+ while (j && _hb_glyph_info_get_lig_id (&out[j - 1]) == first_lig_id)
755
+ {
756
+ if (_hb_glyph_info_get_lig_comp (&out[j - 1]) == 0)
757
+ {
758
+ j--;
759
+ found = true;
760
+ break;
761
+ }
762
+ j--;
763
+ }
764
+
765
+ if (found && skippy_iter.may_skip (out[j]) == hb_ot_apply_context_t::matcher_t::SKIP_YES)
766
+ ligbase = LIGBASE_MAY_SKIP;
767
+ else
768
+ ligbase = LIGBASE_MAY_NOT_SKIP;
769
+ }
770
+
771
+ if (ligbase == LIGBASE_MAY_NOT_SKIP)
772
+ return_trace (false);
773
+ }
774
+ }
775
+ else
776
+ {
777
+ /* If first component was NOT attached to a previous ligature component,
778
+ * all subsequent components should also NOT be attached to any ligature
779
+ * component, unless they are attached to the first component itself! */
780
+ if (this_lig_id && this_lig_comp && (this_lig_id != first_lig_id))
781
+ return_trace (false);
782
+ }
783
+
784
+ is_mark_ligature = is_mark_ligature && _hb_glyph_info_is_mark (&buffer->info[skippy_iter.idx]);
785
+ total_component_count += _hb_glyph_info_get_lig_num_comps (&buffer->info[skippy_iter.idx]);
786
+ }
787
+
788
+ *end_offset = skippy_iter.idx - buffer->idx + 1;
789
+
790
+ if (p_is_mark_ligature)
791
+ *p_is_mark_ligature = is_mark_ligature;
792
+
793
+ if (p_total_component_count)
794
+ *p_total_component_count = total_component_count;
795
+
796
+ return_trace (true);
797
+ }
798
+ static inline bool ligate_input (hb_ot_apply_context_t *c,
799
+ unsigned int count, /* Including the first glyph */
800
+ unsigned int match_positions[HB_MAX_CONTEXT_LENGTH], /* Including the first glyph */
801
+ unsigned int match_length,
802
+ hb_codepoint_t lig_glyph,
803
+ bool is_mark_ligature,
804
+ unsigned int total_component_count)
805
+ {
806
+ TRACE_APPLY (nullptr);
807
+
808
+ hb_buffer_t *buffer = c->buffer;
809
+
810
+ buffer->merge_clusters (buffer->idx, buffer->idx + match_length);
811
+
812
+ /*
813
+ * - If it *is* a mark ligature, we don't allocate a new ligature id, and leave
814
+ * the ligature to keep its old ligature id. This will allow it to attach to
815
+ * a base ligature in GPOS. Eg. if the sequence is: LAM,LAM,SHADDA,FATHA,HEH,
816
+ * and LAM,LAM,HEH for a ligature, they will leave SHADDA and FATHA wit a
817
+ * ligature id and component value of 2. Then if SHADDA,FATHA form a ligature
818
+ * later, we don't want them to lose their ligature id/component, otherwise
819
+ * GPOS will fail to correctly position the mark ligature on top of the
820
+ * LAM,LAM,HEH ligature. See:
821
+ * https://bugzilla.gnome.org/show_bug.cgi?id=676343
822
+ *
823
+ * - If a ligature is formed of components that some of which are also ligatures
824
+ * themselves, and those ligature components had marks attached to *their*
825
+ * components, we have to attach the marks to the new ligature component
826
+ * positions! Now *that*'s tricky! And these marks may be following the
827
+ * last component of the whole sequence, so we should loop forward looking
828
+ * for them and update them.
829
+ *
830
+ * Eg. the sequence is LAM,LAM,SHADDA,FATHA,HEH, and the font first forms a
831
+ * 'calt' ligature of LAM,HEH, leaving the SHADDA and FATHA with a ligature
832
+ * id and component == 1. Now, during 'liga', the LAM and the LAM-HEH ligature
833
+ * form a LAM-LAM-HEH ligature. We need to reassign the SHADDA and FATHA to
834
+ * the new ligature with a component value of 2.
835
+ *
836
+ * This in fact happened to a font... See:
837
+ * https://bugzilla.gnome.org/show_bug.cgi?id=437633
838
+ */
839
+
840
+ unsigned int klass = is_mark_ligature ? 0 : HB_OT_LAYOUT_GLYPH_PROPS_LIGATURE;
841
+ unsigned int lig_id = is_mark_ligature ? 0 : _hb_allocate_lig_id (buffer);
842
+ unsigned int last_lig_id = _hb_glyph_info_get_lig_id (&buffer->cur());
843
+ unsigned int last_num_components = _hb_glyph_info_get_lig_num_comps (&buffer->cur());
844
+ unsigned int components_so_far = last_num_components;
845
+
846
+ if (!is_mark_ligature)
847
+ {
848
+ _hb_glyph_info_set_lig_props_for_ligature (&buffer->cur(), lig_id, total_component_count);
849
+ if (_hb_glyph_info_get_general_category (&buffer->cur()) == HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK)
850
+ {
851
+ _hb_glyph_info_set_general_category (&buffer->cur(), HB_UNICODE_GENERAL_CATEGORY_OTHER_LETTER);
852
+ }
853
+ }
854
+ c->replace_glyph_with_ligature (lig_glyph, klass);
855
+
856
+ for (unsigned int i = 1; i < count; i++)
857
+ {
858
+ while (buffer->idx < match_positions[i] && !buffer->in_error)
859
+ {
860
+ if (!is_mark_ligature) {
861
+ unsigned int this_comp = _hb_glyph_info_get_lig_comp (&buffer->cur());
862
+ if (this_comp == 0)
863
+ this_comp = last_num_components;
864
+ unsigned int new_lig_comp = components_so_far - last_num_components +
865
+ MIN (this_comp, last_num_components);
866
+ _hb_glyph_info_set_lig_props_for_mark (&buffer->cur(), lig_id, new_lig_comp);
867
+ }
868
+ buffer->next_glyph ();
869
+ }
870
+
871
+ last_lig_id = _hb_glyph_info_get_lig_id (&buffer->cur());
872
+ last_num_components = _hb_glyph_info_get_lig_num_comps (&buffer->cur());
873
+ components_so_far += last_num_components;
874
+
875
+ /* Skip the base glyph */
876
+ buffer->idx++;
877
+ }
878
+
879
+ if (!is_mark_ligature && last_lig_id) {
880
+ /* Re-adjust components for any marks following. */
881
+ for (unsigned int i = buffer->idx; i < buffer->len; i++) {
882
+ if (last_lig_id == _hb_glyph_info_get_lig_id (&buffer->info[i])) {
883
+ unsigned int this_comp = _hb_glyph_info_get_lig_comp (&buffer->info[i]);
884
+ if (!this_comp)
885
+ break;
886
+ unsigned int new_lig_comp = components_so_far - last_num_components +
887
+ MIN (this_comp, last_num_components);
888
+ _hb_glyph_info_set_lig_props_for_mark (&buffer->info[i], lig_id, new_lig_comp);
889
+ } else
890
+ break;
891
+ }
892
+ }
893
+ return_trace (true);
894
+ }
895
+
896
+ static inline bool match_backtrack (hb_ot_apply_context_t *c,
897
+ unsigned int count,
898
+ const HBUINT16 backtrack[],
899
+ match_func_t match_func,
900
+ const void *match_data,
901
+ unsigned int *match_start)
902
+ {
903
+ TRACE_APPLY (nullptr);
904
+
905
+ hb_ot_apply_context_t::skipping_iterator_t &skippy_iter = c->iter_context;
906
+ skippy_iter.reset (c->buffer->backtrack_len (), count);
907
+ skippy_iter.set_match_func (match_func, match_data, backtrack);
908
+
909
+ for (unsigned int i = 0; i < count; i++)
910
+ if (!skippy_iter.prev ())
911
+ return_trace (false);
912
+
913
+ *match_start = skippy_iter.idx;
914
+
915
+ return_trace (true);
916
+ }
917
+
918
+ static inline bool match_lookahead (hb_ot_apply_context_t *c,
919
+ unsigned int count,
920
+ const HBUINT16 lookahead[],
921
+ match_func_t match_func,
922
+ const void *match_data,
923
+ unsigned int offset,
924
+ unsigned int *end_index)
925
+ {
926
+ TRACE_APPLY (nullptr);
927
+
928
+ hb_ot_apply_context_t::skipping_iterator_t &skippy_iter = c->iter_context;
929
+ skippy_iter.reset (c->buffer->idx + offset - 1, count);
930
+ skippy_iter.set_match_func (match_func, match_data, lookahead);
931
+
932
+ for (unsigned int i = 0; i < count; i++)
933
+ if (!skippy_iter.next ())
934
+ return_trace (false);
935
+
936
+ *end_index = skippy_iter.idx + 1;
937
+
938
+ return_trace (true);
939
+ }
940
+
941
+
942
+
943
+ struct LookupRecord
944
+ {
945
+ inline bool sanitize (hb_sanitize_context_t *c) const
946
+ {
947
+ TRACE_SANITIZE (this);
948
+ return_trace (c->check_struct (this));
949
+ }
950
+
951
+ HBUINT16 sequenceIndex; /* Index into current glyph
952
+ * sequence--first glyph = 0 */
953
+ HBUINT16 lookupListIndex; /* Lookup to apply to that
954
+ * position--zero--based */
955
+ public:
956
+ DEFINE_SIZE_STATIC (4);
957
+ };
958
+
959
+
960
+ template <typename context_t>
961
+ static inline void recurse_lookups (context_t *c,
962
+ unsigned int lookupCount,
963
+ const LookupRecord lookupRecord[] /* Array of LookupRecords--in design order */)
964
+ {
965
+ for (unsigned int i = 0; i < lookupCount; i++)
966
+ c->recurse (lookupRecord[i].lookupListIndex);
967
+ }
968
+
969
+ static inline bool apply_lookup (hb_ot_apply_context_t *c,
970
+ unsigned int count, /* Including the first glyph */
971
+ unsigned int match_positions[HB_MAX_CONTEXT_LENGTH], /* Including the first glyph */
972
+ unsigned int lookupCount,
973
+ const LookupRecord lookupRecord[], /* Array of LookupRecords--in design order */
974
+ unsigned int match_length)
975
+ {
976
+ TRACE_APPLY (nullptr);
977
+
978
+ hb_buffer_t *buffer = c->buffer;
979
+ int end;
980
+
981
+ /* All positions are distance from beginning of *output* buffer.
982
+ * Adjust. */
983
+ {
984
+ unsigned int bl = buffer->backtrack_len ();
985
+ end = bl + match_length;
986
+
987
+ int delta = bl - buffer->idx;
988
+ /* Convert positions to new indexing. */
989
+ for (unsigned int j = 0; j < count; j++)
990
+ match_positions[j] += delta;
991
+ }
992
+
993
+ for (unsigned int i = 0; i < lookupCount && !buffer->in_error; i++)
994
+ {
995
+ unsigned int idx = lookupRecord[i].sequenceIndex;
996
+ if (idx >= count)
997
+ continue;
998
+
999
+ /* Don't recurse to ourself at same position.
1000
+ * Note that this test is too naive, it doesn't catch longer loops. */
1001
+ if (idx == 0 && lookupRecord[i].lookupListIndex == c->lookup_index)
1002
+ continue;
1003
+
1004
+ if (unlikely (!buffer->move_to (match_positions[idx])))
1005
+ break;
1006
+
1007
+ if (unlikely (buffer->max_ops <= 0))
1008
+ break;
1009
+
1010
+ unsigned int orig_len = buffer->backtrack_len () + buffer->lookahead_len ();
1011
+ if (!c->recurse (lookupRecord[i].lookupListIndex))
1012
+ continue;
1013
+
1014
+ unsigned int new_len = buffer->backtrack_len () + buffer->lookahead_len ();
1015
+ int delta = new_len - orig_len;
1016
+
1017
+ if (!delta)
1018
+ continue;
1019
+
1020
+ /* Recursed lookup changed buffer len. Adjust.
1021
+ *
1022
+ * TODO:
1023
+ *
1024
+ * Right now, if buffer length increased by n, we assume n new glyphs
1025
+ * were added right after the current position, and if buffer length
1026
+ * was decreased by n, we assume n match positions after the current
1027
+ * one where removed. The former (buffer length increased) case is
1028
+ * fine, but the decrease case can be improved in at least two ways,
1029
+ * both of which are significant:
1030
+ *
1031
+ * - If recursed-to lookup is MultipleSubst and buffer length
1032
+ * decreased, then it's current match position that was deleted,
1033
+ * NOT the one after it.
1034
+ *
1035
+ * - If buffer length was decreased by n, it does not necessarily
1036
+ * mean that n match positions where removed, as there might
1037
+ * have been marks and default-ignorables in the sequence. We
1038
+ * should instead drop match positions between current-position
1039
+ * and current-position + n instead.
1040
+ *
1041
+ * It should be possible to construct tests for both of these cases.
1042
+ */
1043
+
1044
+ end += delta;
1045
+ if (end <= int (match_positions[idx]))
1046
+ {
1047
+ /* End might end up being smaller than match_positions[idx] if the recursed
1048
+ * lookup ended up removing many items, more than we have had matched.
1049
+ * Just never rewind end back and get out of here.
1050
+ * https://bugs.chromium.org/p/chromium/issues/detail?id=659496 */
1051
+ end = match_positions[idx];
1052
+ /* There can't be any further changes. */
1053
+ break;
1054
+ }
1055
+
1056
+ unsigned int next = idx + 1; /* next now is the position after the recursed lookup. */
1057
+
1058
+ if (delta > 0)
1059
+ {
1060
+ if (unlikely (delta + count > HB_MAX_CONTEXT_LENGTH))
1061
+ break;
1062
+ }
1063
+ else
1064
+ {
1065
+ /* NOTE: delta is negative. */
1066
+ delta = MAX (delta, (int) next - (int) count);
1067
+ next -= delta;
1068
+ }
1069
+
1070
+ /* Shift! */
1071
+ memmove (match_positions + next + delta, match_positions + next,
1072
+ (count - next) * sizeof (match_positions[0]));
1073
+ next += delta;
1074
+ count += delta;
1075
+
1076
+ /* Fill in new entries. */
1077
+ for (unsigned int j = idx + 1; j < next; j++)
1078
+ match_positions[j] = match_positions[j - 1] + 1;
1079
+
1080
+ /* And fixup the rest. */
1081
+ for (; next < count; next++)
1082
+ match_positions[next] += delta;
1083
+ }
1084
+
1085
+ buffer->move_to (end);
1086
+
1087
+ return_trace (true);
1088
+ }
1089
+
1090
+
1091
+
1092
+ /* Contextual lookups */
1093
+
1094
+ struct ContextClosureLookupContext
1095
+ {
1096
+ ContextClosureFuncs funcs;
1097
+ const void *intersects_data;
1098
+ };
1099
+
1100
+ struct ContextCollectGlyphsLookupContext
1101
+ {
1102
+ ContextCollectGlyphsFuncs funcs;
1103
+ const void *collect_data;
1104
+ };
1105
+
1106
+ struct ContextApplyLookupContext
1107
+ {
1108
+ ContextApplyFuncs funcs;
1109
+ const void *match_data;
1110
+ };
1111
+
1112
+ static inline void context_closure_lookup (hb_closure_context_t *c,
1113
+ unsigned int inputCount, /* Including the first glyph (not matched) */
1114
+ const HBUINT16 input[], /* Array of input values--start with second glyph */
1115
+ unsigned int lookupCount,
1116
+ const LookupRecord lookupRecord[],
1117
+ ContextClosureLookupContext &lookup_context)
1118
+ {
1119
+ if (intersects_array (c,
1120
+ inputCount ? inputCount - 1 : 0, input,
1121
+ lookup_context.funcs.intersects, lookup_context.intersects_data))
1122
+ recurse_lookups (c,
1123
+ lookupCount, lookupRecord);
1124
+ }
1125
+
1126
+ static inline void context_collect_glyphs_lookup (hb_collect_glyphs_context_t *c,
1127
+ unsigned int inputCount, /* Including the first glyph (not matched) */
1128
+ const HBUINT16 input[], /* Array of input values--start with second glyph */
1129
+ unsigned int lookupCount,
1130
+ const LookupRecord lookupRecord[],
1131
+ ContextCollectGlyphsLookupContext &lookup_context)
1132
+ {
1133
+ collect_array (c, c->input,
1134
+ inputCount ? inputCount - 1 : 0, input,
1135
+ lookup_context.funcs.collect, lookup_context.collect_data);
1136
+ recurse_lookups (c,
1137
+ lookupCount, lookupRecord);
1138
+ }
1139
+
1140
+ static inline bool context_would_apply_lookup (hb_would_apply_context_t *c,
1141
+ unsigned int inputCount, /* Including the first glyph (not matched) */
1142
+ const HBUINT16 input[], /* Array of input values--start with second glyph */
1143
+ unsigned int lookupCount HB_UNUSED,
1144
+ const LookupRecord lookupRecord[] HB_UNUSED,
1145
+ ContextApplyLookupContext &lookup_context)
1146
+ {
1147
+ return would_match_input (c,
1148
+ inputCount, input,
1149
+ lookup_context.funcs.match, lookup_context.match_data);
1150
+ }
1151
+ static inline bool context_apply_lookup (hb_ot_apply_context_t *c,
1152
+ unsigned int inputCount, /* Including the first glyph (not matched) */
1153
+ const HBUINT16 input[], /* Array of input values--start with second glyph */
1154
+ unsigned int lookupCount,
1155
+ const LookupRecord lookupRecord[],
1156
+ ContextApplyLookupContext &lookup_context)
1157
+ {
1158
+ unsigned int match_length = 0;
1159
+ unsigned int match_positions[HB_MAX_CONTEXT_LENGTH];
1160
+ return match_input (c,
1161
+ inputCount, input,
1162
+ lookup_context.funcs.match, lookup_context.match_data,
1163
+ &match_length, match_positions)
1164
+ && (c->buffer->unsafe_to_break (c->buffer->idx, c->buffer->idx + match_length),
1165
+ apply_lookup (c,
1166
+ inputCount, match_positions,
1167
+ lookupCount, lookupRecord,
1168
+ match_length));
1169
+ }
1170
+
1171
+ struct Rule
1172
+ {
1173
+ inline void closure (hb_closure_context_t *c, ContextClosureLookupContext &lookup_context) const
1174
+ {
1175
+ TRACE_CLOSURE (this);
1176
+ const LookupRecord *lookupRecord = &StructAtOffset<LookupRecord> (inputZ, inputZ[0].static_size * (inputCount ? inputCount - 1 : 0));
1177
+ context_closure_lookup (c,
1178
+ inputCount, inputZ,
1179
+ lookupCount, lookupRecord,
1180
+ lookup_context);
1181
+ }
1182
+
1183
+ inline void collect_glyphs (hb_collect_glyphs_context_t *c, ContextCollectGlyphsLookupContext &lookup_context) const
1184
+ {
1185
+ TRACE_COLLECT_GLYPHS (this);
1186
+ const LookupRecord *lookupRecord = &StructAtOffset<LookupRecord> (inputZ, inputZ[0].static_size * (inputCount ? inputCount - 1 : 0));
1187
+ context_collect_glyphs_lookup (c,
1188
+ inputCount, inputZ,
1189
+ lookupCount, lookupRecord,
1190
+ lookup_context);
1191
+ }
1192
+
1193
+ inline bool would_apply (hb_would_apply_context_t *c, ContextApplyLookupContext &lookup_context) const
1194
+ {
1195
+ TRACE_WOULD_APPLY (this);
1196
+ const LookupRecord *lookupRecord = &StructAtOffset<LookupRecord> (inputZ, inputZ[0].static_size * (inputCount ? inputCount - 1 : 0));
1197
+ return_trace (context_would_apply_lookup (c, inputCount, inputZ, lookupCount, lookupRecord, lookup_context));
1198
+ }
1199
+
1200
+ inline bool apply (hb_ot_apply_context_t *c, ContextApplyLookupContext &lookup_context) const
1201
+ {
1202
+ TRACE_APPLY (this);
1203
+ const LookupRecord *lookupRecord = &StructAtOffset<LookupRecord> (inputZ, inputZ[0].static_size * (inputCount ? inputCount - 1 : 0));
1204
+ return_trace (context_apply_lookup (c, inputCount, inputZ, lookupCount, lookupRecord, lookup_context));
1205
+ }
1206
+
1207
+ public:
1208
+ inline bool sanitize (hb_sanitize_context_t *c) const
1209
+ {
1210
+ TRACE_SANITIZE (this);
1211
+ return_trace (inputCount.sanitize (c) &&
1212
+ lookupCount.sanitize (c) &&
1213
+ c->check_range (inputZ,
1214
+ inputZ[0].static_size * inputCount +
1215
+ LookupRecord::static_size * lookupCount));
1216
+ }
1217
+
1218
+ protected:
1219
+ HBUINT16 inputCount; /* Total number of glyphs in input
1220
+ * glyph sequence--includes the first
1221
+ * glyph */
1222
+ HBUINT16 lookupCount; /* Number of LookupRecords */
1223
+ HBUINT16 inputZ[VAR]; /* Array of match inputs--start with
1224
+ * second glyph */
1225
+ /*LookupRecord lookupRecordX[VAR];*/ /* Array of LookupRecords--in
1226
+ * design order */
1227
+ public:
1228
+ DEFINE_SIZE_ARRAY (4, inputZ);
1229
+ };
1230
+
1231
+ struct RuleSet
1232
+ {
1233
+ inline void closure (hb_closure_context_t *c, ContextClosureLookupContext &lookup_context) const
1234
+ {
1235
+ TRACE_CLOSURE (this);
1236
+ unsigned int num_rules = rule.len;
1237
+ for (unsigned int i = 0; i < num_rules; i++)
1238
+ (this+rule[i]).closure (c, lookup_context);
1239
+ }
1240
+
1241
+ inline void collect_glyphs (hb_collect_glyphs_context_t *c, ContextCollectGlyphsLookupContext &lookup_context) const
1242
+ {
1243
+ TRACE_COLLECT_GLYPHS (this);
1244
+ unsigned int num_rules = rule.len;
1245
+ for (unsigned int i = 0; i < num_rules; i++)
1246
+ (this+rule[i]).collect_glyphs (c, lookup_context);
1247
+ }
1248
+
1249
+ inline bool would_apply (hb_would_apply_context_t *c, ContextApplyLookupContext &lookup_context) const
1250
+ {
1251
+ TRACE_WOULD_APPLY (this);
1252
+ unsigned int num_rules = rule.len;
1253
+ for (unsigned int i = 0; i < num_rules; i++)
1254
+ {
1255
+ if ((this+rule[i]).would_apply (c, lookup_context))
1256
+ return_trace (true);
1257
+ }
1258
+ return_trace (false);
1259
+ }
1260
+
1261
+ inline bool apply (hb_ot_apply_context_t *c, ContextApplyLookupContext &lookup_context) const
1262
+ {
1263
+ TRACE_APPLY (this);
1264
+ unsigned int num_rules = rule.len;
1265
+ for (unsigned int i = 0; i < num_rules; i++)
1266
+ {
1267
+ if ((this+rule[i]).apply (c, lookup_context))
1268
+ return_trace (true);
1269
+ }
1270
+ return_trace (false);
1271
+ }
1272
+
1273
+ inline bool sanitize (hb_sanitize_context_t *c) const
1274
+ {
1275
+ TRACE_SANITIZE (this);
1276
+ return_trace (rule.sanitize (c, this));
1277
+ }
1278
+
1279
+ protected:
1280
+ OffsetArrayOf<Rule>
1281
+ rule; /* Array of Rule tables
1282
+ * ordered by preference */
1283
+ public:
1284
+ DEFINE_SIZE_ARRAY (2, rule);
1285
+ };
1286
+
1287
+
1288
+ struct ContextFormat1
1289
+ {
1290
+ inline void closure (hb_closure_context_t *c) const
1291
+ {
1292
+ TRACE_CLOSURE (this);
1293
+
1294
+ const Coverage &cov = (this+coverage);
1295
+
1296
+ struct ContextClosureLookupContext lookup_context = {
1297
+ {intersects_glyph},
1298
+ nullptr
1299
+ };
1300
+
1301
+ unsigned int count = ruleSet.len;
1302
+ for (unsigned int i = 0; i < count; i++)
1303
+ if (cov.intersects_coverage (c->glyphs, i)) {
1304
+ const RuleSet &rule_set = this+ruleSet[i];
1305
+ rule_set.closure (c, lookup_context);
1306
+ }
1307
+ }
1308
+
1309
+ inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
1310
+ {
1311
+ TRACE_COLLECT_GLYPHS (this);
1312
+ (this+coverage).add_coverage (c->input);
1313
+
1314
+ struct ContextCollectGlyphsLookupContext lookup_context = {
1315
+ {collect_glyph},
1316
+ nullptr
1317
+ };
1318
+
1319
+ unsigned int count = ruleSet.len;
1320
+ for (unsigned int i = 0; i < count; i++)
1321
+ (this+ruleSet[i]).collect_glyphs (c, lookup_context);
1322
+ }
1323
+
1324
+ inline bool would_apply (hb_would_apply_context_t *c) const
1325
+ {
1326
+ TRACE_WOULD_APPLY (this);
1327
+
1328
+ const RuleSet &rule_set = this+ruleSet[(this+coverage).get_coverage (c->glyphs[0])];
1329
+ struct ContextApplyLookupContext lookup_context = {
1330
+ {match_glyph},
1331
+ nullptr
1332
+ };
1333
+ return_trace (rule_set.would_apply (c, lookup_context));
1334
+ }
1335
+
1336
+ inline const Coverage &get_coverage (void) const
1337
+ {
1338
+ return this+coverage;
1339
+ }
1340
+
1341
+ inline bool apply (hb_ot_apply_context_t *c) const
1342
+ {
1343
+ TRACE_APPLY (this);
1344
+ unsigned int index = (this+coverage).get_coverage (c->buffer->cur().codepoint);
1345
+ if (likely (index == NOT_COVERED))
1346
+ return_trace (false);
1347
+
1348
+ const RuleSet &rule_set = this+ruleSet[index];
1349
+ struct ContextApplyLookupContext lookup_context = {
1350
+ {match_glyph},
1351
+ nullptr
1352
+ };
1353
+ return_trace (rule_set.apply (c, lookup_context));
1354
+ }
1355
+
1356
+ inline bool sanitize (hb_sanitize_context_t *c) const
1357
+ {
1358
+ TRACE_SANITIZE (this);
1359
+ return_trace (coverage.sanitize (c, this) && ruleSet.sanitize (c, this));
1360
+ }
1361
+
1362
+ protected:
1363
+ HBUINT16 format; /* Format identifier--format = 1 */
1364
+ OffsetTo<Coverage>
1365
+ coverage; /* Offset to Coverage table--from
1366
+ * beginning of table */
1367
+ OffsetArrayOf<RuleSet>
1368
+ ruleSet; /* Array of RuleSet tables
1369
+ * ordered by Coverage Index */
1370
+ public:
1371
+ DEFINE_SIZE_ARRAY (6, ruleSet);
1372
+ };
1373
+
1374
+
1375
+ struct ContextFormat2
1376
+ {
1377
+ inline void closure (hb_closure_context_t *c) const
1378
+ {
1379
+ TRACE_CLOSURE (this);
1380
+ if (!(this+coverage).intersects (c->glyphs))
1381
+ return;
1382
+
1383
+ const ClassDef &class_def = this+classDef;
1384
+
1385
+ struct ContextClosureLookupContext lookup_context = {
1386
+ {intersects_class},
1387
+ &class_def
1388
+ };
1389
+
1390
+ unsigned int count = ruleSet.len;
1391
+ for (unsigned int i = 0; i < count; i++)
1392
+ if (class_def.intersects_class (c->glyphs, i)) {
1393
+ const RuleSet &rule_set = this+ruleSet[i];
1394
+ rule_set.closure (c, lookup_context);
1395
+ }
1396
+ }
1397
+
1398
+ inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
1399
+ {
1400
+ TRACE_COLLECT_GLYPHS (this);
1401
+ (this+coverage).add_coverage (c->input);
1402
+
1403
+ const ClassDef &class_def = this+classDef;
1404
+ struct ContextCollectGlyphsLookupContext lookup_context = {
1405
+ {collect_class},
1406
+ &class_def
1407
+ };
1408
+
1409
+ unsigned int count = ruleSet.len;
1410
+ for (unsigned int i = 0; i < count; i++)
1411
+ (this+ruleSet[i]).collect_glyphs (c, lookup_context);
1412
+ }
1413
+
1414
+ inline bool would_apply (hb_would_apply_context_t *c) const
1415
+ {
1416
+ TRACE_WOULD_APPLY (this);
1417
+
1418
+ const ClassDef &class_def = this+classDef;
1419
+ unsigned int index = class_def.get_class (c->glyphs[0]);
1420
+ const RuleSet &rule_set = this+ruleSet[index];
1421
+ struct ContextApplyLookupContext lookup_context = {
1422
+ {match_class},
1423
+ &class_def
1424
+ };
1425
+ return_trace (rule_set.would_apply (c, lookup_context));
1426
+ }
1427
+
1428
+ inline const Coverage &get_coverage (void) const
1429
+ {
1430
+ return this+coverage;
1431
+ }
1432
+
1433
+ inline bool apply (hb_ot_apply_context_t *c) const
1434
+ {
1435
+ TRACE_APPLY (this);
1436
+ unsigned int index = (this+coverage).get_coverage (c->buffer->cur().codepoint);
1437
+ if (likely (index == NOT_COVERED)) return_trace (false);
1438
+
1439
+ const ClassDef &class_def = this+classDef;
1440
+ index = class_def.get_class (c->buffer->cur().codepoint);
1441
+ const RuleSet &rule_set = this+ruleSet[index];
1442
+ struct ContextApplyLookupContext lookup_context = {
1443
+ {match_class},
1444
+ &class_def
1445
+ };
1446
+ return_trace (rule_set.apply (c, lookup_context));
1447
+ }
1448
+
1449
+ inline bool sanitize (hb_sanitize_context_t *c) const
1450
+ {
1451
+ TRACE_SANITIZE (this);
1452
+ return_trace (coverage.sanitize (c, this) && classDef.sanitize (c, this) && ruleSet.sanitize (c, this));
1453
+ }
1454
+
1455
+ protected:
1456
+ HBUINT16 format; /* Format identifier--format = 2 */
1457
+ OffsetTo<Coverage>
1458
+ coverage; /* Offset to Coverage table--from
1459
+ * beginning of table */
1460
+ OffsetTo<ClassDef>
1461
+ classDef; /* Offset to glyph ClassDef table--from
1462
+ * beginning of table */
1463
+ OffsetArrayOf<RuleSet>
1464
+ ruleSet; /* Array of RuleSet tables
1465
+ * ordered by class */
1466
+ public:
1467
+ DEFINE_SIZE_ARRAY (8, ruleSet);
1468
+ };
1469
+
1470
+
1471
+ struct ContextFormat3
1472
+ {
1473
+ inline void closure (hb_closure_context_t *c) const
1474
+ {
1475
+ TRACE_CLOSURE (this);
1476
+ if (!(this+coverageZ[0]).intersects (c->glyphs))
1477
+ return;
1478
+
1479
+ const LookupRecord *lookupRecord = &StructAtOffset<LookupRecord> (coverageZ, coverageZ[0].static_size * glyphCount);
1480
+ struct ContextClosureLookupContext lookup_context = {
1481
+ {intersects_coverage},
1482
+ this
1483
+ };
1484
+ context_closure_lookup (c,
1485
+ glyphCount, (const HBUINT16 *) (coverageZ + 1),
1486
+ lookupCount, lookupRecord,
1487
+ lookup_context);
1488
+ }
1489
+
1490
+ inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
1491
+ {
1492
+ TRACE_COLLECT_GLYPHS (this);
1493
+ (this+coverageZ[0]).add_coverage (c->input);
1494
+
1495
+ const LookupRecord *lookupRecord = &StructAtOffset<LookupRecord> (coverageZ, coverageZ[0].static_size * glyphCount);
1496
+ struct ContextCollectGlyphsLookupContext lookup_context = {
1497
+ {collect_coverage},
1498
+ this
1499
+ };
1500
+
1501
+ context_collect_glyphs_lookup (c,
1502
+ glyphCount, (const HBUINT16 *) (coverageZ + 1),
1503
+ lookupCount, lookupRecord,
1504
+ lookup_context);
1505
+ }
1506
+
1507
+ inline bool would_apply (hb_would_apply_context_t *c) const
1508
+ {
1509
+ TRACE_WOULD_APPLY (this);
1510
+
1511
+ const LookupRecord *lookupRecord = &StructAtOffset<LookupRecord> (coverageZ, coverageZ[0].static_size * glyphCount);
1512
+ struct ContextApplyLookupContext lookup_context = {
1513
+ {match_coverage},
1514
+ this
1515
+ };
1516
+ return_trace (context_would_apply_lookup (c, glyphCount, (const HBUINT16 *) (coverageZ + 1), lookupCount, lookupRecord, lookup_context));
1517
+ }
1518
+
1519
+ inline const Coverage &get_coverage (void) const
1520
+ {
1521
+ return this+coverageZ[0];
1522
+ }
1523
+
1524
+ inline bool apply (hb_ot_apply_context_t *c) const
1525
+ {
1526
+ TRACE_APPLY (this);
1527
+ unsigned int index = (this+coverageZ[0]).get_coverage (c->buffer->cur().codepoint);
1528
+ if (likely (index == NOT_COVERED)) return_trace (false);
1529
+
1530
+ const LookupRecord *lookupRecord = &StructAtOffset<LookupRecord> (coverageZ, coverageZ[0].static_size * glyphCount);
1531
+ struct ContextApplyLookupContext lookup_context = {
1532
+ {match_coverage},
1533
+ this
1534
+ };
1535
+ return_trace (context_apply_lookup (c, glyphCount, (const HBUINT16 *) (coverageZ + 1), lookupCount, lookupRecord, lookup_context));
1536
+ }
1537
+
1538
+ inline bool sanitize (hb_sanitize_context_t *c) const
1539
+ {
1540
+ TRACE_SANITIZE (this);
1541
+ if (!c->check_struct (this)) return_trace (false);
1542
+ unsigned int count = glyphCount;
1543
+ if (!count) return_trace (false); /* We want to access coverageZ[0] freely. */
1544
+ if (!c->check_array (coverageZ, coverageZ[0].static_size, count)) return_trace (false);
1545
+ for (unsigned int i = 0; i < count; i++)
1546
+ if (!coverageZ[i].sanitize (c, this)) return_trace (false);
1547
+ const LookupRecord *lookupRecord = &StructAtOffset<LookupRecord> (coverageZ, coverageZ[0].static_size * count);
1548
+ return_trace (c->check_array (lookupRecord, lookupRecord[0].static_size, lookupCount));
1549
+ }
1550
+
1551
+ protected:
1552
+ HBUINT16 format; /* Format identifier--format = 3 */
1553
+ HBUINT16 glyphCount; /* Number of glyphs in the input glyph
1554
+ * sequence */
1555
+ HBUINT16 lookupCount; /* Number of LookupRecords */
1556
+ OffsetTo<Coverage>
1557
+ coverageZ[VAR]; /* Array of offsets to Coverage
1558
+ * table in glyph sequence order */
1559
+ /*LookupRecord lookupRecordX[VAR];*/ /* Array of LookupRecords--in
1560
+ * design order */
1561
+ public:
1562
+ DEFINE_SIZE_ARRAY (6, coverageZ);
1563
+ };
1564
+
1565
+ struct Context
1566
+ {
1567
+ template <typename context_t>
1568
+ inline typename context_t::return_t dispatch (context_t *c) const
1569
+ {
1570
+ TRACE_DISPATCH (this, u.format);
1571
+ if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
1572
+ switch (u.format) {
1573
+ case 1: return_trace (c->dispatch (u.format1));
1574
+ case 2: return_trace (c->dispatch (u.format2));
1575
+ case 3: return_trace (c->dispatch (u.format3));
1576
+ default:return_trace (c->default_return_value ());
1577
+ }
1578
+ }
1579
+
1580
+ protected:
1581
+ union {
1582
+ HBUINT16 format; /* Format identifier */
1583
+ ContextFormat1 format1;
1584
+ ContextFormat2 format2;
1585
+ ContextFormat3 format3;
1586
+ } u;
1587
+ };
1588
+
1589
+
1590
+ /* Chaining Contextual lookups */
1591
+
1592
+ struct ChainContextClosureLookupContext
1593
+ {
1594
+ ContextClosureFuncs funcs;
1595
+ const void *intersects_data[3];
1596
+ };
1597
+
1598
+ struct ChainContextCollectGlyphsLookupContext
1599
+ {
1600
+ ContextCollectGlyphsFuncs funcs;
1601
+ const void *collect_data[3];
1602
+ };
1603
+
1604
+ struct ChainContextApplyLookupContext
1605
+ {
1606
+ ContextApplyFuncs funcs;
1607
+ const void *match_data[3];
1608
+ };
1609
+
1610
+ static inline void chain_context_closure_lookup (hb_closure_context_t *c,
1611
+ unsigned int backtrackCount,
1612
+ const HBUINT16 backtrack[],
1613
+ unsigned int inputCount, /* Including the first glyph (not matched) */
1614
+ const HBUINT16 input[], /* Array of input values--start with second glyph */
1615
+ unsigned int lookaheadCount,
1616
+ const HBUINT16 lookahead[],
1617
+ unsigned int lookupCount,
1618
+ const LookupRecord lookupRecord[],
1619
+ ChainContextClosureLookupContext &lookup_context)
1620
+ {
1621
+ if (intersects_array (c,
1622
+ backtrackCount, backtrack,
1623
+ lookup_context.funcs.intersects, lookup_context.intersects_data[0])
1624
+ && intersects_array (c,
1625
+ inputCount ? inputCount - 1 : 0, input,
1626
+ lookup_context.funcs.intersects, lookup_context.intersects_data[1])
1627
+ && intersects_array (c,
1628
+ lookaheadCount, lookahead,
1629
+ lookup_context.funcs.intersects, lookup_context.intersects_data[2]))
1630
+ recurse_lookups (c,
1631
+ lookupCount, lookupRecord);
1632
+ }
1633
+
1634
+ static inline void chain_context_collect_glyphs_lookup (hb_collect_glyphs_context_t *c,
1635
+ unsigned int backtrackCount,
1636
+ const HBUINT16 backtrack[],
1637
+ unsigned int inputCount, /* Including the first glyph (not matched) */
1638
+ const HBUINT16 input[], /* Array of input values--start with second glyph */
1639
+ unsigned int lookaheadCount,
1640
+ const HBUINT16 lookahead[],
1641
+ unsigned int lookupCount,
1642
+ const LookupRecord lookupRecord[],
1643
+ ChainContextCollectGlyphsLookupContext &lookup_context)
1644
+ {
1645
+ collect_array (c, c->before,
1646
+ backtrackCount, backtrack,
1647
+ lookup_context.funcs.collect, lookup_context.collect_data[0]);
1648
+ collect_array (c, c->input,
1649
+ inputCount ? inputCount - 1 : 0, input,
1650
+ lookup_context.funcs.collect, lookup_context.collect_data[1]);
1651
+ collect_array (c, c->after,
1652
+ lookaheadCount, lookahead,
1653
+ lookup_context.funcs.collect, lookup_context.collect_data[2]);
1654
+ recurse_lookups (c,
1655
+ lookupCount, lookupRecord);
1656
+ }
1657
+
1658
+ static inline bool chain_context_would_apply_lookup (hb_would_apply_context_t *c,
1659
+ unsigned int backtrackCount,
1660
+ const HBUINT16 backtrack[] HB_UNUSED,
1661
+ unsigned int inputCount, /* Including the first glyph (not matched) */
1662
+ const HBUINT16 input[], /* Array of input values--start with second glyph */
1663
+ unsigned int lookaheadCount,
1664
+ const HBUINT16 lookahead[] HB_UNUSED,
1665
+ unsigned int lookupCount HB_UNUSED,
1666
+ const LookupRecord lookupRecord[] HB_UNUSED,
1667
+ ChainContextApplyLookupContext &lookup_context)
1668
+ {
1669
+ return (c->zero_context ? !backtrackCount && !lookaheadCount : true)
1670
+ && would_match_input (c,
1671
+ inputCount, input,
1672
+ lookup_context.funcs.match, lookup_context.match_data[1]);
1673
+ }
1674
+
1675
+ static inline bool chain_context_apply_lookup (hb_ot_apply_context_t *c,
1676
+ unsigned int backtrackCount,
1677
+ const HBUINT16 backtrack[],
1678
+ unsigned int inputCount, /* Including the first glyph (not matched) */
1679
+ const HBUINT16 input[], /* Array of input values--start with second glyph */
1680
+ unsigned int lookaheadCount,
1681
+ const HBUINT16 lookahead[],
1682
+ unsigned int lookupCount,
1683
+ const LookupRecord lookupRecord[],
1684
+ ChainContextApplyLookupContext &lookup_context)
1685
+ {
1686
+ unsigned int start_index = 0, match_length = 0, end_index = 0;
1687
+ unsigned int match_positions[HB_MAX_CONTEXT_LENGTH];
1688
+ return match_input (c,
1689
+ inputCount, input,
1690
+ lookup_context.funcs.match, lookup_context.match_data[1],
1691
+ &match_length, match_positions)
1692
+ && match_backtrack (c,
1693
+ backtrackCount, backtrack,
1694
+ lookup_context.funcs.match, lookup_context.match_data[0],
1695
+ &start_index)
1696
+ && match_lookahead (c,
1697
+ lookaheadCount, lookahead,
1698
+ lookup_context.funcs.match, lookup_context.match_data[2],
1699
+ match_length, &end_index)
1700
+ && (c->buffer->unsafe_to_break_from_outbuffer (start_index, end_index),
1701
+ apply_lookup (c,
1702
+ inputCount, match_positions,
1703
+ lookupCount, lookupRecord,
1704
+ match_length));
1705
+ }
1706
+
1707
+ struct ChainRule
1708
+ {
1709
+ inline void closure (hb_closure_context_t *c, ChainContextClosureLookupContext &lookup_context) const
1710
+ {
1711
+ TRACE_CLOSURE (this);
1712
+ const HeadlessArrayOf<HBUINT16> &input = StructAfter<HeadlessArrayOf<HBUINT16> > (backtrack);
1713
+ const ArrayOf<HBUINT16> &lookahead = StructAfter<ArrayOf<HBUINT16> > (input);
1714
+ const ArrayOf<LookupRecord> &lookup = StructAfter<ArrayOf<LookupRecord> > (lookahead);
1715
+ chain_context_closure_lookup (c,
1716
+ backtrack.len, backtrack.array,
1717
+ input.len, input.array,
1718
+ lookahead.len, lookahead.array,
1719
+ lookup.len, lookup.array,
1720
+ lookup_context);
1721
+ }
1722
+
1723
+ inline void collect_glyphs (hb_collect_glyphs_context_t *c, ChainContextCollectGlyphsLookupContext &lookup_context) const
1724
+ {
1725
+ TRACE_COLLECT_GLYPHS (this);
1726
+ const HeadlessArrayOf<HBUINT16> &input = StructAfter<HeadlessArrayOf<HBUINT16> > (backtrack);
1727
+ const ArrayOf<HBUINT16> &lookahead = StructAfter<ArrayOf<HBUINT16> > (input);
1728
+ const ArrayOf<LookupRecord> &lookup = StructAfter<ArrayOf<LookupRecord> > (lookahead);
1729
+ chain_context_collect_glyphs_lookup (c,
1730
+ backtrack.len, backtrack.array,
1731
+ input.len, input.array,
1732
+ lookahead.len, lookahead.array,
1733
+ lookup.len, lookup.array,
1734
+ lookup_context);
1735
+ }
1736
+
1737
+ inline bool would_apply (hb_would_apply_context_t *c, ChainContextApplyLookupContext &lookup_context) const
1738
+ {
1739
+ TRACE_WOULD_APPLY (this);
1740
+ const HeadlessArrayOf<HBUINT16> &input = StructAfter<HeadlessArrayOf<HBUINT16> > (backtrack);
1741
+ const ArrayOf<HBUINT16> &lookahead = StructAfter<ArrayOf<HBUINT16> > (input);
1742
+ const ArrayOf<LookupRecord> &lookup = StructAfter<ArrayOf<LookupRecord> > (lookahead);
1743
+ return_trace (chain_context_would_apply_lookup (c,
1744
+ backtrack.len, backtrack.array,
1745
+ input.len, input.array,
1746
+ lookahead.len, lookahead.array, lookup.len,
1747
+ lookup.array, lookup_context));
1748
+ }
1749
+
1750
+ inline bool apply (hb_ot_apply_context_t *c, ChainContextApplyLookupContext &lookup_context) const
1751
+ {
1752
+ TRACE_APPLY (this);
1753
+ const HeadlessArrayOf<HBUINT16> &input = StructAfter<HeadlessArrayOf<HBUINT16> > (backtrack);
1754
+ const ArrayOf<HBUINT16> &lookahead = StructAfter<ArrayOf<HBUINT16> > (input);
1755
+ const ArrayOf<LookupRecord> &lookup = StructAfter<ArrayOf<LookupRecord> > (lookahead);
1756
+ return_trace (chain_context_apply_lookup (c,
1757
+ backtrack.len, backtrack.array,
1758
+ input.len, input.array,
1759
+ lookahead.len, lookahead.array, lookup.len,
1760
+ lookup.array, lookup_context));
1761
+ }
1762
+
1763
+ inline bool sanitize (hb_sanitize_context_t *c) const
1764
+ {
1765
+ TRACE_SANITIZE (this);
1766
+ if (!backtrack.sanitize (c)) return_trace (false);
1767
+ const HeadlessArrayOf<HBUINT16> &input = StructAfter<HeadlessArrayOf<HBUINT16> > (backtrack);
1768
+ if (!input.sanitize (c)) return_trace (false);
1769
+ const ArrayOf<HBUINT16> &lookahead = StructAfter<ArrayOf<HBUINT16> > (input);
1770
+ if (!lookahead.sanitize (c)) return_trace (false);
1771
+ const ArrayOf<LookupRecord> &lookup = StructAfter<ArrayOf<LookupRecord> > (lookahead);
1772
+ return_trace (lookup.sanitize (c));
1773
+ }
1774
+
1775
+ protected:
1776
+ ArrayOf<HBUINT16>
1777
+ backtrack; /* Array of backtracking values
1778
+ * (to be matched before the input
1779
+ * sequence) */
1780
+ HeadlessArrayOf<HBUINT16>
1781
+ inputX; /* Array of input values (start with
1782
+ * second glyph) */
1783
+ ArrayOf<HBUINT16>
1784
+ lookaheadX; /* Array of lookahead values's (to be
1785
+ * matched after the input sequence) */
1786
+ ArrayOf<LookupRecord>
1787
+ lookupX; /* Array of LookupRecords--in
1788
+ * design order) */
1789
+ public:
1790
+ DEFINE_SIZE_MIN (8);
1791
+ };
1792
+
1793
+ struct ChainRuleSet
1794
+ {
1795
+ inline void closure (hb_closure_context_t *c, ChainContextClosureLookupContext &lookup_context) const
1796
+ {
1797
+ TRACE_CLOSURE (this);
1798
+ unsigned int num_rules = rule.len;
1799
+ for (unsigned int i = 0; i < num_rules; i++)
1800
+ (this+rule[i]).closure (c, lookup_context);
1801
+ }
1802
+
1803
+ inline void collect_glyphs (hb_collect_glyphs_context_t *c, ChainContextCollectGlyphsLookupContext &lookup_context) const
1804
+ {
1805
+ TRACE_COLLECT_GLYPHS (this);
1806
+ unsigned int num_rules = rule.len;
1807
+ for (unsigned int i = 0; i < num_rules; i++)
1808
+ (this+rule[i]).collect_glyphs (c, lookup_context);
1809
+ }
1810
+
1811
+ inline bool would_apply (hb_would_apply_context_t *c, ChainContextApplyLookupContext &lookup_context) const
1812
+ {
1813
+ TRACE_WOULD_APPLY (this);
1814
+ unsigned int num_rules = rule.len;
1815
+ for (unsigned int i = 0; i < num_rules; i++)
1816
+ if ((this+rule[i]).would_apply (c, lookup_context))
1817
+ return_trace (true);
1818
+
1819
+ return_trace (false);
1820
+ }
1821
+
1822
+ inline bool apply (hb_ot_apply_context_t *c, ChainContextApplyLookupContext &lookup_context) const
1823
+ {
1824
+ TRACE_APPLY (this);
1825
+ unsigned int num_rules = rule.len;
1826
+ for (unsigned int i = 0; i < num_rules; i++)
1827
+ if ((this+rule[i]).apply (c, lookup_context))
1828
+ return_trace (true);
1829
+
1830
+ return_trace (false);
1831
+ }
1832
+
1833
+ inline bool sanitize (hb_sanitize_context_t *c) const
1834
+ {
1835
+ TRACE_SANITIZE (this);
1836
+ return_trace (rule.sanitize (c, this));
1837
+ }
1838
+
1839
+ protected:
1840
+ OffsetArrayOf<ChainRule>
1841
+ rule; /* Array of ChainRule tables
1842
+ * ordered by preference */
1843
+ public:
1844
+ DEFINE_SIZE_ARRAY (2, rule);
1845
+ };
1846
+
1847
+ struct ChainContextFormat1
1848
+ {
1849
+ inline void closure (hb_closure_context_t *c) const
1850
+ {
1851
+ TRACE_CLOSURE (this);
1852
+ const Coverage &cov = (this+coverage);
1853
+
1854
+ struct ChainContextClosureLookupContext lookup_context = {
1855
+ {intersects_glyph},
1856
+ {nullptr, nullptr, nullptr}
1857
+ };
1858
+
1859
+ unsigned int count = ruleSet.len;
1860
+ for (unsigned int i = 0; i < count; i++)
1861
+ if (cov.intersects_coverage (c->glyphs, i)) {
1862
+ const ChainRuleSet &rule_set = this+ruleSet[i];
1863
+ rule_set.closure (c, lookup_context);
1864
+ }
1865
+ }
1866
+
1867
+ inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
1868
+ {
1869
+ TRACE_COLLECT_GLYPHS (this);
1870
+ (this+coverage).add_coverage (c->input);
1871
+
1872
+ struct ChainContextCollectGlyphsLookupContext lookup_context = {
1873
+ {collect_glyph},
1874
+ {nullptr, nullptr, nullptr}
1875
+ };
1876
+
1877
+ unsigned int count = ruleSet.len;
1878
+ for (unsigned int i = 0; i < count; i++)
1879
+ (this+ruleSet[i]).collect_glyphs (c, lookup_context);
1880
+ }
1881
+
1882
+ inline bool would_apply (hb_would_apply_context_t *c) const
1883
+ {
1884
+ TRACE_WOULD_APPLY (this);
1885
+
1886
+ const ChainRuleSet &rule_set = this+ruleSet[(this+coverage).get_coverage (c->glyphs[0])];
1887
+ struct ChainContextApplyLookupContext lookup_context = {
1888
+ {match_glyph},
1889
+ {nullptr, nullptr, nullptr}
1890
+ };
1891
+ return_trace (rule_set.would_apply (c, lookup_context));
1892
+ }
1893
+
1894
+ inline const Coverage &get_coverage (void) const
1895
+ {
1896
+ return this+coverage;
1897
+ }
1898
+
1899
+ inline bool apply (hb_ot_apply_context_t *c) const
1900
+ {
1901
+ TRACE_APPLY (this);
1902
+ unsigned int index = (this+coverage).get_coverage (c->buffer->cur().codepoint);
1903
+ if (likely (index == NOT_COVERED)) return_trace (false);
1904
+
1905
+ const ChainRuleSet &rule_set = this+ruleSet[index];
1906
+ struct ChainContextApplyLookupContext lookup_context = {
1907
+ {match_glyph},
1908
+ {nullptr, nullptr, nullptr}
1909
+ };
1910
+ return_trace (rule_set.apply (c, lookup_context));
1911
+ }
1912
+
1913
+ inline bool sanitize (hb_sanitize_context_t *c) const
1914
+ {
1915
+ TRACE_SANITIZE (this);
1916
+ return_trace (coverage.sanitize (c, this) && ruleSet.sanitize (c, this));
1917
+ }
1918
+
1919
+ protected:
1920
+ HBUINT16 format; /* Format identifier--format = 1 */
1921
+ OffsetTo<Coverage>
1922
+ coverage; /* Offset to Coverage table--from
1923
+ * beginning of table */
1924
+ OffsetArrayOf<ChainRuleSet>
1925
+ ruleSet; /* Array of ChainRuleSet tables
1926
+ * ordered by Coverage Index */
1927
+ public:
1928
+ DEFINE_SIZE_ARRAY (6, ruleSet);
1929
+ };
1930
+
1931
+ struct ChainContextFormat2
1932
+ {
1933
+ inline void closure (hb_closure_context_t *c) const
1934
+ {
1935
+ TRACE_CLOSURE (this);
1936
+ if (!(this+coverage).intersects (c->glyphs))
1937
+ return;
1938
+
1939
+ const ClassDef &backtrack_class_def = this+backtrackClassDef;
1940
+ const ClassDef &input_class_def = this+inputClassDef;
1941
+ const ClassDef &lookahead_class_def = this+lookaheadClassDef;
1942
+
1943
+ struct ChainContextClosureLookupContext lookup_context = {
1944
+ {intersects_class},
1945
+ {&backtrack_class_def,
1946
+ &input_class_def,
1947
+ &lookahead_class_def}
1948
+ };
1949
+
1950
+ unsigned int count = ruleSet.len;
1951
+ for (unsigned int i = 0; i < count; i++)
1952
+ if (input_class_def.intersects_class (c->glyphs, i)) {
1953
+ const ChainRuleSet &rule_set = this+ruleSet[i];
1954
+ rule_set.closure (c, lookup_context);
1955
+ }
1956
+ }
1957
+
1958
+ inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
1959
+ {
1960
+ TRACE_COLLECT_GLYPHS (this);
1961
+ (this+coverage).add_coverage (c->input);
1962
+
1963
+ const ClassDef &backtrack_class_def = this+backtrackClassDef;
1964
+ const ClassDef &input_class_def = this+inputClassDef;
1965
+ const ClassDef &lookahead_class_def = this+lookaheadClassDef;
1966
+
1967
+ struct ChainContextCollectGlyphsLookupContext lookup_context = {
1968
+ {collect_class},
1969
+ {&backtrack_class_def,
1970
+ &input_class_def,
1971
+ &lookahead_class_def}
1972
+ };
1973
+
1974
+ unsigned int count = ruleSet.len;
1975
+ for (unsigned int i = 0; i < count; i++)
1976
+ (this+ruleSet[i]).collect_glyphs (c, lookup_context);
1977
+ }
1978
+
1979
+ inline bool would_apply (hb_would_apply_context_t *c) const
1980
+ {
1981
+ TRACE_WOULD_APPLY (this);
1982
+
1983
+ const ClassDef &backtrack_class_def = this+backtrackClassDef;
1984
+ const ClassDef &input_class_def = this+inputClassDef;
1985
+ const ClassDef &lookahead_class_def = this+lookaheadClassDef;
1986
+
1987
+ unsigned int index = input_class_def.get_class (c->glyphs[0]);
1988
+ const ChainRuleSet &rule_set = this+ruleSet[index];
1989
+ struct ChainContextApplyLookupContext lookup_context = {
1990
+ {match_class},
1991
+ {&backtrack_class_def,
1992
+ &input_class_def,
1993
+ &lookahead_class_def}
1994
+ };
1995
+ return_trace (rule_set.would_apply (c, lookup_context));
1996
+ }
1997
+
1998
+ inline const Coverage &get_coverage (void) const
1999
+ {
2000
+ return this+coverage;
2001
+ }
2002
+
2003
+ inline bool apply (hb_ot_apply_context_t *c) const
2004
+ {
2005
+ TRACE_APPLY (this);
2006
+ unsigned int index = (this+coverage).get_coverage (c->buffer->cur().codepoint);
2007
+ if (likely (index == NOT_COVERED)) return_trace (false);
2008
+
2009
+ const ClassDef &backtrack_class_def = this+backtrackClassDef;
2010
+ const ClassDef &input_class_def = this+inputClassDef;
2011
+ const ClassDef &lookahead_class_def = this+lookaheadClassDef;
2012
+
2013
+ index = input_class_def.get_class (c->buffer->cur().codepoint);
2014
+ const ChainRuleSet &rule_set = this+ruleSet[index];
2015
+ struct ChainContextApplyLookupContext lookup_context = {
2016
+ {match_class},
2017
+ {&backtrack_class_def,
2018
+ &input_class_def,
2019
+ &lookahead_class_def}
2020
+ };
2021
+ return_trace (rule_set.apply (c, lookup_context));
2022
+ }
2023
+
2024
+ inline bool sanitize (hb_sanitize_context_t *c) const
2025
+ {
2026
+ TRACE_SANITIZE (this);
2027
+ return_trace (coverage.sanitize (c, this) &&
2028
+ backtrackClassDef.sanitize (c, this) &&
2029
+ inputClassDef.sanitize (c, this) &&
2030
+ lookaheadClassDef.sanitize (c, this) &&
2031
+ ruleSet.sanitize (c, this));
2032
+ }
2033
+
2034
+ protected:
2035
+ HBUINT16 format; /* Format identifier--format = 2 */
2036
+ OffsetTo<Coverage>
2037
+ coverage; /* Offset to Coverage table--from
2038
+ * beginning of table */
2039
+ OffsetTo<ClassDef>
2040
+ backtrackClassDef; /* Offset to glyph ClassDef table
2041
+ * containing backtrack sequence
2042
+ * data--from beginning of table */
2043
+ OffsetTo<ClassDef>
2044
+ inputClassDef; /* Offset to glyph ClassDef
2045
+ * table containing input sequence
2046
+ * data--from beginning of table */
2047
+ OffsetTo<ClassDef>
2048
+ lookaheadClassDef; /* Offset to glyph ClassDef table
2049
+ * containing lookahead sequence
2050
+ * data--from beginning of table */
2051
+ OffsetArrayOf<ChainRuleSet>
2052
+ ruleSet; /* Array of ChainRuleSet tables
2053
+ * ordered by class */
2054
+ public:
2055
+ DEFINE_SIZE_ARRAY (12, ruleSet);
2056
+ };
2057
+
2058
+ struct ChainContextFormat3
2059
+ {
2060
+ inline void closure (hb_closure_context_t *c) const
2061
+ {
2062
+ TRACE_CLOSURE (this);
2063
+ const OffsetArrayOf<Coverage> &input = StructAfter<OffsetArrayOf<Coverage> > (backtrack);
2064
+
2065
+ if (!(this+input[0]).intersects (c->glyphs))
2066
+ return;
2067
+
2068
+ const OffsetArrayOf<Coverage> &lookahead = StructAfter<OffsetArrayOf<Coverage> > (input);
2069
+ const ArrayOf<LookupRecord> &lookup = StructAfter<ArrayOf<LookupRecord> > (lookahead);
2070
+ struct ChainContextClosureLookupContext lookup_context = {
2071
+ {intersects_coverage},
2072
+ {this, this, this}
2073
+ };
2074
+ chain_context_closure_lookup (c,
2075
+ backtrack.len, (const HBUINT16 *) backtrack.array,
2076
+ input.len, (const HBUINT16 *) input.array + 1,
2077
+ lookahead.len, (const HBUINT16 *) lookahead.array,
2078
+ lookup.len, lookup.array,
2079
+ lookup_context);
2080
+ }
2081
+
2082
+ inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
2083
+ {
2084
+ TRACE_COLLECT_GLYPHS (this);
2085
+ const OffsetArrayOf<Coverage> &input = StructAfter<OffsetArrayOf<Coverage> > (backtrack);
2086
+
2087
+ (this+input[0]).add_coverage (c->input);
2088
+
2089
+ const OffsetArrayOf<Coverage> &lookahead = StructAfter<OffsetArrayOf<Coverage> > (input);
2090
+ const ArrayOf<LookupRecord> &lookup = StructAfter<ArrayOf<LookupRecord> > (lookahead);
2091
+ struct ChainContextCollectGlyphsLookupContext lookup_context = {
2092
+ {collect_coverage},
2093
+ {this, this, this}
2094
+ };
2095
+ chain_context_collect_glyphs_lookup (c,
2096
+ backtrack.len, (const HBUINT16 *) backtrack.array,
2097
+ input.len, (const HBUINT16 *) input.array + 1,
2098
+ lookahead.len, (const HBUINT16 *) lookahead.array,
2099
+ lookup.len, lookup.array,
2100
+ lookup_context);
2101
+ }
2102
+
2103
+ inline bool would_apply (hb_would_apply_context_t *c) const
2104
+ {
2105
+ TRACE_WOULD_APPLY (this);
2106
+
2107
+ const OffsetArrayOf<Coverage> &input = StructAfter<OffsetArrayOf<Coverage> > (backtrack);
2108
+ const OffsetArrayOf<Coverage> &lookahead = StructAfter<OffsetArrayOf<Coverage> > (input);
2109
+ const ArrayOf<LookupRecord> &lookup = StructAfter<ArrayOf<LookupRecord> > (lookahead);
2110
+ struct ChainContextApplyLookupContext lookup_context = {
2111
+ {match_coverage},
2112
+ {this, this, this}
2113
+ };
2114
+ return_trace (chain_context_would_apply_lookup (c,
2115
+ backtrack.len, (const HBUINT16 *) backtrack.array,
2116
+ input.len, (const HBUINT16 *) input.array + 1,
2117
+ lookahead.len, (const HBUINT16 *) lookahead.array,
2118
+ lookup.len, lookup.array, lookup_context));
2119
+ }
2120
+
2121
+ inline const Coverage &get_coverage (void) const
2122
+ {
2123
+ const OffsetArrayOf<Coverage> &input = StructAfter<OffsetArrayOf<Coverage> > (backtrack);
2124
+ return this+input[0];
2125
+ }
2126
+
2127
+ inline bool apply (hb_ot_apply_context_t *c) const
2128
+ {
2129
+ TRACE_APPLY (this);
2130
+ const OffsetArrayOf<Coverage> &input = StructAfter<OffsetArrayOf<Coverage> > (backtrack);
2131
+
2132
+ unsigned int index = (this+input[0]).get_coverage (c->buffer->cur().codepoint);
2133
+ if (likely (index == NOT_COVERED)) return_trace (false);
2134
+
2135
+ const OffsetArrayOf<Coverage> &lookahead = StructAfter<OffsetArrayOf<Coverage> > (input);
2136
+ const ArrayOf<LookupRecord> &lookup = StructAfter<ArrayOf<LookupRecord> > (lookahead);
2137
+ struct ChainContextApplyLookupContext lookup_context = {
2138
+ {match_coverage},
2139
+ {this, this, this}
2140
+ };
2141
+ return_trace (chain_context_apply_lookup (c,
2142
+ backtrack.len, (const HBUINT16 *) backtrack.array,
2143
+ input.len, (const HBUINT16 *) input.array + 1,
2144
+ lookahead.len, (const HBUINT16 *) lookahead.array,
2145
+ lookup.len, lookup.array, lookup_context));
2146
+ }
2147
+
2148
+ inline bool sanitize (hb_sanitize_context_t *c) const
2149
+ {
2150
+ TRACE_SANITIZE (this);
2151
+ if (!backtrack.sanitize (c, this)) return_trace (false);
2152
+ const OffsetArrayOf<Coverage> &input = StructAfter<OffsetArrayOf<Coverage> > (backtrack);
2153
+ if (!input.sanitize (c, this)) return_trace (false);
2154
+ if (!input.len) return_trace (false); /* To be consistent with Context. */
2155
+ const OffsetArrayOf<Coverage> &lookahead = StructAfter<OffsetArrayOf<Coverage> > (input);
2156
+ if (!lookahead.sanitize (c, this)) return_trace (false);
2157
+ const ArrayOf<LookupRecord> &lookup = StructAfter<ArrayOf<LookupRecord> > (lookahead);
2158
+ return_trace (lookup.sanitize (c));
2159
+ }
2160
+
2161
+ protected:
2162
+ HBUINT16 format; /* Format identifier--format = 3 */
2163
+ OffsetArrayOf<Coverage>
2164
+ backtrack; /* Array of coverage tables
2165
+ * in backtracking sequence, in glyph
2166
+ * sequence order */
2167
+ OffsetArrayOf<Coverage>
2168
+ inputX ; /* Array of coverage
2169
+ * tables in input sequence, in glyph
2170
+ * sequence order */
2171
+ OffsetArrayOf<Coverage>
2172
+ lookaheadX; /* Array of coverage tables
2173
+ * in lookahead sequence, in glyph
2174
+ * sequence order */
2175
+ ArrayOf<LookupRecord>
2176
+ lookupX; /* Array of LookupRecords--in
2177
+ * design order) */
2178
+ public:
2179
+ DEFINE_SIZE_MIN (10);
2180
+ };
2181
+
2182
+ struct ChainContext
2183
+ {
2184
+ template <typename context_t>
2185
+ inline typename context_t::return_t dispatch (context_t *c) const
2186
+ {
2187
+ TRACE_DISPATCH (this, u.format);
2188
+ if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
2189
+ switch (u.format) {
2190
+ case 1: return_trace (c->dispatch (u.format1));
2191
+ case 2: return_trace (c->dispatch (u.format2));
2192
+ case 3: return_trace (c->dispatch (u.format3));
2193
+ default:return_trace (c->default_return_value ());
2194
+ }
2195
+ }
2196
+
2197
+ protected:
2198
+ union {
2199
+ HBUINT16 format; /* Format identifier */
2200
+ ChainContextFormat1 format1;
2201
+ ChainContextFormat2 format2;
2202
+ ChainContextFormat3 format3;
2203
+ } u;
2204
+ };
2205
+
2206
+
2207
+ template <typename T>
2208
+ struct ExtensionFormat1
2209
+ {
2210
+ inline unsigned int get_type (void) const { return extensionLookupType; }
2211
+
2212
+ template <typename X>
2213
+ inline const X& get_subtable (void) const
2214
+ {
2215
+ unsigned int offset = extensionOffset;
2216
+ if (unlikely (!offset)) return Null(typename T::LookupSubTable);
2217
+ return StructAtOffset<typename T::LookupSubTable> (this, offset);
2218
+ }
2219
+
2220
+ template <typename context_t>
2221
+ inline typename context_t::return_t dispatch (context_t *c) const
2222
+ {
2223
+ TRACE_DISPATCH (this, format);
2224
+ if (unlikely (!c->may_dispatch (this, this))) return_trace (c->no_dispatch_return_value ());
2225
+ return_trace (get_subtable<typename T::LookupSubTable> ().dispatch (c, get_type ()));
2226
+ }
2227
+
2228
+ /* This is called from may_dispatch() above with hb_sanitize_context_t. */
2229
+ inline bool sanitize (hb_sanitize_context_t *c) const
2230
+ {
2231
+ TRACE_SANITIZE (this);
2232
+ return_trace (c->check_struct (this) &&
2233
+ extensionOffset != 0 &&
2234
+ extensionLookupType != T::LookupSubTable::Extension);
2235
+ }
2236
+
2237
+ protected:
2238
+ HBUINT16 format; /* Format identifier. Set to 1. */
2239
+ HBUINT16 extensionLookupType; /* Lookup type of subtable referenced
2240
+ * by ExtensionOffset (i.e. the
2241
+ * extension subtable). */
2242
+ HBUINT32 extensionOffset; /* Offset to the extension subtable,
2243
+ * of lookup type subtable. */
2244
+ public:
2245
+ DEFINE_SIZE_STATIC (8);
2246
+ };
2247
+
2248
+ template <typename T>
2249
+ struct Extension
2250
+ {
2251
+ inline unsigned int get_type (void) const
2252
+ {
2253
+ switch (u.format) {
2254
+ case 1: return u.format1.get_type ();
2255
+ default:return 0;
2256
+ }
2257
+ }
2258
+ template <typename X>
2259
+ inline const X& get_subtable (void) const
2260
+ {
2261
+ switch (u.format) {
2262
+ case 1: return u.format1.template get_subtable<typename T::LookupSubTable> ();
2263
+ default:return Null(typename T::LookupSubTable);
2264
+ }
2265
+ }
2266
+
2267
+ template <typename context_t>
2268
+ inline typename context_t::return_t dispatch (context_t *c) const
2269
+ {
2270
+ TRACE_DISPATCH (this, u.format);
2271
+ if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
2272
+ switch (u.format) {
2273
+ case 1: return_trace (u.format1.dispatch (c));
2274
+ default:return_trace (c->default_return_value ());
2275
+ }
2276
+ }
2277
+
2278
+ protected:
2279
+ union {
2280
+ HBUINT16 format; /* Format identifier */
2281
+ ExtensionFormat1<T> format1;
2282
+ } u;
2283
+ };
2284
+
2285
+
2286
+ /*
2287
+ * GSUB/GPOS Common
2288
+ */
2289
+
2290
+ struct GSUBGPOS
2291
+ {
2292
+ inline unsigned int get_script_count (void) const
2293
+ { return (this+scriptList).len; }
2294
+ inline const Tag& get_script_tag (unsigned int i) const
2295
+ { return (this+scriptList).get_tag (i); }
2296
+ inline unsigned int get_script_tags (unsigned int start_offset,
2297
+ unsigned int *script_count /* IN/OUT */,
2298
+ hb_tag_t *script_tags /* OUT */) const
2299
+ { return (this+scriptList).get_tags (start_offset, script_count, script_tags); }
2300
+ inline const Script& get_script (unsigned int i) const
2301
+ { return (this+scriptList)[i]; }
2302
+ inline bool find_script_index (hb_tag_t tag, unsigned int *index) const
2303
+ { return (this+scriptList).find_index (tag, index); }
2304
+
2305
+ inline unsigned int get_feature_count (void) const
2306
+ { return (this+featureList).len; }
2307
+ inline hb_tag_t get_feature_tag (unsigned int i) const
2308
+ { return i == Index::NOT_FOUND_INDEX ? HB_TAG_NONE : (this+featureList).get_tag (i); }
2309
+ inline unsigned int get_feature_tags (unsigned int start_offset,
2310
+ unsigned int *feature_count /* IN/OUT */,
2311
+ hb_tag_t *feature_tags /* OUT */) const
2312
+ { return (this+featureList).get_tags (start_offset, feature_count, feature_tags); }
2313
+ inline const Feature& get_feature (unsigned int i) const
2314
+ { return (this+featureList)[i]; }
2315
+ inline bool find_feature_index (hb_tag_t tag, unsigned int *index) const
2316
+ { return (this+featureList).find_index (tag, index); }
2317
+
2318
+ inline unsigned int get_lookup_count (void) const
2319
+ { return (this+lookupList).len; }
2320
+ inline const Lookup& get_lookup (unsigned int i) const
2321
+ { return (this+lookupList)[i]; }
2322
+
2323
+ inline bool find_variations_index (const int *coords, unsigned int num_coords,
2324
+ unsigned int *index) const
2325
+ { return (version.to_int () >= 0x00010001u ? this+featureVars : Null(FeatureVariations))
2326
+ .find_index (coords, num_coords, index); }
2327
+ inline const Feature& get_feature_variation (unsigned int feature_index,
2328
+ unsigned int variations_index) const
2329
+ {
2330
+ if (FeatureVariations::NOT_FOUND_INDEX != variations_index &&
2331
+ version.to_int () >= 0x00010001u)
2332
+ {
2333
+ const Feature *feature = (this+featureVars).find_substitute (variations_index,
2334
+ feature_index);
2335
+ if (feature)
2336
+ return *feature;
2337
+ }
2338
+ return get_feature (feature_index);
2339
+ }
2340
+
2341
+ inline bool sanitize (hb_sanitize_context_t *c) const
2342
+ {
2343
+ TRACE_SANITIZE (this);
2344
+ return_trace (version.sanitize (c) &&
2345
+ likely (version.major == 1) &&
2346
+ scriptList.sanitize (c, this) &&
2347
+ featureList.sanitize (c, this) &&
2348
+ lookupList.sanitize (c, this) &&
2349
+ (version.to_int () < 0x00010001u || featureVars.sanitize (c, this)));
2350
+ }
2351
+
2352
+ protected:
2353
+ FixedVersion<>version; /* Version of the GSUB/GPOS table--initially set
2354
+ * to 0x00010000u */
2355
+ OffsetTo<ScriptList>
2356
+ scriptList; /* ScriptList table */
2357
+ OffsetTo<FeatureList>
2358
+ featureList; /* FeatureList table */
2359
+ OffsetTo<LookupList>
2360
+ lookupList; /* LookupList table */
2361
+ LOffsetTo<FeatureVariations>
2362
+ featureVars; /* Offset to Feature Variations
2363
+ table--from beginning of table
2364
+ * (may be NULL). Introduced
2365
+ * in version 0x00010001. */
2366
+ public:
2367
+ DEFINE_SIZE_MIN (10);
2368
+ };
2369
+
2370
+
2371
+ } /* namespace OT */
2372
+
2373
+
2374
+ #endif /* HB_OT_LAYOUT_GSUBGPOS_PRIVATE_HH */