laag-harfbuzz 1.7.6.1

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