laag-harfbuzz 1.7.6.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (876) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +57 -0
  3. data/LICENSE.txt +36 -0
  4. data/README.org +34 -0
  5. data/ext/laag/harfbuzz/extconf.rb +16 -0
  6. data/laag-harfbuzz.gemspec +20 -0
  7. data/lib/laag/harfbuzz.rb +29 -0
  8. data/vendor/github.com/harfbuzz/harfbuzz/.ci/deploy-docs.sh +36 -0
  9. data/vendor/github.com/harfbuzz/harfbuzz/.ci/fail.sh +18 -0
  10. data/vendor/github.com/harfbuzz/harfbuzz/.ci/run-coveralls.sh +14 -0
  11. data/vendor/github.com/harfbuzz/harfbuzz/.ci/trigger-coverity.sh +11 -0
  12. data/vendor/github.com/harfbuzz/harfbuzz/.circleci/config.yml +190 -0
  13. data/vendor/github.com/harfbuzz/harfbuzz/.editorconfig +18 -0
  14. data/vendor/github.com/harfbuzz/harfbuzz/.travis.yml +89 -0
  15. data/vendor/github.com/harfbuzz/harfbuzz/AUTHORS +9 -0
  16. data/vendor/github.com/harfbuzz/harfbuzz/BUILD.md +50 -0
  17. data/vendor/github.com/harfbuzz/harfbuzz/CMakeLists.txt +848 -0
  18. data/vendor/github.com/harfbuzz/harfbuzz/COPYING +36 -0
  19. data/vendor/github.com/harfbuzz/harfbuzz/Makefile.am +85 -0
  20. data/vendor/github.com/harfbuzz/harfbuzz/NEWS +1832 -0
  21. data/vendor/github.com/harfbuzz/harfbuzz/README +16 -0
  22. data/vendor/github.com/harfbuzz/harfbuzz/README.md +1 -0
  23. data/vendor/github.com/harfbuzz/harfbuzz/README.python +30 -0
  24. data/vendor/github.com/harfbuzz/harfbuzz/RELEASING.md +99 -0
  25. data/vendor/github.com/harfbuzz/harfbuzz/THANKS +7 -0
  26. data/vendor/github.com/harfbuzz/harfbuzz/TODO +42 -0
  27. data/vendor/github.com/harfbuzz/harfbuzz/appveyor.yml +61 -0
  28. data/vendor/github.com/harfbuzz/harfbuzz/autogen.sh +48 -0
  29. data/vendor/github.com/harfbuzz/harfbuzz/configure.ac +542 -0
  30. data/vendor/github.com/harfbuzz/harfbuzz/docs/HarfBuzz.png +0 -0
  31. data/vendor/github.com/harfbuzz/harfbuzz/docs/HarfBuzz.svg +277 -0
  32. data/vendor/github.com/harfbuzz/harfbuzz/docs/Makefile.am +123 -0
  33. data/vendor/github.com/harfbuzz/harfbuzz/docs/harfbuzz-docs.xml +210 -0
  34. data/vendor/github.com/harfbuzz/harfbuzz/docs/harfbuzz-overrides.txt +0 -0
  35. data/vendor/github.com/harfbuzz/harfbuzz/docs/harfbuzz-sections.txt +627 -0
  36. data/vendor/github.com/harfbuzz/harfbuzz/docs/usermanual-buffers-language-script-and-direction.xml +77 -0
  37. data/vendor/github.com/harfbuzz/harfbuzz/docs/usermanual-clusters.xml +304 -0
  38. data/vendor/github.com/harfbuzz/harfbuzz/docs/usermanual-fonts-and-faces.xml +18 -0
  39. data/vendor/github.com/harfbuzz/harfbuzz/docs/usermanual-glyph-information.xml +8 -0
  40. data/vendor/github.com/harfbuzz/harfbuzz/docs/usermanual-hello-harfbuzz.xml +183 -0
  41. data/vendor/github.com/harfbuzz/harfbuzz/docs/usermanual-install-harfbuzz.xml +70 -0
  42. data/vendor/github.com/harfbuzz/harfbuzz/docs/usermanual-opentype-features.xml +13 -0
  43. data/vendor/github.com/harfbuzz/harfbuzz/docs/usermanual-what-is-harfbuzz.xml +115 -0
  44. data/vendor/github.com/harfbuzz/harfbuzz/docs/version.xml.in +1 -0
  45. data/vendor/github.com/harfbuzz/harfbuzz/git.mk +400 -0
  46. data/vendor/github.com/harfbuzz/harfbuzz/harfbuzz.doap +24 -0
  47. data/vendor/github.com/harfbuzz/harfbuzz/m4/ax_code_coverage.m4 +264 -0
  48. data/vendor/github.com/harfbuzz/harfbuzz/m4/ax_cxx_compile_stdcxx.m4 +982 -0
  49. data/vendor/github.com/harfbuzz/harfbuzz/m4/ax_pthread.m4 +485 -0
  50. data/vendor/github.com/harfbuzz/harfbuzz/m4/pkg.m4 +157 -0
  51. data/vendor/github.com/harfbuzz/harfbuzz/mingw32.sh +22 -0
  52. data/vendor/github.com/harfbuzz/harfbuzz/mingw64.sh +22 -0
  53. data/vendor/github.com/harfbuzz/harfbuzz/replace-enum-strings.cmake +21 -0
  54. data/vendor/github.com/harfbuzz/harfbuzz/src/Makefile.am +445 -0
  55. data/vendor/github.com/harfbuzz/harfbuzz/src/Makefile.sources +214 -0
  56. data/vendor/github.com/harfbuzz/harfbuzz/src/check-c-linkage-decls.sh +27 -0
  57. data/vendor/github.com/harfbuzz/harfbuzz/src/check-externs.sh +22 -0
  58. data/vendor/github.com/harfbuzz/harfbuzz/src/check-header-guards.sh +24 -0
  59. data/vendor/github.com/harfbuzz/harfbuzz/src/check-includes.sh +44 -0
  60. data/vendor/github.com/harfbuzz/harfbuzz/src/check-libstdc++.sh +44 -0
  61. data/vendor/github.com/harfbuzz/harfbuzz/src/check-static-inits.sh +40 -0
  62. data/vendor/github.com/harfbuzz/harfbuzz/src/check-symbols.sh +62 -0
  63. data/vendor/github.com/harfbuzz/harfbuzz/src/dev-run.sh +98 -0
  64. data/vendor/github.com/harfbuzz/harfbuzz/src/dump-indic-data.cc +43 -0
  65. data/vendor/github.com/harfbuzz/harfbuzz/src/dump-khmer-data.cc +43 -0
  66. data/vendor/github.com/harfbuzz/harfbuzz/src/dump-myanmar-data.cc +43 -0
  67. data/vendor/github.com/harfbuzz/harfbuzz/src/dump-use-data.cc +38 -0
  68. data/vendor/github.com/harfbuzz/harfbuzz/src/gen-arabic-table.py +269 -0
  69. data/vendor/github.com/harfbuzz/harfbuzz/src/gen-def.py +19 -0
  70. data/vendor/github.com/harfbuzz/harfbuzz/src/gen-indic-table.py +260 -0
  71. data/vendor/github.com/harfbuzz/harfbuzz/src/gen-unicode-ranges.py +52 -0
  72. data/vendor/github.com/harfbuzz/harfbuzz/src/gen-use-table.py +484 -0
  73. data/vendor/github.com/harfbuzz/harfbuzz/src/harfbuzz-config.cmake.in +82 -0
  74. data/vendor/github.com/harfbuzz/harfbuzz/src/harfbuzz-gobject.pc.in +12 -0
  75. data/vendor/github.com/harfbuzz/harfbuzz/src/harfbuzz-icu.pc.in +13 -0
  76. data/vendor/github.com/harfbuzz/harfbuzz/src/harfbuzz-subset.pc.in +12 -0
  77. data/vendor/github.com/harfbuzz/harfbuzz/src/harfbuzz.pc.in +13 -0
  78. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-aat-layout-ankr-table.hh +80 -0
  79. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-aat-layout-common-private.hh +728 -0
  80. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-aat-layout-kerx-table.hh +339 -0
  81. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-aat-layout-morx-table.hh +728 -0
  82. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-aat-layout-private.hh +43 -0
  83. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-aat-layout-trak-table.hh +201 -0
  84. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-aat-layout.cc +143 -0
  85. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-atomic-private.hh +189 -0
  86. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-blob.cc +504 -0
  87. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-blob.h +129 -0
  88. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-buffer-deserialize-json.hh +643 -0
  89. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-buffer-deserialize-json.rl +132 -0
  90. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-buffer-deserialize-text.hh +571 -0
  91. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-buffer-deserialize-text.rl +126 -0
  92. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-buffer-private.hh +388 -0
  93. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-buffer-serialize.cc +486 -0
  94. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-buffer.cc +2010 -0
  95. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-buffer.h +562 -0
  96. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-common.cc +1050 -0
  97. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-common.h +397 -0
  98. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-coretext.cc +1401 -0
  99. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-coretext.h +64 -0
  100. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-debug.hh +444 -0
  101. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-deprecated.h +65 -0
  102. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-directwrite.cc +931 -0
  103. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-directwrite.h +38 -0
  104. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-dsalgs.hh +161 -0
  105. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-face-private.hh +111 -0
  106. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-face.cc +506 -0
  107. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-face.h +121 -0
  108. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-fallback-shape.cc +149 -0
  109. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-font-private.hh +561 -0
  110. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-font.cc +1846 -0
  111. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-font.h +641 -0
  112. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ft.cc +783 -0
  113. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ft.h +132 -0
  114. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-glib.cc +431 -0
  115. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-glib.h +56 -0
  116. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-gobject-enums.cc.tmpl +73 -0
  117. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-gobject-enums.h.tmpl +56 -0
  118. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-gobject-structs.cc +83 -0
  119. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-gobject-structs.h +138 -0
  120. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-gobject.h +40 -0
  121. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-graphite2.cc +421 -0
  122. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-graphite2.h +52 -0
  123. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-icu.cc +394 -0
  124. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-icu.h +52 -0
  125. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-mutex-private.hh +141 -0
  126. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-object-private.hh +196 -0
  127. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-open-file-private.hh +372 -0
  128. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-open-type-private.hh +1238 -0
  129. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-cmap-table.hh +789 -0
  130. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-color-cbdt-table.hh +471 -0
  131. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-color-colr-table.hh +142 -0
  132. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-color-cpal-table.hh +208 -0
  133. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-color.cc +183 -0
  134. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-font.cc +281 -0
  135. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-font.h +45 -0
  136. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-glyf-table.hh +473 -0
  137. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-hdmx-table.hh +198 -0
  138. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-head-table.hh +154 -0
  139. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-hhea-table.hh +98 -0
  140. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-hmtx-table.hh +328 -0
  141. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-kern-table.hh +394 -0
  142. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-layout-base-table.hh +655 -0
  143. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-layout-common-private.hh +1773 -0
  144. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-layout-gdef-table.hh +459 -0
  145. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-layout-gpos-table.hh +1654 -0
  146. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-layout-gsub-table.hh +1364 -0
  147. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-layout-gsubgpos-private.hh +2374 -0
  148. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-layout-jstf-table.hh +234 -0
  149. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-layout-private.hh +683 -0
  150. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-layout.cc +1313 -0
  151. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-layout.h +338 -0
  152. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-map-private.hh +250 -0
  153. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-map.cc +336 -0
  154. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-math-table.hh +722 -0
  155. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-math.cc +253 -0
  156. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-math.h +209 -0
  157. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-maxp-table.hh +148 -0
  158. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-name-table.hh +138 -0
  159. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-os2-table.hh +181 -0
  160. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-os2-unicode-ranges.hh +247 -0
  161. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-post-macroman.hh +294 -0
  162. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-post-table.hh +282 -0
  163. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-arabic-fallback.hh +354 -0
  164. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-arabic-private.hh +50 -0
  165. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-arabic-table.hh +398 -0
  166. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-arabic-win1256.hh +323 -0
  167. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-arabic.cc +721 -0
  168. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-default.cc +46 -0
  169. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-hangul.cc +431 -0
  170. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-hebrew.cc +186 -0
  171. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-indic-machine.hh +1319 -0
  172. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-indic-machine.rl +125 -0
  173. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-indic-private.hh +401 -0
  174. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-indic-table.cc +486 -0
  175. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-indic.cc +1569 -0
  176. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-khmer-machine.hh +294 -0
  177. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-khmer-machine.rl +107 -0
  178. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-khmer-private.hh +124 -0
  179. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-khmer.cc +835 -0
  180. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-myanmar-machine.hh +413 -0
  181. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-myanmar-machine.rl +129 -0
  182. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-myanmar-private.hh +171 -0
  183. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-myanmar.cc +401 -0
  184. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-private.hh +397 -0
  185. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-thai.cc +383 -0
  186. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-tibetan.cc +63 -0
  187. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-use-machine.hh +502 -0
  188. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-use-machine.rl +176 -0
  189. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-use-private.hh +97 -0
  190. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-use-table.cc +788 -0
  191. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-use.cc +612 -0
  192. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-fallback-private.hh +53 -0
  193. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-fallback.cc +559 -0
  194. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-normalize-private.hh +69 -0
  195. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-normalize.cc +433 -0
  196. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-private.hh +108 -0
  197. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape.cc +970 -0
  198. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape.h +53 -0
  199. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-tag.cc +1094 -0
  200. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-tag.h +59 -0
  201. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-var-avar-table.hh +149 -0
  202. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-var-fvar-table.hh +209 -0
  203. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-var-hvar-table.hh +165 -0
  204. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-var-mvar-table.hh +114 -0
  205. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-var.cc +159 -0
  206. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-var.h +105 -0
  207. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot.h +45 -0
  208. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-private.hh +1073 -0
  209. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-set-digest-private.hh +179 -0
  210. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-set-private.hh +658 -0
  211. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-set.cc +519 -0
  212. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-set.h +165 -0
  213. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-shape-plan-private.hh +67 -0
  214. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-shape-plan.cc +578 -0
  215. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-shape-plan.h +108 -0
  216. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-shape.cc +161 -0
  217. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-shape.h +62 -0
  218. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-shaper-impl-private.hh +43 -0
  219. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-shaper-list.hh +58 -0
  220. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-shaper-private.hh +124 -0
  221. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-shaper.cc +111 -0
  222. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-string-array.hh +81 -0
  223. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-subset-glyf.cc +307 -0
  224. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-subset-glyf.hh +40 -0
  225. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-subset-input.cc +119 -0
  226. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-subset-plan.cc +227 -0
  227. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-subset-plan.hh +85 -0
  228. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-subset-private.hh +62 -0
  229. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-subset.cc +339 -0
  230. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-subset.h +83 -0
  231. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ucdn.cc +273 -0
  232. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ucdn/COPYING +13 -0
  233. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ucdn/Makefile.am +16 -0
  234. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ucdn/Makefile.sources +7 -0
  235. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ucdn/README +40 -0
  236. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ucdn/ucdn.c +360 -0
  237. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ucdn/ucdn.h +453 -0
  238. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ucdn/ucdn_db.h +5540 -0
  239. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-unicode-private.hh +371 -0
  240. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-unicode.cc +563 -0
  241. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-unicode.h +471 -0
  242. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-uniscribe.cc +1039 -0
  243. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-uniscribe.h +46 -0
  244. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-utf-private.hh +282 -0
  245. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-version.h +66 -0
  246. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-version.h.in +66 -0
  247. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-warning.cc +39 -0
  248. data/vendor/github.com/harfbuzz/harfbuzz/src/hb.h +51 -0
  249. data/vendor/github.com/harfbuzz/harfbuzz/src/main.cc +201 -0
  250. data/vendor/github.com/harfbuzz/harfbuzz/src/sample.py +78 -0
  251. data/vendor/github.com/harfbuzz/harfbuzz/src/test-buffer-serialize.cc +129 -0
  252. data/vendor/github.com/harfbuzz/harfbuzz/src/test-size-params.cc +94 -0
  253. data/vendor/github.com/harfbuzz/harfbuzz/src/test-unicode-ranges.cc +67 -0
  254. data/vendor/github.com/harfbuzz/harfbuzz/src/test-would-substitute.cc +104 -0
  255. data/vendor/github.com/harfbuzz/harfbuzz/src/test.cc +134 -0
  256. data/vendor/github.com/harfbuzz/harfbuzz/test/CMakeLists.txt +4 -0
  257. data/vendor/github.com/harfbuzz/harfbuzz/test/Makefile.am +15 -0
  258. data/vendor/github.com/harfbuzz/harfbuzz/test/api/.valgrind-suppressions +0 -0
  259. data/vendor/github.com/harfbuzz/harfbuzz/test/api/CMakeLists.txt +29 -0
  260. data/vendor/github.com/harfbuzz/harfbuzz/test/api/Makefile.am +169 -0
  261. data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/Inconsolata-Regular.ab.ttf +0 -0
  262. data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/Inconsolata-Regular.abc.ttf +0 -0
  263. data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/Inconsolata-Regular.abc.widerc.ttf +0 -0
  264. data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/Inconsolata-Regular.ac.ttf +0 -0
  265. data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/Inconsolata-Regular.ac.widerc.ttf +0 -0
  266. data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/MathTestFontEmpty.otf +0 -0
  267. data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/MathTestFontFull.otf +0 -0
  268. data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/MathTestFontNone.otf +0 -0
  269. data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/MathTestFontPartial1.otf +0 -0
  270. data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/MathTestFontPartial2.otf +0 -0
  271. data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/MathTestFontPartial3.otf +0 -0
  272. data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/MathTestFontPartial4.otf +0 -0
  273. data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/README +3 -0
  274. data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/Roboto-Regular.abc.cmap-format12-only.ttf +0 -0
  275. data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/Roboto-Regular.abc.ttf +0 -0
  276. data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/Roboto-Regular.ac.cmap-format12-only.ttf +0 -0
  277. data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/Roboto-Regular.ac.nohints.ttf +0 -0
  278. data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/Roboto-Regular.ac.ttf +0 -0
  279. data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/Roboto-Regular.b.ttf +0 -0
  280. data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/Roboto-Regular.components.1fc.nohints.ttf +0 -0
  281. data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/Roboto-Regular.components.subset.ttf +0 -0
  282. data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/Roboto-Regular.components.ttf +0 -0
  283. data/vendor/github.com/harfbuzz/harfbuzz/test/api/hb-subset-test.h +136 -0
  284. data/vendor/github.com/harfbuzz/harfbuzz/test/api/hb-test.h +314 -0
  285. data/vendor/github.com/harfbuzz/harfbuzz/test/api/test-blob.c +349 -0
  286. data/vendor/github.com/harfbuzz/harfbuzz/test/api/test-buffer.c +884 -0
  287. data/vendor/github.com/harfbuzz/harfbuzz/test/api/test-c.c +64 -0
  288. data/vendor/github.com/harfbuzz/harfbuzz/test/api/test-common.c +225 -0
  289. data/vendor/github.com/harfbuzz/harfbuzz/test/api/test-cplusplus.cc +30 -0
  290. data/vendor/github.com/harfbuzz/harfbuzz/test/api/test-font.c +550 -0
  291. data/vendor/github.com/harfbuzz/harfbuzz/test/api/test-object.c +375 -0
  292. data/vendor/github.com/harfbuzz/harfbuzz/test/api/test-ot-color.c +319 -0
  293. data/vendor/github.com/harfbuzz/harfbuzz/test/api/test-ot-math.c +712 -0
  294. data/vendor/github.com/harfbuzz/harfbuzz/test/api/test-ot-tag.c +320 -0
  295. data/vendor/github.com/harfbuzz/harfbuzz/test/api/test-set.c +399 -0
  296. data/vendor/github.com/harfbuzz/harfbuzz/test/api/test-shape.c +208 -0
  297. data/vendor/github.com/harfbuzz/harfbuzz/test/api/test-subset-cmap.c +82 -0
  298. data/vendor/github.com/harfbuzz/harfbuzz/test/api/test-subset-glyf.c +183 -0
  299. data/vendor/github.com/harfbuzz/harfbuzz/test/api/test-subset-hdmx.c +81 -0
  300. data/vendor/github.com/harfbuzz/harfbuzz/test/api/test-subset-hmtx.c +162 -0
  301. data/vendor/github.com/harfbuzz/harfbuzz/test/api/test-subset-os2.c +59 -0
  302. data/vendor/github.com/harfbuzz/harfbuzz/test/api/test-unicode.c +937 -0
  303. data/vendor/github.com/harfbuzz/harfbuzz/test/api/test-version.c +81 -0
  304. data/vendor/github.com/harfbuzz/harfbuzz/test/fuzzing/CMakeLists.txt +18 -0
  305. data/vendor/github.com/harfbuzz/harfbuzz/test/fuzzing/Makefile.am +52 -0
  306. data/vendor/github.com/harfbuzz/harfbuzz/test/fuzzing/README +21 -0
  307. data/vendor/github.com/harfbuzz/harfbuzz/test/fuzzing/hb-fuzzer.cc +52 -0
  308. data/vendor/github.com/harfbuzz/harfbuzz/test/fuzzing/hb-fuzzer.hh +4 -0
  309. data/vendor/github.com/harfbuzz/harfbuzz/test/fuzzing/main.cc +21 -0
  310. data/vendor/github.com/harfbuzz/harfbuzz/test/fuzzing/run-fuzzer-tests.py +32 -0
  311. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/CMakeLists.txt +17 -0
  312. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/Makefile.am +35 -0
  313. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/README.md +41 -0
  314. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/Makefile.am +13 -0
  315. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/COPYING +95 -0
  316. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/Makefile.am +20 -0
  317. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/Makefile.sources +47 -0
  318. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/0509e80afb379d16560e9e47bdd7d888bebdebc6.ttf +0 -0
  319. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/051d92f8bc6ff724511b296c27623f824de256e9.ttf +0 -0
  320. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/074a5ae6b19de8f29772fdd5df2d3d833f81f5e6.ttf +0 -0
  321. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/07f054357ff8638bac3711b422a1e31180bba863.ttf +0 -0
  322. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/15dfc433a135a658b9f4b1a861b5cdd9658ccbb9.ttf +0 -0
  323. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/1735326da89f0818cd8c51a0600e9789812c0f94.ttf +0 -0
  324. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/191826b9643e3f124d865d617ae609db6a2ce203.ttf +0 -0
  325. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/1a3d8f381387dd29be1e897e4b5100ac8b4829e1.ttf +0 -0
  326. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/1a6f1687b7a221f9f2c834b0b360d3c8463b6daf.ttf +0 -0
  327. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/1c04a16f32a39c26c851b7fc014d2e8d298ba2b8.ttf +0 -0
  328. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/1c2c3fc37b2d4c3cb2ef726c6cdaaabd4b7f3eb9.ttf +0 -0
  329. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf +0 -0
  330. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/1ed7e9064f008f62de6ff0207bb4dd29409597a5.ttf +0 -0
  331. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/205edd09bd3d141cc9580f650109556cc28b22cb.ttf +0 -0
  332. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/217a934cfe15c548b572c203dceb2befdf026462.ttf +0 -0
  333. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/21b7fb9c1eeae260473809fbc1fe330f66a507cd.ttf +0 -0
  334. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/226bc2deab3846f1a682085f70c67d0421014144.ttf +0 -0
  335. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/233c1e252e737ca79e03a9fd56b71aaa4a230f2b.ttf +0 -0
  336. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/243798dd281c1c77c065958e1ff467420faa9bde.ttf +0 -0
  337. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/24b8d24d00ae86f49791b746da4c9d3f717a51a8.ttf +0 -0
  338. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/270b89df543a7e48e206a2d830c0e10e5265c630.ttf +0 -0
  339. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/298c9e1d955f10f6f72c6915c3c6ff9bf9695cec.ttf +0 -0
  340. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf +0 -0
  341. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/319f5d7ebffbefc5c5e6569f8cea73444d7a7268.ttf +0 -0
  342. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/341421e629668b1a1242245d39238ca48432d35d.ttf +0 -0
  343. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/3493e92eaded2661cadde752a39f9d58b11f0326.ttf +0 -0
  344. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/3511ff5c1647150595846ac414c595cccac34f18.ttf +0 -0
  345. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/37033cc5cf37bb223d7355153016b6ccece93b28.ttf +0 -0
  346. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/373e67bf41ca264e260a9716162b71a23549e885.ttf +0 -0
  347. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/375d6ae32a3cbe52fbf81a4e5777e3377675d5a3.ttf +0 -0
  348. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/3cae6bfe5b57c07ba81ddbd54c02fe4f3a1e3bf6.ttf +0 -0
  349. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/3d0b77a2360aa6faa1385aaa510509ab70dfbeff.ttf +0 -0
  350. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/43979b90b2dd929723cf4fe1715990bcb9c9a56b.ttf +0 -0
  351. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/43ef465752be9af900745f72fe29cb853a1401a5.ttf +0 -0
  352. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/45855bc8d46332b39c4ab9e2ee1a26b1f896da6b.ttf +0 -0
  353. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/49c9f7485c1392fa09a1b801bc2ffea79275f22e.ttf +0 -0
  354. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/4cce528e99f600ed9c25a2b69e32eb94a03b4ae8.ttf +0 -0
  355. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/4fac3929fc3332834e93673780ec0fe94342d193.ttf +0 -0
  356. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/5028afb650b1bb718ed2131e872fbcce57828fff.ttf +0 -0
  357. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/53374c7ca3657be37efde7ed02ae34229a56ae1f.ttf +0 -0
  358. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/54674a3111d209fb6be0ed31745314b7a8d2c244.ttf +0 -0
  359. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/558661aa659912f4d30ecd27bd09835171a8e2b0.ttf +0 -0
  360. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/55c88ebbe938680b08f92c3de20713183e0c7481.ttf +0 -0
  361. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/56cfd0e18d07f41c38e9598545a6d369127fc6f9.ttf +0 -0
  362. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/573d3a3177c9a8646e94c8a0d7b224334340946a.ttf +0 -0
  363. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/57a9d9f83020155cbb1d2be1f43d82388cbecc88.ttf +0 -0
  364. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/59a585a63b3df608fbeef00956c8c108deec7de6.ttf +0 -0
  365. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/5a5daf5eb5a4db77a2baa3ad9c7a6ed6e0655fa8.ttf +0 -0
  366. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/5dfad7735c6a67085f1b90d4d497e32907db4c78.ttf +0 -0
  367. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/641bd9db850193064d17575053ae2bf8ec149ddc.ttf +0 -0
  368. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/663aef6b019dbf45ffd74089e2b5f2496ceceb18.ttf +0 -0
  369. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/6991b13ce889466be6de3f66e891de2bc0f117ee.ttf +0 -0
  370. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/6ff0fbead4462d9f229167b4e6839eceb8465058.ttf +0 -0
  371. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/706c5d7b625f207bc0d874c67237aad6f1e9cd6f.ttf +0 -0
  372. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/757ebd573617a24aa9dfbf0b885c54875c6fe06b.ttf +0 -0
  373. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/7a37dc4d5bf018456aea291cee06daf004c0221c.ttf +0 -0
  374. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/7e14e7883ed152baa158b80e207b66114c823a8b.ttf +0 -0
  375. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/8099955657a54e9ee38a6ba1d6f950ce58e3cc25.ttf +0 -0
  376. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/813c2f8e5512187fd982417a7fb4286728e6f4a8.ttf +0 -0
  377. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/81c368a33816fb20e9f647e8f24e2180f4720263.ttf +0 -0
  378. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/8228d035fcd65d62ec9728fb34f42c63be93a5d3.ttf +0 -0
  379. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/8240789f6d12d4cfc4b5e8e6f246c3701bcf861f.ttf +0 -0
  380. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/82f4f3b57bb55344e72e70231380202a52af5805.ttf +0 -0
  381. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/8454d22037f892e76614e1645d066689a0200e61.ttf +0 -0
  382. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf +0 -0
  383. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/856ff9562451293cbeff6f396d4e3877c4f0a436.ttf +0 -0
  384. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/85fe0be440c64ac77699e21c2f1bd933a919167e.ttf +0 -0
  385. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/87f85d17d26f1fe9ad28d7365101958edaefb967.ttf +0 -0
  386. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/8a9fea2a7384f2116e5b84a9b31f83be7850ce21.ttf +0 -0
  387. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/94a5d6fb15a27521fba9ea4aee9cb39b2d03322a.ttf +0 -0
  388. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/96490dd2ff81233b335a650e7eb660e0e7b2eeea.ttf +0 -0
  389. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/98b7887cff91f722b92a8ff800120954606354f9.ttf +0 -0
  390. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/9d8a94a67932a3ab75a596fc8b5c6d0392ca9e49.ttf +0 -0
  391. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/a014549f766436cf55b2ceb40e462038938ee899.ttf +0 -0
  392. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf +0 -0
  393. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/a34a7b00f22ffb5fd7eef6933b81c7e71bc2cdfb.ttf +0 -0
  394. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/a34a9191d9376bda419836effeef7e75c1386016.ttf +0 -0
  395. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/a69118c2c2ada48ff803d9149daa54c9ebdae30e.ttf +0 -0
  396. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/a6c76d1bafde4a0b1026ebcc932d2e5c6fd02442.ttf +0 -0
  397. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/a919b33197965846f21074b24e30250d67277bce.ttf +0 -0
  398. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/a98e908e2ed21b22228ea59ebcc0f05034c86f2e.ttf +0 -0
  399. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/af3086380b743099c54a3b11b96766039ea62fcd.ttf +0 -0
  400. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/b151cfcdaa77585d77f17a42158e0873fc8e2633.ttf +0 -0
  401. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/b6acef662e0beb8d5fcf5b61c6b0ca69537b7402.ttf +0 -0
  402. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/b9e2aaa0d75fcef6971ec3a96d806ba4a6b31fe2.ttf +0 -0
  403. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/bb0c53752e85c3d28973ebc913287b8987d3dfe8.ttf +0 -0
  404. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/bb29ce50df2bdba2d10726427c6b7609bf460e04.ttf +0 -0
  405. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/bb9473d2403488714043bcfb946c9f78b86ad627.ttf +0 -0
  406. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/bbf4a308c402f0678c3e82844892a4da2ebe598f.ttf +0 -0
  407. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/bf39b0e91ef9807f15a9e283a21a14a209fd2cfc.ttf +0 -0
  408. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/bf962d3202883a820aed019d9b5c1838c2ff69c6.ttf +0 -0
  409. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/c4e48b0886ef460f532fb49f00047ec92c432ec0.ttf +0 -0
  410. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/cc5f3d2d717fb6bd4dfae1c16d48a2cb8e12233b.ttf +0 -0
  411. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf +0 -0
  412. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/d629e7fedc0b350222d7987345fe61613fa3929a.ttf +0 -0
  413. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/d9b8bc10985f24796826c29f7ccba3d0ae11ec02.ttf +0 -0
  414. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/dd9f0c7c7c36f75a18be0cab1cddf8f3ab0f366b.ttf +0 -0
  415. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/df768b9c257e0c9c35786c47cae15c46571d56be.ttf +0 -0
  416. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/e207635780b42f898d58654b65098763e340f5c7.ttf +0 -0
  417. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/e68a88939e0f06e34d2bc911f09b70890289c8fd.ttf +0 -0
  418. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/e88c339237f52d21e01c55f01b9c1b4cc14a0467.ttf +0 -0
  419. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/e90374e5e439e00725b4fe7a8d73db57c5a97f82.ttf +0 -0
  420. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/ee39587d13b2afa5499cc79e45780aa79293bbd4.ttf +0 -0
  421. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/ef2511f215aa3ca847cbfffbf861793b42170875.ttf +0 -0
  422. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/ef86fe710cfea877bbe0dbb6946a1f88d0661031.ttf +0 -0
  423. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/f22416c692720a7d46fadf4af99f4c9e094f00b9.ttf +0 -0
  424. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/f443753e8ffe8e8aae606cfba158e00334b6efb1.ttf +0 -0
  425. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/f499fbc23865022234775c43503bba2e63978fe1.ttf +0 -0
  426. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/f518eb6f6b5eec2946c9fbbbde44e45d46f5e2ac.ttf +0 -0
  427. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/f9b1dd4dcb515e757789a22cb4241107746fd3d0.ttf +0 -0
  428. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/fab39d60d758cb586db5a504f218442cd1395725.ttf +0 -0
  429. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/fbb6c84c9e1fe0c39e152fbe845e51fd81f6748e.ttf +0 -0
  430. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/fcdcffbdf1c4c97c05308d7600e4c283eb47dbca.ttf +0 -0
  431. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/ffa0f5d2d9025486d8469d8b1fdd983e7632499b.ttf +0 -0
  432. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/arabic-fallback-shaping.tests +1 -0
  433. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/arabic-feature-order.tests +4 -0
  434. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/arabic-like-joining.tests +1 -0
  435. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/arabic-mark-order.tests +6 -0
  436. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/arabic-stch.tests +1 -0
  437. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/automatic-fractions.tests +3 -0
  438. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/cluster.tests +2 -0
  439. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/color-fonts.tests +1 -0
  440. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/context-matching.tests +3 -0
  441. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/cursive-positioning.tests +4 -0
  442. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/default-ignorables.tests +2 -0
  443. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/emoji-flag-tags.tests +2 -0
  444. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/fallback-positioning.tests +2 -0
  445. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/fuzzed.tests +23 -0
  446. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/hangul-jamo.tests +2 -0
  447. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/hyphens.tests +2 -0
  448. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/indic-consonant-with-stacker.tests +4 -0
  449. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/indic-init.tests +1 -0
  450. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/indic-joiner-candrabindu.tests +2 -0
  451. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/indic-joiners.tests +2 -0
  452. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/indic-old-spec.tests +2 -0
  453. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/indic-pref-blocking.tests +2 -0
  454. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/indic-script-extensions.tests +2 -0
  455. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/indic-special-cases.tests +3 -0
  456. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/indic-syllable.tests +8 -0
  457. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/language-tags.tests +12 -0
  458. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/ligature-id.tests +36 -0
  459. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/mark-attachment.tests +1 -0
  460. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/mark-filtering-sets.tests +5 -0
  461. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/mongolian-variation-selector.tests +4 -0
  462. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/myanmar-syllable.tests +1 -0
  463. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/simple.tests +2 -0
  464. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/spaces.tests +17 -0
  465. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/tibetan-contractions-1.tests +60 -0
  466. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/tibetan-contractions-2.tests +53 -0
  467. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/tibetan-vowels.tests +11 -0
  468. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/use-marchen.tests +35 -0
  469. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/use-syllable.tests +8 -0
  470. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/use.tests +5 -0
  471. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/variations-rvrn.tests +100 -0
  472. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/vertical.tests +3 -0
  473. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/zero-width-marks.tests +11 -0
  474. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/COPYING +13 -0
  475. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/DISABLED +35 -0
  476. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/Makefile.am +26 -0
  477. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/Makefile.sources +66 -0
  478. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/README +7 -0
  479. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/extract-tests.py +49 -0
  480. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/AdobeVFPrototype-Subset.otf +0 -0
  481. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/FDArrayTest257.otf +0 -0
  482. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/FDArrayTest65535.otf +0 -0
  483. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/NotoSansBalinese-Regular.ttf +0 -0
  484. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/NotoSansKannada-Regular.ttf +0 -0
  485. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/NotoSerifKannada-Regular.ttf +0 -0
  486. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/Selawik-README.md +60 -0
  487. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/Selawik-variable.ttf +0 -0
  488. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestAVAR.ttf +0 -0
  489. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestCMAP14.otf +0 -0
  490. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestCMAPMacTurkish.ttf +0 -0
  491. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestCVARGVAROne.ttf +0 -0
  492. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestCVARGVARTwo.ttf +0 -0
  493. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestGLYFOne.ttf +0 -0
  494. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestGPOSFour.ttf +0 -0
  495. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestGPOSOne.ttf +0 -0
  496. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestGPOSThree.ttf +0 -0
  497. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestGPOSTwo.otf +0 -0
  498. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestGSUBOne.otf +0 -0
  499. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestGVAREight.ttf +0 -0
  500. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestGVARFour.ttf +0 -0
  501. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestGVARNine.ttf +0 -0
  502. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestGVAROne.ttf +0 -0
  503. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestGVARThree.ttf +0 -0
  504. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestGVARTwo.ttf +0 -0
  505. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestHVAROne.otf +0 -0
  506. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestHVARTwo.ttf +0 -0
  507. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestKERNOne.otf +0 -0
  508. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXEight.ttf +0 -0
  509. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXEighteen.ttf +0 -0
  510. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXEleven.ttf +0 -0
  511. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXFour.ttf +0 -0
  512. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXFourteen.ttf +0 -0
  513. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXNine.ttf +0 -0
  514. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXOne.ttf +0 -0
  515. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXSeventeen.ttf +0 -0
  516. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXSixteen.ttf +0 -0
  517. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXTen.ttf +0 -0
  518. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXThirteen.ttf +0 -0
  519. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXThree.ttf +0 -0
  520. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXTwelve.ttf +0 -0
  521. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXTwenty.ttf +0 -0
  522. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXTwentyfive.ttf +0 -0
  523. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXTwentyone.ttf +0 -0
  524. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXTwentysix.ttf +0 -0
  525. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXTwentythree.ttf +0 -0
  526. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXTwentytwo.ttf +0 -0
  527. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXTwo.ttf +0 -0
  528. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestShapeAran.ttf +0 -0
  529. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestShapeEthi.ttf +0 -0
  530. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/Zycon.ttf +0 -0
  531. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/AVAR-1.tests +17 -0
  532. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/CFF-1.tests +13 -0
  533. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/CFF-2.tests +13 -0
  534. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/CFF2-1.tests +9 -0
  535. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/CMAP-1.tests +4 -0
  536. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/CMAP-2.tests +2 -0
  537. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/CMAP-3.tests +20 -0
  538. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/CVAR-1.tests +3 -0
  539. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/CVAR-2.tests +3 -0
  540. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/GLYF-1.tests +1 -0
  541. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/GPOS-1.tests +19 -0
  542. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/GPOS-2.tests +3 -0
  543. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/GPOS-3.tests +4 -0
  544. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/GPOS-4.tests +4 -0
  545. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/GPOS-5.tests +5 -0
  546. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/GSUB-1.tests +1 -0
  547. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/GSUB-2.tests +11 -0
  548. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/GVAR-1.tests +9 -0
  549. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/GVAR-2.tests +9 -0
  550. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/GVAR-3.tests +9 -0
  551. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/GVAR-4.tests +11 -0
  552. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/GVAR-5.tests +11 -0
  553. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/GVAR-6.tests +11 -0
  554. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/GVAR-7.tests +7 -0
  555. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/GVAR-8.tests +6 -0
  556. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/GVAR-9.tests +10 -0
  557. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/HVAR-1.tests +6 -0
  558. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/HVAR-2.tests +6 -0
  559. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/KERN-1.tests +1 -0
  560. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/KERN-2.tests +1 -0
  561. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-1.tests +1 -0
  562. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-10.tests +1 -0
  563. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-11.tests +1 -0
  564. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-12.tests +3 -0
  565. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-13.tests +1 -0
  566. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-14.tests +2 -0
  567. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-16.tests +1 -0
  568. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-17.tests +1 -0
  569. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-18.tests +4 -0
  570. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-19.tests +2 -0
  571. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-2.tests +16 -0
  572. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-20.tests +7 -0
  573. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-21.tests +1 -0
  574. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-22.tests +1 -0
  575. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-23.tests +1 -0
  576. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-25.tests +9 -0
  577. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-26.tests +2 -0
  578. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-3.tests +16 -0
  579. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-4.tests +15 -0
  580. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-5.tests +25 -0
  581. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-6.tests +1 -0
  582. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-7.tests +1 -0
  583. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-8.tests +3 -0
  584. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-9.tests +1 -0
  585. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/SHARAN-1.tests +6 -0
  586. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/SHBALI-1.tests +22 -0
  587. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/SHBALI-2.tests +12 -0
  588. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/SHBALI-3.tests +9 -0
  589. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/SHKNDA-1.tests +34 -0
  590. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/SHKNDA-2.tests +16 -0
  591. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/SHKNDA-3.tests +31 -0
  592. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/update.sh +46 -0
  593. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/hb-diff +10 -0
  594. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/hb-diff-colorize +7 -0
  595. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/hb-diff-filter-failures +5 -0
  596. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/hb-diff-stat +5 -0
  597. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/hb-unicode-decode +5 -0
  598. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/hb-unicode-encode +5 -0
  599. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/hb-unicode-prettyname +6 -0
  600. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/hb_test_tools.py +571 -0
  601. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/record-test.sh +107 -0
  602. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/run-tests.py +98 -0
  603. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-arabic/language-persian/mehran.txt +8 -0
  604. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/2grams.txt +601 -0
  605. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/3grams.txt +3415 -0
  606. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/4grams.txt +6316 -0
  607. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/5grams.txt +5029 -0
  608. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/6grams.txt +1542 -0
  609. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/7grams.txt +354 -0
  610. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/8grams.txt +26 -0
  611. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/LICENSE +3 -0
  612. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/README +16 -0
  613. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/SOURCES +4 -0
  614. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/lam-alef.txt +28 -0
  615. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/language-arabic.txt +695 -0
  616. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/language-persian.txt +48 -0
  617. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/language-urdu.txt +188 -0
  618. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/ligature-components.txt +18 -0
  619. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/ligature-diacritics.txt +1 -0
  620. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/mark-skipping.txt +10 -0
  621. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-mongolian/misc/misc.txt +6 -0
  622. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-mongolian/misc/non-joining.txt +8 -0
  623. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-mongolian/misc/poem.txt +4 -0
  624. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-mongolian/misc/variation-selectors.txt +8 -0
  625. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-nko/misc/misc.txt +5 -0
  626. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-phags-pa/misc/misc.txt +14 -0
  627. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-syriac/misc/abbreviation-mark.txt +11 -0
  628. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-syriac/misc/alaph.txt +98 -0
  629. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-default/script-ethiopic/misc/misc.txt +1 -0
  630. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-default/script-han/misc/cjk-compat.txt +3 -0
  631. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-default/script-hiragana/misc/kazuraki-liga-lines.txt +8 -0
  632. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-default/script-hiragana/misc/kazuraki-liga.txt +53 -0
  633. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-default/script-linear-b/misc/misc.txt +1 -0
  634. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-default/script-tifinagh/misc/misc.txt +10 -0
  635. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-hangul/script-hangul/misc/misc.txt +4 -0
  636. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-hebrew/script-hebrew/misc/diacritics.txt +16 -0
  637. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/LICENSE +19 -0
  638. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/README +13 -0
  639. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/SOURCES +2 -0
  640. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt +4 -0
  641. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt +40 -0
  642. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt +10 -0
  643. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt +10 -0
  644. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt +11 -0
  645. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt +2 -0
  646. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt +6 -0
  647. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt +59 -0
  648. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt +131 -0
  649. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/gsub/IndicFontFeatureGSUB.txt +139 -0
  650. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-bengali/misc/misc.txt +53 -0
  651. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-bengali/misc/reph.txt +14 -0
  652. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/LICENSE +19 -0
  653. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/README +13 -0
  654. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/SOURCES +2 -0
  655. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt +1 -0
  656. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt +36 -0
  657. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt +10 -0
  658. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt +10 -0
  659. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt +12 -0
  660. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt +2 -0
  661. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt +6 -0
  662. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt +58 -0
  663. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt +119 -0
  664. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/gsub/IndicFontFeatureGSUB.txt +215 -0
  665. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/misc/dottedcircle.txt +8 -0
  666. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/misc/eyelash.txt +3 -0
  667. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/misc/joiners.txt +19 -0
  668. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/misc/misc.txt +36 -0
  669. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/misc/spec-deviations.txt +1 -0
  670. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/misc/tricky-reordering.txt +5 -0
  671. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/LICENSE +19 -0
  672. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/README +13 -0
  673. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/SOURCES +2 -0
  674. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalConsonants.txt +8 -0
  675. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt +4 -0
  676. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt +45 -0
  677. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt +14 -0
  678. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-DevnagariSpecificAddition.txt +1 -0
  679. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt +10 -0
  680. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-GenericPunctuation.txt +2 -0
  681. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt +16 -0
  682. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt +10 -0
  683. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt +185 -0
  684. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt +185 -0
  685. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/gsub/IndicFontFeatureGSUB.txt +1367 -0
  686. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/LICENSE +19 -0
  687. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/README +13 -0
  688. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/SOURCES +2 -0
  689. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt +1 -0
  690. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt +34 -0
  691. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt +12 -0
  692. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt +10 -0
  693. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt +13 -0
  694. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt +2 -0
  695. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt +7 -0
  696. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt +170 -0
  697. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt +170 -0
  698. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/gsub/IndicFontFeatureGSUB.txt +1156 -0
  699. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/misc/misc.txt +2 -0
  700. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/LICENSE +19 -0
  701. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/README +13 -0
  702. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/SOURCES +2 -0
  703. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt +38 -0
  704. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt +9 -0
  705. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt +10 -0
  706. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-GurmukhiSpecific.txt +6 -0
  707. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt +10 -0
  708. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt +2 -0
  709. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt +6 -0
  710. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt +22 -0
  711. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt +2 -0
  712. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/gsub/IndicFontFeatureGSUB.txt +152 -0
  713. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-kannada/misc/misc.txt +20 -0
  714. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-kannada/misc/right-matras.txt +7 -0
  715. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/LICENSE +19 -0
  716. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/README +13 -0
  717. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/SOURCES +2 -0
  718. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalConsonants.txt +1 -0
  719. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt +4 -0
  720. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt +40 -0
  721. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt +13 -0
  722. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt +10 -0
  723. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt +14 -0
  724. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt +2 -0
  725. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt +9 -0
  726. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt +188 -0
  727. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/gsub/IndicFontFeatureGSUB.txt +306 -0
  728. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/misc/cibu.txt +188 -0
  729. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/misc/dot-reph.txt +15 -0
  730. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/misc/misc.txt +65 -0
  731. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/utrrs/LICENSE +19 -0
  732. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/utrrs/README +13 -0
  733. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/utrrs/SOURCES +2 -0
  734. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt +2 -0
  735. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt +36 -0
  736. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt +12 -0
  737. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt +10 -0
  738. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt +14 -0
  739. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt +2 -0
  740. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt +4 -0
  741. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/utrrs/gsub/IndicFontFeatureGSUB.txt +254 -0
  742. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-oriya/misc/bindu.txt +2 -0
  743. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-oriya/misc/misc.txt +28 -0
  744. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/LICENSE +19 -0
  745. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/README +13 -0
  746. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/SOURCES +2 -0
  747. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalConsonants.txt +3 -0
  748. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt +2 -0
  749. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt +34 -0
  750. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt +12 -0
  751. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt +10 -0
  752. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt +12 -0
  753. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-OriyaSpecific.txt +2 -0
  754. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt +2 -0
  755. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt +8 -0
  756. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/gsub/IndicFontFeatureGSUB.txt +170 -0
  757. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/misc/extensive.txt +4390 -0
  758. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/misc/misc.txt +41 -0
  759. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/misc/reph.txt +3 -0
  760. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/misc/split-matras.txt +4 -0
  761. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/LICENSE +19 -0
  762. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/README +13 -0
  763. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/SOURCES +2 -0
  764. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt +41 -0
  765. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt +17 -0
  766. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt +18 -0
  767. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-Punctuation.txt +1 -0
  768. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt +3 -0
  769. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/gpos/IndicFontFeatureGPOS.txt +162 -0
  770. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Conjunct.txt +1 -0
  771. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Rakaaraansaya.txt +41 -0
  772. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Repaya.txt +42 -0
  773. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Special-Cases.txt +2 -0
  774. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-TouchingLetters.txt +1 -0
  775. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Yansaya.txt +41 -0
  776. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB.txt +1 -0
  777. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/misc/misc.txt +43 -0
  778. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/LICENSE +19 -0
  779. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/README +13 -0
  780. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/SOURCES +2 -0
  781. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt +23 -0
  782. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-CurrencySymbols.txt +1 -0
  783. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt +11 -0
  784. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt +10 -0
  785. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt +12 -0
  786. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Numerics.txt +3 -0
  787. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt +2 -0
  788. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Symbols.txt +6 -0
  789. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-TamilSymbol.txt +1 -0
  790. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt +4 -0
  791. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt +64 -0
  792. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt +44 -0
  793. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/gsub/IndicFontFeatureGSUB.txt +4 -0
  794. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-telugu/misc/misc.txt +12 -0
  795. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-telugu/utrrs/LICENSE +19 -0
  796. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-telugu/utrrs/README +13 -0
  797. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-telugu/utrrs/SOURCES +2 -0
  798. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt +2 -0
  799. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt +38 -0
  800. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt +13 -0
  801. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt +10 -0
  802. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt +14 -0
  803. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt +2 -0
  804. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt +6 -0
  805. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-telugu/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt +385 -0
  806. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-telugu/utrrs/gsub/IndicFontFeatureGSUB.txt +287 -0
  807. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/south-east-asian/script-javanese/misc.txt +54 -0
  808. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/south-east-asian/script-khmer/misc/misc.txt +23 -0
  809. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/south-east-asian/script-khmer/misc/other-marks-invalid.txt +4 -0
  810. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/south-east-asian/script-khmer/misc/other-marks.txt +7 -0
  811. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-myanmar/script-myanmar/misc/misc.txt +7 -0
  812. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-myanmar/script-myanmar/misc/otspec.txt +1 -0
  813. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-myanmar/script-myanmar/misc/utn11.txt +34 -0
  814. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-thai/script-lao/misc/sara-am.txt +20 -0
  815. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-thai/script-thai/misc/misc.txt +11 -0
  816. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-thai/script-thai/misc/phinthu.txt +16 -0
  817. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-thai/script-thai/misc/pua-shaping.txt +11 -0
  818. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-thai/script-thai/misc/sara-am.txt +20 -0
  819. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-tibetan/script-tibetan/misc/contractions.txt +612 -0
  820. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-tibetan/script-tibetan/misc/misc.txt +2 -0
  821. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-use/script-batak/misc.txt +9 -0
  822. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-use/script-buginese/misc.txt +70 -0
  823. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-use/script-cham/misc.txt +3 -0
  824. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-use/script-kaithi/misc.txt +6 -0
  825. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-use/script-kharoshti/misc.txt +36 -0
  826. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-use/script-tai-tham/misc.txt +2 -0
  827. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-use/script-tai-tham/torture.txt +23 -0
  828. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/CMakeLists.txt +10 -0
  829. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/Makefile.am +22 -0
  830. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/Makefile.am +24 -0
  831. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/Makefile.sources +10 -0
  832. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/expected/basics/Roboto-Regular.abc.default.61,62,63.ttf +0 -0
  833. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/expected/basics/Roboto-Regular.abc.default.61,63.ttf +0 -0
  834. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/expected/basics/Roboto-Regular.abc.default.61.ttf +0 -0
  835. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/expected/basics/Roboto-Regular.abc.default.62.ttf +0 -0
  836. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/expected/basics/Roboto-Regular.abc.default.63.ttf +0 -0
  837. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/expected/basics/Roboto-Regular.abc.drop-hints.61,62,63.ttf +0 -0
  838. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/expected/basics/Roboto-Regular.abc.drop-hints.61,63.ttf +0 -0
  839. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/expected/basics/Roboto-Regular.abc.drop-hints.61.ttf +0 -0
  840. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/expected/basics/Roboto-Regular.abc.drop-hints.62.ttf +0 -0
  841. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/expected/basics/Roboto-Regular.abc.drop-hints.63.ttf +0 -0
  842. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/expected/full-font/Roboto-Regular.default.1FC,21,41,20,62,63.ttf +0 -0
  843. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/expected/full-font/Roboto-Regular.default.61,62,63.ttf +0 -0
  844. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/expected/full-font/Roboto-Regular.drop-hints.1FC,21,41,20,62,63.ttf +0 -0
  845. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/expected/full-font/Roboto-Regular.drop-hints.61,62,63.ttf +0 -0
  846. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/fonts/Roboto-Regular.abc.ttf +0 -0
  847. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/fonts/Roboto-Regular.ttf +0 -0
  848. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/profiles/default.txt +0 -0
  849. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/profiles/drop-hints.txt +1 -0
  850. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/tests/basics.tests +13 -0
  851. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/tests/full-font.tests +11 -0
  852. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/generate-expected-outputs.py +47 -0
  853. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/run-tests.py +133 -0
  854. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/subset_test_suite.py +87 -0
  855. data/vendor/github.com/harfbuzz/harfbuzz/util/Makefile.am +75 -0
  856. data/vendor/github.com/harfbuzz/harfbuzz/util/Makefile.sources +37 -0
  857. data/vendor/github.com/harfbuzz/harfbuzz/util/ansi-print.cc +427 -0
  858. data/vendor/github.com/harfbuzz/harfbuzz/util/ansi-print.hh +40 -0
  859. data/vendor/github.com/harfbuzz/harfbuzz/util/hb-fc-list.c +222 -0
  860. data/vendor/github.com/harfbuzz/harfbuzz/util/hb-fc.cc +149 -0
  861. data/vendor/github.com/harfbuzz/harfbuzz/util/hb-fc.h +46 -0
  862. data/vendor/github.com/harfbuzz/harfbuzz/util/hb-ot-shape-closure.cc +119 -0
  863. data/vendor/github.com/harfbuzz/harfbuzz/util/hb-shape.cc +165 -0
  864. data/vendor/github.com/harfbuzz/harfbuzz/util/hb-subset.cc +127 -0
  865. data/vendor/github.com/harfbuzz/harfbuzz/util/hb-view.cc +40 -0
  866. data/vendor/github.com/harfbuzz/harfbuzz/util/helper-cairo-ansi.cc +102 -0
  867. data/vendor/github.com/harfbuzz/harfbuzz/util/helper-cairo-ansi.hh +40 -0
  868. data/vendor/github.com/harfbuzz/harfbuzz/util/helper-cairo.cc +553 -0
  869. data/vendor/github.com/harfbuzz/harfbuzz/util/helper-cairo.hh +86 -0
  870. data/vendor/github.com/harfbuzz/harfbuzz/util/main-font-text.hh +96 -0
  871. data/vendor/github.com/harfbuzz/harfbuzz/util/options.cc +1026 -0
  872. data/vendor/github.com/harfbuzz/harfbuzz/util/options.hh +690 -0
  873. data/vendor/github.com/harfbuzz/harfbuzz/util/shape-consumer.hh +101 -0
  874. data/vendor/github.com/harfbuzz/harfbuzz/util/view-cairo.cc +133 -0
  875. data/vendor/github.com/harfbuzz/harfbuzz/util/view-cairo.hh +102 -0
  876. metadata +939 -0
@@ -0,0 +1,2010 @@
1
+ /*
2
+ * Copyright © 1998-2004 David Turner and Werner Lemberg
3
+ * Copyright © 2004,2007,2009,2010 Red Hat, Inc.
4
+ * Copyright © 2011,2012 Google, Inc.
5
+ *
6
+ * This is part of HarfBuzz, a text shaping library.
7
+ *
8
+ * Permission is hereby granted, without written agreement and without
9
+ * license or royalty fees, to use, copy, modify, and distribute this
10
+ * software and its documentation for any purpose, provided that the
11
+ * above copyright notice and the following two paragraphs appear in
12
+ * all copies of this software.
13
+ *
14
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
15
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
16
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
17
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
18
+ * DAMAGE.
19
+ *
20
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
21
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
22
+ * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
23
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
24
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
25
+ *
26
+ * Red Hat Author(s): Owen Taylor, Behdad Esfahbod
27
+ * Google Author(s): Behdad Esfahbod
28
+ */
29
+
30
+ #include "hb-buffer-private.hh"
31
+ #include "hb-utf-private.hh"
32
+
33
+
34
+ /**
35
+ * SECTION: hb-buffer
36
+ * @title: Buffers
37
+ * @short_description: Input and output buffers
38
+ * @include: hb.h
39
+ *
40
+ * Buffers serve dual role in HarfBuzz; they hold the input characters that are
41
+ * passed hb_shape(), and after shaping they hold the output glyphs.
42
+ **/
43
+
44
+ /**
45
+ * hb_segment_properties_equal:
46
+ * @a: first #hb_segment_properties_t to compare.
47
+ * @b: second #hb_segment_properties_t to compare.
48
+ *
49
+ * Checks the equality of two #hb_segment_properties_t's.
50
+ *
51
+ * Return value:
52
+ * %true if all properties of @a equal those of @b, false otherwise.
53
+ *
54
+ * Since: 0.9.7
55
+ **/
56
+ hb_bool_t
57
+ hb_segment_properties_equal (const hb_segment_properties_t *a,
58
+ const hb_segment_properties_t *b)
59
+ {
60
+ return a->direction == b->direction &&
61
+ a->script == b->script &&
62
+ a->language == b->language &&
63
+ a->reserved1 == b->reserved1 &&
64
+ a->reserved2 == b->reserved2;
65
+
66
+ }
67
+
68
+ /**
69
+ * hb_segment_properties_hash:
70
+ * @p: #hb_segment_properties_t to hash.
71
+ *
72
+ * Creates a hash representing @p.
73
+ *
74
+ * Return value:
75
+ * A hash of @p.
76
+ *
77
+ * Since: 0.9.7
78
+ **/
79
+ unsigned int
80
+ hb_segment_properties_hash (const hb_segment_properties_t *p)
81
+ {
82
+ return (unsigned int) p->direction ^
83
+ (unsigned int) p->script ^
84
+ (intptr_t) (p->language);
85
+ }
86
+
87
+
88
+
89
+ /* Here is how the buffer works internally:
90
+ *
91
+ * There are two info pointers: info and out_info. They always have
92
+ * the same allocated size, but different lengths.
93
+ *
94
+ * As an optimization, both info and out_info may point to the
95
+ * same piece of memory, which is owned by info. This remains the
96
+ * case as long as out_len doesn't exceed i at any time.
97
+ * In that case, swap_buffers() is no-op and the glyph operations operate
98
+ * mostly in-place.
99
+ *
100
+ * As soon as out_info gets longer than info, out_info is moved over
101
+ * to an alternate buffer (which we reuse the pos buffer for!), and its
102
+ * current contents (out_len entries) are copied to the new place.
103
+ * This should all remain transparent to the user. swap_buffers() then
104
+ * switches info and out_info.
105
+ */
106
+
107
+
108
+
109
+ /* Internal API */
110
+
111
+ bool
112
+ hb_buffer_t::enlarge (unsigned int size)
113
+ {
114
+ if (unlikely (in_error))
115
+ return false;
116
+ if (unlikely (size > max_len))
117
+ {
118
+ in_error = true;
119
+ return false;
120
+ }
121
+
122
+ unsigned int new_allocated = allocated;
123
+ hb_glyph_position_t *new_pos = nullptr;
124
+ hb_glyph_info_t *new_info = nullptr;
125
+ bool separate_out = out_info != info;
126
+
127
+ if (unlikely (_hb_unsigned_int_mul_overflows (size, sizeof (info[0]))))
128
+ goto done;
129
+
130
+ while (size >= new_allocated)
131
+ new_allocated += (new_allocated >> 1) + 32;
132
+
133
+ static_assert ((sizeof (info[0]) == sizeof (pos[0])), "");
134
+ if (unlikely (_hb_unsigned_int_mul_overflows (new_allocated, sizeof (info[0]))))
135
+ goto done;
136
+
137
+ new_pos = (hb_glyph_position_t *) realloc (pos, new_allocated * sizeof (pos[0]));
138
+ new_info = (hb_glyph_info_t *) realloc (info, new_allocated * sizeof (info[0]));
139
+
140
+ done:
141
+ if (unlikely (!new_pos || !new_info))
142
+ in_error = true;
143
+
144
+ if (likely (new_pos))
145
+ pos = new_pos;
146
+
147
+ if (likely (new_info))
148
+ info = new_info;
149
+
150
+ out_info = separate_out ? (hb_glyph_info_t *) pos : info;
151
+ if (likely (!in_error))
152
+ allocated = new_allocated;
153
+
154
+ return likely (!in_error);
155
+ }
156
+
157
+ bool
158
+ hb_buffer_t::make_room_for (unsigned int num_in,
159
+ unsigned int num_out)
160
+ {
161
+ if (unlikely (!ensure (out_len + num_out))) return false;
162
+
163
+ if (out_info == info &&
164
+ out_len + num_out > idx + num_in)
165
+ {
166
+ assert (have_output);
167
+
168
+ out_info = (hb_glyph_info_t *) pos;
169
+ memcpy (out_info, info, out_len * sizeof (out_info[0]));
170
+ }
171
+
172
+ return true;
173
+ }
174
+
175
+ bool
176
+ hb_buffer_t::shift_forward (unsigned int count)
177
+ {
178
+ assert (have_output);
179
+ if (unlikely (!ensure (len + count))) return false;
180
+
181
+ memmove (info + idx + count, info + idx, (len - idx) * sizeof (info[0]));
182
+ if (idx + count > len)
183
+ {
184
+ /* Under memory failure we might expose this area. At least
185
+ * clean it up. Oh well... */
186
+ memset (info + len, 0, (idx + count - len) * sizeof (info[0]));
187
+ }
188
+ len += count;
189
+ idx += count;
190
+
191
+ return true;
192
+ }
193
+
194
+ hb_buffer_t::scratch_buffer_t *
195
+ hb_buffer_t::get_scratch_buffer (unsigned int *size)
196
+ {
197
+ have_output = false;
198
+ have_positions = false;
199
+
200
+ out_len = 0;
201
+ out_info = info;
202
+
203
+ assert ((uintptr_t) pos % sizeof (scratch_buffer_t) == 0);
204
+ *size = allocated * sizeof (pos[0]) / sizeof (scratch_buffer_t);
205
+ return (scratch_buffer_t *) (void *) pos;
206
+ }
207
+
208
+
209
+
210
+ /* HarfBuzz-Internal API */
211
+
212
+ void
213
+ hb_buffer_t::reset (void)
214
+ {
215
+ if (unlikely (hb_object_is_inert (this)))
216
+ return;
217
+
218
+ hb_unicode_funcs_destroy (unicode);
219
+ unicode = hb_unicode_funcs_get_default ();
220
+ flags = HB_BUFFER_FLAG_DEFAULT;
221
+ replacement = HB_BUFFER_REPLACEMENT_CODEPOINT_DEFAULT;
222
+
223
+ clear ();
224
+ }
225
+
226
+ void
227
+ hb_buffer_t::clear (void)
228
+ {
229
+ if (unlikely (hb_object_is_inert (this)))
230
+ return;
231
+
232
+ hb_segment_properties_t default_props = HB_SEGMENT_PROPERTIES_DEFAULT;
233
+ props = default_props;
234
+ scratch_flags = HB_BUFFER_SCRATCH_FLAG_DEFAULT;
235
+
236
+ content_type = HB_BUFFER_CONTENT_TYPE_INVALID;
237
+ in_error = false;
238
+ have_output = false;
239
+ have_positions = false;
240
+
241
+ idx = 0;
242
+ len = 0;
243
+ out_len = 0;
244
+ out_info = info;
245
+
246
+ serial = 0;
247
+
248
+ memset (context, 0, sizeof context);
249
+ memset (context_len, 0, sizeof context_len);
250
+
251
+ deallocate_var_all ();
252
+ }
253
+
254
+ void
255
+ hb_buffer_t::add (hb_codepoint_t codepoint,
256
+ unsigned int cluster)
257
+ {
258
+ hb_glyph_info_t *glyph;
259
+
260
+ if (unlikely (!ensure (len + 1))) return;
261
+
262
+ glyph = &info[len];
263
+
264
+ memset (glyph, 0, sizeof (*glyph));
265
+ glyph->codepoint = codepoint;
266
+ glyph->mask = 0;
267
+ glyph->cluster = cluster;
268
+
269
+ len++;
270
+ }
271
+
272
+ void
273
+ hb_buffer_t::add_info (const hb_glyph_info_t &glyph_info)
274
+ {
275
+ if (unlikely (!ensure (len + 1))) return;
276
+
277
+ info[len] = glyph_info;
278
+
279
+ len++;
280
+ }
281
+
282
+
283
+ void
284
+ hb_buffer_t::remove_output (void)
285
+ {
286
+ if (unlikely (hb_object_is_inert (this)))
287
+ return;
288
+
289
+ have_output = false;
290
+ have_positions = false;
291
+
292
+ out_len = 0;
293
+ out_info = info;
294
+ }
295
+
296
+ void
297
+ hb_buffer_t::clear_output (void)
298
+ {
299
+ if (unlikely (hb_object_is_inert (this)))
300
+ return;
301
+
302
+ have_output = true;
303
+ have_positions = false;
304
+
305
+ out_len = 0;
306
+ out_info = info;
307
+ }
308
+
309
+ void
310
+ hb_buffer_t::clear_positions (void)
311
+ {
312
+ if (unlikely (hb_object_is_inert (this)))
313
+ return;
314
+
315
+ have_output = false;
316
+ have_positions = true;
317
+
318
+ out_len = 0;
319
+ out_info = info;
320
+
321
+ memset (pos, 0, sizeof (pos[0]) * len);
322
+ }
323
+
324
+ void
325
+ hb_buffer_t::swap_buffers (void)
326
+ {
327
+ if (unlikely (in_error)) return;
328
+
329
+ assert (have_output);
330
+ have_output = false;
331
+
332
+ if (out_info != info)
333
+ {
334
+ hb_glyph_info_t *tmp_string;
335
+ tmp_string = info;
336
+ info = out_info;
337
+ out_info = tmp_string;
338
+ pos = (hb_glyph_position_t *) out_info;
339
+ }
340
+
341
+ unsigned int tmp;
342
+ tmp = len;
343
+ len = out_len;
344
+ out_len = tmp;
345
+
346
+ idx = 0;
347
+ }
348
+
349
+
350
+ void
351
+ hb_buffer_t::replace_glyphs (unsigned int num_in,
352
+ unsigned int num_out,
353
+ const uint32_t *glyph_data)
354
+ {
355
+ if (unlikely (!make_room_for (num_in, num_out))) return;
356
+
357
+ merge_clusters (idx, idx + num_in);
358
+
359
+ hb_glyph_info_t orig_info = info[idx];
360
+ hb_glyph_info_t *pinfo = &out_info[out_len];
361
+ for (unsigned int i = 0; i < num_out; i++)
362
+ {
363
+ *pinfo = orig_info;
364
+ pinfo->codepoint = glyph_data[i];
365
+ pinfo++;
366
+ }
367
+
368
+ idx += num_in;
369
+ out_len += num_out;
370
+ }
371
+
372
+ void
373
+ hb_buffer_t::output_glyph (hb_codepoint_t glyph_index)
374
+ {
375
+ if (unlikely (!make_room_for (0, 1))) return;
376
+
377
+ out_info[out_len] = info[idx];
378
+ out_info[out_len].codepoint = glyph_index;
379
+
380
+ out_len++;
381
+ }
382
+
383
+ void
384
+ hb_buffer_t::output_info (const hb_glyph_info_t &glyph_info)
385
+ {
386
+ if (unlikely (!make_room_for (0, 1))) return;
387
+
388
+ out_info[out_len] = glyph_info;
389
+
390
+ out_len++;
391
+ }
392
+
393
+ void
394
+ hb_buffer_t::copy_glyph (void)
395
+ {
396
+ if (unlikely (!make_room_for (0, 1))) return;
397
+
398
+ out_info[out_len] = info[idx];
399
+
400
+ out_len++;
401
+ }
402
+
403
+ bool
404
+ hb_buffer_t::move_to (unsigned int i)
405
+ {
406
+ if (!have_output)
407
+ {
408
+ assert (i <= len);
409
+ idx = i;
410
+ return true;
411
+ }
412
+ if (unlikely (in_error))
413
+ return false;
414
+
415
+ assert (i <= out_len + (len - idx));
416
+
417
+ if (out_len < i)
418
+ {
419
+ unsigned int count = i - out_len;
420
+ if (unlikely (!make_room_for (count, count))) return false;
421
+
422
+ memmove (out_info + out_len, info + idx, count * sizeof (out_info[0]));
423
+ idx += count;
424
+ out_len += count;
425
+ }
426
+ else if (out_len > i)
427
+ {
428
+ /* Tricky part: rewinding... */
429
+ unsigned int count = out_len - i;
430
+
431
+ /* This will blow in our face if memory allocation fails later
432
+ * in this same lookup... */
433
+ if (unlikely (idx < count && !shift_forward (count + 32))) return false;
434
+
435
+ assert (idx >= count);
436
+
437
+ idx -= count;
438
+ out_len -= count;
439
+ memmove (info + idx, out_info + out_len, count * sizeof (out_info[0]));
440
+ }
441
+
442
+ return true;
443
+ }
444
+
445
+ void
446
+ hb_buffer_t::replace_glyph (hb_codepoint_t glyph_index)
447
+ {
448
+ if (unlikely (out_info != info || out_len != idx)) {
449
+ if (unlikely (!make_room_for (1, 1))) return;
450
+ out_info[out_len] = info[idx];
451
+ }
452
+ out_info[out_len].codepoint = glyph_index;
453
+
454
+ idx++;
455
+ out_len++;
456
+ }
457
+
458
+
459
+ void
460
+ hb_buffer_t::set_masks (hb_mask_t value,
461
+ hb_mask_t mask,
462
+ unsigned int cluster_start,
463
+ unsigned int cluster_end)
464
+ {
465
+ hb_mask_t not_mask = ~mask;
466
+ value &= mask;
467
+
468
+ if (!mask)
469
+ return;
470
+
471
+ if (cluster_start == 0 && cluster_end == (unsigned int)-1) {
472
+ unsigned int count = len;
473
+ for (unsigned int i = 0; i < count; i++)
474
+ info[i].mask = (info[i].mask & not_mask) | value;
475
+ return;
476
+ }
477
+
478
+ unsigned int count = len;
479
+ for (unsigned int i = 0; i < count; i++)
480
+ if (cluster_start <= info[i].cluster && info[i].cluster < cluster_end)
481
+ info[i].mask = (info[i].mask & not_mask) | value;
482
+ }
483
+
484
+ void
485
+ hb_buffer_t::reverse_range (unsigned int start,
486
+ unsigned int end)
487
+ {
488
+ unsigned int i, j;
489
+
490
+ if (end - start < 2)
491
+ return;
492
+
493
+ for (i = start, j = end - 1; i < j; i++, j--) {
494
+ hb_glyph_info_t t;
495
+
496
+ t = info[i];
497
+ info[i] = info[j];
498
+ info[j] = t;
499
+ }
500
+
501
+ if (have_positions) {
502
+ for (i = start, j = end - 1; i < j; i++, j--) {
503
+ hb_glyph_position_t t;
504
+
505
+ t = pos[i];
506
+ pos[i] = pos[j];
507
+ pos[j] = t;
508
+ }
509
+ }
510
+ }
511
+
512
+ void
513
+ hb_buffer_t::reverse (void)
514
+ {
515
+ if (unlikely (!len))
516
+ return;
517
+
518
+ reverse_range (0, len);
519
+ }
520
+
521
+ void
522
+ hb_buffer_t::reverse_clusters (void)
523
+ {
524
+ unsigned int i, start, count, last_cluster;
525
+
526
+ if (unlikely (!len))
527
+ return;
528
+
529
+ reverse ();
530
+
531
+ count = len;
532
+ start = 0;
533
+ last_cluster = info[0].cluster;
534
+ for (i = 1; i < count; i++) {
535
+ if (last_cluster != info[i].cluster) {
536
+ reverse_range (start, i);
537
+ start = i;
538
+ last_cluster = info[i].cluster;
539
+ }
540
+ }
541
+ reverse_range (start, i);
542
+ }
543
+
544
+ void
545
+ hb_buffer_t::merge_clusters_impl (unsigned int start,
546
+ unsigned int end)
547
+ {
548
+ if (cluster_level == HB_BUFFER_CLUSTER_LEVEL_CHARACTERS)
549
+ {
550
+ unsafe_to_break (start, end);
551
+ return;
552
+ }
553
+
554
+ unsigned int cluster = info[start].cluster;
555
+
556
+ for (unsigned int i = start + 1; i < end; i++)
557
+ cluster = MIN<unsigned int> (cluster, info[i].cluster);
558
+
559
+ /* Extend end */
560
+ while (end < len && info[end - 1].cluster == info[end].cluster)
561
+ end++;
562
+
563
+ /* Extend start */
564
+ while (idx < start && info[start - 1].cluster == info[start].cluster)
565
+ start--;
566
+
567
+ /* If we hit the start of buffer, continue in out-buffer. */
568
+ if (idx == start)
569
+ for (unsigned int i = out_len; i && out_info[i - 1].cluster == info[start].cluster; i--)
570
+ set_cluster (out_info[i - 1], cluster);
571
+
572
+ for (unsigned int i = start; i < end; i++)
573
+ set_cluster (info[i], cluster);
574
+ }
575
+ void
576
+ hb_buffer_t::merge_out_clusters (unsigned int start,
577
+ unsigned int end)
578
+ {
579
+ if (cluster_level == HB_BUFFER_CLUSTER_LEVEL_CHARACTERS)
580
+ return;
581
+
582
+ if (unlikely (end - start < 2))
583
+ return;
584
+
585
+ unsigned int cluster = out_info[start].cluster;
586
+
587
+ for (unsigned int i = start + 1; i < end; i++)
588
+ cluster = MIN<unsigned int> (cluster, out_info[i].cluster);
589
+
590
+ /* Extend start */
591
+ while (start && out_info[start - 1].cluster == out_info[start].cluster)
592
+ start--;
593
+
594
+ /* Extend end */
595
+ while (end < out_len && out_info[end - 1].cluster == out_info[end].cluster)
596
+ end++;
597
+
598
+ /* If we hit the end of out-buffer, continue in buffer. */
599
+ if (end == out_len)
600
+ for (unsigned int i = idx; i < len && info[i].cluster == out_info[end - 1].cluster; i++)
601
+ set_cluster (info[i], cluster);
602
+
603
+ for (unsigned int i = start; i < end; i++)
604
+ set_cluster (out_info[i], cluster);
605
+ }
606
+ void
607
+ hb_buffer_t::delete_glyph ()
608
+ {
609
+ /* The logic here is duplicated in hb_ot_hide_default_ignorables(). */
610
+
611
+ unsigned int cluster = info[idx].cluster;
612
+ if (idx + 1 < len && cluster == info[idx + 1].cluster)
613
+ {
614
+ /* Cluster survives; do nothing. */
615
+ goto done;
616
+ }
617
+
618
+ if (out_len)
619
+ {
620
+ /* Merge cluster backward. */
621
+ if (cluster < out_info[out_len - 1].cluster)
622
+ {
623
+ unsigned int mask = info[idx].mask;
624
+ unsigned int old_cluster = out_info[out_len - 1].cluster;
625
+ for (unsigned i = out_len; i && out_info[i - 1].cluster == old_cluster; i--)
626
+ set_cluster (out_info[i - 1], cluster, mask);
627
+ }
628
+ goto done;
629
+ }
630
+
631
+ if (idx + 1 < len)
632
+ {
633
+ /* Merge cluster forward. */
634
+ merge_clusters (idx, idx + 2);
635
+ goto done;
636
+ }
637
+
638
+ done:
639
+ skip_glyph ();
640
+ }
641
+
642
+ void
643
+ hb_buffer_t::unsafe_to_break_impl (unsigned int start, unsigned int end)
644
+ {
645
+ unsigned int cluster = (unsigned int) -1;
646
+ cluster = _unsafe_to_break_find_min_cluster (info, start, end, cluster);
647
+ _unsafe_to_break_set_mask (info, start, end, cluster);
648
+ }
649
+ void
650
+ hb_buffer_t::unsafe_to_break_from_outbuffer (unsigned int start, unsigned int end)
651
+ {
652
+ if (!have_output)
653
+ {
654
+ unsafe_to_break_impl (start, end);
655
+ return;
656
+ }
657
+
658
+ assert (start <= out_len);
659
+ assert (idx <= end);
660
+
661
+ unsigned int cluster = (unsigned int) -1;
662
+ cluster = _unsafe_to_break_find_min_cluster (out_info, start, out_len, cluster);
663
+ cluster = _unsafe_to_break_find_min_cluster (info, idx, end, cluster);
664
+ _unsafe_to_break_set_mask (out_info, start, out_len, cluster);
665
+ _unsafe_to_break_set_mask (info, idx, end, cluster);
666
+ }
667
+
668
+ void
669
+ hb_buffer_t::guess_segment_properties (void)
670
+ {
671
+ assert (content_type == HB_BUFFER_CONTENT_TYPE_UNICODE ||
672
+ (!len && content_type == HB_BUFFER_CONTENT_TYPE_INVALID));
673
+
674
+ /* If script is set to INVALID, guess from buffer contents */
675
+ if (props.script == HB_SCRIPT_INVALID) {
676
+ for (unsigned int i = 0; i < len; i++) {
677
+ hb_script_t script = unicode->script (info[i].codepoint);
678
+ if (likely (script != HB_SCRIPT_COMMON &&
679
+ script != HB_SCRIPT_INHERITED &&
680
+ script != HB_SCRIPT_UNKNOWN)) {
681
+ props.script = script;
682
+ break;
683
+ }
684
+ }
685
+ }
686
+
687
+ /* If direction is set to INVALID, guess from script */
688
+ if (props.direction == HB_DIRECTION_INVALID) {
689
+ props.direction = hb_script_get_horizontal_direction (props.script);
690
+ }
691
+
692
+ /* If language is not set, use default language from locale */
693
+ if (props.language == HB_LANGUAGE_INVALID) {
694
+ /* TODO get_default_for_script? using $LANGUAGE */
695
+ props.language = hb_language_get_default ();
696
+ }
697
+ }
698
+
699
+
700
+ /* Public API */
701
+
702
+ /**
703
+ * hb_buffer_create: (Xconstructor)
704
+ *
705
+ * Creates a new #hb_buffer_t with all properties to defaults.
706
+ *
707
+ * Return value: (transfer full):
708
+ * A newly allocated #hb_buffer_t with a reference count of 1. The initial
709
+ * reference count should be released with hb_buffer_destroy() when you are done
710
+ * using the #hb_buffer_t. This function never returns %NULL. If memory cannot
711
+ * be allocated, a special #hb_buffer_t object will be returned on which
712
+ * hb_buffer_allocation_successful() returns %false.
713
+ *
714
+ * Since: 0.9.2
715
+ **/
716
+ hb_buffer_t *
717
+ hb_buffer_create (void)
718
+ {
719
+ hb_buffer_t *buffer;
720
+
721
+ if (!(buffer = hb_object_create<hb_buffer_t> ()))
722
+ return hb_buffer_get_empty ();
723
+
724
+ buffer->max_len = HB_BUFFER_MAX_LEN_DEFAULT;
725
+ buffer->max_ops = HB_BUFFER_MAX_OPS_DEFAULT;
726
+
727
+ buffer->reset ();
728
+
729
+ return buffer;
730
+ }
731
+
732
+ /**
733
+ * hb_buffer_get_empty:
734
+ *
735
+ *
736
+ *
737
+ * Return value: (transfer full):
738
+ *
739
+ * Since: 0.9.2
740
+ **/
741
+ hb_buffer_t *
742
+ hb_buffer_get_empty (void)
743
+ {
744
+ static const hb_buffer_t _hb_buffer_nil = {
745
+ HB_OBJECT_HEADER_STATIC,
746
+
747
+ const_cast<hb_unicode_funcs_t *> (&_hb_unicode_funcs_nil),
748
+ HB_BUFFER_FLAG_DEFAULT,
749
+ HB_BUFFER_CLUSTER_LEVEL_DEFAULT,
750
+ HB_BUFFER_REPLACEMENT_CODEPOINT_DEFAULT,
751
+ HB_BUFFER_SCRATCH_FLAG_DEFAULT,
752
+ HB_BUFFER_MAX_LEN_DEFAULT,
753
+ HB_BUFFER_MAX_OPS_DEFAULT,
754
+
755
+ HB_BUFFER_CONTENT_TYPE_INVALID,
756
+ HB_SEGMENT_PROPERTIES_DEFAULT,
757
+ true, /* in_error */
758
+ true, /* have_output */
759
+ true /* have_positions */
760
+
761
+ /* Zero is good enough for everything else. */
762
+ };
763
+
764
+ return const_cast<hb_buffer_t *> (&_hb_buffer_nil);
765
+ }
766
+
767
+ /**
768
+ * hb_buffer_reference: (skip)
769
+ * @buffer: an #hb_buffer_t.
770
+ *
771
+ * Increases the reference count on @buffer by one. This prevents @buffer from
772
+ * being destroyed until a matching call to hb_buffer_destroy() is made.
773
+ *
774
+ * Return value: (transfer full):
775
+ * The referenced #hb_buffer_t.
776
+ *
777
+ * Since: 0.9.2
778
+ **/
779
+ hb_buffer_t *
780
+ hb_buffer_reference (hb_buffer_t *buffer)
781
+ {
782
+ return hb_object_reference (buffer);
783
+ }
784
+
785
+ /**
786
+ * hb_buffer_destroy: (skip)
787
+ * @buffer: an #hb_buffer_t.
788
+ *
789
+ * Deallocate the @buffer.
790
+ * Decreases the reference count on @buffer by one. If the result is zero, then
791
+ * @buffer and all associated resources are freed. See hb_buffer_reference().
792
+ *
793
+ * Since: 0.9.2
794
+ **/
795
+ void
796
+ hb_buffer_destroy (hb_buffer_t *buffer)
797
+ {
798
+ if (!hb_object_destroy (buffer)) return;
799
+
800
+ hb_unicode_funcs_destroy (buffer->unicode);
801
+
802
+ free (buffer->info);
803
+ free (buffer->pos);
804
+ if (buffer->message_destroy)
805
+ buffer->message_destroy (buffer->message_data);
806
+
807
+ free (buffer);
808
+ }
809
+
810
+ /**
811
+ * hb_buffer_set_user_data: (skip)
812
+ * @buffer: an #hb_buffer_t.
813
+ * @key:
814
+ * @data:
815
+ * @destroy:
816
+ * @replace:
817
+ *
818
+ *
819
+ *
820
+ * Return value:
821
+ *
822
+ * Since: 0.9.2
823
+ **/
824
+ hb_bool_t
825
+ hb_buffer_set_user_data (hb_buffer_t *buffer,
826
+ hb_user_data_key_t *key,
827
+ void * data,
828
+ hb_destroy_func_t destroy,
829
+ hb_bool_t replace)
830
+ {
831
+ return hb_object_set_user_data (buffer, key, data, destroy, replace);
832
+ }
833
+
834
+ /**
835
+ * hb_buffer_get_user_data: (skip)
836
+ * @buffer: an #hb_buffer_t.
837
+ * @key:
838
+ *
839
+ *
840
+ *
841
+ * Return value:
842
+ *
843
+ * Since: 0.9.2
844
+ **/
845
+ void *
846
+ hb_buffer_get_user_data (hb_buffer_t *buffer,
847
+ hb_user_data_key_t *key)
848
+ {
849
+ return hb_object_get_user_data (buffer, key);
850
+ }
851
+
852
+
853
+ /**
854
+ * hb_buffer_set_content_type:
855
+ * @buffer: an #hb_buffer_t.
856
+ * @content_type: the type of buffer contents to set
857
+ *
858
+ * Sets the type of @buffer contents, buffers are either empty, contain
859
+ * characters (before shaping) or glyphs (the result of shaping).
860
+ *
861
+ * Since: 0.9.5
862
+ **/
863
+ void
864
+ hb_buffer_set_content_type (hb_buffer_t *buffer,
865
+ hb_buffer_content_type_t content_type)
866
+ {
867
+ buffer->content_type = content_type;
868
+ }
869
+
870
+ /**
871
+ * hb_buffer_get_content_type:
872
+ * @buffer: an #hb_buffer_t.
873
+ *
874
+ * see hb_buffer_set_content_type().
875
+ *
876
+ * Return value:
877
+ * The type of @buffer contents.
878
+ *
879
+ * Since: 0.9.5
880
+ **/
881
+ hb_buffer_content_type_t
882
+ hb_buffer_get_content_type (hb_buffer_t *buffer)
883
+ {
884
+ return buffer->content_type;
885
+ }
886
+
887
+
888
+ /**
889
+ * hb_buffer_set_unicode_funcs:
890
+ * @buffer: an #hb_buffer_t.
891
+ * @unicode_funcs:
892
+ *
893
+ *
894
+ *
895
+ * Since: 0.9.2
896
+ **/
897
+ void
898
+ hb_buffer_set_unicode_funcs (hb_buffer_t *buffer,
899
+ hb_unicode_funcs_t *unicode_funcs)
900
+ {
901
+ if (unlikely (hb_object_is_inert (buffer)))
902
+ return;
903
+
904
+ if (!unicode_funcs)
905
+ unicode_funcs = hb_unicode_funcs_get_default ();
906
+
907
+
908
+ hb_unicode_funcs_reference (unicode_funcs);
909
+ hb_unicode_funcs_destroy (buffer->unicode);
910
+ buffer->unicode = unicode_funcs;
911
+ }
912
+
913
+ /**
914
+ * hb_buffer_get_unicode_funcs:
915
+ * @buffer: an #hb_buffer_t.
916
+ *
917
+ *
918
+ *
919
+ * Return value:
920
+ *
921
+ * Since: 0.9.2
922
+ **/
923
+ hb_unicode_funcs_t *
924
+ hb_buffer_get_unicode_funcs (hb_buffer_t *buffer)
925
+ {
926
+ return buffer->unicode;
927
+ }
928
+
929
+ /**
930
+ * hb_buffer_set_direction:
931
+ * @buffer: an #hb_buffer_t.
932
+ * @direction: the #hb_direction_t of the @buffer
933
+ *
934
+ * Set the text flow direction of the buffer. No shaping can happen without
935
+ * setting @buffer direction, and it controls the visual direction for the
936
+ * output glyphs; for RTL direction the glyphs will be reversed. Many layout
937
+ * features depend on the proper setting of the direction, for example,
938
+ * reversing RTL text before shaping, then shaping with LTR direction is not
939
+ * the same as keeping the text in logical order and shaping with RTL
940
+ * direction.
941
+ *
942
+ * Since: 0.9.2
943
+ **/
944
+ void
945
+ hb_buffer_set_direction (hb_buffer_t *buffer,
946
+ hb_direction_t direction)
947
+
948
+ {
949
+ if (unlikely (hb_object_is_inert (buffer)))
950
+ return;
951
+
952
+ buffer->props.direction = direction;
953
+ }
954
+
955
+ /**
956
+ * hb_buffer_get_direction:
957
+ * @buffer: an #hb_buffer_t.
958
+ *
959
+ * See hb_buffer_set_direction()
960
+ *
961
+ * Return value:
962
+ * The direction of the @buffer.
963
+ *
964
+ * Since: 0.9.2
965
+ **/
966
+ hb_direction_t
967
+ hb_buffer_get_direction (hb_buffer_t *buffer)
968
+ {
969
+ return buffer->props.direction;
970
+ }
971
+
972
+ /**
973
+ * hb_buffer_set_script:
974
+ * @buffer: an #hb_buffer_t.
975
+ * @script: an #hb_script_t to set.
976
+ *
977
+ * Sets the script of @buffer to @script.
978
+ *
979
+ * Script is crucial for choosing the proper shaping behaviour for scripts that
980
+ * require it (e.g. Arabic) and the which OpenType features defined in the font
981
+ * to be applied.
982
+ *
983
+ * You can pass one of the predefined #hb_script_t values, or use
984
+ * hb_script_from_string() or hb_script_from_iso15924_tag() to get the
985
+ * corresponding script from an ISO 15924 script tag.
986
+ *
987
+ * Since: 0.9.2
988
+ **/
989
+ void
990
+ hb_buffer_set_script (hb_buffer_t *buffer,
991
+ hb_script_t script)
992
+ {
993
+ if (unlikely (hb_object_is_inert (buffer)))
994
+ return;
995
+
996
+ buffer->props.script = script;
997
+ }
998
+
999
+ /**
1000
+ * hb_buffer_get_script:
1001
+ * @buffer: an #hb_buffer_t.
1002
+ *
1003
+ * See hb_buffer_set_script().
1004
+ *
1005
+ * Return value:
1006
+ * The #hb_script_t of the @buffer.
1007
+ *
1008
+ * Since: 0.9.2
1009
+ **/
1010
+ hb_script_t
1011
+ hb_buffer_get_script (hb_buffer_t *buffer)
1012
+ {
1013
+ return buffer->props.script;
1014
+ }
1015
+
1016
+ /**
1017
+ * hb_buffer_set_language:
1018
+ * @buffer: an #hb_buffer_t.
1019
+ * @language: an hb_language_t to set.
1020
+ *
1021
+ * Sets the language of @buffer to @language.
1022
+ *
1023
+ * Languages are crucial for selecting which OpenType feature to apply to the
1024
+ * buffer which can result in applying language-specific behaviour. Languages
1025
+ * are orthogonal to the scripts, and though they are related, they are
1026
+ * different concepts and should not be confused with each other.
1027
+ *
1028
+ * Use hb_language_from_string() to convert from ISO 639 language codes to
1029
+ * #hb_language_t.
1030
+ *
1031
+ * Since: 0.9.2
1032
+ **/
1033
+ void
1034
+ hb_buffer_set_language (hb_buffer_t *buffer,
1035
+ hb_language_t language)
1036
+ {
1037
+ if (unlikely (hb_object_is_inert (buffer)))
1038
+ return;
1039
+
1040
+ buffer->props.language = language;
1041
+ }
1042
+
1043
+ /**
1044
+ * hb_buffer_get_language:
1045
+ * @buffer: an #hb_buffer_t.
1046
+ *
1047
+ * See hb_buffer_set_language().
1048
+ *
1049
+ * Return value: (transfer none):
1050
+ * The #hb_language_t of the buffer. Must not be freed by the caller.
1051
+ *
1052
+ * Since: 0.9.2
1053
+ **/
1054
+ hb_language_t
1055
+ hb_buffer_get_language (hb_buffer_t *buffer)
1056
+ {
1057
+ return buffer->props.language;
1058
+ }
1059
+
1060
+ /**
1061
+ * hb_buffer_set_segment_properties:
1062
+ * @buffer: an #hb_buffer_t.
1063
+ * @props: an #hb_segment_properties_t to use.
1064
+ *
1065
+ * Sets the segment properties of the buffer, a shortcut for calling
1066
+ * hb_buffer_set_direction(), hb_buffer_set_script() and
1067
+ * hb_buffer_set_language() individually.
1068
+ *
1069
+ * Since: 0.9.7
1070
+ **/
1071
+ void
1072
+ hb_buffer_set_segment_properties (hb_buffer_t *buffer,
1073
+ const hb_segment_properties_t *props)
1074
+ {
1075
+ if (unlikely (hb_object_is_inert (buffer)))
1076
+ return;
1077
+
1078
+ buffer->props = *props;
1079
+ }
1080
+
1081
+ /**
1082
+ * hb_buffer_get_segment_properties:
1083
+ * @buffer: an #hb_buffer_t.
1084
+ * @props: (out): the output #hb_segment_properties_t.
1085
+ *
1086
+ * Sets @props to the #hb_segment_properties_t of @buffer.
1087
+ *
1088
+ * Since: 0.9.7
1089
+ **/
1090
+ void
1091
+ hb_buffer_get_segment_properties (hb_buffer_t *buffer,
1092
+ hb_segment_properties_t *props)
1093
+ {
1094
+ *props = buffer->props;
1095
+ }
1096
+
1097
+
1098
+ /**
1099
+ * hb_buffer_set_flags:
1100
+ * @buffer: an #hb_buffer_t.
1101
+ * @flags: the buffer flags to set.
1102
+ *
1103
+ * Sets @buffer flags to @flags. See #hb_buffer_flags_t.
1104
+ *
1105
+ * Since: 0.9.7
1106
+ **/
1107
+ void
1108
+ hb_buffer_set_flags (hb_buffer_t *buffer,
1109
+ hb_buffer_flags_t flags)
1110
+ {
1111
+ if (unlikely (hb_object_is_inert (buffer)))
1112
+ return;
1113
+
1114
+ buffer->flags = flags;
1115
+ }
1116
+
1117
+ /**
1118
+ * hb_buffer_get_flags:
1119
+ * @buffer: an #hb_buffer_t.
1120
+ *
1121
+ * See hb_buffer_set_flags().
1122
+ *
1123
+ * Return value:
1124
+ * The @buffer flags.
1125
+ *
1126
+ * Since: 0.9.7
1127
+ **/
1128
+ hb_buffer_flags_t
1129
+ hb_buffer_get_flags (hb_buffer_t *buffer)
1130
+ {
1131
+ return buffer->flags;
1132
+ }
1133
+
1134
+ /**
1135
+ * hb_buffer_set_cluster_level:
1136
+ * @buffer: an #hb_buffer_t.
1137
+ * @cluster_level:
1138
+ *
1139
+ *
1140
+ *
1141
+ * Since: 0.9.42
1142
+ **/
1143
+ void
1144
+ hb_buffer_set_cluster_level (hb_buffer_t *buffer,
1145
+ hb_buffer_cluster_level_t cluster_level)
1146
+ {
1147
+ if (unlikely (hb_object_is_inert (buffer)))
1148
+ return;
1149
+
1150
+ buffer->cluster_level = cluster_level;
1151
+ }
1152
+
1153
+ /**
1154
+ * hb_buffer_get_cluster_level:
1155
+ * @buffer: an #hb_buffer_t.
1156
+ *
1157
+ *
1158
+ *
1159
+ * Return value:
1160
+ *
1161
+ * Since: 0.9.42
1162
+ **/
1163
+ hb_buffer_cluster_level_t
1164
+ hb_buffer_get_cluster_level (hb_buffer_t *buffer)
1165
+ {
1166
+ return buffer->cluster_level;
1167
+ }
1168
+
1169
+
1170
+ /**
1171
+ * hb_buffer_set_replacement_codepoint:
1172
+ * @buffer: an #hb_buffer_t.
1173
+ * @replacement: the replacement #hb_codepoint_t
1174
+ *
1175
+ * Sets the #hb_codepoint_t that replaces invalid entries for a given encoding
1176
+ * when adding text to @buffer.
1177
+ *
1178
+ * Default is %HB_BUFFER_REPLACEMENT_CODEPOINT_DEFAULT.
1179
+ *
1180
+ * Since: 0.9.31
1181
+ **/
1182
+ void
1183
+ hb_buffer_set_replacement_codepoint (hb_buffer_t *buffer,
1184
+ hb_codepoint_t replacement)
1185
+ {
1186
+ if (unlikely (hb_object_is_inert (buffer)))
1187
+ return;
1188
+
1189
+ buffer->replacement = replacement;
1190
+ }
1191
+
1192
+ /**
1193
+ * hb_buffer_get_replacement_codepoint:
1194
+ * @buffer: an #hb_buffer_t.
1195
+ *
1196
+ * See hb_buffer_set_replacement_codepoint().
1197
+ *
1198
+ * Return value:
1199
+ * The @buffer replacement #hb_codepoint_t.
1200
+ *
1201
+ * Since: 0.9.31
1202
+ **/
1203
+ hb_codepoint_t
1204
+ hb_buffer_get_replacement_codepoint (hb_buffer_t *buffer)
1205
+ {
1206
+ return buffer->replacement;
1207
+ }
1208
+
1209
+
1210
+ /**
1211
+ * hb_buffer_reset:
1212
+ * @buffer: an #hb_buffer_t.
1213
+ *
1214
+ * Resets the buffer to its initial status, as if it was just newly created
1215
+ * with hb_buffer_create().
1216
+ *
1217
+ * Since: 0.9.2
1218
+ **/
1219
+ void
1220
+ hb_buffer_reset (hb_buffer_t *buffer)
1221
+ {
1222
+ buffer->reset ();
1223
+ }
1224
+
1225
+ /**
1226
+ * hb_buffer_clear_contents:
1227
+ * @buffer: an #hb_buffer_t.
1228
+ *
1229
+ * Similar to hb_buffer_reset(), but does not clear the Unicode functions and
1230
+ * the replacement code point.
1231
+ *
1232
+ * Since: 0.9.11
1233
+ **/
1234
+ void
1235
+ hb_buffer_clear_contents (hb_buffer_t *buffer)
1236
+ {
1237
+ buffer->clear ();
1238
+ }
1239
+
1240
+ /**
1241
+ * hb_buffer_pre_allocate:
1242
+ * @buffer: an #hb_buffer_t.
1243
+ * @size: number of items to pre allocate.
1244
+ *
1245
+ * Pre allocates memory for @buffer to fit at least @size number of items.
1246
+ *
1247
+ * Return value:
1248
+ * %true if @buffer memory allocation succeeded, %false otherwise.
1249
+ *
1250
+ * Since: 0.9.2
1251
+ **/
1252
+ hb_bool_t
1253
+ hb_buffer_pre_allocate (hb_buffer_t *buffer, unsigned int size)
1254
+ {
1255
+ return buffer->ensure (size);
1256
+ }
1257
+
1258
+ /**
1259
+ * hb_buffer_allocation_successful:
1260
+ * @buffer: an #hb_buffer_t.
1261
+ *
1262
+ * Check if allocating memory for the buffer succeeded.
1263
+ *
1264
+ * Return value:
1265
+ * %true if @buffer memory allocation succeeded, %false otherwise.
1266
+ *
1267
+ * Since: 0.9.2
1268
+ **/
1269
+ hb_bool_t
1270
+ hb_buffer_allocation_successful (hb_buffer_t *buffer)
1271
+ {
1272
+ return !buffer->in_error;
1273
+ }
1274
+
1275
+ /**
1276
+ * hb_buffer_add:
1277
+ * @buffer: an #hb_buffer_t.
1278
+ * @codepoint: a Unicode code point.
1279
+ * @cluster: the cluster value of @codepoint.
1280
+ *
1281
+ * Appends a character with the Unicode value of @codepoint to @buffer, and
1282
+ * gives it the initial cluster value of @cluster. Clusters can be any thing
1283
+ * the client wants, they are usually used to refer to the index of the
1284
+ * character in the input text stream and are output in
1285
+ * #hb_glyph_info_t.cluster field.
1286
+ *
1287
+ * This function does not check the validity of @codepoint, it is up to the
1288
+ * caller to ensure it is a valid Unicode code point.
1289
+ *
1290
+ * Since: 0.9.7
1291
+ **/
1292
+ void
1293
+ hb_buffer_add (hb_buffer_t *buffer,
1294
+ hb_codepoint_t codepoint,
1295
+ unsigned int cluster)
1296
+ {
1297
+ buffer->add (codepoint, cluster);
1298
+ buffer->clear_context (1);
1299
+ }
1300
+
1301
+ /**
1302
+ * hb_buffer_set_length:
1303
+ * @buffer: an #hb_buffer_t.
1304
+ * @length: the new length of @buffer.
1305
+ *
1306
+ * Similar to hb_buffer_pre_allocate(), but clears any new items added at the
1307
+ * end.
1308
+ *
1309
+ * Return value:
1310
+ * %true if @buffer memory allocation succeeded, %false otherwise.
1311
+ *
1312
+ * Since: 0.9.2
1313
+ **/
1314
+ hb_bool_t
1315
+ hb_buffer_set_length (hb_buffer_t *buffer,
1316
+ unsigned int length)
1317
+ {
1318
+ if (unlikely (hb_object_is_inert (buffer)))
1319
+ return length == 0;
1320
+
1321
+ if (!buffer->ensure (length))
1322
+ return false;
1323
+
1324
+ /* Wipe the new space */
1325
+ if (length > buffer->len) {
1326
+ memset (buffer->info + buffer->len, 0, sizeof (buffer->info[0]) * (length - buffer->len));
1327
+ if (buffer->have_positions)
1328
+ memset (buffer->pos + buffer->len, 0, sizeof (buffer->pos[0]) * (length - buffer->len));
1329
+ }
1330
+
1331
+ buffer->len = length;
1332
+
1333
+ if (!length)
1334
+ {
1335
+ buffer->content_type = HB_BUFFER_CONTENT_TYPE_INVALID;
1336
+ buffer->clear_context (0);
1337
+ }
1338
+ buffer->clear_context (1);
1339
+
1340
+ return true;
1341
+ }
1342
+
1343
+ /**
1344
+ * hb_buffer_get_length:
1345
+ * @buffer: an #hb_buffer_t.
1346
+ *
1347
+ * Returns the number of items in the buffer.
1348
+ *
1349
+ * Return value:
1350
+ * The @buffer length.
1351
+ * The value valid as long as buffer has not been modified.
1352
+ *
1353
+ * Since: 0.9.2
1354
+ **/
1355
+ unsigned int
1356
+ hb_buffer_get_length (hb_buffer_t *buffer)
1357
+ {
1358
+ return buffer->len;
1359
+ }
1360
+
1361
+ /**
1362
+ * hb_buffer_get_glyph_infos:
1363
+ * @buffer: an #hb_buffer_t.
1364
+ * @length: (out): output array length.
1365
+ *
1366
+ * Returns @buffer glyph information array. Returned pointer
1367
+ * is valid as long as @buffer contents are not modified.
1368
+ *
1369
+ * Return value: (transfer none) (array length=length):
1370
+ * The @buffer glyph information array.
1371
+ * The value valid as long as buffer has not been modified.
1372
+ *
1373
+ * Since: 0.9.2
1374
+ **/
1375
+ hb_glyph_info_t *
1376
+ hb_buffer_get_glyph_infos (hb_buffer_t *buffer,
1377
+ unsigned int *length)
1378
+ {
1379
+ if (length)
1380
+ *length = buffer->len;
1381
+
1382
+ return (hb_glyph_info_t *) buffer->info;
1383
+ }
1384
+
1385
+ /**
1386
+ * hb_buffer_get_glyph_positions:
1387
+ * @buffer: an #hb_buffer_t.
1388
+ * @length: (out): output length.
1389
+ *
1390
+ * Returns @buffer glyph position array. Returned pointer
1391
+ * is valid as long as @buffer contents are not modified.
1392
+ *
1393
+ * Return value: (transfer none) (array length=length):
1394
+ * The @buffer glyph position array.
1395
+ * The value valid as long as buffer has not been modified.
1396
+ *
1397
+ * Since: 0.9.2
1398
+ **/
1399
+ hb_glyph_position_t *
1400
+ hb_buffer_get_glyph_positions (hb_buffer_t *buffer,
1401
+ unsigned int *length)
1402
+ {
1403
+ if (!buffer->have_positions)
1404
+ buffer->clear_positions ();
1405
+
1406
+ if (length)
1407
+ *length = buffer->len;
1408
+
1409
+ return (hb_glyph_position_t *) buffer->pos;
1410
+ }
1411
+
1412
+ /**
1413
+ * hb_glyph_info_get_glyph_flags:
1414
+ * @info: a #hb_glyph_info_t.
1415
+ *
1416
+ * Returns glyph flags encoded within a #hb_glyph_info_t.
1417
+ *
1418
+ * Return value:
1419
+ * The #hb_glyph_flags_t encoded within @info.
1420
+ *
1421
+ * Since: 1.5.0
1422
+ **/
1423
+ hb_glyph_flags_t
1424
+ (hb_glyph_info_get_glyph_flags) (const hb_glyph_info_t *info)
1425
+ {
1426
+ return hb_glyph_info_get_glyph_flags (info);
1427
+ }
1428
+
1429
+ /**
1430
+ * hb_buffer_reverse:
1431
+ * @buffer: an #hb_buffer_t.
1432
+ *
1433
+ * Reverses buffer contents.
1434
+ *
1435
+ * Since: 0.9.2
1436
+ **/
1437
+ void
1438
+ hb_buffer_reverse (hb_buffer_t *buffer)
1439
+ {
1440
+ buffer->reverse ();
1441
+ }
1442
+
1443
+ /**
1444
+ * hb_buffer_reverse_range:
1445
+ * @buffer: an #hb_buffer_t.
1446
+ * @start: start index.
1447
+ * @end: end index.
1448
+ *
1449
+ * Reverses buffer contents between start to end.
1450
+ *
1451
+ * Since: 0.9.41
1452
+ **/
1453
+ void
1454
+ hb_buffer_reverse_range (hb_buffer_t *buffer,
1455
+ unsigned int start, unsigned int end)
1456
+ {
1457
+ buffer->reverse_range (start, end);
1458
+ }
1459
+
1460
+ /**
1461
+ * hb_buffer_reverse_clusters:
1462
+ * @buffer: an #hb_buffer_t.
1463
+ *
1464
+ * Reverses buffer clusters. That is, the buffer contents are
1465
+ * reversed, then each cluster (consecutive items having the
1466
+ * same cluster number) are reversed again.
1467
+ *
1468
+ * Since: 0.9.2
1469
+ **/
1470
+ void
1471
+ hb_buffer_reverse_clusters (hb_buffer_t *buffer)
1472
+ {
1473
+ buffer->reverse_clusters ();
1474
+ }
1475
+
1476
+ /**
1477
+ * hb_buffer_guess_segment_properties:
1478
+ * @buffer: an #hb_buffer_t.
1479
+ *
1480
+ * Sets unset buffer segment properties based on buffer Unicode
1481
+ * contents. If buffer is not empty, it must have content type
1482
+ * %HB_BUFFER_CONTENT_TYPE_UNICODE.
1483
+ *
1484
+ * If buffer script is not set (ie. is %HB_SCRIPT_INVALID), it
1485
+ * will be set to the Unicode script of the first character in
1486
+ * the buffer that has a script other than %HB_SCRIPT_COMMON,
1487
+ * %HB_SCRIPT_INHERITED, and %HB_SCRIPT_UNKNOWN.
1488
+ *
1489
+ * Next, if buffer direction is not set (ie. is %HB_DIRECTION_INVALID),
1490
+ * it will be set to the natural horizontal direction of the
1491
+ * buffer script as returned by hb_script_get_horizontal_direction().
1492
+ *
1493
+ * Finally, if buffer language is not set (ie. is %HB_LANGUAGE_INVALID),
1494
+ * it will be set to the process's default language as returned by
1495
+ * hb_language_get_default(). This may change in the future by
1496
+ * taking buffer script into consideration when choosing a language.
1497
+ *
1498
+ * Since: 0.9.7
1499
+ **/
1500
+ void
1501
+ hb_buffer_guess_segment_properties (hb_buffer_t *buffer)
1502
+ {
1503
+ buffer->guess_segment_properties ();
1504
+ }
1505
+
1506
+ template <typename utf_t>
1507
+ static inline void
1508
+ hb_buffer_add_utf (hb_buffer_t *buffer,
1509
+ const typename utf_t::codepoint_t *text,
1510
+ int text_length,
1511
+ unsigned int item_offset,
1512
+ int item_length)
1513
+ {
1514
+ typedef typename utf_t::codepoint_t T;
1515
+ const hb_codepoint_t replacement = buffer->replacement;
1516
+
1517
+ assert (buffer->content_type == HB_BUFFER_CONTENT_TYPE_UNICODE ||
1518
+ (!buffer->len && buffer->content_type == HB_BUFFER_CONTENT_TYPE_INVALID));
1519
+
1520
+ if (unlikely (hb_object_is_inert (buffer)))
1521
+ return;
1522
+
1523
+ if (text_length == -1)
1524
+ text_length = utf_t::strlen (text);
1525
+
1526
+ if (item_length == -1)
1527
+ item_length = text_length - item_offset;
1528
+
1529
+ buffer->ensure (buffer->len + item_length * sizeof (T) / 4);
1530
+
1531
+ /* If buffer is empty and pre-context provided, install it.
1532
+ * This check is written this way, to make sure people can
1533
+ * provide pre-context in one add_utf() call, then provide
1534
+ * text in a follow-up call. See:
1535
+ *
1536
+ * https://bugzilla.mozilla.org/show_bug.cgi?id=801410#c13
1537
+ */
1538
+ if (!buffer->len && item_offset > 0)
1539
+ {
1540
+ /* Add pre-context */
1541
+ buffer->clear_context (0);
1542
+ const T *prev = text + item_offset;
1543
+ const T *start = text;
1544
+ while (start < prev && buffer->context_len[0] < buffer->CONTEXT_LENGTH)
1545
+ {
1546
+ hb_codepoint_t u;
1547
+ prev = utf_t::prev (prev, start, &u, replacement);
1548
+ buffer->context[0][buffer->context_len[0]++] = u;
1549
+ }
1550
+ }
1551
+
1552
+ const T *next = text + item_offset;
1553
+ const T *end = next + item_length;
1554
+ while (next < end)
1555
+ {
1556
+ hb_codepoint_t u;
1557
+ const T *old_next = next;
1558
+ next = utf_t::next (next, end, &u, replacement);
1559
+ buffer->add (u, old_next - (const T *) text);
1560
+ }
1561
+
1562
+ /* Add post-context */
1563
+ buffer->clear_context (1);
1564
+ end = text + text_length;
1565
+ while (next < end && buffer->context_len[1] < buffer->CONTEXT_LENGTH)
1566
+ {
1567
+ hb_codepoint_t u;
1568
+ next = utf_t::next (next, end, &u, replacement);
1569
+ buffer->context[1][buffer->context_len[1]++] = u;
1570
+ }
1571
+
1572
+ buffer->content_type = HB_BUFFER_CONTENT_TYPE_UNICODE;
1573
+ }
1574
+
1575
+ /**
1576
+ * hb_buffer_add_utf8:
1577
+ * @buffer: an #hb_buffer_t.
1578
+ * @text: (array length=text_length) (element-type uint8_t): an array of UTF-8
1579
+ * characters to append.
1580
+ * @text_length: the length of the @text, or -1 if it is %NULL terminated.
1581
+ * @item_offset: the offset of the first character to add to the @buffer.
1582
+ * @item_length: the number of characters to add to the @buffer, or -1 for the
1583
+ * end of @text (assuming it is %NULL terminated).
1584
+ *
1585
+ * See hb_buffer_add_codepoints().
1586
+ *
1587
+ * Replaces invalid UTF-8 characters with the @buffer replacement code point,
1588
+ * see hb_buffer_set_replacement_codepoint().
1589
+ *
1590
+ * Since: 0.9.2
1591
+ **/
1592
+ void
1593
+ hb_buffer_add_utf8 (hb_buffer_t *buffer,
1594
+ const char *text,
1595
+ int text_length,
1596
+ unsigned int item_offset,
1597
+ int item_length)
1598
+ {
1599
+ hb_buffer_add_utf<hb_utf8_t> (buffer, (const uint8_t *) text, text_length, item_offset, item_length);
1600
+ }
1601
+
1602
+ /**
1603
+ * hb_buffer_add_utf16:
1604
+ * @buffer: an #hb_buffer_t.
1605
+ * @text: (array length=text_length): an array of UTF-16 characters to append.
1606
+ * @text_length: the length of the @text, or -1 if it is %NULL terminated.
1607
+ * @item_offset: the offset of the first character to add to the @buffer.
1608
+ * @item_length: the number of characters to add to the @buffer, or -1 for the
1609
+ * end of @text (assuming it is %NULL terminated).
1610
+ *
1611
+ * See hb_buffer_add_codepoints().
1612
+ *
1613
+ * Replaces invalid UTF-16 characters with the @buffer replacement code point,
1614
+ * see hb_buffer_set_replacement_codepoint().
1615
+ *
1616
+ * Since: 0.9.2
1617
+ **/
1618
+ void
1619
+ hb_buffer_add_utf16 (hb_buffer_t *buffer,
1620
+ const uint16_t *text,
1621
+ int text_length,
1622
+ unsigned int item_offset,
1623
+ int item_length)
1624
+ {
1625
+ hb_buffer_add_utf<hb_utf16_t> (buffer, text, text_length, item_offset, item_length);
1626
+ }
1627
+
1628
+ /**
1629
+ * hb_buffer_add_utf32:
1630
+ * @buffer: an #hb_buffer_t.
1631
+ * @text: (array length=text_length): an array of UTF-32 characters to append.
1632
+ * @text_length: the length of the @text, or -1 if it is %NULL terminated.
1633
+ * @item_offset: the offset of the first character to add to the @buffer.
1634
+ * @item_length: the number of characters to add to the @buffer, or -1 for the
1635
+ * end of @text (assuming it is %NULL terminated).
1636
+ *
1637
+ * See hb_buffer_add_codepoints().
1638
+ *
1639
+ * Replaces invalid UTF-32 characters with the @buffer replacement code point,
1640
+ * see hb_buffer_set_replacement_codepoint().
1641
+ *
1642
+ * Since: 0.9.2
1643
+ **/
1644
+ void
1645
+ hb_buffer_add_utf32 (hb_buffer_t *buffer,
1646
+ const uint32_t *text,
1647
+ int text_length,
1648
+ unsigned int item_offset,
1649
+ int item_length)
1650
+ {
1651
+ hb_buffer_add_utf<hb_utf32_t<> > (buffer, text, text_length, item_offset, item_length);
1652
+ }
1653
+
1654
+ /**
1655
+ * hb_buffer_add_latin1:
1656
+ * @buffer: an #hb_buffer_t.
1657
+ * @text: (array length=text_length) (element-type uint8_t): an array of UTF-8
1658
+ * characters to append.
1659
+ * @text_length: the length of the @text, or -1 if it is %NULL terminated.
1660
+ * @item_offset: the offset of the first character to add to the @buffer.
1661
+ * @item_length: the number of characters to add to the @buffer, or -1 for the
1662
+ * end of @text (assuming it is %NULL terminated).
1663
+ *
1664
+ * Similar to hb_buffer_add_codepoints(), but allows only access to first 256
1665
+ * Unicode code points that can fit in 8-bit strings.
1666
+ *
1667
+ * <note>Has nothing to do with non-Unicode Latin-1 encoding.</note>
1668
+ *
1669
+ * Since: 0.9.39
1670
+ **/
1671
+ void
1672
+ hb_buffer_add_latin1 (hb_buffer_t *buffer,
1673
+ const uint8_t *text,
1674
+ int text_length,
1675
+ unsigned int item_offset,
1676
+ int item_length)
1677
+ {
1678
+ hb_buffer_add_utf<hb_latin1_t> (buffer, text, text_length, item_offset, item_length);
1679
+ }
1680
+
1681
+ /**
1682
+ * hb_buffer_add_codepoints:
1683
+ * @buffer: a #hb_buffer_t to append characters to.
1684
+ * @text: (array length=text_length): an array of Unicode code points to append.
1685
+ * @text_length: the length of the @text, or -1 if it is %NULL terminated.
1686
+ * @item_offset: the offset of the first code point to add to the @buffer.
1687
+ * @item_length: the number of code points to add to the @buffer, or -1 for the
1688
+ * end of @text (assuming it is %NULL terminated).
1689
+ *
1690
+ * Appends characters from @text array to @buffer. The @item_offset is the
1691
+ * position of the first character from @text that will be appended, and
1692
+ * @item_length is the number of character. When shaping part of a larger text
1693
+ * (e.g. a run of text from a paragraph), instead of passing just the substring
1694
+ * corresponding to the run, it is preferable to pass the whole
1695
+ * paragraph and specify the run start and length as @item_offset and
1696
+ * @item_length, respectively, to give HarfBuzz the full context to be able,
1697
+ * for example, to do cross-run Arabic shaping or properly handle combining
1698
+ * marks at stat of run.
1699
+ *
1700
+ * This function does not check the validity of @text, it is up to the caller
1701
+ * to ensure it contains a valid Unicode code points.
1702
+ *
1703
+ * Since: 0.9.31
1704
+ **/
1705
+ void
1706
+ hb_buffer_add_codepoints (hb_buffer_t *buffer,
1707
+ const hb_codepoint_t *text,
1708
+ int text_length,
1709
+ unsigned int item_offset,
1710
+ int item_length)
1711
+ {
1712
+ hb_buffer_add_utf<hb_utf32_t<false> > (buffer, text, text_length, item_offset, item_length);
1713
+ }
1714
+
1715
+
1716
+ /**
1717
+ * hb_buffer_append:
1718
+ * @buffer: an #hb_buffer_t.
1719
+ * @source: source #hb_buffer_t.
1720
+ * @start: start index into source buffer to copy. Use 0 to copy from start of buffer.
1721
+ * @end: end index into source buffer to copy. Use (unsigned int) -1 to copy to end of buffer.
1722
+ *
1723
+ * Append (part of) contents of another buffer to this buffer.
1724
+ *
1725
+ * Since: 1.5.0
1726
+ **/
1727
+ HB_EXTERN void
1728
+ hb_buffer_append (hb_buffer_t *buffer,
1729
+ hb_buffer_t *source,
1730
+ unsigned int start,
1731
+ unsigned int end)
1732
+ {
1733
+ assert (!buffer->have_output && !source->have_output);
1734
+ assert (buffer->have_positions == source->have_positions ||
1735
+ !buffer->len || !source->len);
1736
+ assert (buffer->content_type == source->content_type ||
1737
+ !buffer->len || !source->len);
1738
+
1739
+ if (end > source->len)
1740
+ end = source->len;
1741
+ if (start > end)
1742
+ start = end;
1743
+ if (start == end)
1744
+ return;
1745
+
1746
+ if (!buffer->len)
1747
+ buffer->content_type = source->content_type;
1748
+ if (!buffer->have_positions && source->have_positions)
1749
+ buffer->clear_positions ();
1750
+
1751
+ if (buffer->len + (end - start) < buffer->len) /* Overflows. */
1752
+ {
1753
+ buffer->in_error = true;
1754
+ return;
1755
+ }
1756
+
1757
+ unsigned int orig_len = buffer->len;
1758
+ hb_buffer_set_length (buffer, buffer->len + (end - start));
1759
+ if (buffer->in_error)
1760
+ return;
1761
+
1762
+ memcpy (buffer->info + orig_len, source->info + start, (end - start) * sizeof (buffer->info[0]));
1763
+ if (buffer->have_positions)
1764
+ memcpy (buffer->pos + orig_len, source->pos + start, (end - start) * sizeof (buffer->pos[0]));
1765
+ }
1766
+
1767
+
1768
+ static int
1769
+ compare_info_codepoint (const hb_glyph_info_t *pa,
1770
+ const hb_glyph_info_t *pb)
1771
+ {
1772
+ return (int) pb->codepoint - (int) pa->codepoint;
1773
+ }
1774
+
1775
+ static inline void
1776
+ normalize_glyphs_cluster (hb_buffer_t *buffer,
1777
+ unsigned int start,
1778
+ unsigned int end,
1779
+ bool backward)
1780
+ {
1781
+ hb_glyph_position_t *pos = buffer->pos;
1782
+
1783
+ /* Total cluster advance */
1784
+ hb_position_t total_x_advance = 0, total_y_advance = 0;
1785
+ for (unsigned int i = start; i < end; i++)
1786
+ {
1787
+ total_x_advance += pos[i].x_advance;
1788
+ total_y_advance += pos[i].y_advance;
1789
+ }
1790
+
1791
+ hb_position_t x_advance = 0, y_advance = 0;
1792
+ for (unsigned int i = start; i < end; i++)
1793
+ {
1794
+ pos[i].x_offset += x_advance;
1795
+ pos[i].y_offset += y_advance;
1796
+
1797
+ x_advance += pos[i].x_advance;
1798
+ y_advance += pos[i].y_advance;
1799
+
1800
+ pos[i].x_advance = 0;
1801
+ pos[i].y_advance = 0;
1802
+ }
1803
+
1804
+ if (backward)
1805
+ {
1806
+ /* Transfer all cluster advance to the last glyph. */
1807
+ pos[end - 1].x_advance = total_x_advance;
1808
+ pos[end - 1].y_advance = total_y_advance;
1809
+
1810
+ hb_stable_sort (buffer->info + start, end - start - 1, compare_info_codepoint, buffer->pos + start);
1811
+ } else {
1812
+ /* Transfer all cluster advance to the first glyph. */
1813
+ pos[start].x_advance += total_x_advance;
1814
+ pos[start].y_advance += total_y_advance;
1815
+ for (unsigned int i = start + 1; i < end; i++) {
1816
+ pos[i].x_offset -= total_x_advance;
1817
+ pos[i].y_offset -= total_y_advance;
1818
+ }
1819
+ hb_stable_sort (buffer->info + start + 1, end - start - 1, compare_info_codepoint, buffer->pos + start + 1);
1820
+ }
1821
+ }
1822
+
1823
+ /**
1824
+ * hb_buffer_normalize_glyphs:
1825
+ * @buffer: an #hb_buffer_t.
1826
+ *
1827
+ * Reorders a glyph buffer to have canonical in-cluster glyph order / position.
1828
+ * The resulting clusters should behave identical to pre-reordering clusters.
1829
+ *
1830
+ * <note>This has nothing to do with Unicode normalization.</note>
1831
+ *
1832
+ * Since: 0.9.2
1833
+ **/
1834
+ void
1835
+ hb_buffer_normalize_glyphs (hb_buffer_t *buffer)
1836
+ {
1837
+ assert (buffer->have_positions);
1838
+ assert (buffer->content_type == HB_BUFFER_CONTENT_TYPE_GLYPHS ||
1839
+ (!buffer->len && buffer->content_type == HB_BUFFER_CONTENT_TYPE_INVALID));
1840
+
1841
+ bool backward = HB_DIRECTION_IS_BACKWARD (buffer->props.direction);
1842
+
1843
+ unsigned int count = buffer->len;
1844
+ if (unlikely (!count)) return;
1845
+ hb_glyph_info_t *info = buffer->info;
1846
+
1847
+ unsigned int start = 0;
1848
+ unsigned int end;
1849
+ for (end = start + 1; end < count; end++)
1850
+ if (info[start].cluster != info[end].cluster) {
1851
+ normalize_glyphs_cluster (buffer, start, end, backward);
1852
+ start = end;
1853
+ }
1854
+ normalize_glyphs_cluster (buffer, start, end, backward);
1855
+ }
1856
+
1857
+ void
1858
+ hb_buffer_t::sort (unsigned int start, unsigned int end, int(*compar)(const hb_glyph_info_t *, const hb_glyph_info_t *))
1859
+ {
1860
+ assert (!have_positions);
1861
+ for (unsigned int i = start + 1; i < end; i++)
1862
+ {
1863
+ unsigned int j = i;
1864
+ while (j > start && compar (&info[j - 1], &info[i]) > 0)
1865
+ j--;
1866
+ if (i == j)
1867
+ continue;
1868
+ /* Move item i to occupy place for item j, shift what's in between. */
1869
+ merge_clusters (j, i + 1);
1870
+ {
1871
+ hb_glyph_info_t t = info[i];
1872
+ memmove (&info[j + 1], &info[j], (i - j) * sizeof (hb_glyph_info_t));
1873
+ info[j] = t;
1874
+ }
1875
+ }
1876
+ }
1877
+
1878
+
1879
+ /*
1880
+ * Comparing buffers.
1881
+ */
1882
+
1883
+ /**
1884
+ * hb_buffer_diff:
1885
+ *
1886
+ * If dottedcircle_glyph is (hb_codepoint_t) -1 then %HB_BUFFER_DIFF_FLAG_DOTTED_CIRCLE_PRESENT
1887
+ * and %HB_BUFFER_DIFF_FLAG_NOTDEF_PRESENT are never returned. This should be used by most
1888
+ * callers if just comparing two buffers is needed.
1889
+ *
1890
+ * Since: 1.5.0
1891
+ **/
1892
+ hb_buffer_diff_flags_t
1893
+ hb_buffer_diff (hb_buffer_t *buffer,
1894
+ hb_buffer_t *reference,
1895
+ hb_codepoint_t dottedcircle_glyph,
1896
+ unsigned int position_fuzz)
1897
+ {
1898
+ if (buffer->content_type != reference->content_type && buffer->len && reference->len)
1899
+ return HB_BUFFER_DIFF_FLAG_CONTENT_TYPE_MISMATCH;
1900
+
1901
+ hb_buffer_diff_flags_t result = HB_BUFFER_DIFF_FLAG_EQUAL;
1902
+ bool contains = dottedcircle_glyph != (hb_codepoint_t) -1;
1903
+
1904
+ unsigned int count = reference->len;
1905
+
1906
+ if (buffer->len != count)
1907
+ {
1908
+ /*
1909
+ * we can't compare glyph-by-glyph, but we do want to know if there
1910
+ * are .notdef or dottedcircle glyphs present in the reference buffer
1911
+ */
1912
+ const hb_glyph_info_t *info = reference->info;
1913
+ unsigned int i;
1914
+ for (i = 0; i < count; i++)
1915
+ {
1916
+ if (contains && info[i].codepoint == dottedcircle_glyph)
1917
+ result |= HB_BUFFER_DIFF_FLAG_DOTTED_CIRCLE_PRESENT;
1918
+ if (contains && info[i].codepoint == 0)
1919
+ result |= HB_BUFFER_DIFF_FLAG_NOTDEF_PRESENT;
1920
+ }
1921
+ result |= HB_BUFFER_DIFF_FLAG_LENGTH_MISMATCH;
1922
+ return hb_buffer_diff_flags_t (result);
1923
+ }
1924
+
1925
+ if (!count)
1926
+ return hb_buffer_diff_flags_t (result);
1927
+
1928
+ const hb_glyph_info_t *buf_info = buffer->info;
1929
+ const hb_glyph_info_t *ref_info = reference->info;
1930
+ for (unsigned int i = 0; i < count; i++)
1931
+ {
1932
+ if (buf_info->codepoint != ref_info->codepoint)
1933
+ result |= HB_BUFFER_DIFF_FLAG_CODEPOINT_MISMATCH;
1934
+ if (buf_info->cluster != ref_info->cluster)
1935
+ result |= HB_BUFFER_DIFF_FLAG_CLUSTER_MISMATCH;
1936
+ if ((buf_info->mask & ~ref_info->mask & HB_GLYPH_FLAG_DEFINED))
1937
+ result |= HB_BUFFER_DIFF_FLAG_GLYPH_FLAGS_MISMATCH;
1938
+ if (contains && ref_info->codepoint == dottedcircle_glyph)
1939
+ result |= HB_BUFFER_DIFF_FLAG_DOTTED_CIRCLE_PRESENT;
1940
+ if (contains && ref_info->codepoint == 0)
1941
+ result |= HB_BUFFER_DIFF_FLAG_NOTDEF_PRESENT;
1942
+ buf_info++;
1943
+ ref_info++;
1944
+ }
1945
+
1946
+ if (buffer->content_type == HB_BUFFER_CONTENT_TYPE_GLYPHS)
1947
+ {
1948
+ assert (buffer->have_positions);
1949
+ const hb_glyph_position_t *buf_pos = buffer->pos;
1950
+ const hb_glyph_position_t *ref_pos = reference->pos;
1951
+ for (unsigned int i = 0; i < count; i++)
1952
+ {
1953
+ if ((unsigned int) abs (buf_pos->x_advance - ref_pos->x_advance) > position_fuzz ||
1954
+ (unsigned int) abs (buf_pos->y_advance - ref_pos->y_advance) > position_fuzz ||
1955
+ (unsigned int) abs (buf_pos->x_offset - ref_pos->x_offset) > position_fuzz ||
1956
+ (unsigned int) abs (buf_pos->y_offset - ref_pos->y_offset) > position_fuzz)
1957
+ {
1958
+ result |= HB_BUFFER_DIFF_FLAG_POSITION_MISMATCH;
1959
+ break;
1960
+ }
1961
+ buf_pos++;
1962
+ ref_pos++;
1963
+ }
1964
+ }
1965
+
1966
+ return result;
1967
+ }
1968
+
1969
+
1970
+ /*
1971
+ * Debugging.
1972
+ */
1973
+
1974
+ /**
1975
+ * hb_buffer_set_message_func:
1976
+ * @buffer: an #hb_buffer_t.
1977
+ * @func: (closure user_data) (destroy destroy) (scope notified):
1978
+ * @user_data:
1979
+ * @destroy:
1980
+ *
1981
+ *
1982
+ *
1983
+ * Since: 1.1.3
1984
+ **/
1985
+ void
1986
+ hb_buffer_set_message_func (hb_buffer_t *buffer,
1987
+ hb_buffer_message_func_t func,
1988
+ void *user_data, hb_destroy_func_t destroy)
1989
+ {
1990
+ if (buffer->message_destroy)
1991
+ buffer->message_destroy (buffer->message_data);
1992
+
1993
+ if (func) {
1994
+ buffer->message_func = func;
1995
+ buffer->message_data = user_data;
1996
+ buffer->message_destroy = destroy;
1997
+ } else {
1998
+ buffer->message_func = nullptr;
1999
+ buffer->message_data = nullptr;
2000
+ buffer->message_destroy = nullptr;
2001
+ }
2002
+ }
2003
+
2004
+ bool
2005
+ hb_buffer_t::message_impl (hb_font_t *font, const char *fmt, va_list ap)
2006
+ {
2007
+ char buf[100];
2008
+ vsnprintf (buf, sizeof (buf), fmt, ap);
2009
+ return (bool) this->message_func (this, font, buf, this->message_data);
2010
+ }