laag-harfbuzz 1.7.6.1

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