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,1773 @@
1
+ /*
2
+ * Copyright © 2007,2008,2009 Red Hat, Inc.
3
+ * Copyright © 2010,2012 Google, Inc.
4
+ *
5
+ * This is part of HarfBuzz, a text shaping library.
6
+ *
7
+ * Permission is hereby granted, without written agreement and without
8
+ * license or royalty fees, to use, copy, modify, and distribute this
9
+ * software and its documentation for any purpose, provided that the
10
+ * above copyright notice and the following two paragraphs appear in
11
+ * all copies of this software.
12
+ *
13
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
14
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
15
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
16
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
17
+ * DAMAGE.
18
+ *
19
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
20
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
21
+ * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
22
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
23
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
24
+ *
25
+ * Red Hat Author(s): Behdad Esfahbod
26
+ * Google Author(s): Behdad Esfahbod
27
+ */
28
+
29
+ #ifndef HB_OT_LAYOUT_COMMON_PRIVATE_HH
30
+ #define HB_OT_LAYOUT_COMMON_PRIVATE_HH
31
+
32
+ #include "hb-private.hh"
33
+ #include "hb-debug.hh"
34
+ #include "hb-ot-layout-private.hh"
35
+ #include "hb-open-type-private.hh"
36
+ #include "hb-set-private.hh"
37
+
38
+
39
+ #ifndef HB_MAX_NESTING_LEVEL
40
+ #define HB_MAX_NESTING_LEVEL 6
41
+ #endif
42
+ #ifndef HB_MAX_CONTEXT_LENGTH
43
+ #define HB_MAX_CONTEXT_LENGTH 64
44
+ #endif
45
+
46
+
47
+ namespace OT {
48
+
49
+
50
+ #define NOT_COVERED ((unsigned int) -1)
51
+
52
+
53
+
54
+ /*
55
+ *
56
+ * OpenType Layout Common Table Formats
57
+ *
58
+ */
59
+
60
+
61
+ /*
62
+ * Script, ScriptList, LangSys, Feature, FeatureList, Lookup, LookupList
63
+ */
64
+
65
+ template <typename Type>
66
+ struct Record
67
+ {
68
+ inline int cmp (hb_tag_t a) const {
69
+ return tag.cmp (a);
70
+ }
71
+
72
+ struct sanitize_closure_t {
73
+ hb_tag_t tag;
74
+ const void *list_base;
75
+ };
76
+ inline bool sanitize (hb_sanitize_context_t *c, const void *base) const
77
+ {
78
+ TRACE_SANITIZE (this);
79
+ const sanitize_closure_t closure = {tag, base};
80
+ return_trace (c->check_struct (this) && offset.sanitize (c, base, &closure));
81
+ }
82
+
83
+ Tag tag; /* 4-byte Tag identifier */
84
+ OffsetTo<Type>
85
+ offset; /* Offset from beginning of object holding
86
+ * the Record */
87
+ public:
88
+ DEFINE_SIZE_STATIC (6);
89
+ };
90
+
91
+ template <typename Type>
92
+ struct RecordArrayOf : SortedArrayOf<Record<Type> > {
93
+ inline const Tag& get_tag (unsigned int i) const
94
+ {
95
+ /* We cheat slightly and don't define separate Null objects
96
+ * for Record types. Instead, we return the correct Null(Tag)
97
+ * here. */
98
+ if (unlikely (i >= this->len)) return Null(Tag);
99
+ return (*this)[i].tag;
100
+ }
101
+ inline unsigned int get_tags (unsigned int start_offset,
102
+ unsigned int *record_count /* IN/OUT */,
103
+ hb_tag_t *record_tags /* OUT */) const
104
+ {
105
+ if (record_count) {
106
+ const Record<Type> *arr = this->sub_array (start_offset, record_count);
107
+ unsigned int count = *record_count;
108
+ for (unsigned int i = 0; i < count; i++)
109
+ record_tags[i] = arr[i].tag;
110
+ }
111
+ return this->len;
112
+ }
113
+ inline bool find_index (hb_tag_t tag, unsigned int *index) const
114
+ {
115
+ /* If we want to allow non-sorted data, we can lsearch(). */
116
+ int i = this->/*lsearch*/bsearch (tag);
117
+ if (i != -1) {
118
+ if (index) *index = i;
119
+ return true;
120
+ } else {
121
+ if (index) *index = Index::NOT_FOUND_INDEX;
122
+ return false;
123
+ }
124
+ }
125
+ };
126
+
127
+ template <typename Type>
128
+ struct RecordListOf : RecordArrayOf<Type>
129
+ {
130
+ inline const Type& operator [] (unsigned int i) const
131
+ { return this+RecordArrayOf<Type>::operator [](i).offset; }
132
+
133
+ inline bool sanitize (hb_sanitize_context_t *c) const
134
+ {
135
+ TRACE_SANITIZE (this);
136
+ return_trace (RecordArrayOf<Type>::sanitize (c, this));
137
+ }
138
+ };
139
+
140
+
141
+ struct RangeRecord
142
+ {
143
+ inline int cmp (hb_codepoint_t g) const {
144
+ return g < start ? -1 : g <= end ? 0 : +1 ;
145
+ }
146
+
147
+ inline bool sanitize (hb_sanitize_context_t *c) const
148
+ {
149
+ TRACE_SANITIZE (this);
150
+ return_trace (c->check_struct (this));
151
+ }
152
+
153
+ inline bool intersects (const hb_set_t *glyphs) const {
154
+ return glyphs->intersects (start, end);
155
+ }
156
+
157
+ template <typename set_t>
158
+ inline bool add_coverage (set_t *glyphs) const {
159
+ return glyphs->add_range (start, end);
160
+ }
161
+
162
+ GlyphID start; /* First GlyphID in the range */
163
+ GlyphID end; /* Last GlyphID in the range */
164
+ HBUINT16 value; /* Value */
165
+ public:
166
+ DEFINE_SIZE_STATIC (6);
167
+ };
168
+ DEFINE_NULL_DATA (RangeRecord, "\000\001");
169
+
170
+
171
+ struct IndexArray : ArrayOf<Index>
172
+ {
173
+ inline unsigned int get_indexes (unsigned int start_offset,
174
+ unsigned int *_count /* IN/OUT */,
175
+ unsigned int *_indexes /* OUT */) const
176
+ {
177
+ if (_count) {
178
+ const HBUINT16 *arr = this->sub_array (start_offset, _count);
179
+ unsigned int count = *_count;
180
+ for (unsigned int i = 0; i < count; i++)
181
+ _indexes[i] = arr[i];
182
+ }
183
+ return this->len;
184
+ }
185
+ };
186
+
187
+
188
+ struct Script;
189
+ struct LangSys;
190
+ struct Feature;
191
+
192
+
193
+ struct LangSys
194
+ {
195
+ inline unsigned int get_feature_count (void) const
196
+ { return featureIndex.len; }
197
+ inline hb_tag_t get_feature_index (unsigned int i) const
198
+ { return featureIndex[i]; }
199
+ inline unsigned int get_feature_indexes (unsigned int start_offset,
200
+ unsigned int *feature_count /* IN/OUT */,
201
+ unsigned int *feature_indexes /* OUT */) const
202
+ { return featureIndex.get_indexes (start_offset, feature_count, feature_indexes); }
203
+
204
+ inline bool has_required_feature (void) const { return reqFeatureIndex != 0xFFFFu; }
205
+ inline unsigned int get_required_feature_index (void) const
206
+ {
207
+ if (reqFeatureIndex == 0xFFFFu)
208
+ return Index::NOT_FOUND_INDEX;
209
+ return reqFeatureIndex;;
210
+ }
211
+
212
+ inline bool sanitize (hb_sanitize_context_t *c,
213
+ const Record<LangSys>::sanitize_closure_t * = nullptr) const
214
+ {
215
+ TRACE_SANITIZE (this);
216
+ return_trace (c->check_struct (this) && featureIndex.sanitize (c));
217
+ }
218
+
219
+ Offset16 lookupOrderZ; /* = Null (reserved for an offset to a
220
+ * reordering table) */
221
+ HBUINT16 reqFeatureIndex;/* Index of a feature required for this
222
+ * language system--if no required features
223
+ * = 0xFFFFu */
224
+ IndexArray featureIndex; /* Array of indices into the FeatureList */
225
+ public:
226
+ DEFINE_SIZE_ARRAY (6, featureIndex);
227
+ };
228
+ DEFINE_NULL_DATA (LangSys, "\0\0\xFF\xFF");
229
+
230
+
231
+ struct Script
232
+ {
233
+ inline unsigned int get_lang_sys_count (void) const
234
+ { return langSys.len; }
235
+ inline const Tag& get_lang_sys_tag (unsigned int i) const
236
+ { return langSys.get_tag (i); }
237
+ inline unsigned int get_lang_sys_tags (unsigned int start_offset,
238
+ unsigned int *lang_sys_count /* IN/OUT */,
239
+ hb_tag_t *lang_sys_tags /* OUT */) const
240
+ { return langSys.get_tags (start_offset, lang_sys_count, lang_sys_tags); }
241
+ inline const LangSys& get_lang_sys (unsigned int i) const
242
+ {
243
+ if (i == Index::NOT_FOUND_INDEX) return get_default_lang_sys ();
244
+ return this+langSys[i].offset;
245
+ }
246
+ inline bool find_lang_sys_index (hb_tag_t tag, unsigned int *index) const
247
+ { return langSys.find_index (tag, index); }
248
+
249
+ inline bool has_default_lang_sys (void) const { return defaultLangSys != 0; }
250
+ inline const LangSys& get_default_lang_sys (void) const { return this+defaultLangSys; }
251
+
252
+ inline bool sanitize (hb_sanitize_context_t *c,
253
+ const Record<Script>::sanitize_closure_t * = nullptr) const
254
+ {
255
+ TRACE_SANITIZE (this);
256
+ return_trace (defaultLangSys.sanitize (c, this) && langSys.sanitize (c, this));
257
+ }
258
+
259
+ protected:
260
+ OffsetTo<LangSys>
261
+ defaultLangSys; /* Offset to DefaultLangSys table--from
262
+ * beginning of Script table--may be Null */
263
+ RecordArrayOf<LangSys>
264
+ langSys; /* Array of LangSysRecords--listed
265
+ * alphabetically by LangSysTag */
266
+ public:
267
+ DEFINE_SIZE_ARRAY (4, langSys);
268
+ };
269
+
270
+ typedef RecordListOf<Script> ScriptList;
271
+
272
+
273
+ /* http://www.microsoft.com/typography/otspec/features_pt.htm#size */
274
+ struct FeatureParamsSize
275
+ {
276
+ inline bool sanitize (hb_sanitize_context_t *c) const
277
+ {
278
+ TRACE_SANITIZE (this);
279
+ if (unlikely (!c->check_struct (this))) return_trace (false);
280
+
281
+ /* This subtable has some "history", if you will. Some earlier versions of
282
+ * Adobe tools calculated the offset of the FeatureParams sutable from the
283
+ * beginning of the FeatureList table! Now, that is dealt with in the
284
+ * Feature implementation. But we still need to be able to tell junk from
285
+ * real data. Note: We don't check that the nameID actually exists.
286
+ *
287
+ * Read Roberts wrote on 9/15/06 on opentype-list@indx.co.uk :
288
+ *
289
+ * Yes, it is correct that a new version of the AFDKO (version 2.0) will be
290
+ * coming out soon, and that the makeotf program will build a font with a
291
+ * 'size' feature that is correct by the specification.
292
+ *
293
+ * The specification for this feature tag is in the "OpenType Layout Tag
294
+ * Registry". You can see a copy of this at:
295
+ * http://partners.adobe.com/public/developer/opentype/index_tag8.html#size
296
+ *
297
+ * Here is one set of rules to determine if the 'size' feature is built
298
+ * correctly, or as by the older versions of MakeOTF. You may be able to do
299
+ * better.
300
+ *
301
+ * Assume that the offset to the size feature is according to specification,
302
+ * and make the following value checks. If it fails, assume the size
303
+ * feature is calculated as versions of MakeOTF before the AFDKO 2.0 built it.
304
+ * If this fails, reject the 'size' feature. The older makeOTF's calculated the
305
+ * offset from the beginning of the FeatureList table, rather than from the
306
+ * beginning of the 'size' Feature table.
307
+ *
308
+ * If "design size" == 0:
309
+ * fails check
310
+ *
311
+ * Else if ("subfamily identifier" == 0 and
312
+ * "range start" == 0 and
313
+ * "range end" == 0 and
314
+ * "range start" == 0 and
315
+ * "menu name ID" == 0)
316
+ * passes check: this is the format used when there is a design size
317
+ * specified, but there is no recommended size range.
318
+ *
319
+ * Else if ("design size" < "range start" or
320
+ * "design size" > "range end" or
321
+ * "range end" <= "range start" or
322
+ * "menu name ID" < 256 or
323
+ * "menu name ID" > 32767 or
324
+ * menu name ID is not a name ID which is actually in the name table)
325
+ * fails test
326
+ * Else
327
+ * passes test.
328
+ */
329
+
330
+ if (!designSize)
331
+ return_trace (false);
332
+ else if (subfamilyID == 0 &&
333
+ subfamilyNameID == 0 &&
334
+ rangeStart == 0 &&
335
+ rangeEnd == 0)
336
+ return_trace (true);
337
+ else if (designSize < rangeStart ||
338
+ designSize > rangeEnd ||
339
+ subfamilyNameID < 256 ||
340
+ subfamilyNameID > 32767)
341
+ return_trace (false);
342
+ else
343
+ return_trace (true);
344
+ }
345
+
346
+ HBUINT16 designSize; /* Represents the design size in 720/inch
347
+ * units (decipoints). The design size entry
348
+ * must be non-zero. When there is a design
349
+ * size but no recommended size range, the
350
+ * rest of the array will consist of zeros. */
351
+ HBUINT16 subfamilyID; /* Has no independent meaning, but serves
352
+ * as an identifier that associates fonts
353
+ * in a subfamily. All fonts which share a
354
+ * Preferred or Font Family name and which
355
+ * differ only by size range shall have the
356
+ * same subfamily value, and no fonts which
357
+ * differ in weight or style shall have the
358
+ * same subfamily value. If this value is
359
+ * zero, the remaining fields in the array
360
+ * will be ignored. */
361
+ HBUINT16 subfamilyNameID;/* If the preceding value is non-zero, this
362
+ * value must be set in the range 256 - 32767
363
+ * (inclusive). It records the value of a
364
+ * field in the name table, which must
365
+ * contain English-language strings encoded
366
+ * in Windows Unicode and Macintosh Roman,
367
+ * and may contain additional strings
368
+ * localized to other scripts and languages.
369
+ * Each of these strings is the name an
370
+ * application should use, in combination
371
+ * with the family name, to represent the
372
+ * subfamily in a menu. Applications will
373
+ * choose the appropriate version based on
374
+ * their selection criteria. */
375
+ HBUINT16 rangeStart; /* Large end of the recommended usage range
376
+ * (inclusive), stored in 720/inch units
377
+ * (decipoints). */
378
+ HBUINT16 rangeEnd; /* Small end of the recommended usage range
379
+ (exclusive), stored in 720/inch units
380
+ * (decipoints). */
381
+ public:
382
+ DEFINE_SIZE_STATIC (10);
383
+ };
384
+
385
+ /* http://www.microsoft.com/typography/otspec/features_pt.htm#ssxx */
386
+ struct FeatureParamsStylisticSet
387
+ {
388
+ inline bool sanitize (hb_sanitize_context_t *c) const
389
+ {
390
+ TRACE_SANITIZE (this);
391
+ /* Right now minorVersion is at zero. Which means, any table supports
392
+ * the uiNameID field. */
393
+ return_trace (c->check_struct (this));
394
+ }
395
+
396
+ HBUINT16 version; /* (set to 0): This corresponds to a “minor”
397
+ * version number. Additional data may be
398
+ * added to the end of this Feature Parameters
399
+ * table in the future. */
400
+
401
+ HBUINT16 uiNameID; /* The 'name' table name ID that specifies a
402
+ * string (or strings, for multiple languages)
403
+ * for a user-interface label for this
404
+ * feature. The values of uiLabelNameId and
405
+ * sampleTextNameId are expected to be in the
406
+ * font-specific name ID range (256-32767),
407
+ * though that is not a requirement in this
408
+ * Feature Parameters specification. The
409
+ * user-interface label for the feature can
410
+ * be provided in multiple languages. An
411
+ * English string should be included as a
412
+ * fallback. The string should be kept to a
413
+ * minimal length to fit comfortably with
414
+ * different application interfaces. */
415
+ public:
416
+ DEFINE_SIZE_STATIC (4);
417
+ };
418
+
419
+ /* http://www.microsoft.com/typography/otspec/features_ae.htm#cv01-cv99 */
420
+ struct FeatureParamsCharacterVariants
421
+ {
422
+ inline bool sanitize (hb_sanitize_context_t *c) const
423
+ {
424
+ TRACE_SANITIZE (this);
425
+ return_trace (c->check_struct (this) &&
426
+ characters.sanitize (c));
427
+ }
428
+
429
+ HBUINT16 format; /* Format number is set to 0. */
430
+ HBUINT16 featUILableNameID; /* The ‘name’ table name ID that
431
+ * specifies a string (or strings,
432
+ * for multiple languages) for a
433
+ * user-interface label for this
434
+ * feature. (May be nullptr.) */
435
+ HBUINT16 featUITooltipTextNameID;/* The ‘name’ table name ID that
436
+ * specifies a string (or strings,
437
+ * for multiple languages) that an
438
+ * application can use for tooltip
439
+ * text for this feature. (May be
440
+ * nullptr.) */
441
+ HBUINT16 sampleTextNameID; /* The ‘name’ table name ID that
442
+ * specifies sample text that
443
+ * illustrates the effect of this
444
+ * feature. (May be nullptr.) */
445
+ HBUINT16 numNamedParameters; /* Number of named parameters. (May
446
+ * be zero.) */
447
+ HBUINT16 firstParamUILabelNameID;/* The first ‘name’ table name ID
448
+ * used to specify strings for
449
+ * user-interface labels for the
450
+ * feature parameters. (Must be zero
451
+ * if numParameters is zero.) */
452
+ ArrayOf<UINT24>
453
+ characters; /* Array of the Unicode Scalar Value
454
+ * of the characters for which this
455
+ * feature provides glyph variants.
456
+ * (May be zero.) */
457
+ public:
458
+ DEFINE_SIZE_ARRAY (14, characters);
459
+ };
460
+
461
+ struct FeatureParams
462
+ {
463
+ inline bool sanitize (hb_sanitize_context_t *c, hb_tag_t tag) const
464
+ {
465
+ TRACE_SANITIZE (this);
466
+ if (tag == HB_TAG ('s','i','z','e'))
467
+ return_trace (u.size.sanitize (c));
468
+ if ((tag & 0xFFFF0000u) == HB_TAG ('s','s','\0','\0')) /* ssXX */
469
+ return_trace (u.stylisticSet.sanitize (c));
470
+ if ((tag & 0xFFFF0000u) == HB_TAG ('c','v','\0','\0')) /* cvXX */
471
+ return_trace (u.characterVariants.sanitize (c));
472
+ return_trace (true);
473
+ }
474
+
475
+ inline const FeatureParamsSize& get_size_params (hb_tag_t tag) const
476
+ {
477
+ if (tag == HB_TAG ('s','i','z','e'))
478
+ return u.size;
479
+ return Null(FeatureParamsSize);
480
+ }
481
+
482
+ private:
483
+ union {
484
+ FeatureParamsSize size;
485
+ FeatureParamsStylisticSet stylisticSet;
486
+ FeatureParamsCharacterVariants characterVariants;
487
+ } u;
488
+ DEFINE_SIZE_STATIC (17);
489
+ };
490
+
491
+ struct Feature
492
+ {
493
+ inline unsigned int get_lookup_count (void) const
494
+ { return lookupIndex.len; }
495
+ inline hb_tag_t get_lookup_index (unsigned int i) const
496
+ { return lookupIndex[i]; }
497
+ inline unsigned int get_lookup_indexes (unsigned int start_index,
498
+ unsigned int *lookup_count /* IN/OUT */,
499
+ unsigned int *lookup_tags /* OUT */) const
500
+ { return lookupIndex.get_indexes (start_index, lookup_count, lookup_tags); }
501
+
502
+ inline const FeatureParams &get_feature_params (void) const
503
+ { return this+featureParams; }
504
+
505
+ inline bool sanitize (hb_sanitize_context_t *c,
506
+ const Record<Feature>::sanitize_closure_t *closure = nullptr) const
507
+ {
508
+ TRACE_SANITIZE (this);
509
+ if (unlikely (!(c->check_struct (this) && lookupIndex.sanitize (c))))
510
+ return_trace (false);
511
+
512
+ /* Some earlier versions of Adobe tools calculated the offset of the
513
+ * FeatureParams subtable from the beginning of the FeatureList table!
514
+ *
515
+ * If sanitizing "failed" for the FeatureParams subtable, try it with the
516
+ * alternative location. We would know sanitize "failed" if old value
517
+ * of the offset was non-zero, but it's zeroed now.
518
+ *
519
+ * Only do this for the 'size' feature, since at the time of the faulty
520
+ * Adobe tools, only the 'size' feature had FeatureParams defined.
521
+ */
522
+
523
+ OffsetTo<FeatureParams> orig_offset = featureParams;
524
+ if (unlikely (!featureParams.sanitize (c, this, closure ? closure->tag : HB_TAG_NONE)))
525
+ return_trace (false);
526
+
527
+ if (likely (orig_offset.is_null ()))
528
+ return_trace (true);
529
+
530
+ if (featureParams == 0 && closure &&
531
+ closure->tag == HB_TAG ('s','i','z','e') &&
532
+ closure->list_base && closure->list_base < this)
533
+ {
534
+ unsigned int new_offset_int = (unsigned int) orig_offset -
535
+ (((char *) this) - ((char *) closure->list_base));
536
+
537
+ OffsetTo<FeatureParams> new_offset;
538
+ /* Check that it did not overflow. */
539
+ new_offset.set (new_offset_int);
540
+ if (new_offset == new_offset_int &&
541
+ c->try_set (&featureParams, new_offset) &&
542
+ !featureParams.sanitize (c, this, closure ? closure->tag : HB_TAG_NONE))
543
+ return_trace (false);
544
+
545
+ if (c->edit_count > 1)
546
+ c->edit_count--; /* This was a "legitimate" edit; don't contribute to error count. */
547
+ }
548
+
549
+ return_trace (true);
550
+ }
551
+
552
+ OffsetTo<FeatureParams>
553
+ featureParams; /* Offset to Feature Parameters table (if one
554
+ * has been defined for the feature), relative
555
+ * to the beginning of the Feature Table; = Null
556
+ * if not required */
557
+ IndexArray lookupIndex; /* Array of LookupList indices */
558
+ public:
559
+ DEFINE_SIZE_ARRAY (4, lookupIndex);
560
+ };
561
+
562
+ typedef RecordListOf<Feature> FeatureList;
563
+
564
+
565
+ struct LookupFlag : HBUINT16
566
+ {
567
+ enum Flags {
568
+ RightToLeft = 0x0001u,
569
+ IgnoreBaseGlyphs = 0x0002u,
570
+ IgnoreLigatures = 0x0004u,
571
+ IgnoreMarks = 0x0008u,
572
+ IgnoreFlags = 0x000Eu,
573
+ UseMarkFilteringSet = 0x0010u,
574
+ Reserved = 0x00E0u,
575
+ MarkAttachmentType = 0xFF00u
576
+ };
577
+ public:
578
+ DEFINE_SIZE_STATIC (2);
579
+ };
580
+
581
+ } /* namespace OT */
582
+ /* This has to be outside the namespace. */
583
+ HB_MARK_AS_FLAG_T (OT::LookupFlag::Flags);
584
+ namespace OT {
585
+
586
+ struct Lookup
587
+ {
588
+ inline unsigned int get_subtable_count (void) const { return subTable.len; }
589
+
590
+ template <typename SubTableType>
591
+ inline const SubTableType& get_subtable (unsigned int i) const
592
+ { return this+CastR<OffsetArrayOf<SubTableType> > (subTable)[i]; }
593
+
594
+ template <typename SubTableType>
595
+ inline const OffsetArrayOf<SubTableType>& get_subtables (void) const
596
+ { return CastR<OffsetArrayOf<SubTableType> > (subTable); }
597
+ template <typename SubTableType>
598
+ inline OffsetArrayOf<SubTableType>& get_subtables (void)
599
+ { return CastR<OffsetArrayOf<SubTableType> > (subTable); }
600
+
601
+ inline unsigned int get_type (void) const { return lookupType; }
602
+
603
+ /* lookup_props is a 32-bit integer where the lower 16-bit is LookupFlag and
604
+ * higher 16-bit is mark-filtering-set if the lookup uses one.
605
+ * Not to be confused with glyph_props which is very similar. */
606
+ inline uint32_t get_props (void) const
607
+ {
608
+ unsigned int flag = lookupFlag;
609
+ if (unlikely (flag & LookupFlag::UseMarkFilteringSet))
610
+ {
611
+ const HBUINT16 &markFilteringSet = StructAfter<HBUINT16> (subTable);
612
+ flag += (markFilteringSet << 16);
613
+ }
614
+ return flag;
615
+ }
616
+
617
+ template <typename SubTableType, typename context_t>
618
+ inline typename context_t::return_t dispatch (context_t *c) const
619
+ {
620
+ unsigned int lookup_type = get_type ();
621
+ TRACE_DISPATCH (this, lookup_type);
622
+ unsigned int count = get_subtable_count ();
623
+ for (unsigned int i = 0; i < count; i++) {
624
+ typename context_t::return_t r = get_subtable<SubTableType> (i).dispatch (c, lookup_type);
625
+ if (c->stop_sublookup_iteration (r))
626
+ return_trace (r);
627
+ }
628
+ return_trace (c->default_return_value ());
629
+ }
630
+
631
+ inline bool serialize (hb_serialize_context_t *c,
632
+ unsigned int lookup_type,
633
+ uint32_t lookup_props,
634
+ unsigned int num_subtables)
635
+ {
636
+ TRACE_SERIALIZE (this);
637
+ if (unlikely (!c->extend_min (*this))) return_trace (false);
638
+ lookupType.set (lookup_type);
639
+ lookupFlag.set (lookup_props & 0xFFFFu);
640
+ if (unlikely (!subTable.serialize (c, num_subtables))) return_trace (false);
641
+ if (lookupFlag & LookupFlag::UseMarkFilteringSet)
642
+ {
643
+ HBUINT16 &markFilteringSet = StructAfter<HBUINT16> (subTable);
644
+ markFilteringSet.set (lookup_props >> 16);
645
+ }
646
+ return_trace (true);
647
+ }
648
+
649
+ inline bool sanitize (hb_sanitize_context_t *c) const
650
+ {
651
+ TRACE_SANITIZE (this);
652
+ /* Real sanitize of the subtables is done by GSUB/GPOS/... */
653
+ if (!(c->check_struct (this) && subTable.sanitize (c))) return_trace (false);
654
+ if (lookupFlag & LookupFlag::UseMarkFilteringSet)
655
+ {
656
+ const HBUINT16 &markFilteringSet = StructAfter<HBUINT16> (subTable);
657
+ if (!markFilteringSet.sanitize (c)) return_trace (false);
658
+ }
659
+ return_trace (true);
660
+ }
661
+
662
+ private:
663
+ HBUINT16 lookupType; /* Different enumerations for GSUB and GPOS */
664
+ HBUINT16 lookupFlag; /* Lookup qualifiers */
665
+ ArrayOf<Offset16>
666
+ subTable; /* Array of SubTables */
667
+ HBUINT16 markFilteringSetX[VAR]; /* Index (base 0) into GDEF mark glyph sets
668
+ * structure. This field is only present if bit
669
+ * UseMarkFilteringSet of lookup flags is set. */
670
+ public:
671
+ DEFINE_SIZE_ARRAY2 (6, subTable, markFilteringSetX);
672
+ };
673
+
674
+ typedef OffsetListOf<Lookup> LookupList;
675
+
676
+
677
+ /*
678
+ * Coverage Table
679
+ */
680
+
681
+ struct CoverageFormat1
682
+ {
683
+ friend struct Coverage;
684
+
685
+ private:
686
+ inline unsigned int get_coverage (hb_codepoint_t glyph_id) const
687
+ {
688
+ int i = glyphArray.bsearch (glyph_id);
689
+ static_assert ((((unsigned int) -1) == NOT_COVERED), "");
690
+ return i;
691
+ }
692
+
693
+ inline bool serialize (hb_serialize_context_t *c,
694
+ Supplier<GlyphID> &glyphs,
695
+ unsigned int num_glyphs)
696
+ {
697
+ TRACE_SERIALIZE (this);
698
+ if (unlikely (!c->extend_min (*this))) return_trace (false);
699
+ glyphArray.len.set (num_glyphs);
700
+ if (unlikely (!c->extend (glyphArray))) return_trace (false);
701
+ for (unsigned int i = 0; i < num_glyphs; i++)
702
+ glyphArray[i] = glyphs[i];
703
+ glyphs += num_glyphs;
704
+ return_trace (true);
705
+ }
706
+
707
+ inline bool sanitize (hb_sanitize_context_t *c) const
708
+ {
709
+ TRACE_SANITIZE (this);
710
+ return_trace (glyphArray.sanitize (c));
711
+ }
712
+
713
+ inline bool intersects_coverage (const hb_set_t *glyphs, unsigned int index) const {
714
+ return glyphs->has (glyphArray[index]);
715
+ }
716
+
717
+ template <typename set_t>
718
+ inline bool add_coverage (set_t *glyphs) const {
719
+ return glyphs->add_sorted_array (glyphArray.array, glyphArray.len);
720
+ }
721
+
722
+ public:
723
+ /* Older compilers need this to be public. */
724
+ struct Iter {
725
+ inline void init (const struct CoverageFormat1 &c_) { c = &c_; i = 0; };
726
+ inline bool more (void) { return i < c->glyphArray.len; }
727
+ inline void next (void) { i++; }
728
+ inline hb_codepoint_t get_glyph (void) { return c->glyphArray[i]; }
729
+ inline unsigned int get_coverage (void) { return i; }
730
+
731
+ private:
732
+ const struct CoverageFormat1 *c;
733
+ unsigned int i;
734
+ };
735
+ private:
736
+
737
+ protected:
738
+ HBUINT16 coverageFormat; /* Format identifier--format = 1 */
739
+ SortedArrayOf<GlyphID>
740
+ glyphArray; /* Array of GlyphIDs--in numerical order */
741
+ public:
742
+ DEFINE_SIZE_ARRAY (4, glyphArray);
743
+ };
744
+
745
+ struct CoverageFormat2
746
+ {
747
+ friend struct Coverage;
748
+
749
+ private:
750
+ inline unsigned int get_coverage (hb_codepoint_t glyph_id) const
751
+ {
752
+ int i = rangeRecord.bsearch (glyph_id);
753
+ if (i != -1) {
754
+ const RangeRecord &range = rangeRecord[i];
755
+ return (unsigned int) range.value + (glyph_id - range.start);
756
+ }
757
+ return NOT_COVERED;
758
+ }
759
+
760
+ inline bool serialize (hb_serialize_context_t *c,
761
+ Supplier<GlyphID> &glyphs,
762
+ unsigned int num_glyphs)
763
+ {
764
+ TRACE_SERIALIZE (this);
765
+ if (unlikely (!c->extend_min (*this))) return_trace (false);
766
+
767
+ if (unlikely (!num_glyphs))
768
+ {
769
+ rangeRecord.len.set (0);
770
+ return_trace (true);
771
+ }
772
+
773
+ unsigned int num_ranges = 1;
774
+ for (unsigned int i = 1; i < num_glyphs; i++)
775
+ if (glyphs[i - 1] + 1 != glyphs[i])
776
+ num_ranges++;
777
+ rangeRecord.len.set (num_ranges);
778
+ if (unlikely (!c->extend (rangeRecord))) return_trace (false);
779
+
780
+ unsigned int range = 0;
781
+ rangeRecord[range].start = glyphs[0];
782
+ rangeRecord[range].value.set (0);
783
+ for (unsigned int i = 1; i < num_glyphs; i++)
784
+ if (glyphs[i - 1] + 1 != glyphs[i]) {
785
+ range++;
786
+ rangeRecord[range].start = glyphs[i];
787
+ rangeRecord[range].value.set (i);
788
+ rangeRecord[range].end = glyphs[i];
789
+ } else {
790
+ rangeRecord[range].end = glyphs[i];
791
+ }
792
+ glyphs += num_glyphs;
793
+ return_trace (true);
794
+ }
795
+
796
+ inline bool sanitize (hb_sanitize_context_t *c) const
797
+ {
798
+ TRACE_SANITIZE (this);
799
+ return_trace (rangeRecord.sanitize (c));
800
+ }
801
+
802
+ inline bool intersects_coverage (const hb_set_t *glyphs, unsigned int index) const {
803
+ unsigned int i;
804
+ unsigned int count = rangeRecord.len;
805
+ for (i = 0; i < count; i++) {
806
+ const RangeRecord &range = rangeRecord[i];
807
+ if (range.value <= index &&
808
+ index < (unsigned int) range.value + (range.end - range.start) &&
809
+ range.intersects (glyphs))
810
+ return true;
811
+ else if (index < range.value)
812
+ return false;
813
+ }
814
+ return false;
815
+ }
816
+
817
+ template <typename set_t>
818
+ inline bool add_coverage (set_t *glyphs) const {
819
+ unsigned int count = rangeRecord.len;
820
+ for (unsigned int i = 0; i < count; i++)
821
+ if (unlikely (!rangeRecord[i].add_coverage (glyphs)))
822
+ return false;
823
+ return true;
824
+ }
825
+
826
+ public:
827
+ /* Older compilers need this to be public. */
828
+ struct Iter
829
+ {
830
+ inline void init (const CoverageFormat2 &c_)
831
+ {
832
+ c = &c_;
833
+ coverage = 0;
834
+ i = 0;
835
+ j = c->rangeRecord.len ? c_.rangeRecord[0].start : 0;
836
+ }
837
+ inline bool more (void) { return i < c->rangeRecord.len; }
838
+ inline void next (void)
839
+ {
840
+ if (j >= c->rangeRecord[i].end)
841
+ {
842
+ i++;
843
+ if (more ())
844
+ {
845
+ j = c->rangeRecord[i].start;
846
+ coverage = c->rangeRecord[i].value;
847
+ }
848
+ return;
849
+ }
850
+ coverage++;
851
+ j++;
852
+ }
853
+ inline hb_codepoint_t get_glyph (void) { return j; }
854
+ inline unsigned int get_coverage (void) { return coverage; }
855
+
856
+ private:
857
+ const struct CoverageFormat2 *c;
858
+ unsigned int i, j, coverage;
859
+ };
860
+ private:
861
+
862
+ protected:
863
+ HBUINT16 coverageFormat; /* Format identifier--format = 2 */
864
+ SortedArrayOf<RangeRecord>
865
+ rangeRecord; /* Array of glyph ranges--ordered by
866
+ * Start GlyphID. rangeCount entries
867
+ * long */
868
+ public:
869
+ DEFINE_SIZE_ARRAY (4, rangeRecord);
870
+ };
871
+
872
+ struct Coverage
873
+ {
874
+ inline unsigned int get_coverage (hb_codepoint_t glyph_id) const
875
+ {
876
+ switch (u.format) {
877
+ case 1: return u.format1.get_coverage (glyph_id);
878
+ case 2: return u.format2.get_coverage (glyph_id);
879
+ default:return NOT_COVERED;
880
+ }
881
+ }
882
+
883
+ inline bool serialize (hb_serialize_context_t *c,
884
+ Supplier<GlyphID> &glyphs,
885
+ unsigned int num_glyphs)
886
+ {
887
+ TRACE_SERIALIZE (this);
888
+ if (unlikely (!c->extend_min (*this))) return_trace (false);
889
+ unsigned int num_ranges = 1;
890
+ for (unsigned int i = 1; i < num_glyphs; i++)
891
+ if (glyphs[i - 1] + 1 != glyphs[i])
892
+ num_ranges++;
893
+ u.format.set (num_glyphs * 2 < num_ranges * 3 ? 1 : 2);
894
+ switch (u.format) {
895
+ case 1: return_trace (u.format1.serialize (c, glyphs, num_glyphs));
896
+ case 2: return_trace (u.format2.serialize (c, glyphs, num_glyphs));
897
+ default:return_trace (false);
898
+ }
899
+ }
900
+
901
+ inline bool sanitize (hb_sanitize_context_t *c) const
902
+ {
903
+ TRACE_SANITIZE (this);
904
+ if (!u.format.sanitize (c)) return_trace (false);
905
+ switch (u.format) {
906
+ case 1: return_trace (u.format1.sanitize (c));
907
+ case 2: return_trace (u.format2.sanitize (c));
908
+ default:return_trace (true);
909
+ }
910
+ }
911
+
912
+ inline bool intersects (const hb_set_t *glyphs) const {
913
+ /* TODO speed this up */
914
+ Coverage::Iter iter;
915
+ for (iter.init (*this); iter.more (); iter.next ()) {
916
+ if (glyphs->has (iter.get_glyph ()))
917
+ return true;
918
+ }
919
+ return false;
920
+ }
921
+
922
+ inline bool intersects_coverage (const hb_set_t *glyphs, unsigned int index) const {
923
+ switch (u.format) {
924
+ case 1: return u.format1.intersects_coverage (glyphs, index);
925
+ case 2: return u.format2.intersects_coverage (glyphs, index);
926
+ default:return false;
927
+ }
928
+ }
929
+
930
+ /* Might return false if array looks unsorted.
931
+ * Used for faster rejection of corrupt data. */
932
+ template <typename set_t>
933
+ inline bool add_coverage (set_t *glyphs) const {
934
+ switch (u.format) {
935
+ case 1: return u.format1.add_coverage (glyphs);
936
+ case 2: return u.format2.add_coverage (glyphs);
937
+ default:return false;
938
+ }
939
+ }
940
+
941
+ struct Iter {
942
+ Iter (void) : format (0), u () {};
943
+ inline void init (const Coverage &c_) {
944
+ format = c_.u.format;
945
+ switch (format) {
946
+ case 1: u.format1.init (c_.u.format1); return;
947
+ case 2: u.format2.init (c_.u.format2); return;
948
+ default: return;
949
+ }
950
+ }
951
+ inline bool more (void) {
952
+ switch (format) {
953
+ case 1: return u.format1.more ();
954
+ case 2: return u.format2.more ();
955
+ default:return false;
956
+ }
957
+ }
958
+ inline void next (void) {
959
+ switch (format) {
960
+ case 1: u.format1.next (); break;
961
+ case 2: u.format2.next (); break;
962
+ default: break;
963
+ }
964
+ }
965
+ inline hb_codepoint_t get_glyph (void) {
966
+ switch (format) {
967
+ case 1: return u.format1.get_glyph ();
968
+ case 2: return u.format2.get_glyph ();
969
+ default:return 0;
970
+ }
971
+ }
972
+ inline unsigned int get_coverage (void) {
973
+ switch (format) {
974
+ case 1: return u.format1.get_coverage ();
975
+ case 2: return u.format2.get_coverage ();
976
+ default:return -1;
977
+ }
978
+ }
979
+
980
+ private:
981
+ unsigned int format;
982
+ union {
983
+ CoverageFormat2::Iter format2; /* Put this one first since it's larger; helps shut up compiler. */
984
+ CoverageFormat1::Iter format1;
985
+ } u;
986
+ };
987
+
988
+ protected:
989
+ union {
990
+ HBUINT16 format; /* Format identifier */
991
+ CoverageFormat1 format1;
992
+ CoverageFormat2 format2;
993
+ } u;
994
+ public:
995
+ DEFINE_SIZE_UNION (2, format);
996
+ };
997
+
998
+
999
+ /*
1000
+ * Class Definition Table
1001
+ */
1002
+
1003
+ struct ClassDefFormat1
1004
+ {
1005
+ friend struct ClassDef;
1006
+
1007
+ private:
1008
+ inline unsigned int get_class (hb_codepoint_t glyph_id) const
1009
+ {
1010
+ unsigned int i = (unsigned int) (glyph_id - startGlyph);
1011
+ if (unlikely (i < classValue.len))
1012
+ return classValue[i];
1013
+ return 0;
1014
+ }
1015
+
1016
+ inline bool sanitize (hb_sanitize_context_t *c) const
1017
+ {
1018
+ TRACE_SANITIZE (this);
1019
+ return_trace (c->check_struct (this) && classValue.sanitize (c));
1020
+ }
1021
+
1022
+ template <typename set_t>
1023
+ inline bool add_coverage (set_t *glyphs) const {
1024
+ unsigned int start = 0;
1025
+ unsigned int count = classValue.len;
1026
+ for (unsigned int i = 0; i < count; i++)
1027
+ {
1028
+ if (classValue[i])
1029
+ continue;
1030
+
1031
+ if (start != i)
1032
+ if (unlikely (!glyphs->add_range (startGlyph + start, startGlyph + i)))
1033
+ return false;
1034
+
1035
+ start = i + 1;
1036
+ }
1037
+ if (start != count)
1038
+ if (unlikely (!glyphs->add_range (startGlyph + start, startGlyph + count)))
1039
+ return false;
1040
+
1041
+ return true;
1042
+ }
1043
+
1044
+ template <typename set_t>
1045
+ inline bool add_class (set_t *glyphs, unsigned int klass) const {
1046
+ unsigned int count = classValue.len;
1047
+ for (unsigned int i = 0; i < count; i++)
1048
+ {
1049
+ if (classValue[i] == klass)
1050
+ glyphs->add (startGlyph + i);
1051
+ }
1052
+ return true;
1053
+ }
1054
+
1055
+ inline bool intersects_class (const hb_set_t *glyphs, unsigned int klass) const {
1056
+ unsigned int count = classValue.len;
1057
+ if (klass == 0)
1058
+ {
1059
+ /* Match if there's any glyph that is not listed! */
1060
+ hb_codepoint_t g = HB_SET_VALUE_INVALID;
1061
+ if (!hb_set_next (glyphs, &g))
1062
+ return false;
1063
+ if (g < startGlyph)
1064
+ return true;
1065
+ g = startGlyph + count - 1;
1066
+ if (hb_set_next (glyphs, &g))
1067
+ return true;
1068
+ /* Fall through. */
1069
+ }
1070
+ for (unsigned int i = 0; i < count; i++)
1071
+ if (classValue[i] == klass && glyphs->has (startGlyph + i))
1072
+ return true;
1073
+ return false;
1074
+ }
1075
+
1076
+ protected:
1077
+ HBUINT16 classFormat; /* Format identifier--format = 1 */
1078
+ GlyphID startGlyph; /* First GlyphID of the classValueArray */
1079
+ ArrayOf<HBUINT16>
1080
+ classValue; /* Array of Class Values--one per GlyphID */
1081
+ public:
1082
+ DEFINE_SIZE_ARRAY (6, classValue);
1083
+ };
1084
+
1085
+ struct ClassDefFormat2
1086
+ {
1087
+ friend struct ClassDef;
1088
+
1089
+ private:
1090
+ inline unsigned int get_class (hb_codepoint_t glyph_id) const
1091
+ {
1092
+ int i = rangeRecord.bsearch (glyph_id);
1093
+ if (unlikely (i != -1))
1094
+ return rangeRecord[i].value;
1095
+ return 0;
1096
+ }
1097
+
1098
+ inline bool sanitize (hb_sanitize_context_t *c) const
1099
+ {
1100
+ TRACE_SANITIZE (this);
1101
+ return_trace (rangeRecord.sanitize (c));
1102
+ }
1103
+
1104
+ template <typename set_t>
1105
+ inline bool add_coverage (set_t *glyphs) const {
1106
+ unsigned int count = rangeRecord.len;
1107
+ for (unsigned int i = 0; i < count; i++)
1108
+ if (rangeRecord[i].value)
1109
+ if (unlikely (!rangeRecord[i].add_coverage (glyphs)))
1110
+ return false;
1111
+ return true;
1112
+ }
1113
+
1114
+ template <typename set_t>
1115
+ inline bool add_class (set_t *glyphs, unsigned int klass) const {
1116
+ unsigned int count = rangeRecord.len;
1117
+ for (unsigned int i = 0; i < count; i++)
1118
+ {
1119
+ if (rangeRecord[i].value == klass)
1120
+ if (unlikely (!rangeRecord[i].add_coverage (glyphs)))
1121
+ return false;
1122
+ }
1123
+ return true;
1124
+ }
1125
+
1126
+ inline bool intersects_class (const hb_set_t *glyphs, unsigned int klass) const {
1127
+ unsigned int count = rangeRecord.len;
1128
+ if (klass == 0)
1129
+ {
1130
+ /* Match if there's any glyph that is not listed! */
1131
+ hb_codepoint_t g = HB_SET_VALUE_INVALID;
1132
+ for (unsigned int i = 0; i < count; i++)
1133
+ {
1134
+ if (!hb_set_next (glyphs, &g))
1135
+ break;
1136
+ if (g < rangeRecord[i].start)
1137
+ return true;
1138
+ g = rangeRecord[i].end;
1139
+ }
1140
+ if (g != HB_SET_VALUE_INVALID && hb_set_next (glyphs, &g))
1141
+ return true;
1142
+ /* Fall through. */
1143
+ }
1144
+ for (unsigned int i = 0; i < count; i++)
1145
+ if (rangeRecord[i].value == klass && rangeRecord[i].intersects (glyphs))
1146
+ return true;
1147
+ return false;
1148
+ }
1149
+
1150
+ protected:
1151
+ HBUINT16 classFormat; /* Format identifier--format = 2 */
1152
+ SortedArrayOf<RangeRecord>
1153
+ rangeRecord; /* Array of glyph ranges--ordered by
1154
+ * Start GlyphID */
1155
+ public:
1156
+ DEFINE_SIZE_ARRAY (4, rangeRecord);
1157
+ };
1158
+
1159
+ struct ClassDef
1160
+ {
1161
+ inline unsigned int get_class (hb_codepoint_t glyph_id) const
1162
+ {
1163
+ switch (u.format) {
1164
+ case 1: return u.format1.get_class (glyph_id);
1165
+ case 2: return u.format2.get_class (glyph_id);
1166
+ default:return 0;
1167
+ }
1168
+ }
1169
+
1170
+ inline bool sanitize (hb_sanitize_context_t *c) const
1171
+ {
1172
+ TRACE_SANITIZE (this);
1173
+ if (!u.format.sanitize (c)) return_trace (false);
1174
+ switch (u.format) {
1175
+ case 1: return_trace (u.format1.sanitize (c));
1176
+ case 2: return_trace (u.format2.sanitize (c));
1177
+ default:return_trace (true);
1178
+ }
1179
+ }
1180
+
1181
+ /* Might return false if array looks unsorted.
1182
+ * Used for faster rejection of corrupt data. */
1183
+ template <typename set_t>
1184
+ inline bool add_coverage (set_t *glyphs) const {
1185
+ switch (u.format) {
1186
+ case 1: return u.format1.add_coverage (glyphs);
1187
+ case 2: return u.format2.add_coverage (glyphs);
1188
+ default:return false;
1189
+ }
1190
+ }
1191
+
1192
+ /* Might return false if array looks unsorted.
1193
+ * Used for faster rejection of corrupt data. */
1194
+ template <typename set_t>
1195
+ inline bool add_class (set_t *glyphs, unsigned int klass) const {
1196
+ switch (u.format) {
1197
+ case 1: return u.format1.add_class (glyphs, klass);
1198
+ case 2: return u.format2.add_class (glyphs, klass);
1199
+ default:return false;
1200
+ }
1201
+ }
1202
+
1203
+ inline bool intersects_class (const hb_set_t *glyphs, unsigned int klass) const {
1204
+ switch (u.format) {
1205
+ case 1: return u.format1.intersects_class (glyphs, klass);
1206
+ case 2: return u.format2.intersects_class (glyphs, klass);
1207
+ default:return false;
1208
+ }
1209
+ }
1210
+
1211
+ protected:
1212
+ union {
1213
+ HBUINT16 format; /* Format identifier */
1214
+ ClassDefFormat1 format1;
1215
+ ClassDefFormat2 format2;
1216
+ } u;
1217
+ public:
1218
+ DEFINE_SIZE_UNION (2, format);
1219
+ };
1220
+
1221
+
1222
+ /*
1223
+ * Item Variation Store
1224
+ */
1225
+
1226
+ struct VarRegionAxis
1227
+ {
1228
+ inline float evaluate (int coord) const
1229
+ {
1230
+ int start = startCoord, peak = peakCoord, end = endCoord;
1231
+
1232
+ /* TODO Move these to sanitize(). */
1233
+ if (unlikely (start > peak || peak > end))
1234
+ return 1.;
1235
+ if (unlikely (start < 0 && end > 0 && peak != 0))
1236
+ return 1.;
1237
+
1238
+ if (peak == 0 || coord == peak)
1239
+ return 1.;
1240
+
1241
+ if (coord <= start || end <= coord)
1242
+ return 0.;
1243
+
1244
+ /* Interpolate */
1245
+ if (coord < peak)
1246
+ return float (coord - start) / (peak - start);
1247
+ else
1248
+ return float (end - coord) / (end - peak);
1249
+ }
1250
+
1251
+ inline bool sanitize (hb_sanitize_context_t *c) const
1252
+ {
1253
+ TRACE_SANITIZE (this);
1254
+ return_trace (c->check_struct (this));
1255
+ /* TODO Handle invalid start/peak/end configs, so we don't
1256
+ * have to do that at runtime. */
1257
+ }
1258
+
1259
+ public:
1260
+ F2DOT14 startCoord;
1261
+ F2DOT14 peakCoord;
1262
+ F2DOT14 endCoord;
1263
+ public:
1264
+ DEFINE_SIZE_STATIC (6);
1265
+ };
1266
+
1267
+ struct VarRegionList
1268
+ {
1269
+ inline float evaluate (unsigned int region_index,
1270
+ int *coords, unsigned int coord_len) const
1271
+ {
1272
+ if (unlikely (region_index >= regionCount))
1273
+ return 0.;
1274
+
1275
+ const VarRegionAxis *axes = axesZ + (region_index * axisCount);
1276
+
1277
+ float v = 1.;
1278
+ unsigned int count = axisCount;
1279
+ for (unsigned int i = 0; i < count; i++)
1280
+ {
1281
+ int coord = i < coord_len ? coords[i] : 0;
1282
+ float factor = axes[i].evaluate (coord);
1283
+ if (factor == 0.)
1284
+ return 0.;
1285
+ v *= factor;
1286
+ }
1287
+ return v;
1288
+ }
1289
+
1290
+ inline bool sanitize (hb_sanitize_context_t *c) const
1291
+ {
1292
+ TRACE_SANITIZE (this);
1293
+ return_trace (c->check_struct (this) &&
1294
+ c->check_array (axesZ, axesZ[0].static_size,
1295
+ (unsigned int) axisCount * (unsigned int) regionCount));
1296
+ }
1297
+
1298
+ protected:
1299
+ HBUINT16 axisCount;
1300
+ HBUINT16 regionCount;
1301
+ VarRegionAxis axesZ[VAR];
1302
+ public:
1303
+ DEFINE_SIZE_ARRAY (4, axesZ);
1304
+ };
1305
+
1306
+ struct VarData
1307
+ {
1308
+ inline unsigned int get_row_size (void) const
1309
+ { return shortCount + regionIndices.len; }
1310
+
1311
+ inline unsigned int get_size (void) const
1312
+ { return itemCount * get_row_size (); }
1313
+
1314
+ inline float get_delta (unsigned int inner,
1315
+ int *coords, unsigned int coord_count,
1316
+ const VarRegionList &regions) const
1317
+ {
1318
+ if (unlikely (inner >= itemCount))
1319
+ return 0.;
1320
+
1321
+ unsigned int count = regionIndices.len;
1322
+ unsigned int scount = shortCount;
1323
+
1324
+ const HBUINT8 *bytes = &StructAfter<HBUINT8> (regionIndices);
1325
+ const HBUINT8 *row = bytes + inner * (scount + count);
1326
+
1327
+ float delta = 0.;
1328
+ unsigned int i = 0;
1329
+
1330
+ const HBINT16 *scursor = reinterpret_cast<const HBINT16 *> (row);
1331
+ for (; i < scount; i++)
1332
+ {
1333
+ float scalar = regions.evaluate (regionIndices.array[i], coords, coord_count);
1334
+ delta += scalar * *scursor++;
1335
+ }
1336
+ const HBINT8 *bcursor = reinterpret_cast<const HBINT8 *> (scursor);
1337
+ for (; i < count; i++)
1338
+ {
1339
+ float scalar = regions.evaluate (regionIndices.array[i], coords, coord_count);
1340
+ delta += scalar * *bcursor++;
1341
+ }
1342
+
1343
+ return delta;
1344
+ }
1345
+
1346
+ inline bool sanitize (hb_sanitize_context_t *c) const
1347
+ {
1348
+ TRACE_SANITIZE (this);
1349
+ return_trace (c->check_struct (this) &&
1350
+ regionIndices.sanitize(c) &&
1351
+ shortCount <= regionIndices.len &&
1352
+ c->check_array (&StructAfter<HBUINT8> (regionIndices),
1353
+ get_row_size (), itemCount));
1354
+ }
1355
+
1356
+ protected:
1357
+ HBUINT16 itemCount;
1358
+ HBUINT16 shortCount;
1359
+ ArrayOf<HBUINT16> regionIndices;
1360
+ HBUINT8 bytesX[VAR];
1361
+ public:
1362
+ DEFINE_SIZE_ARRAY2 (6, regionIndices, bytesX);
1363
+ };
1364
+
1365
+ struct VariationStore
1366
+ {
1367
+ inline float get_delta (unsigned int outer, unsigned int inner,
1368
+ int *coords, unsigned int coord_count) const
1369
+ {
1370
+ if (unlikely (outer >= dataSets.len))
1371
+ return 0.;
1372
+
1373
+ return (this+dataSets[outer]).get_delta (inner,
1374
+ coords, coord_count,
1375
+ this+regions);
1376
+ }
1377
+
1378
+ inline float get_delta (unsigned int index,
1379
+ int *coords, unsigned int coord_count) const
1380
+ {
1381
+ unsigned int outer = index >> 16;
1382
+ unsigned int inner = index & 0xFFFF;
1383
+ return get_delta (outer, inner, coords, coord_count);
1384
+ }
1385
+
1386
+ inline bool sanitize (hb_sanitize_context_t *c) const
1387
+ {
1388
+ TRACE_SANITIZE (this);
1389
+ return_trace (c->check_struct (this) &&
1390
+ format == 1 &&
1391
+ regions.sanitize (c, this) &&
1392
+ dataSets.sanitize (c, this));
1393
+ }
1394
+
1395
+ protected:
1396
+ HBUINT16 format;
1397
+ LOffsetTo<VarRegionList> regions;
1398
+ OffsetArrayOf<VarData, HBUINT32> dataSets;
1399
+ public:
1400
+ DEFINE_SIZE_ARRAY (8, dataSets);
1401
+ };
1402
+
1403
+ /*
1404
+ * Feature Variations
1405
+ */
1406
+
1407
+ struct ConditionFormat1
1408
+ {
1409
+ friend struct Condition;
1410
+
1411
+ private:
1412
+ inline bool evaluate (const int *coords, unsigned int coord_len) const
1413
+ {
1414
+ int coord = axisIndex < coord_len ? coords[axisIndex] : 0;
1415
+ return filterRangeMinValue <= coord && coord <= filterRangeMaxValue;
1416
+ }
1417
+
1418
+ inline bool sanitize (hb_sanitize_context_t *c) const
1419
+ {
1420
+ TRACE_SANITIZE (this);
1421
+ return_trace (c->check_struct (this));
1422
+ }
1423
+
1424
+ protected:
1425
+ HBUINT16 format; /* Format identifier--format = 1 */
1426
+ HBUINT16 axisIndex;
1427
+ F2DOT14 filterRangeMinValue;
1428
+ F2DOT14 filterRangeMaxValue;
1429
+ public:
1430
+ DEFINE_SIZE_STATIC (8);
1431
+ };
1432
+
1433
+ struct Condition
1434
+ {
1435
+ inline bool evaluate (const int *coords, unsigned int coord_len) const
1436
+ {
1437
+ switch (u.format) {
1438
+ case 1: return u.format1.evaluate (coords, coord_len);
1439
+ default:return false;
1440
+ }
1441
+ }
1442
+
1443
+ inline bool sanitize (hb_sanitize_context_t *c) const
1444
+ {
1445
+ TRACE_SANITIZE (this);
1446
+ if (!u.format.sanitize (c)) return_trace (false);
1447
+ switch (u.format) {
1448
+ case 1: return_trace (u.format1.sanitize (c));
1449
+ default:return_trace (true);
1450
+ }
1451
+ }
1452
+
1453
+ protected:
1454
+ union {
1455
+ HBUINT16 format; /* Format identifier */
1456
+ ConditionFormat1 format1;
1457
+ } u;
1458
+ public:
1459
+ DEFINE_SIZE_UNION (2, format);
1460
+ };
1461
+
1462
+ struct ConditionSet
1463
+ {
1464
+ inline bool evaluate (const int *coords, unsigned int coord_len) const
1465
+ {
1466
+ unsigned int count = conditions.len;
1467
+ for (unsigned int i = 0; i < count; i++)
1468
+ if (!(this+conditions.array[i]).evaluate (coords, coord_len))
1469
+ return false;
1470
+ return true;
1471
+ }
1472
+
1473
+ inline bool sanitize (hb_sanitize_context_t *c) const
1474
+ {
1475
+ TRACE_SANITIZE (this);
1476
+ return_trace (conditions.sanitize (c, this));
1477
+ }
1478
+
1479
+ protected:
1480
+ OffsetArrayOf<Condition, HBUINT32> conditions;
1481
+ public:
1482
+ DEFINE_SIZE_ARRAY (2, conditions);
1483
+ };
1484
+
1485
+ struct FeatureTableSubstitutionRecord
1486
+ {
1487
+ friend struct FeatureTableSubstitution;
1488
+
1489
+ inline bool sanitize (hb_sanitize_context_t *c, const void *base) const
1490
+ {
1491
+ TRACE_SANITIZE (this);
1492
+ return_trace (c->check_struct (this) && feature.sanitize (c, base));
1493
+ }
1494
+
1495
+ protected:
1496
+ HBUINT16 featureIndex;
1497
+ LOffsetTo<Feature> feature;
1498
+ public:
1499
+ DEFINE_SIZE_STATIC (6);
1500
+ };
1501
+
1502
+ struct FeatureTableSubstitution
1503
+ {
1504
+ inline const Feature *find_substitute (unsigned int feature_index) const
1505
+ {
1506
+ unsigned int count = substitutions.len;
1507
+ for (unsigned int i = 0; i < count; i++)
1508
+ {
1509
+ const FeatureTableSubstitutionRecord &record = substitutions.array[i];
1510
+ if (record.featureIndex == feature_index)
1511
+ return &(this+record.feature);
1512
+ }
1513
+ return nullptr;
1514
+ }
1515
+
1516
+ inline bool sanitize (hb_sanitize_context_t *c) const
1517
+ {
1518
+ TRACE_SANITIZE (this);
1519
+ return_trace (version.sanitize (c) &&
1520
+ likely (version.major == 1) &&
1521
+ substitutions.sanitize (c, this));
1522
+ }
1523
+
1524
+ protected:
1525
+ FixedVersion<> version; /* Version--0x00010000u */
1526
+ ArrayOf<FeatureTableSubstitutionRecord>
1527
+ substitutions;
1528
+ public:
1529
+ DEFINE_SIZE_ARRAY (6, substitutions);
1530
+ };
1531
+
1532
+ struct FeatureVariationRecord
1533
+ {
1534
+ friend struct FeatureVariations;
1535
+
1536
+ inline bool sanitize (hb_sanitize_context_t *c, const void *base) const
1537
+ {
1538
+ TRACE_SANITIZE (this);
1539
+ return_trace (conditions.sanitize (c, base) &&
1540
+ substitutions.sanitize (c, base));
1541
+ }
1542
+
1543
+ protected:
1544
+ LOffsetTo<ConditionSet>
1545
+ conditions;
1546
+ LOffsetTo<FeatureTableSubstitution>
1547
+ substitutions;
1548
+ public:
1549
+ DEFINE_SIZE_STATIC (8);
1550
+ };
1551
+
1552
+ struct FeatureVariations
1553
+ {
1554
+ static const unsigned int NOT_FOUND_INDEX = 0xFFFFFFFFu;
1555
+
1556
+ inline bool find_index (const int *coords, unsigned int coord_len,
1557
+ unsigned int *index) const
1558
+ {
1559
+ unsigned int count = varRecords.len;
1560
+ for (unsigned int i = 0; i < count; i++)
1561
+ {
1562
+ const FeatureVariationRecord &record = varRecords.array[i];
1563
+ if ((this+record.conditions).evaluate (coords, coord_len))
1564
+ {
1565
+ *index = i;
1566
+ return true;
1567
+ }
1568
+ }
1569
+ *index = NOT_FOUND_INDEX;
1570
+ return false;
1571
+ }
1572
+
1573
+ inline const Feature *find_substitute (unsigned int variations_index,
1574
+ unsigned int feature_index) const
1575
+ {
1576
+ const FeatureVariationRecord &record = varRecords[variations_index];
1577
+ return (this+record.substitutions).find_substitute (feature_index);
1578
+ }
1579
+
1580
+ inline bool sanitize (hb_sanitize_context_t *c) const
1581
+ {
1582
+ TRACE_SANITIZE (this);
1583
+ return_trace (version.sanitize (c) &&
1584
+ likely (version.major == 1) &&
1585
+ varRecords.sanitize (c, this));
1586
+ }
1587
+
1588
+ protected:
1589
+ FixedVersion<> version; /* Version--0x00010000u */
1590
+ LArrayOf<FeatureVariationRecord>
1591
+ varRecords;
1592
+ public:
1593
+ DEFINE_SIZE_ARRAY (8, varRecords);
1594
+ };
1595
+
1596
+
1597
+ /*
1598
+ * Device Tables
1599
+ */
1600
+
1601
+ struct HintingDevice
1602
+ {
1603
+ friend struct Device;
1604
+
1605
+ private:
1606
+
1607
+ inline hb_position_t get_x_delta (hb_font_t *font) const
1608
+ { return get_delta (font->x_ppem, font->x_scale); }
1609
+
1610
+ inline hb_position_t get_y_delta (hb_font_t *font) const
1611
+ { return get_delta (font->y_ppem, font->y_scale); }
1612
+
1613
+ inline unsigned int get_size (void) const
1614
+ {
1615
+ unsigned int f = deltaFormat;
1616
+ if (unlikely (f < 1 || f > 3 || startSize > endSize)) return 3 * HBUINT16::static_size;
1617
+ return HBUINT16::static_size * (4 + ((endSize - startSize) >> (4 - f)));
1618
+ }
1619
+
1620
+ inline bool sanitize (hb_sanitize_context_t *c) const
1621
+ {
1622
+ TRACE_SANITIZE (this);
1623
+ return_trace (c->check_struct (this) && c->check_range (this, this->get_size ()));
1624
+ }
1625
+
1626
+ private:
1627
+
1628
+ inline int get_delta (unsigned int ppem, int scale) const
1629
+ {
1630
+ if (!ppem) return 0;
1631
+
1632
+ int pixels = get_delta_pixels (ppem);
1633
+
1634
+ if (!pixels) return 0;
1635
+
1636
+ return (int) (pixels * (int64_t) scale / ppem);
1637
+ }
1638
+ inline int get_delta_pixels (unsigned int ppem_size) const
1639
+ {
1640
+ unsigned int f = deltaFormat;
1641
+ if (unlikely (f < 1 || f > 3))
1642
+ return 0;
1643
+
1644
+ if (ppem_size < startSize || ppem_size > endSize)
1645
+ return 0;
1646
+
1647
+ unsigned int s = ppem_size - startSize;
1648
+
1649
+ unsigned int byte = deltaValue[s >> (4 - f)];
1650
+ unsigned int bits = (byte >> (16 - (((s & ((1 << (4 - f)) - 1)) + 1) << f)));
1651
+ unsigned int mask = (0xFFFFu >> (16 - (1 << f)));
1652
+
1653
+ int delta = bits & mask;
1654
+
1655
+ if ((unsigned int) delta >= ((mask + 1) >> 1))
1656
+ delta -= mask + 1;
1657
+
1658
+ return delta;
1659
+ }
1660
+
1661
+ protected:
1662
+ HBUINT16 startSize; /* Smallest size to correct--in ppem */
1663
+ HBUINT16 endSize; /* Largest size to correct--in ppem */
1664
+ HBUINT16 deltaFormat; /* Format of DeltaValue array data: 1, 2, or 3
1665
+ * 1 Signed 2-bit value, 8 values per uint16
1666
+ * 2 Signed 4-bit value, 4 values per uint16
1667
+ * 3 Signed 8-bit value, 2 values per uint16
1668
+ */
1669
+ HBUINT16 deltaValue[VAR]; /* Array of compressed data */
1670
+ public:
1671
+ DEFINE_SIZE_ARRAY (6, deltaValue);
1672
+ };
1673
+
1674
+ struct VariationDevice
1675
+ {
1676
+ friend struct Device;
1677
+
1678
+ private:
1679
+
1680
+ inline hb_position_t get_x_delta (hb_font_t *font, const VariationStore &store) const
1681
+ { return font->em_scalef_x (get_delta (font, store)); }
1682
+
1683
+ inline hb_position_t get_y_delta (hb_font_t *font, const VariationStore &store) const
1684
+ { return font->em_scalef_y (get_delta (font, store)); }
1685
+
1686
+ inline bool sanitize (hb_sanitize_context_t *c) const
1687
+ {
1688
+ TRACE_SANITIZE (this);
1689
+ return_trace (c->check_struct (this));
1690
+ }
1691
+
1692
+ private:
1693
+
1694
+ inline float get_delta (hb_font_t *font, const VariationStore &store) const
1695
+ {
1696
+ return store.get_delta (outerIndex, innerIndex, font->coords, font->num_coords);
1697
+ }
1698
+
1699
+ protected:
1700
+ HBUINT16 outerIndex;
1701
+ HBUINT16 innerIndex;
1702
+ HBUINT16 deltaFormat; /* Format identifier for this table: 0x0x8000 */
1703
+ public:
1704
+ DEFINE_SIZE_STATIC (6);
1705
+ };
1706
+
1707
+ struct DeviceHeader
1708
+ {
1709
+ protected:
1710
+ HBUINT16 reserved1;
1711
+ HBUINT16 reserved2;
1712
+ public:
1713
+ HBUINT16 format; /* Format identifier */
1714
+ public:
1715
+ DEFINE_SIZE_STATIC (6);
1716
+ };
1717
+
1718
+ struct Device
1719
+ {
1720
+ inline hb_position_t get_x_delta (hb_font_t *font, const VariationStore &store=Null(VariationStore)) const
1721
+ {
1722
+ switch (u.b.format)
1723
+ {
1724
+ case 1: case 2: case 3:
1725
+ return u.hinting.get_x_delta (font);
1726
+ case 0x8000:
1727
+ return u.variation.get_x_delta (font, store);
1728
+ default:
1729
+ return 0;
1730
+ }
1731
+ }
1732
+ inline hb_position_t get_y_delta (hb_font_t *font, const VariationStore &store=Null(VariationStore)) const
1733
+ {
1734
+ switch (u.b.format)
1735
+ {
1736
+ case 1: case 2: case 3:
1737
+ return u.hinting.get_y_delta (font);
1738
+ case 0x8000:
1739
+ return u.variation.get_y_delta (font, store);
1740
+ default:
1741
+ return 0;
1742
+ }
1743
+ }
1744
+
1745
+ inline bool sanitize (hb_sanitize_context_t *c) const
1746
+ {
1747
+ TRACE_SANITIZE (this);
1748
+ if (!u.b.format.sanitize (c)) return_trace (false);
1749
+ switch (u.b.format) {
1750
+ case 1: case 2: case 3:
1751
+ return_trace (u.hinting.sanitize (c));
1752
+ case 0x8000:
1753
+ return_trace (u.variation.sanitize (c));
1754
+ default:
1755
+ return_trace (true);
1756
+ }
1757
+ }
1758
+
1759
+ protected:
1760
+ union {
1761
+ DeviceHeader b;
1762
+ HintingDevice hinting;
1763
+ VariationDevice variation;
1764
+ } u;
1765
+ public:
1766
+ DEFINE_SIZE_UNION (6, b);
1767
+ };
1768
+
1769
+
1770
+ } /* namespace OT */
1771
+
1772
+
1773
+ #endif /* HB_OT_LAYOUT_COMMON_PRIVATE_HH */