laag-harfbuzz 1.7.6.1

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