laag-harfbuzz 1.7.6.1

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