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,1654 @@
1
+ /*
2
+ * Copyright © 2007,2008,2009,2010 Red Hat, Inc.
3
+ * Copyright © 2010,2012,2013 Google, Inc.
4
+ *
5
+ * This is part of HarfBuzz, a text shaping library.
6
+ *
7
+ * Permission is hereby granted, without written agreement and without
8
+ * license or royalty fees, to use, copy, modify, and distribute this
9
+ * software and its documentation for any purpose, provided that the
10
+ * above copyright notice and the following two paragraphs appear in
11
+ * all copies of this software.
12
+ *
13
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
14
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
15
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
16
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
17
+ * DAMAGE.
18
+ *
19
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
20
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
21
+ * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
22
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
23
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
24
+ *
25
+ * Red Hat Author(s): Behdad Esfahbod
26
+ * Google Author(s): Behdad Esfahbod
27
+ */
28
+
29
+ #ifndef HB_OT_LAYOUT_GPOS_TABLE_HH
30
+ #define HB_OT_LAYOUT_GPOS_TABLE_HH
31
+
32
+ #include "hb-ot-layout-gsubgpos-private.hh"
33
+
34
+
35
+ namespace OT {
36
+
37
+
38
+ /* buffer **position** var allocations */
39
+ #define attach_chain() var.i16[0] /* glyph to which this attaches to, relative to current glyphs; negative for going back, positive for forward. */
40
+ #define attach_type() var.u8[2] /* attachment type */
41
+ /* Note! if attach_chain() is zero, the value of attach_type() is irrelevant. */
42
+
43
+ enum attach_type_t {
44
+ ATTACH_TYPE_NONE = 0X00,
45
+
46
+ /* Each attachment should be either a mark or a cursive; can't be both. */
47
+ ATTACH_TYPE_MARK = 0X01,
48
+ ATTACH_TYPE_CURSIVE = 0X02,
49
+ };
50
+
51
+
52
+ /* Shared Tables: ValueRecord, Anchor Table, and MarkArray */
53
+
54
+ typedef HBUINT16 Value;
55
+
56
+ typedef Value ValueRecord[VAR];
57
+
58
+ struct ValueFormat : HBUINT16
59
+ {
60
+ enum Flags {
61
+ xPlacement = 0x0001u, /* Includes horizontal adjustment for placement */
62
+ yPlacement = 0x0002u, /* Includes vertical adjustment for placement */
63
+ xAdvance = 0x0004u, /* Includes horizontal adjustment for advance */
64
+ yAdvance = 0x0008u, /* Includes vertical adjustment for advance */
65
+ xPlaDevice = 0x0010u, /* Includes horizontal Device table for placement */
66
+ yPlaDevice = 0x0020u, /* Includes vertical Device table for placement */
67
+ xAdvDevice = 0x0040u, /* Includes horizontal Device table for advance */
68
+ yAdvDevice = 0x0080u, /* Includes vertical Device table for advance */
69
+ ignored = 0x0F00u, /* Was used in TrueType Open for MM fonts */
70
+ reserved = 0xF000u, /* For future use */
71
+
72
+ devices = 0x00F0u /* Mask for having any Device table */
73
+ };
74
+
75
+ /* All fields are options. Only those available advance the value pointer. */
76
+ #if 0
77
+ HBINT16 xPlacement; /* Horizontal adjustment for
78
+ * placement--in design units */
79
+ HBINT16 yPlacement; /* Vertical adjustment for
80
+ * placement--in design units */
81
+ HBINT16 xAdvance; /* Horizontal adjustment for
82
+ * advance--in design units (only used
83
+ * for horizontal writing) */
84
+ HBINT16 yAdvance; /* Vertical adjustment for advance--in
85
+ * design units (only used for vertical
86
+ * writing) */
87
+ Offset xPlaDevice; /* Offset to Device table for
88
+ * horizontal placement--measured from
89
+ * beginning of PosTable (may be NULL) */
90
+ Offset yPlaDevice; /* Offset to Device table for vertical
91
+ * placement--measured from beginning
92
+ * of PosTable (may be NULL) */
93
+ Offset xAdvDevice; /* Offset to Device table for
94
+ * horizontal advance--measured from
95
+ * beginning of PosTable (may be NULL) */
96
+ Offset yAdvDevice; /* Offset to Device table for vertical
97
+ * advance--measured from beginning of
98
+ * PosTable (may be NULL) */
99
+ #endif
100
+
101
+ inline unsigned int get_len (void) const
102
+ { return _hb_popcount ((unsigned int) *this); }
103
+ inline unsigned int get_size (void) const
104
+ { return get_len () * Value::static_size; }
105
+
106
+ void apply_value (hb_ot_apply_context_t *c,
107
+ const void *base,
108
+ const Value *values,
109
+ hb_glyph_position_t &glyph_pos) const
110
+ {
111
+ unsigned int format = *this;
112
+ if (!format) return;
113
+
114
+ hb_font_t *font = c->font;
115
+ hb_bool_t horizontal = HB_DIRECTION_IS_HORIZONTAL (c->direction);
116
+
117
+ if (format & xPlacement) glyph_pos.x_offset += font->em_scale_x (get_short (values++));
118
+ if (format & yPlacement) glyph_pos.y_offset += font->em_scale_y (get_short (values++));
119
+ if (format & xAdvance) {
120
+ if (likely (horizontal)) glyph_pos.x_advance += font->em_scale_x (get_short (values));
121
+ values++;
122
+ }
123
+ /* y_advance values grow downward but font-space grows upward, hence negation */
124
+ if (format & yAdvance) {
125
+ if (unlikely (!horizontal)) glyph_pos.y_advance -= font->em_scale_y (get_short (values));
126
+ values++;
127
+ }
128
+
129
+ if (!has_device ()) return;
130
+
131
+ bool use_x_device = font->x_ppem || font->num_coords;
132
+ bool use_y_device = font->y_ppem || font->num_coords;
133
+
134
+ if (!use_x_device && !use_y_device) return;
135
+
136
+ const VariationStore &store = c->var_store;
137
+
138
+ /* pixel -> fractional pixel */
139
+ if (format & xPlaDevice) {
140
+ if (use_x_device) glyph_pos.x_offset += (base + get_device (values)).get_x_delta (font, store);
141
+ values++;
142
+ }
143
+ if (format & yPlaDevice) {
144
+ if (use_y_device) glyph_pos.y_offset += (base + get_device (values)).get_y_delta (font, store);
145
+ values++;
146
+ }
147
+ if (format & xAdvDevice) {
148
+ if (horizontal && use_x_device) glyph_pos.x_advance += (base + get_device (values)).get_x_delta (font, store);
149
+ values++;
150
+ }
151
+ if (format & yAdvDevice) {
152
+ /* y_advance values grow downward but font-space grows upward, hence negation */
153
+ if (!horizontal && use_y_device) glyph_pos.y_advance -= (base + get_device (values)).get_y_delta (font, store);
154
+ values++;
155
+ }
156
+ }
157
+
158
+ private:
159
+ inline bool sanitize_value_devices (hb_sanitize_context_t *c, const void *base, const Value *values) const
160
+ {
161
+ unsigned int format = *this;
162
+
163
+ if (format & xPlacement) values++;
164
+ if (format & yPlacement) values++;
165
+ if (format & xAdvance) values++;
166
+ if (format & yAdvance) values++;
167
+
168
+ if ((format & xPlaDevice) && !get_device (values++).sanitize (c, base)) return false;
169
+ if ((format & yPlaDevice) && !get_device (values++).sanitize (c, base)) return false;
170
+ if ((format & xAdvDevice) && !get_device (values++).sanitize (c, base)) return false;
171
+ if ((format & yAdvDevice) && !get_device (values++).sanitize (c, base)) return false;
172
+
173
+ return true;
174
+ }
175
+
176
+ static inline OffsetTo<Device>& get_device (Value* value)
177
+ { return *CastP<OffsetTo<Device> > (value); }
178
+ static inline const OffsetTo<Device>& get_device (const Value* value)
179
+ { return *CastP<OffsetTo<Device> > (value); }
180
+
181
+ static inline const HBINT16& get_short (const Value* value)
182
+ { return *CastP<HBINT16> (value); }
183
+
184
+ public:
185
+
186
+ inline bool has_device (void) const {
187
+ unsigned int format = *this;
188
+ return (format & devices) != 0;
189
+ }
190
+
191
+ inline bool sanitize_value (hb_sanitize_context_t *c, const void *base, const Value *values) const
192
+ {
193
+ TRACE_SANITIZE (this);
194
+ return_trace (c->check_range (values, get_size ()) && (!has_device () || sanitize_value_devices (c, base, values)));
195
+ }
196
+
197
+ inline bool sanitize_values (hb_sanitize_context_t *c, const void *base, const Value *values, unsigned int count) const
198
+ {
199
+ TRACE_SANITIZE (this);
200
+ unsigned int len = get_len ();
201
+
202
+ if (!c->check_array (values, get_size (), count)) return_trace (false);
203
+
204
+ if (!has_device ()) return_trace (true);
205
+
206
+ for (unsigned int i = 0; i < count; i++) {
207
+ if (!sanitize_value_devices (c, base, values))
208
+ return_trace (false);
209
+ values += len;
210
+ }
211
+
212
+ return_trace (true);
213
+ }
214
+
215
+ /* Just sanitize referenced Device tables. Doesn't check the values themselves. */
216
+ inline bool sanitize_values_stride_unsafe (hb_sanitize_context_t *c, const void *base, const Value *values, unsigned int count, unsigned int stride) const
217
+ {
218
+ TRACE_SANITIZE (this);
219
+
220
+ if (!has_device ()) return_trace (true);
221
+
222
+ for (unsigned int i = 0; i < count; i++) {
223
+ if (!sanitize_value_devices (c, base, values))
224
+ return_trace (false);
225
+ values += stride;
226
+ }
227
+
228
+ return_trace (true);
229
+ }
230
+ };
231
+
232
+
233
+ struct AnchorFormat1
234
+ {
235
+ inline void get_anchor (hb_ot_apply_context_t *c, hb_codepoint_t glyph_id HB_UNUSED,
236
+ float *x, float *y) const
237
+ {
238
+ hb_font_t *font = c->font;
239
+ *x = font->em_fscale_x (xCoordinate);
240
+ *y = font->em_fscale_y (yCoordinate);
241
+ }
242
+
243
+ inline bool sanitize (hb_sanitize_context_t *c) const
244
+ {
245
+ TRACE_SANITIZE (this);
246
+ return_trace (c->check_struct (this));
247
+ }
248
+
249
+ protected:
250
+ HBUINT16 format; /* Format identifier--format = 1 */
251
+ FWORD xCoordinate; /* Horizontal value--in design units */
252
+ FWORD yCoordinate; /* Vertical value--in design units */
253
+ public:
254
+ DEFINE_SIZE_STATIC (6);
255
+ };
256
+
257
+ struct AnchorFormat2
258
+ {
259
+ inline void get_anchor (hb_ot_apply_context_t *c, hb_codepoint_t glyph_id,
260
+ float *x, float *y) const
261
+ {
262
+ hb_font_t *font = c->font;
263
+ unsigned int x_ppem = font->x_ppem;
264
+ unsigned int y_ppem = font->y_ppem;
265
+ hb_position_t cx, cy;
266
+ hb_bool_t ret;
267
+
268
+ ret = (x_ppem || y_ppem) &&
269
+ font->get_glyph_contour_point_for_origin (glyph_id, anchorPoint, HB_DIRECTION_LTR, &cx, &cy);
270
+ *x = ret && x_ppem ? cx : font->em_fscale_x (xCoordinate);
271
+ *y = ret && y_ppem ? cy : font->em_fscale_y (yCoordinate);
272
+ }
273
+
274
+ inline bool sanitize (hb_sanitize_context_t *c) const
275
+ {
276
+ TRACE_SANITIZE (this);
277
+ return_trace (c->check_struct (this));
278
+ }
279
+
280
+ protected:
281
+ HBUINT16 format; /* Format identifier--format = 2 */
282
+ FWORD xCoordinate; /* Horizontal value--in design units */
283
+ FWORD yCoordinate; /* Vertical value--in design units */
284
+ HBUINT16 anchorPoint; /* Index to glyph contour point */
285
+ public:
286
+ DEFINE_SIZE_STATIC (8);
287
+ };
288
+
289
+ struct AnchorFormat3
290
+ {
291
+ inline void get_anchor (hb_ot_apply_context_t *c, hb_codepoint_t glyph_id HB_UNUSED,
292
+ float *x, float *y) const
293
+ {
294
+ hb_font_t *font = c->font;
295
+ *x = font->em_fscale_x (xCoordinate);
296
+ *y = font->em_fscale_y (yCoordinate);
297
+
298
+ if (font->x_ppem || font->num_coords)
299
+ *x += (this+xDeviceTable).get_x_delta (font, c->var_store);
300
+ if (font->y_ppem || font->num_coords)
301
+ *y += (this+yDeviceTable).get_y_delta (font, c->var_store);
302
+ }
303
+
304
+ inline bool sanitize (hb_sanitize_context_t *c) const
305
+ {
306
+ TRACE_SANITIZE (this);
307
+ return_trace (c->check_struct (this) && xDeviceTable.sanitize (c, this) && yDeviceTable.sanitize (c, this));
308
+ }
309
+
310
+ protected:
311
+ HBUINT16 format; /* Format identifier--format = 3 */
312
+ FWORD xCoordinate; /* Horizontal value--in design units */
313
+ FWORD yCoordinate; /* Vertical value--in design units */
314
+ OffsetTo<Device>
315
+ xDeviceTable; /* Offset to Device table for X
316
+ * coordinate-- from beginning of
317
+ * Anchor table (may be NULL) */
318
+ OffsetTo<Device>
319
+ yDeviceTable; /* Offset to Device table for Y
320
+ * coordinate-- from beginning of
321
+ * Anchor table (may be NULL) */
322
+ public:
323
+ DEFINE_SIZE_STATIC (10);
324
+ };
325
+
326
+ struct Anchor
327
+ {
328
+ inline void get_anchor (hb_ot_apply_context_t *c, hb_codepoint_t glyph_id,
329
+ float *x, float *y) const
330
+ {
331
+ *x = *y = 0;
332
+ switch (u.format) {
333
+ case 1: u.format1.get_anchor (c, glyph_id, x, y); return;
334
+ case 2: u.format2.get_anchor (c, glyph_id, x, y); return;
335
+ case 3: u.format3.get_anchor (c, glyph_id, x, y); return;
336
+ default: return;
337
+ }
338
+ }
339
+
340
+ inline bool sanitize (hb_sanitize_context_t *c) const
341
+ {
342
+ TRACE_SANITIZE (this);
343
+ if (!u.format.sanitize (c)) return_trace (false);
344
+ switch (u.format) {
345
+ case 1: return_trace (u.format1.sanitize (c));
346
+ case 2: return_trace (u.format2.sanitize (c));
347
+ case 3: return_trace (u.format3.sanitize (c));
348
+ default:return_trace (true);
349
+ }
350
+ }
351
+
352
+ protected:
353
+ union {
354
+ HBUINT16 format; /* Format identifier */
355
+ AnchorFormat1 format1;
356
+ AnchorFormat2 format2;
357
+ AnchorFormat3 format3;
358
+ } u;
359
+ public:
360
+ DEFINE_SIZE_UNION (2, format);
361
+ };
362
+
363
+
364
+ struct AnchorMatrix
365
+ {
366
+ inline const Anchor& get_anchor (unsigned int row, unsigned int col, unsigned int cols, bool *found) const {
367
+ *found = false;
368
+ if (unlikely (row >= rows || col >= cols)) return Null(Anchor);
369
+ *found = !matrixZ[row * cols + col].is_null ();
370
+ return this+matrixZ[row * cols + col];
371
+ }
372
+
373
+ inline bool sanitize (hb_sanitize_context_t *c, unsigned int cols) const
374
+ {
375
+ TRACE_SANITIZE (this);
376
+ if (!c->check_struct (this)) return_trace (false);
377
+ if (unlikely (_hb_unsigned_int_mul_overflows (rows, cols))) return_trace (false);
378
+ unsigned int count = rows * cols;
379
+ if (!c->check_array (matrixZ, matrixZ[0].static_size, count)) return_trace (false);
380
+ for (unsigned int i = 0; i < count; i++)
381
+ if (!matrixZ[i].sanitize (c, this)) return_trace (false);
382
+ return_trace (true);
383
+ }
384
+
385
+ HBUINT16 rows; /* Number of rows */
386
+ protected:
387
+ OffsetTo<Anchor>
388
+ matrixZ[VAR]; /* Matrix of offsets to Anchor tables--
389
+ * from beginning of AnchorMatrix table */
390
+ public:
391
+ DEFINE_SIZE_ARRAY (2, matrixZ);
392
+ };
393
+
394
+
395
+ struct MarkRecord
396
+ {
397
+ friend struct MarkArray;
398
+
399
+ inline bool sanitize (hb_sanitize_context_t *c, const void *base) const
400
+ {
401
+ TRACE_SANITIZE (this);
402
+ return_trace (c->check_struct (this) && markAnchor.sanitize (c, base));
403
+ }
404
+
405
+ protected:
406
+ HBUINT16 klass; /* Class defined for this mark */
407
+ OffsetTo<Anchor>
408
+ markAnchor; /* Offset to Anchor table--from
409
+ * beginning of MarkArray table */
410
+ public:
411
+ DEFINE_SIZE_STATIC (4);
412
+ };
413
+
414
+ struct MarkArray : ArrayOf<MarkRecord> /* Array of MarkRecords--in Coverage order */
415
+ {
416
+ inline bool apply (hb_ot_apply_context_t *c,
417
+ unsigned int mark_index, unsigned int glyph_index,
418
+ const AnchorMatrix &anchors, unsigned int class_count,
419
+ unsigned int glyph_pos) const
420
+ {
421
+ TRACE_APPLY (this);
422
+ hb_buffer_t *buffer = c->buffer;
423
+ const MarkRecord &record = ArrayOf<MarkRecord>::operator[](mark_index);
424
+ unsigned int mark_class = record.klass;
425
+
426
+ const Anchor& mark_anchor = this + record.markAnchor;
427
+ bool found;
428
+ const Anchor& glyph_anchor = anchors.get_anchor (glyph_index, mark_class, class_count, &found);
429
+ /* If this subtable doesn't have an anchor for this base and this class,
430
+ * return false such that the subsequent subtables have a chance at it. */
431
+ if (unlikely (!found)) return_trace (false);
432
+
433
+ float mark_x, mark_y, base_x, base_y;
434
+
435
+ buffer->unsafe_to_break (glyph_pos, buffer->idx);
436
+ mark_anchor.get_anchor (c, buffer->cur().codepoint, &mark_x, &mark_y);
437
+ glyph_anchor.get_anchor (c, buffer->info[glyph_pos].codepoint, &base_x, &base_y);
438
+
439
+ hb_glyph_position_t &o = buffer->cur_pos();
440
+ o.x_offset = round (base_x - mark_x);
441
+ o.y_offset = round (base_y - mark_y);
442
+ o.attach_type() = ATTACH_TYPE_MARK;
443
+ o.attach_chain() = (int) glyph_pos - (int) buffer->idx;
444
+ buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_GPOS_ATTACHMENT;
445
+
446
+ buffer->idx++;
447
+ return_trace (true);
448
+ }
449
+
450
+ inline bool sanitize (hb_sanitize_context_t *c) const
451
+ {
452
+ TRACE_SANITIZE (this);
453
+ return_trace (ArrayOf<MarkRecord>::sanitize (c, this));
454
+ }
455
+ };
456
+
457
+
458
+ /* Lookups */
459
+
460
+ struct SinglePosFormat1
461
+ {
462
+ inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
463
+ {
464
+ TRACE_COLLECT_GLYPHS (this);
465
+ if (unlikely (!(this+coverage).add_coverage (c->input))) return;
466
+ }
467
+
468
+ inline const Coverage &get_coverage (void) const
469
+ {
470
+ return this+coverage;
471
+ }
472
+
473
+ inline bool apply (hb_ot_apply_context_t *c) const
474
+ {
475
+ TRACE_APPLY (this);
476
+ hb_buffer_t *buffer = c->buffer;
477
+ unsigned int index = (this+coverage).get_coverage (buffer->cur().codepoint);
478
+ if (likely (index == NOT_COVERED)) return_trace (false);
479
+
480
+ valueFormat.apply_value (c, this, values, buffer->cur_pos());
481
+
482
+ buffer->idx++;
483
+ return_trace (true);
484
+ }
485
+
486
+ inline bool sanitize (hb_sanitize_context_t *c) const
487
+ {
488
+ TRACE_SANITIZE (this);
489
+ return_trace (c->check_struct (this) &&
490
+ coverage.sanitize (c, this) &&
491
+ valueFormat.sanitize_value (c, this, values));
492
+ }
493
+
494
+ protected:
495
+ HBUINT16 format; /* Format identifier--format = 1 */
496
+ OffsetTo<Coverage>
497
+ coverage; /* Offset to Coverage table--from
498
+ * beginning of subtable */
499
+ ValueFormat valueFormat; /* Defines the types of data in the
500
+ * ValueRecord */
501
+ ValueRecord values; /* Defines positioning
502
+ * value(s)--applied to all glyphs in
503
+ * the Coverage table */
504
+ public:
505
+ DEFINE_SIZE_ARRAY (6, values);
506
+ };
507
+
508
+ struct SinglePosFormat2
509
+ {
510
+ inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
511
+ {
512
+ TRACE_COLLECT_GLYPHS (this);
513
+ if (unlikely (!(this+coverage).add_coverage (c->input))) return;
514
+ }
515
+
516
+ inline const Coverage &get_coverage (void) const
517
+ {
518
+ return this+coverage;
519
+ }
520
+
521
+ inline bool apply (hb_ot_apply_context_t *c) const
522
+ {
523
+ TRACE_APPLY (this);
524
+ hb_buffer_t *buffer = c->buffer;
525
+ unsigned int index = (this+coverage).get_coverage (buffer->cur().codepoint);
526
+ if (likely (index == NOT_COVERED)) return_trace (false);
527
+
528
+ if (likely (index >= valueCount)) return_trace (false);
529
+
530
+ valueFormat.apply_value (c, this,
531
+ &values[index * valueFormat.get_len ()],
532
+ buffer->cur_pos());
533
+
534
+ buffer->idx++;
535
+ return_trace (true);
536
+ }
537
+
538
+ inline bool sanitize (hb_sanitize_context_t *c) const
539
+ {
540
+ TRACE_SANITIZE (this);
541
+ return_trace (c->check_struct (this) &&
542
+ coverage.sanitize (c, this) &&
543
+ valueFormat.sanitize_values (c, this, values, valueCount));
544
+ }
545
+
546
+ protected:
547
+ HBUINT16 format; /* Format identifier--format = 2 */
548
+ OffsetTo<Coverage>
549
+ coverage; /* Offset to Coverage table--from
550
+ * beginning of subtable */
551
+ ValueFormat valueFormat; /* Defines the types of data in the
552
+ * ValueRecord */
553
+ HBUINT16 valueCount; /* Number of ValueRecords */
554
+ ValueRecord values; /* Array of ValueRecords--positioning
555
+ * values applied to glyphs */
556
+ public:
557
+ DEFINE_SIZE_ARRAY (8, values);
558
+ };
559
+
560
+ struct SinglePos
561
+ {
562
+ template <typename context_t>
563
+ inline typename context_t::return_t dispatch (context_t *c) const
564
+ {
565
+ TRACE_DISPATCH (this, u.format);
566
+ if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
567
+ switch (u.format) {
568
+ case 1: return_trace (c->dispatch (u.format1));
569
+ case 2: return_trace (c->dispatch (u.format2));
570
+ default:return_trace (c->default_return_value ());
571
+ }
572
+ }
573
+
574
+ protected:
575
+ union {
576
+ HBUINT16 format; /* Format identifier */
577
+ SinglePosFormat1 format1;
578
+ SinglePosFormat2 format2;
579
+ } u;
580
+ };
581
+
582
+
583
+ struct PairValueRecord
584
+ {
585
+ friend struct PairSet;
586
+
587
+ protected:
588
+ GlyphID secondGlyph; /* GlyphID of second glyph in the
589
+ * pair--first glyph is listed in the
590
+ * Coverage table */
591
+ ValueRecord values; /* Positioning data for the first glyph
592
+ * followed by for second glyph */
593
+ public:
594
+ DEFINE_SIZE_ARRAY (2, values);
595
+ };
596
+
597
+ struct PairSet
598
+ {
599
+ friend struct PairPosFormat1;
600
+
601
+ inline void collect_glyphs (hb_collect_glyphs_context_t *c,
602
+ const ValueFormat *valueFormats) const
603
+ {
604
+ TRACE_COLLECT_GLYPHS (this);
605
+ unsigned int len1 = valueFormats[0].get_len ();
606
+ unsigned int len2 = valueFormats[1].get_len ();
607
+ unsigned int record_size = HBUINT16::static_size * (1 + len1 + len2);
608
+
609
+ const PairValueRecord *record = CastP<PairValueRecord> (arrayZ);
610
+ c->input->add_array (&record->secondGlyph, len, record_size);
611
+ }
612
+
613
+ inline bool apply (hb_ot_apply_context_t *c,
614
+ const ValueFormat *valueFormats,
615
+ unsigned int pos) const
616
+ {
617
+ TRACE_APPLY (this);
618
+ hb_buffer_t *buffer = c->buffer;
619
+ unsigned int len1 = valueFormats[0].get_len ();
620
+ unsigned int len2 = valueFormats[1].get_len ();
621
+ unsigned int record_size = HBUINT16::static_size * (1 + len1 + len2);
622
+
623
+ const PairValueRecord *record_array = CastP<PairValueRecord> (arrayZ);
624
+ unsigned int count = len;
625
+
626
+ /* Hand-coded bsearch. */
627
+ if (unlikely (!count))
628
+ return_trace (false);
629
+ hb_codepoint_t x = buffer->info[pos].codepoint;
630
+ int min = 0, max = (int) count - 1;
631
+ while (min <= max)
632
+ {
633
+ int mid = (min + max) / 2;
634
+ const PairValueRecord *record = &StructAtOffset<PairValueRecord> (record_array, record_size * mid);
635
+ hb_codepoint_t mid_x = record->secondGlyph;
636
+ if (x < mid_x)
637
+ max = mid - 1;
638
+ else if (x > mid_x)
639
+ min = mid + 1;
640
+ else
641
+ {
642
+ buffer->unsafe_to_break (buffer->idx, pos + 1);
643
+ valueFormats[0].apply_value (c, this, &record->values[0], buffer->cur_pos());
644
+ valueFormats[1].apply_value (c, this, &record->values[len1], buffer->pos[pos]);
645
+ if (len2)
646
+ pos++;
647
+ buffer->idx = pos;
648
+ return_trace (true);
649
+ }
650
+ }
651
+
652
+ return_trace (false);
653
+ }
654
+
655
+ struct sanitize_closure_t {
656
+ const void *base;
657
+ const ValueFormat *valueFormats;
658
+ unsigned int len1; /* valueFormats[0].get_len() */
659
+ unsigned int stride; /* 1 + len1 + len2 */
660
+ };
661
+
662
+ inline bool sanitize (hb_sanitize_context_t *c, const sanitize_closure_t *closure) const
663
+ {
664
+ TRACE_SANITIZE (this);
665
+ if (!(c->check_struct (this)
666
+ && c->check_array (arrayZ, HBUINT16::static_size * closure->stride, len))) return_trace (false);
667
+
668
+ unsigned int count = len;
669
+ const PairValueRecord *record = CastP<PairValueRecord> (arrayZ);
670
+ return_trace (closure->valueFormats[0].sanitize_values_stride_unsafe (c, closure->base, &record->values[0], count, closure->stride) &&
671
+ closure->valueFormats[1].sanitize_values_stride_unsafe (c, closure->base, &record->values[closure->len1], count, closure->stride));
672
+ }
673
+
674
+ protected:
675
+ HBUINT16 len; /* Number of PairValueRecords */
676
+ HBUINT16 arrayZ[VAR]; /* Array of PairValueRecords--ordered
677
+ * by GlyphID of the second glyph */
678
+ public:
679
+ DEFINE_SIZE_ARRAY (2, arrayZ);
680
+ };
681
+
682
+ struct PairPosFormat1
683
+ {
684
+ inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
685
+ {
686
+ TRACE_COLLECT_GLYPHS (this);
687
+ if (unlikely (!(this+coverage).add_coverage (c->input))) return;
688
+ unsigned int count = pairSet.len;
689
+ for (unsigned int i = 0; i < count; i++)
690
+ (this+pairSet[i]).collect_glyphs (c, valueFormat);
691
+ }
692
+
693
+ inline const Coverage &get_coverage (void) const
694
+ {
695
+ return this+coverage;
696
+ }
697
+
698
+ inline bool apply (hb_ot_apply_context_t *c) const
699
+ {
700
+ TRACE_APPLY (this);
701
+ hb_buffer_t *buffer = c->buffer;
702
+ unsigned int index = (this+coverage).get_coverage (buffer->cur().codepoint);
703
+ if (likely (index == NOT_COVERED)) return_trace (false);
704
+
705
+ hb_ot_apply_context_t::skipping_iterator_t &skippy_iter = c->iter_input;
706
+ skippy_iter.reset (buffer->idx, 1);
707
+ if (!skippy_iter.next ()) return_trace (false);
708
+
709
+ return_trace ((this+pairSet[index]).apply (c, valueFormat, skippy_iter.idx));
710
+ }
711
+
712
+ inline bool sanitize (hb_sanitize_context_t *c) const
713
+ {
714
+ TRACE_SANITIZE (this);
715
+
716
+ if (!c->check_struct (this)) return_trace (false);
717
+
718
+ unsigned int len1 = valueFormat[0].get_len ();
719
+ unsigned int len2 = valueFormat[1].get_len ();
720
+ PairSet::sanitize_closure_t closure = {
721
+ this,
722
+ valueFormat,
723
+ len1,
724
+ 1 + len1 + len2
725
+ };
726
+
727
+ return_trace (coverage.sanitize (c, this) && pairSet.sanitize (c, this, &closure));
728
+ }
729
+
730
+ protected:
731
+ HBUINT16 format; /* Format identifier--format = 1 */
732
+ OffsetTo<Coverage>
733
+ coverage; /* Offset to Coverage table--from
734
+ * beginning of subtable */
735
+ ValueFormat valueFormat[2]; /* [0] Defines the types of data in
736
+ * ValueRecord1--for the first glyph
737
+ * in the pair--may be zero (0) */
738
+ /* [1] Defines the types of data in
739
+ * ValueRecord2--for the second glyph
740
+ * in the pair--may be zero (0) */
741
+ OffsetArrayOf<PairSet>
742
+ pairSet; /* Array of PairSet tables
743
+ * ordered by Coverage Index */
744
+ public:
745
+ DEFINE_SIZE_ARRAY (10, pairSet);
746
+ };
747
+
748
+ struct PairPosFormat2
749
+ {
750
+ inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
751
+ {
752
+ TRACE_COLLECT_GLYPHS (this);
753
+ if (unlikely (!(this+coverage).add_coverage (c->input))) return;
754
+ if (unlikely (!(this+classDef2).add_coverage (c->input))) return;
755
+ }
756
+
757
+ inline const Coverage &get_coverage (void) const
758
+ {
759
+ return this+coverage;
760
+ }
761
+
762
+ inline bool apply (hb_ot_apply_context_t *c) const
763
+ {
764
+ TRACE_APPLY (this);
765
+ hb_buffer_t *buffer = c->buffer;
766
+ unsigned int index = (this+coverage).get_coverage (buffer->cur().codepoint);
767
+ if (likely (index == NOT_COVERED)) return_trace (false);
768
+
769
+ hb_ot_apply_context_t::skipping_iterator_t &skippy_iter = c->iter_input;
770
+ skippy_iter.reset (buffer->idx, 1);
771
+ if (!skippy_iter.next ()) return_trace (false);
772
+
773
+ unsigned int len1 = valueFormat1.get_len ();
774
+ unsigned int len2 = valueFormat2.get_len ();
775
+ unsigned int record_len = len1 + len2;
776
+
777
+ unsigned int klass1 = (this+classDef1).get_class (buffer->cur().codepoint);
778
+ unsigned int klass2 = (this+classDef2).get_class (buffer->info[skippy_iter.idx].codepoint);
779
+ if (unlikely (klass1 >= class1Count || klass2 >= class2Count)) return_trace (false);
780
+
781
+ buffer->unsafe_to_break (buffer->idx, skippy_iter.idx + 1);
782
+ const Value *v = &values[record_len * (klass1 * class2Count + klass2)];
783
+ valueFormat1.apply_value (c, this, v, buffer->cur_pos());
784
+ valueFormat2.apply_value (c, this, v + len1, buffer->pos[skippy_iter.idx]);
785
+
786
+ buffer->idx = skippy_iter.idx;
787
+ if (len2)
788
+ buffer->idx++;
789
+
790
+ return_trace (true);
791
+ }
792
+
793
+ inline bool sanitize (hb_sanitize_context_t *c) const
794
+ {
795
+ TRACE_SANITIZE (this);
796
+ if (!(c->check_struct (this)
797
+ && coverage.sanitize (c, this)
798
+ && classDef1.sanitize (c, this)
799
+ && classDef2.sanitize (c, this))) return_trace (false);
800
+
801
+ unsigned int len1 = valueFormat1.get_len ();
802
+ unsigned int len2 = valueFormat2.get_len ();
803
+ unsigned int stride = len1 + len2;
804
+ unsigned int record_size = valueFormat1.get_size () + valueFormat2.get_size ();
805
+ unsigned int count = (unsigned int) class1Count * (unsigned int) class2Count;
806
+ return_trace (c->check_array (values, record_size, count) &&
807
+ valueFormat1.sanitize_values_stride_unsafe (c, this, &values[0], count, stride) &&
808
+ valueFormat2.sanitize_values_stride_unsafe (c, this, &values[len1], count, stride));
809
+ }
810
+
811
+ protected:
812
+ HBUINT16 format; /* Format identifier--format = 2 */
813
+ OffsetTo<Coverage>
814
+ coverage; /* Offset to Coverage table--from
815
+ * beginning of subtable */
816
+ ValueFormat valueFormat1; /* ValueRecord definition--for the
817
+ * first glyph of the pair--may be zero
818
+ * (0) */
819
+ ValueFormat valueFormat2; /* ValueRecord definition--for the
820
+ * second glyph of the pair--may be
821
+ * zero (0) */
822
+ OffsetTo<ClassDef>
823
+ classDef1; /* Offset to ClassDef table--from
824
+ * beginning of PairPos subtable--for
825
+ * the first glyph of the pair */
826
+ OffsetTo<ClassDef>
827
+ classDef2; /* Offset to ClassDef table--from
828
+ * beginning of PairPos subtable--for
829
+ * the second glyph of the pair */
830
+ HBUINT16 class1Count; /* Number of classes in ClassDef1
831
+ * table--includes Class0 */
832
+ HBUINT16 class2Count; /* Number of classes in ClassDef2
833
+ * table--includes Class0 */
834
+ ValueRecord values; /* Matrix of value pairs:
835
+ * class1-major, class2-minor,
836
+ * Each entry has value1 and value2 */
837
+ public:
838
+ DEFINE_SIZE_ARRAY (16, values);
839
+ };
840
+
841
+ struct PairPos
842
+ {
843
+ template <typename context_t>
844
+ inline typename context_t::return_t dispatch (context_t *c) const
845
+ {
846
+ TRACE_DISPATCH (this, u.format);
847
+ if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
848
+ switch (u.format) {
849
+ case 1: return_trace (c->dispatch (u.format1));
850
+ case 2: return_trace (c->dispatch (u.format2));
851
+ default:return_trace (c->default_return_value ());
852
+ }
853
+ }
854
+
855
+ protected:
856
+ union {
857
+ HBUINT16 format; /* Format identifier */
858
+ PairPosFormat1 format1;
859
+ PairPosFormat2 format2;
860
+ } u;
861
+ };
862
+
863
+
864
+ struct EntryExitRecord
865
+ {
866
+ friend struct CursivePosFormat1;
867
+
868
+ inline bool sanitize (hb_sanitize_context_t *c, const void *base) const
869
+ {
870
+ TRACE_SANITIZE (this);
871
+ return_trace (entryAnchor.sanitize (c, base) && exitAnchor.sanitize (c, base));
872
+ }
873
+
874
+ protected:
875
+ OffsetTo<Anchor>
876
+ entryAnchor; /* Offset to EntryAnchor table--from
877
+ * beginning of CursivePos
878
+ * subtable--may be NULL */
879
+ OffsetTo<Anchor>
880
+ exitAnchor; /* Offset to ExitAnchor table--from
881
+ * beginning of CursivePos
882
+ * subtable--may be NULL */
883
+ public:
884
+ DEFINE_SIZE_STATIC (4);
885
+ };
886
+
887
+ static void
888
+ reverse_cursive_minor_offset (hb_glyph_position_t *pos, unsigned int i, hb_direction_t direction, unsigned int new_parent);
889
+
890
+ struct CursivePosFormat1
891
+ {
892
+ inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
893
+ {
894
+ TRACE_COLLECT_GLYPHS (this);
895
+ if (unlikely (!(this+coverage).add_coverage (c->input))) return;
896
+ }
897
+
898
+ inline const Coverage &get_coverage (void) const
899
+ {
900
+ return this+coverage;
901
+ }
902
+
903
+ inline bool apply (hb_ot_apply_context_t *c) const
904
+ {
905
+ TRACE_APPLY (this);
906
+ hb_buffer_t *buffer = c->buffer;
907
+
908
+ const EntryExitRecord &this_record = entryExitRecord[(this+coverage).get_coverage (buffer->cur().codepoint)];
909
+ if (!this_record.exitAnchor) return_trace (false);
910
+
911
+ hb_ot_apply_context_t::skipping_iterator_t &skippy_iter = c->iter_input;
912
+ skippy_iter.reset (buffer->idx, 1);
913
+ if (!skippy_iter.next ()) return_trace (false);
914
+
915
+ const EntryExitRecord &next_record = entryExitRecord[(this+coverage).get_coverage (buffer->info[skippy_iter.idx].codepoint)];
916
+ if (!next_record.entryAnchor) return_trace (false);
917
+
918
+ unsigned int i = buffer->idx;
919
+ unsigned int j = skippy_iter.idx;
920
+
921
+ buffer->unsafe_to_break (i, j);
922
+ float entry_x, entry_y, exit_x, exit_y;
923
+ (this+this_record.exitAnchor).get_anchor (c, buffer->info[i].codepoint, &exit_x, &exit_y);
924
+ (this+next_record.entryAnchor).get_anchor (c, buffer->info[j].codepoint, &entry_x, &entry_y);
925
+
926
+ hb_glyph_position_t *pos = buffer->pos;
927
+
928
+ hb_position_t d;
929
+ /* Main-direction adjustment */
930
+ switch (c->direction) {
931
+ case HB_DIRECTION_LTR:
932
+ pos[i].x_advance = round (exit_x) + pos[i].x_offset;
933
+
934
+ d = round (entry_x) + pos[j].x_offset;
935
+ pos[j].x_advance -= d;
936
+ pos[j].x_offset -= d;
937
+ break;
938
+ case HB_DIRECTION_RTL:
939
+ d = round (exit_x) + pos[i].x_offset;
940
+ pos[i].x_advance -= d;
941
+ pos[i].x_offset -= d;
942
+
943
+ pos[j].x_advance = round (entry_x) + pos[j].x_offset;
944
+ break;
945
+ case HB_DIRECTION_TTB:
946
+ pos[i].y_advance = round (exit_y) + pos[i].y_offset;
947
+
948
+ d = round (entry_y) + pos[j].y_offset;
949
+ pos[j].y_advance -= d;
950
+ pos[j].y_offset -= d;
951
+ break;
952
+ case HB_DIRECTION_BTT:
953
+ d = round (exit_y) + pos[i].y_offset;
954
+ pos[i].y_advance -= d;
955
+ pos[i].y_offset -= d;
956
+
957
+ pos[j].y_advance = round (entry_y);
958
+ break;
959
+ case HB_DIRECTION_INVALID:
960
+ default:
961
+ break;
962
+ }
963
+
964
+ /* Cross-direction adjustment */
965
+
966
+ /* We attach child to parent (think graph theory and rooted trees whereas
967
+ * the root stays on baseline and each node aligns itself against its
968
+ * parent.
969
+ *
970
+ * Optimize things for the case of RightToLeft, as that's most common in
971
+ * Arabinc. */
972
+ unsigned int child = i;
973
+ unsigned int parent = j;
974
+ hb_position_t x_offset = entry_x - exit_x;
975
+ hb_position_t y_offset = entry_y - exit_y;
976
+ if (!(c->lookup_props & LookupFlag::RightToLeft))
977
+ {
978
+ unsigned int k = child;
979
+ child = parent;
980
+ parent = k;
981
+ x_offset = -x_offset;
982
+ y_offset = -y_offset;
983
+ }
984
+
985
+ /* If child was already connected to someone else, walk through its old
986
+ * chain and reverse the link direction, such that the whole tree of its
987
+ * previous connection now attaches to new parent. Watch out for case
988
+ * where new parent is on the path from old chain...
989
+ */
990
+ reverse_cursive_minor_offset (pos, child, c->direction, parent);
991
+
992
+ pos[child].attach_type() = ATTACH_TYPE_CURSIVE;
993
+ pos[child].attach_chain() = (int) parent - (int) child;
994
+ buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_GPOS_ATTACHMENT;
995
+ if (likely (HB_DIRECTION_IS_HORIZONTAL (c->direction)))
996
+ pos[child].y_offset = y_offset;
997
+ else
998
+ pos[child].x_offset = x_offset;
999
+
1000
+ buffer->idx = j;
1001
+ return_trace (true);
1002
+ }
1003
+
1004
+ inline bool sanitize (hb_sanitize_context_t *c) const
1005
+ {
1006
+ TRACE_SANITIZE (this);
1007
+ return_trace (coverage.sanitize (c, this) && entryExitRecord.sanitize (c, this));
1008
+ }
1009
+
1010
+ protected:
1011
+ HBUINT16 format; /* Format identifier--format = 1 */
1012
+ OffsetTo<Coverage>
1013
+ coverage; /* Offset to Coverage table--from
1014
+ * beginning of subtable */
1015
+ ArrayOf<EntryExitRecord>
1016
+ entryExitRecord; /* Array of EntryExit records--in
1017
+ * Coverage Index order */
1018
+ public:
1019
+ DEFINE_SIZE_ARRAY (6, entryExitRecord);
1020
+ };
1021
+
1022
+ struct CursivePos
1023
+ {
1024
+ template <typename context_t>
1025
+ inline typename context_t::return_t dispatch (context_t *c) const
1026
+ {
1027
+ TRACE_DISPATCH (this, u.format);
1028
+ if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
1029
+ switch (u.format) {
1030
+ case 1: return_trace (c->dispatch (u.format1));
1031
+ default:return_trace (c->default_return_value ());
1032
+ }
1033
+ }
1034
+
1035
+ protected:
1036
+ union {
1037
+ HBUINT16 format; /* Format identifier */
1038
+ CursivePosFormat1 format1;
1039
+ } u;
1040
+ };
1041
+
1042
+
1043
+ typedef AnchorMatrix BaseArray; /* base-major--
1044
+ * in order of BaseCoverage Index--,
1045
+ * mark-minor--
1046
+ * ordered by class--zero-based. */
1047
+
1048
+ struct MarkBasePosFormat1
1049
+ {
1050
+ inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
1051
+ {
1052
+ TRACE_COLLECT_GLYPHS (this);
1053
+ if (unlikely (!(this+markCoverage).add_coverage (c->input))) return;
1054
+ if (unlikely (!(this+baseCoverage).add_coverage (c->input))) return;
1055
+ }
1056
+
1057
+ inline const Coverage &get_coverage (void) const
1058
+ {
1059
+ return this+markCoverage;
1060
+ }
1061
+
1062
+ inline bool apply (hb_ot_apply_context_t *c) const
1063
+ {
1064
+ TRACE_APPLY (this);
1065
+ hb_buffer_t *buffer = c->buffer;
1066
+ unsigned int mark_index = (this+markCoverage).get_coverage (buffer->cur().codepoint);
1067
+ if (likely (mark_index == NOT_COVERED)) return_trace (false);
1068
+
1069
+ /* Now we search backwards for a non-mark glyph */
1070
+ hb_ot_apply_context_t::skipping_iterator_t &skippy_iter = c->iter_input;
1071
+ skippy_iter.reset (buffer->idx, 1);
1072
+ skippy_iter.set_lookup_props (LookupFlag::IgnoreMarks);
1073
+ do {
1074
+ if (!skippy_iter.prev ()) return_trace (false);
1075
+ /* We only want to attach to the first of a MultipleSubst sequence.
1076
+ * https://github.com/harfbuzz/harfbuzz/issues/740
1077
+ * Reject others. */
1078
+ if (!_hb_glyph_info_multiplied (&buffer->info[skippy_iter.idx]) ||
1079
+ 0 == _hb_glyph_info_get_lig_comp (&buffer->info[skippy_iter.idx]) ||
1080
+ (skippy_iter.idx == 0 ||
1081
+ _hb_glyph_info_get_lig_id (&buffer->info[skippy_iter.idx]) !=
1082
+ _hb_glyph_info_get_lig_id (&buffer->info[skippy_iter.idx - 1]) ||
1083
+ _hb_glyph_info_get_lig_comp (&buffer->info[skippy_iter.idx]) !=
1084
+ _hb_glyph_info_get_lig_comp (&buffer->info[skippy_iter.idx - 1]) + 1
1085
+ ))
1086
+ break;
1087
+ skippy_iter.reject ();
1088
+ } while (1);
1089
+
1090
+ /* Checking that matched glyph is actually a base glyph by GDEF is too strong; disabled */
1091
+ //if (!_hb_glyph_info_is_base_glyph (&buffer->info[skippy_iter.idx])) { return_trace (false); }
1092
+
1093
+ unsigned int base_index = (this+baseCoverage).get_coverage (buffer->info[skippy_iter.idx].codepoint);
1094
+ if (base_index == NOT_COVERED) return_trace (false);
1095
+
1096
+ return_trace ((this+markArray).apply (c, mark_index, base_index, this+baseArray, classCount, skippy_iter.idx));
1097
+ }
1098
+
1099
+ inline bool sanitize (hb_sanitize_context_t *c) const
1100
+ {
1101
+ TRACE_SANITIZE (this);
1102
+ return_trace (c->check_struct (this) &&
1103
+ markCoverage.sanitize (c, this) &&
1104
+ baseCoverage.sanitize (c, this) &&
1105
+ markArray.sanitize (c, this) &&
1106
+ baseArray.sanitize (c, this, (unsigned int) classCount));
1107
+ }
1108
+
1109
+ protected:
1110
+ HBUINT16 format; /* Format identifier--format = 1 */
1111
+ OffsetTo<Coverage>
1112
+ markCoverage; /* Offset to MarkCoverage table--from
1113
+ * beginning of MarkBasePos subtable */
1114
+ OffsetTo<Coverage>
1115
+ baseCoverage; /* Offset to BaseCoverage table--from
1116
+ * beginning of MarkBasePos subtable */
1117
+ HBUINT16 classCount; /* Number of classes defined for marks */
1118
+ OffsetTo<MarkArray>
1119
+ markArray; /* Offset to MarkArray table--from
1120
+ * beginning of MarkBasePos subtable */
1121
+ OffsetTo<BaseArray>
1122
+ baseArray; /* Offset to BaseArray table--from
1123
+ * beginning of MarkBasePos subtable */
1124
+ public:
1125
+ DEFINE_SIZE_STATIC (12);
1126
+ };
1127
+
1128
+ struct MarkBasePos
1129
+ {
1130
+ template <typename context_t>
1131
+ inline typename context_t::return_t dispatch (context_t *c) const
1132
+ {
1133
+ TRACE_DISPATCH (this, u.format);
1134
+ if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
1135
+ switch (u.format) {
1136
+ case 1: return_trace (c->dispatch (u.format1));
1137
+ default:return_trace (c->default_return_value ());
1138
+ }
1139
+ }
1140
+
1141
+ protected:
1142
+ union {
1143
+ HBUINT16 format; /* Format identifier */
1144
+ MarkBasePosFormat1 format1;
1145
+ } u;
1146
+ };
1147
+
1148
+
1149
+ typedef AnchorMatrix LigatureAttach; /* component-major--
1150
+ * in order of writing direction--,
1151
+ * mark-minor--
1152
+ * ordered by class--zero-based. */
1153
+
1154
+ typedef OffsetListOf<LigatureAttach> LigatureArray;
1155
+ /* Array of LigatureAttach
1156
+ * tables ordered by
1157
+ * LigatureCoverage Index */
1158
+
1159
+ struct MarkLigPosFormat1
1160
+ {
1161
+ inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
1162
+ {
1163
+ TRACE_COLLECT_GLYPHS (this);
1164
+ if (unlikely (!(this+markCoverage).add_coverage (c->input))) return;
1165
+ if (unlikely (!(this+ligatureCoverage).add_coverage (c->input))) return;
1166
+ }
1167
+
1168
+ inline const Coverage &get_coverage (void) const
1169
+ {
1170
+ return this+markCoverage;
1171
+ }
1172
+
1173
+ inline bool apply (hb_ot_apply_context_t *c) const
1174
+ {
1175
+ TRACE_APPLY (this);
1176
+ hb_buffer_t *buffer = c->buffer;
1177
+ unsigned int mark_index = (this+markCoverage).get_coverage (buffer->cur().codepoint);
1178
+ if (likely (mark_index == NOT_COVERED)) return_trace (false);
1179
+
1180
+ /* Now we search backwards for a non-mark glyph */
1181
+ hb_ot_apply_context_t::skipping_iterator_t &skippy_iter = c->iter_input;
1182
+ skippy_iter.reset (buffer->idx, 1);
1183
+ skippy_iter.set_lookup_props (LookupFlag::IgnoreMarks);
1184
+ if (!skippy_iter.prev ()) return_trace (false);
1185
+
1186
+ /* Checking that matched glyph is actually a ligature by GDEF is too strong; disabled */
1187
+ //if (!_hb_glyph_info_is_ligature (&buffer->info[skippy_iter.idx])) { return_trace (false); }
1188
+
1189
+ unsigned int j = skippy_iter.idx;
1190
+ unsigned int lig_index = (this+ligatureCoverage).get_coverage (buffer->info[j].codepoint);
1191
+ if (lig_index == NOT_COVERED) return_trace (false);
1192
+
1193
+ const LigatureArray& lig_array = this+ligatureArray;
1194
+ const LigatureAttach& lig_attach = lig_array[lig_index];
1195
+
1196
+ /* Find component to attach to */
1197
+ unsigned int comp_count = lig_attach.rows;
1198
+ if (unlikely (!comp_count)) return_trace (false);
1199
+
1200
+ /* We must now check whether the ligature ID of the current mark glyph
1201
+ * is identical to the ligature ID of the found ligature. If yes, we
1202
+ * can directly use the component index. If not, we attach the mark
1203
+ * glyph to the last component of the ligature. */
1204
+ unsigned int comp_index;
1205
+ unsigned int lig_id = _hb_glyph_info_get_lig_id (&buffer->info[j]);
1206
+ unsigned int mark_id = _hb_glyph_info_get_lig_id (&buffer->cur());
1207
+ unsigned int mark_comp = _hb_glyph_info_get_lig_comp (&buffer->cur());
1208
+ if (lig_id && lig_id == mark_id && mark_comp > 0)
1209
+ comp_index = MIN (comp_count, _hb_glyph_info_get_lig_comp (&buffer->cur())) - 1;
1210
+ else
1211
+ comp_index = comp_count - 1;
1212
+
1213
+ return_trace ((this+markArray).apply (c, mark_index, comp_index, lig_attach, classCount, j));
1214
+ }
1215
+
1216
+ inline bool sanitize (hb_sanitize_context_t *c) const
1217
+ {
1218
+ TRACE_SANITIZE (this);
1219
+ return_trace (c->check_struct (this) &&
1220
+ markCoverage.sanitize (c, this) &&
1221
+ ligatureCoverage.sanitize (c, this) &&
1222
+ markArray.sanitize (c, this) &&
1223
+ ligatureArray.sanitize (c, this, (unsigned int) classCount));
1224
+ }
1225
+
1226
+ protected:
1227
+ HBUINT16 format; /* Format identifier--format = 1 */
1228
+ OffsetTo<Coverage>
1229
+ markCoverage; /* Offset to Mark Coverage table--from
1230
+ * beginning of MarkLigPos subtable */
1231
+ OffsetTo<Coverage>
1232
+ ligatureCoverage; /* Offset to Ligature Coverage
1233
+ * table--from beginning of MarkLigPos
1234
+ * subtable */
1235
+ HBUINT16 classCount; /* Number of defined mark classes */
1236
+ OffsetTo<MarkArray>
1237
+ markArray; /* Offset to MarkArray table--from
1238
+ * beginning of MarkLigPos subtable */
1239
+ OffsetTo<LigatureArray>
1240
+ ligatureArray; /* Offset to LigatureArray table--from
1241
+ * beginning of MarkLigPos subtable */
1242
+ public:
1243
+ DEFINE_SIZE_STATIC (12);
1244
+ };
1245
+
1246
+ struct MarkLigPos
1247
+ {
1248
+ template <typename context_t>
1249
+ inline typename context_t::return_t dispatch (context_t *c) const
1250
+ {
1251
+ TRACE_DISPATCH (this, u.format);
1252
+ if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
1253
+ switch (u.format) {
1254
+ case 1: return_trace (c->dispatch (u.format1));
1255
+ default:return_trace (c->default_return_value ());
1256
+ }
1257
+ }
1258
+
1259
+ protected:
1260
+ union {
1261
+ HBUINT16 format; /* Format identifier */
1262
+ MarkLigPosFormat1 format1;
1263
+ } u;
1264
+ };
1265
+
1266
+
1267
+ typedef AnchorMatrix Mark2Array; /* mark2-major--
1268
+ * in order of Mark2Coverage Index--,
1269
+ * mark1-minor--
1270
+ * ordered by class--zero-based. */
1271
+
1272
+ struct MarkMarkPosFormat1
1273
+ {
1274
+ inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
1275
+ {
1276
+ TRACE_COLLECT_GLYPHS (this);
1277
+ if (unlikely (!(this+mark1Coverage).add_coverage (c->input))) return;
1278
+ if (unlikely (!(this+mark2Coverage).add_coverage (c->input))) return;
1279
+ }
1280
+
1281
+ inline const Coverage &get_coverage (void) const
1282
+ {
1283
+ return this+mark1Coverage;
1284
+ }
1285
+
1286
+ inline bool apply (hb_ot_apply_context_t *c) const
1287
+ {
1288
+ TRACE_APPLY (this);
1289
+ hb_buffer_t *buffer = c->buffer;
1290
+ unsigned int mark1_index = (this+mark1Coverage).get_coverage (buffer->cur().codepoint);
1291
+ if (likely (mark1_index == NOT_COVERED)) return_trace (false);
1292
+
1293
+ /* now we search backwards for a suitable mark glyph until a non-mark glyph */
1294
+ hb_ot_apply_context_t::skipping_iterator_t &skippy_iter = c->iter_input;
1295
+ skippy_iter.reset (buffer->idx, 1);
1296
+ skippy_iter.set_lookup_props (c->lookup_props & ~LookupFlag::IgnoreFlags);
1297
+ if (!skippy_iter.prev ()) return_trace (false);
1298
+
1299
+ if (!_hb_glyph_info_is_mark (&buffer->info[skippy_iter.idx])) { return_trace (false); }
1300
+
1301
+ unsigned int j = skippy_iter.idx;
1302
+
1303
+ unsigned int id1 = _hb_glyph_info_get_lig_id (&buffer->cur());
1304
+ unsigned int id2 = _hb_glyph_info_get_lig_id (&buffer->info[j]);
1305
+ unsigned int comp1 = _hb_glyph_info_get_lig_comp (&buffer->cur());
1306
+ unsigned int comp2 = _hb_glyph_info_get_lig_comp (&buffer->info[j]);
1307
+
1308
+ if (likely (id1 == id2)) {
1309
+ if (id1 == 0) /* Marks belonging to the same base. */
1310
+ goto good;
1311
+ else if (comp1 == comp2) /* Marks belonging to the same ligature component. */
1312
+ goto good;
1313
+ } else {
1314
+ /* If ligature ids don't match, it may be the case that one of the marks
1315
+ * itself is a ligature. In which case match. */
1316
+ if ((id1 > 0 && !comp1) || (id2 > 0 && !comp2))
1317
+ goto good;
1318
+ }
1319
+
1320
+ /* Didn't match. */
1321
+ return_trace (false);
1322
+
1323
+ good:
1324
+ unsigned int mark2_index = (this+mark2Coverage).get_coverage (buffer->info[j].codepoint);
1325
+ if (mark2_index == NOT_COVERED) return_trace (false);
1326
+
1327
+ return_trace ((this+mark1Array).apply (c, mark1_index, mark2_index, this+mark2Array, classCount, j));
1328
+ }
1329
+
1330
+ inline bool sanitize (hb_sanitize_context_t *c) const
1331
+ {
1332
+ TRACE_SANITIZE (this);
1333
+ return_trace (c->check_struct (this) &&
1334
+ mark1Coverage.sanitize (c, this) &&
1335
+ mark2Coverage.sanitize (c, this) &&
1336
+ mark1Array.sanitize (c, this) &&
1337
+ mark2Array.sanitize (c, this, (unsigned int) classCount));
1338
+ }
1339
+
1340
+ protected:
1341
+ HBUINT16 format; /* Format identifier--format = 1 */
1342
+ OffsetTo<Coverage>
1343
+ mark1Coverage; /* Offset to Combining Mark1 Coverage
1344
+ * table--from beginning of MarkMarkPos
1345
+ * subtable */
1346
+ OffsetTo<Coverage>
1347
+ mark2Coverage; /* Offset to Combining Mark2 Coverage
1348
+ * table--from beginning of MarkMarkPos
1349
+ * subtable */
1350
+ HBUINT16 classCount; /* Number of defined mark classes */
1351
+ OffsetTo<MarkArray>
1352
+ mark1Array; /* Offset to Mark1Array table--from
1353
+ * beginning of MarkMarkPos subtable */
1354
+ OffsetTo<Mark2Array>
1355
+ mark2Array; /* Offset to Mark2Array table--from
1356
+ * beginning of MarkMarkPos subtable */
1357
+ public:
1358
+ DEFINE_SIZE_STATIC (12);
1359
+ };
1360
+
1361
+ struct MarkMarkPos
1362
+ {
1363
+ template <typename context_t>
1364
+ inline typename context_t::return_t dispatch (context_t *c) const
1365
+ {
1366
+ TRACE_DISPATCH (this, u.format);
1367
+ if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
1368
+ switch (u.format) {
1369
+ case 1: return_trace (c->dispatch (u.format1));
1370
+ default:return_trace (c->default_return_value ());
1371
+ }
1372
+ }
1373
+
1374
+ protected:
1375
+ union {
1376
+ HBUINT16 format; /* Format identifier */
1377
+ MarkMarkPosFormat1 format1;
1378
+ } u;
1379
+ };
1380
+
1381
+
1382
+ struct ContextPos : Context {};
1383
+
1384
+ struct ChainContextPos : ChainContext {};
1385
+
1386
+ struct ExtensionPos : Extension<ExtensionPos>
1387
+ {
1388
+ typedef struct PosLookupSubTable LookupSubTable;
1389
+ };
1390
+
1391
+
1392
+
1393
+ /*
1394
+ * PosLookup
1395
+ */
1396
+
1397
+
1398
+ struct PosLookupSubTable
1399
+ {
1400
+ friend struct PosLookup;
1401
+
1402
+ enum Type {
1403
+ Single = 1,
1404
+ Pair = 2,
1405
+ Cursive = 3,
1406
+ MarkBase = 4,
1407
+ MarkLig = 5,
1408
+ MarkMark = 6,
1409
+ Context = 7,
1410
+ ChainContext = 8,
1411
+ Extension = 9
1412
+ };
1413
+
1414
+ template <typename context_t>
1415
+ inline typename context_t::return_t dispatch (context_t *c, unsigned int lookup_type) const
1416
+ {
1417
+ TRACE_DISPATCH (this, lookup_type);
1418
+ if (unlikely (!c->may_dispatch (this, &u.sub_format))) return_trace (c->no_dispatch_return_value ());
1419
+ switch (lookup_type) {
1420
+ case Single: return_trace (u.single.dispatch (c));
1421
+ case Pair: return_trace (u.pair.dispatch (c));
1422
+ case Cursive: return_trace (u.cursive.dispatch (c));
1423
+ case MarkBase: return_trace (u.markBase.dispatch (c));
1424
+ case MarkLig: return_trace (u.markLig.dispatch (c));
1425
+ case MarkMark: return_trace (u.markMark.dispatch (c));
1426
+ case Context: return_trace (u.context.dispatch (c));
1427
+ case ChainContext: return_trace (u.chainContext.dispatch (c));
1428
+ case Extension: return_trace (u.extension.dispatch (c));
1429
+ default: return_trace (c->default_return_value ());
1430
+ }
1431
+ }
1432
+
1433
+ protected:
1434
+ union {
1435
+ HBUINT16 sub_format;
1436
+ SinglePos single;
1437
+ PairPos pair;
1438
+ CursivePos cursive;
1439
+ MarkBasePos markBase;
1440
+ MarkLigPos markLig;
1441
+ MarkMarkPos markMark;
1442
+ ContextPos context;
1443
+ ChainContextPos chainContext;
1444
+ ExtensionPos extension;
1445
+ } u;
1446
+ public:
1447
+ DEFINE_SIZE_UNION (2, sub_format);
1448
+ };
1449
+
1450
+
1451
+ struct PosLookup : Lookup
1452
+ {
1453
+ inline const PosLookupSubTable& get_subtable (unsigned int i) const
1454
+ { return Lookup::get_subtable<PosLookupSubTable> (i); }
1455
+
1456
+ inline bool is_reverse (void) const
1457
+ {
1458
+ return false;
1459
+ }
1460
+
1461
+ inline bool apply (hb_ot_apply_context_t *c) const
1462
+ {
1463
+ TRACE_APPLY (this);
1464
+ return_trace (dispatch (c));
1465
+ }
1466
+
1467
+ inline hb_collect_glyphs_context_t::return_t collect_glyphs (hb_collect_glyphs_context_t *c) const
1468
+ {
1469
+ TRACE_COLLECT_GLYPHS (this);
1470
+ return_trace (dispatch (c));
1471
+ }
1472
+
1473
+ template <typename set_t>
1474
+ inline void add_coverage (set_t *glyphs) const
1475
+ {
1476
+ hb_add_coverage_context_t<set_t> c (glyphs);
1477
+ dispatch (&c);
1478
+ }
1479
+
1480
+ static bool apply_recurse_func (hb_ot_apply_context_t *c, unsigned int lookup_index);
1481
+
1482
+ template <typename context_t>
1483
+ static inline typename context_t::return_t dispatch_recurse_func (context_t *c, unsigned int lookup_index);
1484
+
1485
+ template <typename context_t>
1486
+ inline typename context_t::return_t dispatch (context_t *c) const
1487
+ { return Lookup::dispatch<PosLookupSubTable> (c); }
1488
+
1489
+ inline bool sanitize (hb_sanitize_context_t *c) const
1490
+ {
1491
+ TRACE_SANITIZE (this);
1492
+ if (unlikely (!Lookup::sanitize (c))) return_trace (false);
1493
+ return_trace (dispatch (c));
1494
+ }
1495
+ };
1496
+
1497
+ typedef OffsetListOf<PosLookup> PosLookupList;
1498
+
1499
+ /*
1500
+ * GPOS -- The Glyph Positioning Table
1501
+ */
1502
+
1503
+ struct GPOS : GSUBGPOS
1504
+ {
1505
+ static const hb_tag_t tableTag = HB_OT_TAG_GPOS;
1506
+
1507
+ inline const PosLookup& get_lookup (unsigned int i) const
1508
+ { return CastR<PosLookup> (GSUBGPOS::get_lookup (i)); }
1509
+
1510
+ static inline void position_start (hb_font_t *font, hb_buffer_t *buffer);
1511
+ static inline void position_finish_advances (hb_font_t *font, hb_buffer_t *buffer);
1512
+ static inline void position_finish_offsets (hb_font_t *font, hb_buffer_t *buffer);
1513
+
1514
+ inline bool sanitize (hb_sanitize_context_t *c) const
1515
+ {
1516
+ TRACE_SANITIZE (this);
1517
+ if (unlikely (!GSUBGPOS::sanitize (c))) return_trace (false);
1518
+ const OffsetTo<PosLookupList> &list = CastR<OffsetTo<PosLookupList> > (lookupList);
1519
+ return_trace (list.sanitize (c, this));
1520
+ }
1521
+ };
1522
+
1523
+
1524
+ static void
1525
+ reverse_cursive_minor_offset (hb_glyph_position_t *pos, unsigned int i, hb_direction_t direction, unsigned int new_parent)
1526
+ {
1527
+ int chain = pos[i].attach_chain(), type = pos[i].attach_type();
1528
+ if (likely (!chain || 0 == (type & ATTACH_TYPE_CURSIVE)))
1529
+ return;
1530
+
1531
+ pos[i].attach_chain() = 0;
1532
+
1533
+ unsigned int j = (int) i + chain;
1534
+
1535
+ /* Stop if we see new parent in the chain. */
1536
+ if (j == new_parent)
1537
+ return;
1538
+
1539
+ reverse_cursive_minor_offset (pos, j, direction, new_parent);
1540
+
1541
+ if (HB_DIRECTION_IS_HORIZONTAL (direction))
1542
+ pos[j].y_offset = -pos[i].y_offset;
1543
+ else
1544
+ pos[j].x_offset = -pos[i].x_offset;
1545
+
1546
+ pos[j].attach_chain() = -chain;
1547
+ pos[j].attach_type() = type;
1548
+ }
1549
+ static void
1550
+ propagate_attachment_offsets (hb_glyph_position_t *pos, unsigned int i, hb_direction_t direction)
1551
+ {
1552
+ /* Adjusts offsets of attached glyphs (both cursive and mark) to accumulate
1553
+ * offset of glyph they are attached to. */
1554
+ int chain = pos[i].attach_chain(), type = pos[i].attach_type();
1555
+ if (likely (!chain))
1556
+ return;
1557
+
1558
+ unsigned int j = (int) i + chain;
1559
+
1560
+ pos[i].attach_chain() = 0;
1561
+
1562
+ propagate_attachment_offsets (pos, j, direction);
1563
+
1564
+ assert (!!(type & ATTACH_TYPE_MARK) ^ !!(type & ATTACH_TYPE_CURSIVE));
1565
+
1566
+ if (type & ATTACH_TYPE_CURSIVE)
1567
+ {
1568
+ if (HB_DIRECTION_IS_HORIZONTAL (direction))
1569
+ pos[i].y_offset += pos[j].y_offset;
1570
+ else
1571
+ pos[i].x_offset += pos[j].x_offset;
1572
+ }
1573
+ else /*if (type & ATTACH_TYPE_MARK)*/
1574
+ {
1575
+ pos[i].x_offset += pos[j].x_offset;
1576
+ pos[i].y_offset += pos[j].y_offset;
1577
+
1578
+ assert (j < i);
1579
+ if (HB_DIRECTION_IS_FORWARD (direction))
1580
+ for (unsigned int k = j; k < i; k++) {
1581
+ pos[i].x_offset -= pos[k].x_advance;
1582
+ pos[i].y_offset -= pos[k].y_advance;
1583
+ }
1584
+ else
1585
+ for (unsigned int k = j + 1; k < i + 1; k++) {
1586
+ pos[i].x_offset += pos[k].x_advance;
1587
+ pos[i].y_offset += pos[k].y_advance;
1588
+ }
1589
+ }
1590
+ }
1591
+
1592
+ void
1593
+ GPOS::position_start (hb_font_t *font HB_UNUSED, hb_buffer_t *buffer)
1594
+ {
1595
+ unsigned int count = buffer->len;
1596
+ for (unsigned int i = 0; i < count; i++)
1597
+ buffer->pos[i].attach_chain() = buffer->pos[i].attach_type() = 0;
1598
+ }
1599
+
1600
+ void
1601
+ GPOS::position_finish_advances (hb_font_t *font HB_UNUSED, hb_buffer_t *buffer)
1602
+ {
1603
+ //_hb_buffer_assert_gsubgpos_vars (buffer);
1604
+ }
1605
+
1606
+ void
1607
+ GPOS::position_finish_offsets (hb_font_t *font HB_UNUSED, hb_buffer_t *buffer)
1608
+ {
1609
+ _hb_buffer_assert_gsubgpos_vars (buffer);
1610
+
1611
+ unsigned int len;
1612
+ hb_glyph_position_t *pos = hb_buffer_get_glyph_positions (buffer, &len);
1613
+ hb_direction_t direction = buffer->props.direction;
1614
+
1615
+ /* Handle attachments */
1616
+ if (buffer->scratch_flags & HB_BUFFER_SCRATCH_FLAG_HAS_GPOS_ATTACHMENT)
1617
+ for (unsigned int i = 0; i < len; i++)
1618
+ propagate_attachment_offsets (pos, i, direction);
1619
+ }
1620
+
1621
+
1622
+ /* Out-of-class implementation for methods recursing */
1623
+
1624
+ template <typename context_t>
1625
+ /*static*/ inline typename context_t::return_t PosLookup::dispatch_recurse_func (context_t *c, unsigned int lookup_index)
1626
+ {
1627
+ const GPOS &gpos = *(hb_ot_layout_from_face (c->face)->gpos);
1628
+ const PosLookup &l = gpos.get_lookup (lookup_index);
1629
+ return l.dispatch (c);
1630
+ }
1631
+
1632
+ /*static*/ inline bool PosLookup::apply_recurse_func (hb_ot_apply_context_t *c, unsigned int lookup_index)
1633
+ {
1634
+ const GPOS &gpos = *(hb_ot_layout_from_face (c->face)->gpos);
1635
+ const PosLookup &l = gpos.get_lookup (lookup_index);
1636
+ unsigned int saved_lookup_props = c->lookup_props;
1637
+ unsigned int saved_lookup_index = c->lookup_index;
1638
+ c->set_lookup_index (lookup_index);
1639
+ c->set_lookup_props (l.get_props ());
1640
+ bool ret = l.dispatch (c);
1641
+ c->set_lookup_index (saved_lookup_index);
1642
+ c->set_lookup_props (saved_lookup_props);
1643
+ return ret;
1644
+ }
1645
+
1646
+
1647
+ #undef attach_chain
1648
+ #undef attach_type
1649
+
1650
+
1651
+ } /* namespace OT */
1652
+
1653
+
1654
+ #endif /* HB_OT_LAYOUT_GPOS_TABLE_HH */