laag-harfbuzz 1.7.6.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (876) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +57 -0
  3. data/LICENSE.txt +36 -0
  4. data/README.org +34 -0
  5. data/ext/laag/harfbuzz/extconf.rb +16 -0
  6. data/laag-harfbuzz.gemspec +20 -0
  7. data/lib/laag/harfbuzz.rb +29 -0
  8. data/vendor/github.com/harfbuzz/harfbuzz/.ci/deploy-docs.sh +36 -0
  9. data/vendor/github.com/harfbuzz/harfbuzz/.ci/fail.sh +18 -0
  10. data/vendor/github.com/harfbuzz/harfbuzz/.ci/run-coveralls.sh +14 -0
  11. data/vendor/github.com/harfbuzz/harfbuzz/.ci/trigger-coverity.sh +11 -0
  12. data/vendor/github.com/harfbuzz/harfbuzz/.circleci/config.yml +190 -0
  13. data/vendor/github.com/harfbuzz/harfbuzz/.editorconfig +18 -0
  14. data/vendor/github.com/harfbuzz/harfbuzz/.travis.yml +89 -0
  15. data/vendor/github.com/harfbuzz/harfbuzz/AUTHORS +9 -0
  16. data/vendor/github.com/harfbuzz/harfbuzz/BUILD.md +50 -0
  17. data/vendor/github.com/harfbuzz/harfbuzz/CMakeLists.txt +848 -0
  18. data/vendor/github.com/harfbuzz/harfbuzz/COPYING +36 -0
  19. data/vendor/github.com/harfbuzz/harfbuzz/Makefile.am +85 -0
  20. data/vendor/github.com/harfbuzz/harfbuzz/NEWS +1832 -0
  21. data/vendor/github.com/harfbuzz/harfbuzz/README +16 -0
  22. data/vendor/github.com/harfbuzz/harfbuzz/README.md +1 -0
  23. data/vendor/github.com/harfbuzz/harfbuzz/README.python +30 -0
  24. data/vendor/github.com/harfbuzz/harfbuzz/RELEASING.md +99 -0
  25. data/vendor/github.com/harfbuzz/harfbuzz/THANKS +7 -0
  26. data/vendor/github.com/harfbuzz/harfbuzz/TODO +42 -0
  27. data/vendor/github.com/harfbuzz/harfbuzz/appveyor.yml +61 -0
  28. data/vendor/github.com/harfbuzz/harfbuzz/autogen.sh +48 -0
  29. data/vendor/github.com/harfbuzz/harfbuzz/configure.ac +542 -0
  30. data/vendor/github.com/harfbuzz/harfbuzz/docs/HarfBuzz.png +0 -0
  31. data/vendor/github.com/harfbuzz/harfbuzz/docs/HarfBuzz.svg +277 -0
  32. data/vendor/github.com/harfbuzz/harfbuzz/docs/Makefile.am +123 -0
  33. data/vendor/github.com/harfbuzz/harfbuzz/docs/harfbuzz-docs.xml +210 -0
  34. data/vendor/github.com/harfbuzz/harfbuzz/docs/harfbuzz-overrides.txt +0 -0
  35. data/vendor/github.com/harfbuzz/harfbuzz/docs/harfbuzz-sections.txt +627 -0
  36. data/vendor/github.com/harfbuzz/harfbuzz/docs/usermanual-buffers-language-script-and-direction.xml +77 -0
  37. data/vendor/github.com/harfbuzz/harfbuzz/docs/usermanual-clusters.xml +304 -0
  38. data/vendor/github.com/harfbuzz/harfbuzz/docs/usermanual-fonts-and-faces.xml +18 -0
  39. data/vendor/github.com/harfbuzz/harfbuzz/docs/usermanual-glyph-information.xml +8 -0
  40. data/vendor/github.com/harfbuzz/harfbuzz/docs/usermanual-hello-harfbuzz.xml +183 -0
  41. data/vendor/github.com/harfbuzz/harfbuzz/docs/usermanual-install-harfbuzz.xml +70 -0
  42. data/vendor/github.com/harfbuzz/harfbuzz/docs/usermanual-opentype-features.xml +13 -0
  43. data/vendor/github.com/harfbuzz/harfbuzz/docs/usermanual-what-is-harfbuzz.xml +115 -0
  44. data/vendor/github.com/harfbuzz/harfbuzz/docs/version.xml.in +1 -0
  45. data/vendor/github.com/harfbuzz/harfbuzz/git.mk +400 -0
  46. data/vendor/github.com/harfbuzz/harfbuzz/harfbuzz.doap +24 -0
  47. data/vendor/github.com/harfbuzz/harfbuzz/m4/ax_code_coverage.m4 +264 -0
  48. data/vendor/github.com/harfbuzz/harfbuzz/m4/ax_cxx_compile_stdcxx.m4 +982 -0
  49. data/vendor/github.com/harfbuzz/harfbuzz/m4/ax_pthread.m4 +485 -0
  50. data/vendor/github.com/harfbuzz/harfbuzz/m4/pkg.m4 +157 -0
  51. data/vendor/github.com/harfbuzz/harfbuzz/mingw32.sh +22 -0
  52. data/vendor/github.com/harfbuzz/harfbuzz/mingw64.sh +22 -0
  53. data/vendor/github.com/harfbuzz/harfbuzz/replace-enum-strings.cmake +21 -0
  54. data/vendor/github.com/harfbuzz/harfbuzz/src/Makefile.am +445 -0
  55. data/vendor/github.com/harfbuzz/harfbuzz/src/Makefile.sources +214 -0
  56. data/vendor/github.com/harfbuzz/harfbuzz/src/check-c-linkage-decls.sh +27 -0
  57. data/vendor/github.com/harfbuzz/harfbuzz/src/check-externs.sh +22 -0
  58. data/vendor/github.com/harfbuzz/harfbuzz/src/check-header-guards.sh +24 -0
  59. data/vendor/github.com/harfbuzz/harfbuzz/src/check-includes.sh +44 -0
  60. data/vendor/github.com/harfbuzz/harfbuzz/src/check-libstdc++.sh +44 -0
  61. data/vendor/github.com/harfbuzz/harfbuzz/src/check-static-inits.sh +40 -0
  62. data/vendor/github.com/harfbuzz/harfbuzz/src/check-symbols.sh +62 -0
  63. data/vendor/github.com/harfbuzz/harfbuzz/src/dev-run.sh +98 -0
  64. data/vendor/github.com/harfbuzz/harfbuzz/src/dump-indic-data.cc +43 -0
  65. data/vendor/github.com/harfbuzz/harfbuzz/src/dump-khmer-data.cc +43 -0
  66. data/vendor/github.com/harfbuzz/harfbuzz/src/dump-myanmar-data.cc +43 -0
  67. data/vendor/github.com/harfbuzz/harfbuzz/src/dump-use-data.cc +38 -0
  68. data/vendor/github.com/harfbuzz/harfbuzz/src/gen-arabic-table.py +269 -0
  69. data/vendor/github.com/harfbuzz/harfbuzz/src/gen-def.py +19 -0
  70. data/vendor/github.com/harfbuzz/harfbuzz/src/gen-indic-table.py +260 -0
  71. data/vendor/github.com/harfbuzz/harfbuzz/src/gen-unicode-ranges.py +52 -0
  72. data/vendor/github.com/harfbuzz/harfbuzz/src/gen-use-table.py +484 -0
  73. data/vendor/github.com/harfbuzz/harfbuzz/src/harfbuzz-config.cmake.in +82 -0
  74. data/vendor/github.com/harfbuzz/harfbuzz/src/harfbuzz-gobject.pc.in +12 -0
  75. data/vendor/github.com/harfbuzz/harfbuzz/src/harfbuzz-icu.pc.in +13 -0
  76. data/vendor/github.com/harfbuzz/harfbuzz/src/harfbuzz-subset.pc.in +12 -0
  77. data/vendor/github.com/harfbuzz/harfbuzz/src/harfbuzz.pc.in +13 -0
  78. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-aat-layout-ankr-table.hh +80 -0
  79. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-aat-layout-common-private.hh +728 -0
  80. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-aat-layout-kerx-table.hh +339 -0
  81. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-aat-layout-morx-table.hh +728 -0
  82. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-aat-layout-private.hh +43 -0
  83. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-aat-layout-trak-table.hh +201 -0
  84. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-aat-layout.cc +143 -0
  85. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-atomic-private.hh +189 -0
  86. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-blob.cc +504 -0
  87. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-blob.h +129 -0
  88. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-buffer-deserialize-json.hh +643 -0
  89. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-buffer-deserialize-json.rl +132 -0
  90. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-buffer-deserialize-text.hh +571 -0
  91. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-buffer-deserialize-text.rl +126 -0
  92. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-buffer-private.hh +388 -0
  93. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-buffer-serialize.cc +486 -0
  94. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-buffer.cc +2010 -0
  95. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-buffer.h +562 -0
  96. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-common.cc +1050 -0
  97. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-common.h +397 -0
  98. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-coretext.cc +1401 -0
  99. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-coretext.h +64 -0
  100. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-debug.hh +444 -0
  101. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-deprecated.h +65 -0
  102. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-directwrite.cc +931 -0
  103. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-directwrite.h +38 -0
  104. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-dsalgs.hh +161 -0
  105. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-face-private.hh +111 -0
  106. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-face.cc +506 -0
  107. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-face.h +121 -0
  108. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-fallback-shape.cc +149 -0
  109. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-font-private.hh +561 -0
  110. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-font.cc +1846 -0
  111. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-font.h +641 -0
  112. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ft.cc +783 -0
  113. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ft.h +132 -0
  114. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-glib.cc +431 -0
  115. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-glib.h +56 -0
  116. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-gobject-enums.cc.tmpl +73 -0
  117. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-gobject-enums.h.tmpl +56 -0
  118. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-gobject-structs.cc +83 -0
  119. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-gobject-structs.h +138 -0
  120. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-gobject.h +40 -0
  121. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-graphite2.cc +421 -0
  122. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-graphite2.h +52 -0
  123. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-icu.cc +394 -0
  124. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-icu.h +52 -0
  125. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-mutex-private.hh +141 -0
  126. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-object-private.hh +196 -0
  127. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-open-file-private.hh +372 -0
  128. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-open-type-private.hh +1238 -0
  129. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-cmap-table.hh +789 -0
  130. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-color-cbdt-table.hh +471 -0
  131. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-color-colr-table.hh +142 -0
  132. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-color-cpal-table.hh +208 -0
  133. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-color.cc +183 -0
  134. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-font.cc +281 -0
  135. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-font.h +45 -0
  136. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-glyf-table.hh +473 -0
  137. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-hdmx-table.hh +198 -0
  138. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-head-table.hh +154 -0
  139. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-hhea-table.hh +98 -0
  140. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-hmtx-table.hh +328 -0
  141. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-kern-table.hh +394 -0
  142. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-layout-base-table.hh +655 -0
  143. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-layout-common-private.hh +1773 -0
  144. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-layout-gdef-table.hh +459 -0
  145. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-layout-gpos-table.hh +1654 -0
  146. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-layout-gsub-table.hh +1364 -0
  147. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-layout-gsubgpos-private.hh +2374 -0
  148. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-layout-jstf-table.hh +234 -0
  149. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-layout-private.hh +683 -0
  150. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-layout.cc +1313 -0
  151. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-layout.h +338 -0
  152. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-map-private.hh +250 -0
  153. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-map.cc +336 -0
  154. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-math-table.hh +722 -0
  155. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-math.cc +253 -0
  156. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-math.h +209 -0
  157. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-maxp-table.hh +148 -0
  158. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-name-table.hh +138 -0
  159. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-os2-table.hh +181 -0
  160. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-os2-unicode-ranges.hh +247 -0
  161. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-post-macroman.hh +294 -0
  162. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-post-table.hh +282 -0
  163. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-arabic-fallback.hh +354 -0
  164. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-arabic-private.hh +50 -0
  165. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-arabic-table.hh +398 -0
  166. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-arabic-win1256.hh +323 -0
  167. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-arabic.cc +721 -0
  168. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-default.cc +46 -0
  169. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-hangul.cc +431 -0
  170. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-hebrew.cc +186 -0
  171. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-indic-machine.hh +1319 -0
  172. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-indic-machine.rl +125 -0
  173. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-indic-private.hh +401 -0
  174. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-indic-table.cc +486 -0
  175. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-indic.cc +1569 -0
  176. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-khmer-machine.hh +294 -0
  177. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-khmer-machine.rl +107 -0
  178. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-khmer-private.hh +124 -0
  179. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-khmer.cc +835 -0
  180. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-myanmar-machine.hh +413 -0
  181. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-myanmar-machine.rl +129 -0
  182. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-myanmar-private.hh +171 -0
  183. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-myanmar.cc +401 -0
  184. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-private.hh +397 -0
  185. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-thai.cc +383 -0
  186. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-tibetan.cc +63 -0
  187. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-use-machine.hh +502 -0
  188. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-use-machine.rl +176 -0
  189. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-use-private.hh +97 -0
  190. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-use-table.cc +788 -0
  191. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-complex-use.cc +612 -0
  192. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-fallback-private.hh +53 -0
  193. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-fallback.cc +559 -0
  194. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-normalize-private.hh +69 -0
  195. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-normalize.cc +433 -0
  196. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape-private.hh +108 -0
  197. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape.cc +970 -0
  198. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-shape.h +53 -0
  199. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-tag.cc +1094 -0
  200. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-tag.h +59 -0
  201. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-var-avar-table.hh +149 -0
  202. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-var-fvar-table.hh +209 -0
  203. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-var-hvar-table.hh +165 -0
  204. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-var-mvar-table.hh +114 -0
  205. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-var.cc +159 -0
  206. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot-var.h +105 -0
  207. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ot.h +45 -0
  208. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-private.hh +1073 -0
  209. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-set-digest-private.hh +179 -0
  210. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-set-private.hh +658 -0
  211. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-set.cc +519 -0
  212. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-set.h +165 -0
  213. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-shape-plan-private.hh +67 -0
  214. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-shape-plan.cc +578 -0
  215. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-shape-plan.h +108 -0
  216. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-shape.cc +161 -0
  217. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-shape.h +62 -0
  218. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-shaper-impl-private.hh +43 -0
  219. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-shaper-list.hh +58 -0
  220. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-shaper-private.hh +124 -0
  221. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-shaper.cc +111 -0
  222. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-string-array.hh +81 -0
  223. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-subset-glyf.cc +307 -0
  224. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-subset-glyf.hh +40 -0
  225. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-subset-input.cc +119 -0
  226. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-subset-plan.cc +227 -0
  227. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-subset-plan.hh +85 -0
  228. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-subset-private.hh +62 -0
  229. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-subset.cc +339 -0
  230. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-subset.h +83 -0
  231. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ucdn.cc +273 -0
  232. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ucdn/COPYING +13 -0
  233. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ucdn/Makefile.am +16 -0
  234. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ucdn/Makefile.sources +7 -0
  235. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ucdn/README +40 -0
  236. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ucdn/ucdn.c +360 -0
  237. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ucdn/ucdn.h +453 -0
  238. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-ucdn/ucdn_db.h +5540 -0
  239. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-unicode-private.hh +371 -0
  240. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-unicode.cc +563 -0
  241. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-unicode.h +471 -0
  242. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-uniscribe.cc +1039 -0
  243. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-uniscribe.h +46 -0
  244. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-utf-private.hh +282 -0
  245. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-version.h +66 -0
  246. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-version.h.in +66 -0
  247. data/vendor/github.com/harfbuzz/harfbuzz/src/hb-warning.cc +39 -0
  248. data/vendor/github.com/harfbuzz/harfbuzz/src/hb.h +51 -0
  249. data/vendor/github.com/harfbuzz/harfbuzz/src/main.cc +201 -0
  250. data/vendor/github.com/harfbuzz/harfbuzz/src/sample.py +78 -0
  251. data/vendor/github.com/harfbuzz/harfbuzz/src/test-buffer-serialize.cc +129 -0
  252. data/vendor/github.com/harfbuzz/harfbuzz/src/test-size-params.cc +94 -0
  253. data/vendor/github.com/harfbuzz/harfbuzz/src/test-unicode-ranges.cc +67 -0
  254. data/vendor/github.com/harfbuzz/harfbuzz/src/test-would-substitute.cc +104 -0
  255. data/vendor/github.com/harfbuzz/harfbuzz/src/test.cc +134 -0
  256. data/vendor/github.com/harfbuzz/harfbuzz/test/CMakeLists.txt +4 -0
  257. data/vendor/github.com/harfbuzz/harfbuzz/test/Makefile.am +15 -0
  258. data/vendor/github.com/harfbuzz/harfbuzz/test/api/.valgrind-suppressions +0 -0
  259. data/vendor/github.com/harfbuzz/harfbuzz/test/api/CMakeLists.txt +29 -0
  260. data/vendor/github.com/harfbuzz/harfbuzz/test/api/Makefile.am +169 -0
  261. data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/Inconsolata-Regular.ab.ttf +0 -0
  262. data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/Inconsolata-Regular.abc.ttf +0 -0
  263. data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/Inconsolata-Regular.abc.widerc.ttf +0 -0
  264. data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/Inconsolata-Regular.ac.ttf +0 -0
  265. data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/Inconsolata-Regular.ac.widerc.ttf +0 -0
  266. data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/MathTestFontEmpty.otf +0 -0
  267. data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/MathTestFontFull.otf +0 -0
  268. data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/MathTestFontNone.otf +0 -0
  269. data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/MathTestFontPartial1.otf +0 -0
  270. data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/MathTestFontPartial2.otf +0 -0
  271. data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/MathTestFontPartial3.otf +0 -0
  272. data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/MathTestFontPartial4.otf +0 -0
  273. data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/README +3 -0
  274. data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/Roboto-Regular.abc.cmap-format12-only.ttf +0 -0
  275. data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/Roboto-Regular.abc.ttf +0 -0
  276. data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/Roboto-Regular.ac.cmap-format12-only.ttf +0 -0
  277. data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/Roboto-Regular.ac.nohints.ttf +0 -0
  278. data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/Roboto-Regular.ac.ttf +0 -0
  279. data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/Roboto-Regular.b.ttf +0 -0
  280. data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/Roboto-Regular.components.1fc.nohints.ttf +0 -0
  281. data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/Roboto-Regular.components.subset.ttf +0 -0
  282. data/vendor/github.com/harfbuzz/harfbuzz/test/api/fonts/Roboto-Regular.components.ttf +0 -0
  283. data/vendor/github.com/harfbuzz/harfbuzz/test/api/hb-subset-test.h +136 -0
  284. data/vendor/github.com/harfbuzz/harfbuzz/test/api/hb-test.h +314 -0
  285. data/vendor/github.com/harfbuzz/harfbuzz/test/api/test-blob.c +349 -0
  286. data/vendor/github.com/harfbuzz/harfbuzz/test/api/test-buffer.c +884 -0
  287. data/vendor/github.com/harfbuzz/harfbuzz/test/api/test-c.c +64 -0
  288. data/vendor/github.com/harfbuzz/harfbuzz/test/api/test-common.c +225 -0
  289. data/vendor/github.com/harfbuzz/harfbuzz/test/api/test-cplusplus.cc +30 -0
  290. data/vendor/github.com/harfbuzz/harfbuzz/test/api/test-font.c +550 -0
  291. data/vendor/github.com/harfbuzz/harfbuzz/test/api/test-object.c +375 -0
  292. data/vendor/github.com/harfbuzz/harfbuzz/test/api/test-ot-color.c +319 -0
  293. data/vendor/github.com/harfbuzz/harfbuzz/test/api/test-ot-math.c +712 -0
  294. data/vendor/github.com/harfbuzz/harfbuzz/test/api/test-ot-tag.c +320 -0
  295. data/vendor/github.com/harfbuzz/harfbuzz/test/api/test-set.c +399 -0
  296. data/vendor/github.com/harfbuzz/harfbuzz/test/api/test-shape.c +208 -0
  297. data/vendor/github.com/harfbuzz/harfbuzz/test/api/test-subset-cmap.c +82 -0
  298. data/vendor/github.com/harfbuzz/harfbuzz/test/api/test-subset-glyf.c +183 -0
  299. data/vendor/github.com/harfbuzz/harfbuzz/test/api/test-subset-hdmx.c +81 -0
  300. data/vendor/github.com/harfbuzz/harfbuzz/test/api/test-subset-hmtx.c +162 -0
  301. data/vendor/github.com/harfbuzz/harfbuzz/test/api/test-subset-os2.c +59 -0
  302. data/vendor/github.com/harfbuzz/harfbuzz/test/api/test-unicode.c +937 -0
  303. data/vendor/github.com/harfbuzz/harfbuzz/test/api/test-version.c +81 -0
  304. data/vendor/github.com/harfbuzz/harfbuzz/test/fuzzing/CMakeLists.txt +18 -0
  305. data/vendor/github.com/harfbuzz/harfbuzz/test/fuzzing/Makefile.am +52 -0
  306. data/vendor/github.com/harfbuzz/harfbuzz/test/fuzzing/README +21 -0
  307. data/vendor/github.com/harfbuzz/harfbuzz/test/fuzzing/hb-fuzzer.cc +52 -0
  308. data/vendor/github.com/harfbuzz/harfbuzz/test/fuzzing/hb-fuzzer.hh +4 -0
  309. data/vendor/github.com/harfbuzz/harfbuzz/test/fuzzing/main.cc +21 -0
  310. data/vendor/github.com/harfbuzz/harfbuzz/test/fuzzing/run-fuzzer-tests.py +32 -0
  311. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/CMakeLists.txt +17 -0
  312. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/Makefile.am +35 -0
  313. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/README.md +41 -0
  314. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/Makefile.am +13 -0
  315. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/COPYING +95 -0
  316. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/Makefile.am +20 -0
  317. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/Makefile.sources +47 -0
  318. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/0509e80afb379d16560e9e47bdd7d888bebdebc6.ttf +0 -0
  319. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/051d92f8bc6ff724511b296c27623f824de256e9.ttf +0 -0
  320. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/074a5ae6b19de8f29772fdd5df2d3d833f81f5e6.ttf +0 -0
  321. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/07f054357ff8638bac3711b422a1e31180bba863.ttf +0 -0
  322. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/15dfc433a135a658b9f4b1a861b5cdd9658ccbb9.ttf +0 -0
  323. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/1735326da89f0818cd8c51a0600e9789812c0f94.ttf +0 -0
  324. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/191826b9643e3f124d865d617ae609db6a2ce203.ttf +0 -0
  325. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/1a3d8f381387dd29be1e897e4b5100ac8b4829e1.ttf +0 -0
  326. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/1a6f1687b7a221f9f2c834b0b360d3c8463b6daf.ttf +0 -0
  327. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/1c04a16f32a39c26c851b7fc014d2e8d298ba2b8.ttf +0 -0
  328. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/1c2c3fc37b2d4c3cb2ef726c6cdaaabd4b7f3eb9.ttf +0 -0
  329. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf +0 -0
  330. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/1ed7e9064f008f62de6ff0207bb4dd29409597a5.ttf +0 -0
  331. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/205edd09bd3d141cc9580f650109556cc28b22cb.ttf +0 -0
  332. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/217a934cfe15c548b572c203dceb2befdf026462.ttf +0 -0
  333. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/21b7fb9c1eeae260473809fbc1fe330f66a507cd.ttf +0 -0
  334. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/226bc2deab3846f1a682085f70c67d0421014144.ttf +0 -0
  335. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/233c1e252e737ca79e03a9fd56b71aaa4a230f2b.ttf +0 -0
  336. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/243798dd281c1c77c065958e1ff467420faa9bde.ttf +0 -0
  337. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/24b8d24d00ae86f49791b746da4c9d3f717a51a8.ttf +0 -0
  338. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/270b89df543a7e48e206a2d830c0e10e5265c630.ttf +0 -0
  339. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/298c9e1d955f10f6f72c6915c3c6ff9bf9695cec.ttf +0 -0
  340. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf +0 -0
  341. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/319f5d7ebffbefc5c5e6569f8cea73444d7a7268.ttf +0 -0
  342. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/341421e629668b1a1242245d39238ca48432d35d.ttf +0 -0
  343. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/3493e92eaded2661cadde752a39f9d58b11f0326.ttf +0 -0
  344. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/3511ff5c1647150595846ac414c595cccac34f18.ttf +0 -0
  345. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/37033cc5cf37bb223d7355153016b6ccece93b28.ttf +0 -0
  346. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/373e67bf41ca264e260a9716162b71a23549e885.ttf +0 -0
  347. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/375d6ae32a3cbe52fbf81a4e5777e3377675d5a3.ttf +0 -0
  348. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/3cae6bfe5b57c07ba81ddbd54c02fe4f3a1e3bf6.ttf +0 -0
  349. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/3d0b77a2360aa6faa1385aaa510509ab70dfbeff.ttf +0 -0
  350. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/43979b90b2dd929723cf4fe1715990bcb9c9a56b.ttf +0 -0
  351. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/43ef465752be9af900745f72fe29cb853a1401a5.ttf +0 -0
  352. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/45855bc8d46332b39c4ab9e2ee1a26b1f896da6b.ttf +0 -0
  353. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/49c9f7485c1392fa09a1b801bc2ffea79275f22e.ttf +0 -0
  354. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/4cce528e99f600ed9c25a2b69e32eb94a03b4ae8.ttf +0 -0
  355. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/4fac3929fc3332834e93673780ec0fe94342d193.ttf +0 -0
  356. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/5028afb650b1bb718ed2131e872fbcce57828fff.ttf +0 -0
  357. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/53374c7ca3657be37efde7ed02ae34229a56ae1f.ttf +0 -0
  358. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/54674a3111d209fb6be0ed31745314b7a8d2c244.ttf +0 -0
  359. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/558661aa659912f4d30ecd27bd09835171a8e2b0.ttf +0 -0
  360. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/55c88ebbe938680b08f92c3de20713183e0c7481.ttf +0 -0
  361. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/56cfd0e18d07f41c38e9598545a6d369127fc6f9.ttf +0 -0
  362. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/573d3a3177c9a8646e94c8a0d7b224334340946a.ttf +0 -0
  363. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/57a9d9f83020155cbb1d2be1f43d82388cbecc88.ttf +0 -0
  364. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/59a585a63b3df608fbeef00956c8c108deec7de6.ttf +0 -0
  365. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/5a5daf5eb5a4db77a2baa3ad9c7a6ed6e0655fa8.ttf +0 -0
  366. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/5dfad7735c6a67085f1b90d4d497e32907db4c78.ttf +0 -0
  367. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/641bd9db850193064d17575053ae2bf8ec149ddc.ttf +0 -0
  368. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/663aef6b019dbf45ffd74089e2b5f2496ceceb18.ttf +0 -0
  369. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/6991b13ce889466be6de3f66e891de2bc0f117ee.ttf +0 -0
  370. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/6ff0fbead4462d9f229167b4e6839eceb8465058.ttf +0 -0
  371. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/706c5d7b625f207bc0d874c67237aad6f1e9cd6f.ttf +0 -0
  372. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/757ebd573617a24aa9dfbf0b885c54875c6fe06b.ttf +0 -0
  373. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/7a37dc4d5bf018456aea291cee06daf004c0221c.ttf +0 -0
  374. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/7e14e7883ed152baa158b80e207b66114c823a8b.ttf +0 -0
  375. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/8099955657a54e9ee38a6ba1d6f950ce58e3cc25.ttf +0 -0
  376. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/813c2f8e5512187fd982417a7fb4286728e6f4a8.ttf +0 -0
  377. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/81c368a33816fb20e9f647e8f24e2180f4720263.ttf +0 -0
  378. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/8228d035fcd65d62ec9728fb34f42c63be93a5d3.ttf +0 -0
  379. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/8240789f6d12d4cfc4b5e8e6f246c3701bcf861f.ttf +0 -0
  380. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/82f4f3b57bb55344e72e70231380202a52af5805.ttf +0 -0
  381. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/8454d22037f892e76614e1645d066689a0200e61.ttf +0 -0
  382. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf +0 -0
  383. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/856ff9562451293cbeff6f396d4e3877c4f0a436.ttf +0 -0
  384. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/85fe0be440c64ac77699e21c2f1bd933a919167e.ttf +0 -0
  385. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/87f85d17d26f1fe9ad28d7365101958edaefb967.ttf +0 -0
  386. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/8a9fea2a7384f2116e5b84a9b31f83be7850ce21.ttf +0 -0
  387. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/94a5d6fb15a27521fba9ea4aee9cb39b2d03322a.ttf +0 -0
  388. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/96490dd2ff81233b335a650e7eb660e0e7b2eeea.ttf +0 -0
  389. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/98b7887cff91f722b92a8ff800120954606354f9.ttf +0 -0
  390. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/9d8a94a67932a3ab75a596fc8b5c6d0392ca9e49.ttf +0 -0
  391. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/a014549f766436cf55b2ceb40e462038938ee899.ttf +0 -0
  392. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf +0 -0
  393. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/a34a7b00f22ffb5fd7eef6933b81c7e71bc2cdfb.ttf +0 -0
  394. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/a34a9191d9376bda419836effeef7e75c1386016.ttf +0 -0
  395. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/a69118c2c2ada48ff803d9149daa54c9ebdae30e.ttf +0 -0
  396. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/a6c76d1bafde4a0b1026ebcc932d2e5c6fd02442.ttf +0 -0
  397. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/a919b33197965846f21074b24e30250d67277bce.ttf +0 -0
  398. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/a98e908e2ed21b22228ea59ebcc0f05034c86f2e.ttf +0 -0
  399. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/af3086380b743099c54a3b11b96766039ea62fcd.ttf +0 -0
  400. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/b151cfcdaa77585d77f17a42158e0873fc8e2633.ttf +0 -0
  401. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/b6acef662e0beb8d5fcf5b61c6b0ca69537b7402.ttf +0 -0
  402. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/b9e2aaa0d75fcef6971ec3a96d806ba4a6b31fe2.ttf +0 -0
  403. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/bb0c53752e85c3d28973ebc913287b8987d3dfe8.ttf +0 -0
  404. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/bb29ce50df2bdba2d10726427c6b7609bf460e04.ttf +0 -0
  405. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/bb9473d2403488714043bcfb946c9f78b86ad627.ttf +0 -0
  406. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/bbf4a308c402f0678c3e82844892a4da2ebe598f.ttf +0 -0
  407. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/bf39b0e91ef9807f15a9e283a21a14a209fd2cfc.ttf +0 -0
  408. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/bf962d3202883a820aed019d9b5c1838c2ff69c6.ttf +0 -0
  409. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/c4e48b0886ef460f532fb49f00047ec92c432ec0.ttf +0 -0
  410. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/cc5f3d2d717fb6bd4dfae1c16d48a2cb8e12233b.ttf +0 -0
  411. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf +0 -0
  412. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/d629e7fedc0b350222d7987345fe61613fa3929a.ttf +0 -0
  413. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/d9b8bc10985f24796826c29f7ccba3d0ae11ec02.ttf +0 -0
  414. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/dd9f0c7c7c36f75a18be0cab1cddf8f3ab0f366b.ttf +0 -0
  415. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/df768b9c257e0c9c35786c47cae15c46571d56be.ttf +0 -0
  416. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/e207635780b42f898d58654b65098763e340f5c7.ttf +0 -0
  417. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/e68a88939e0f06e34d2bc911f09b70890289c8fd.ttf +0 -0
  418. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/e88c339237f52d21e01c55f01b9c1b4cc14a0467.ttf +0 -0
  419. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/e90374e5e439e00725b4fe7a8d73db57c5a97f82.ttf +0 -0
  420. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/ee39587d13b2afa5499cc79e45780aa79293bbd4.ttf +0 -0
  421. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/ef2511f215aa3ca847cbfffbf861793b42170875.ttf +0 -0
  422. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/ef86fe710cfea877bbe0dbb6946a1f88d0661031.ttf +0 -0
  423. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/f22416c692720a7d46fadf4af99f4c9e094f00b9.ttf +0 -0
  424. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/f443753e8ffe8e8aae606cfba158e00334b6efb1.ttf +0 -0
  425. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/f499fbc23865022234775c43503bba2e63978fe1.ttf +0 -0
  426. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/f518eb6f6b5eec2946c9fbbbde44e45d46f5e2ac.ttf +0 -0
  427. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/f9b1dd4dcb515e757789a22cb4241107746fd3d0.ttf +0 -0
  428. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/fab39d60d758cb586db5a504f218442cd1395725.ttf +0 -0
  429. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/fbb6c84c9e1fe0c39e152fbe845e51fd81f6748e.ttf +0 -0
  430. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/fcdcffbdf1c4c97c05308d7600e4c283eb47dbca.ttf +0 -0
  431. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/fonts/ffa0f5d2d9025486d8469d8b1fdd983e7632499b.ttf +0 -0
  432. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/arabic-fallback-shaping.tests +1 -0
  433. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/arabic-feature-order.tests +4 -0
  434. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/arabic-like-joining.tests +1 -0
  435. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/arabic-mark-order.tests +6 -0
  436. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/arabic-stch.tests +1 -0
  437. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/automatic-fractions.tests +3 -0
  438. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/cluster.tests +2 -0
  439. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/color-fonts.tests +1 -0
  440. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/context-matching.tests +3 -0
  441. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/cursive-positioning.tests +4 -0
  442. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/default-ignorables.tests +2 -0
  443. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/emoji-flag-tags.tests +2 -0
  444. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/fallback-positioning.tests +2 -0
  445. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/fuzzed.tests +23 -0
  446. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/hangul-jamo.tests +2 -0
  447. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/hyphens.tests +2 -0
  448. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/indic-consonant-with-stacker.tests +4 -0
  449. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/indic-init.tests +1 -0
  450. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/indic-joiner-candrabindu.tests +2 -0
  451. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/indic-joiners.tests +2 -0
  452. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/indic-old-spec.tests +2 -0
  453. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/indic-pref-blocking.tests +2 -0
  454. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/indic-script-extensions.tests +2 -0
  455. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/indic-special-cases.tests +3 -0
  456. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/indic-syllable.tests +8 -0
  457. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/language-tags.tests +12 -0
  458. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/ligature-id.tests +36 -0
  459. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/mark-attachment.tests +1 -0
  460. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/mark-filtering-sets.tests +5 -0
  461. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/mongolian-variation-selector.tests +4 -0
  462. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/myanmar-syllable.tests +1 -0
  463. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/simple.tests +2 -0
  464. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/spaces.tests +17 -0
  465. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/tibetan-contractions-1.tests +60 -0
  466. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/tibetan-contractions-2.tests +53 -0
  467. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/tibetan-vowels.tests +11 -0
  468. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/use-marchen.tests +35 -0
  469. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/use-syllable.tests +8 -0
  470. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/use.tests +5 -0
  471. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/variations-rvrn.tests +100 -0
  472. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/vertical.tests +3 -0
  473. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/in-house/tests/zero-width-marks.tests +11 -0
  474. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/COPYING +13 -0
  475. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/DISABLED +35 -0
  476. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/Makefile.am +26 -0
  477. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/Makefile.sources +66 -0
  478. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/README +7 -0
  479. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/extract-tests.py +49 -0
  480. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/AdobeVFPrototype-Subset.otf +0 -0
  481. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/FDArrayTest257.otf +0 -0
  482. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/FDArrayTest65535.otf +0 -0
  483. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/NotoSansBalinese-Regular.ttf +0 -0
  484. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/NotoSansKannada-Regular.ttf +0 -0
  485. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/NotoSerifKannada-Regular.ttf +0 -0
  486. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/Selawik-README.md +60 -0
  487. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/Selawik-variable.ttf +0 -0
  488. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestAVAR.ttf +0 -0
  489. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestCMAP14.otf +0 -0
  490. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestCMAPMacTurkish.ttf +0 -0
  491. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestCVARGVAROne.ttf +0 -0
  492. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestCVARGVARTwo.ttf +0 -0
  493. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestGLYFOne.ttf +0 -0
  494. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestGPOSFour.ttf +0 -0
  495. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestGPOSOne.ttf +0 -0
  496. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestGPOSThree.ttf +0 -0
  497. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestGPOSTwo.otf +0 -0
  498. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestGSUBOne.otf +0 -0
  499. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestGVAREight.ttf +0 -0
  500. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestGVARFour.ttf +0 -0
  501. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestGVARNine.ttf +0 -0
  502. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestGVAROne.ttf +0 -0
  503. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestGVARThree.ttf +0 -0
  504. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestGVARTwo.ttf +0 -0
  505. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestHVAROne.otf +0 -0
  506. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestHVARTwo.ttf +0 -0
  507. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestKERNOne.otf +0 -0
  508. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXEight.ttf +0 -0
  509. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXEighteen.ttf +0 -0
  510. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXEleven.ttf +0 -0
  511. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXFour.ttf +0 -0
  512. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXFourteen.ttf +0 -0
  513. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXNine.ttf +0 -0
  514. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXOne.ttf +0 -0
  515. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXSeventeen.ttf +0 -0
  516. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXSixteen.ttf +0 -0
  517. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXTen.ttf +0 -0
  518. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXThirteen.ttf +0 -0
  519. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXThree.ttf +0 -0
  520. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXTwelve.ttf +0 -0
  521. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXTwenty.ttf +0 -0
  522. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXTwentyfive.ttf +0 -0
  523. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXTwentyone.ttf +0 -0
  524. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXTwentysix.ttf +0 -0
  525. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXTwentythree.ttf +0 -0
  526. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXTwentytwo.ttf +0 -0
  527. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestMORXTwo.ttf +0 -0
  528. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestShapeAran.ttf +0 -0
  529. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/TestShapeEthi.ttf +0 -0
  530. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/fonts/Zycon.ttf +0 -0
  531. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/AVAR-1.tests +17 -0
  532. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/CFF-1.tests +13 -0
  533. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/CFF-2.tests +13 -0
  534. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/CFF2-1.tests +9 -0
  535. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/CMAP-1.tests +4 -0
  536. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/CMAP-2.tests +2 -0
  537. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/CMAP-3.tests +20 -0
  538. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/CVAR-1.tests +3 -0
  539. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/CVAR-2.tests +3 -0
  540. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/GLYF-1.tests +1 -0
  541. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/GPOS-1.tests +19 -0
  542. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/GPOS-2.tests +3 -0
  543. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/GPOS-3.tests +4 -0
  544. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/GPOS-4.tests +4 -0
  545. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/GPOS-5.tests +5 -0
  546. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/GSUB-1.tests +1 -0
  547. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/GSUB-2.tests +11 -0
  548. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/GVAR-1.tests +9 -0
  549. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/GVAR-2.tests +9 -0
  550. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/GVAR-3.tests +9 -0
  551. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/GVAR-4.tests +11 -0
  552. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/GVAR-5.tests +11 -0
  553. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/GVAR-6.tests +11 -0
  554. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/GVAR-7.tests +7 -0
  555. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/GVAR-8.tests +6 -0
  556. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/GVAR-9.tests +10 -0
  557. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/HVAR-1.tests +6 -0
  558. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/HVAR-2.tests +6 -0
  559. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/KERN-1.tests +1 -0
  560. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/KERN-2.tests +1 -0
  561. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-1.tests +1 -0
  562. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-10.tests +1 -0
  563. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-11.tests +1 -0
  564. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-12.tests +3 -0
  565. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-13.tests +1 -0
  566. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-14.tests +2 -0
  567. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-16.tests +1 -0
  568. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-17.tests +1 -0
  569. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-18.tests +4 -0
  570. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-19.tests +2 -0
  571. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-2.tests +16 -0
  572. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-20.tests +7 -0
  573. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-21.tests +1 -0
  574. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-22.tests +1 -0
  575. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-23.tests +1 -0
  576. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-25.tests +9 -0
  577. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-26.tests +2 -0
  578. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-3.tests +16 -0
  579. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-4.tests +15 -0
  580. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-5.tests +25 -0
  581. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-6.tests +1 -0
  582. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-7.tests +1 -0
  583. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-8.tests +3 -0
  584. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/MORX-9.tests +1 -0
  585. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/SHARAN-1.tests +6 -0
  586. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/SHBALI-1.tests +22 -0
  587. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/SHBALI-2.tests +12 -0
  588. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/SHBALI-3.tests +9 -0
  589. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/SHKNDA-1.tests +34 -0
  590. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/SHKNDA-2.tests +16 -0
  591. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/tests/SHKNDA-3.tests +31 -0
  592. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/data/text-rendering-tests/update.sh +46 -0
  593. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/hb-diff +10 -0
  594. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/hb-diff-colorize +7 -0
  595. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/hb-diff-filter-failures +5 -0
  596. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/hb-diff-stat +5 -0
  597. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/hb-unicode-decode +5 -0
  598. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/hb-unicode-encode +5 -0
  599. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/hb-unicode-prettyname +6 -0
  600. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/hb_test_tools.py +571 -0
  601. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/record-test.sh +107 -0
  602. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/run-tests.py +98 -0
  603. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-arabic/language-persian/mehran.txt +8 -0
  604. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/2grams.txt +601 -0
  605. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/3grams.txt +3415 -0
  606. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/4grams.txt +6316 -0
  607. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/5grams.txt +5029 -0
  608. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/6grams.txt +1542 -0
  609. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/7grams.txt +354 -0
  610. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/8grams.txt +26 -0
  611. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/LICENSE +3 -0
  612. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/README +16 -0
  613. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/SOURCES +4 -0
  614. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/lam-alef.txt +28 -0
  615. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/language-arabic.txt +695 -0
  616. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/language-persian.txt +48 -0
  617. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/language-urdu.txt +188 -0
  618. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/ligature-components.txt +18 -0
  619. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/ligature-diacritics.txt +1 -0
  620. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/mark-skipping.txt +10 -0
  621. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-mongolian/misc/misc.txt +6 -0
  622. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-mongolian/misc/non-joining.txt +8 -0
  623. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-mongolian/misc/poem.txt +4 -0
  624. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-mongolian/misc/variation-selectors.txt +8 -0
  625. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-nko/misc/misc.txt +5 -0
  626. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-phags-pa/misc/misc.txt +14 -0
  627. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-syriac/misc/abbreviation-mark.txt +11 -0
  628. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-arabic/script-syriac/misc/alaph.txt +98 -0
  629. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-default/script-ethiopic/misc/misc.txt +1 -0
  630. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-default/script-han/misc/cjk-compat.txt +3 -0
  631. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-default/script-hiragana/misc/kazuraki-liga-lines.txt +8 -0
  632. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-default/script-hiragana/misc/kazuraki-liga.txt +53 -0
  633. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-default/script-linear-b/misc/misc.txt +1 -0
  634. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-default/script-tifinagh/misc/misc.txt +10 -0
  635. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-hangul/script-hangul/misc/misc.txt +4 -0
  636. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-hebrew/script-hebrew/misc/diacritics.txt +16 -0
  637. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/LICENSE +19 -0
  638. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/README +13 -0
  639. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/SOURCES +2 -0
  640. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt +4 -0
  641. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt +40 -0
  642. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt +10 -0
  643. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt +10 -0
  644. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt +11 -0
  645. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt +2 -0
  646. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt +6 -0
  647. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt +59 -0
  648. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt +131 -0
  649. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/gsub/IndicFontFeatureGSUB.txt +139 -0
  650. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-bengali/misc/misc.txt +53 -0
  651. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-bengali/misc/reph.txt +14 -0
  652. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/LICENSE +19 -0
  653. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/README +13 -0
  654. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/SOURCES +2 -0
  655. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt +1 -0
  656. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt +36 -0
  657. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt +10 -0
  658. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt +10 -0
  659. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt +12 -0
  660. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt +2 -0
  661. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt +6 -0
  662. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt +58 -0
  663. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt +119 -0
  664. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/gsub/IndicFontFeatureGSUB.txt +215 -0
  665. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/misc/dottedcircle.txt +8 -0
  666. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/misc/eyelash.txt +3 -0
  667. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/misc/joiners.txt +19 -0
  668. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/misc/misc.txt +36 -0
  669. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/misc/spec-deviations.txt +1 -0
  670. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/misc/tricky-reordering.txt +5 -0
  671. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/LICENSE +19 -0
  672. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/README +13 -0
  673. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/SOURCES +2 -0
  674. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalConsonants.txt +8 -0
  675. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt +4 -0
  676. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt +45 -0
  677. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt +14 -0
  678. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-DevnagariSpecificAddition.txt +1 -0
  679. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt +10 -0
  680. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-GenericPunctuation.txt +2 -0
  681. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt +16 -0
  682. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt +10 -0
  683. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt +185 -0
  684. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt +185 -0
  685. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/gsub/IndicFontFeatureGSUB.txt +1367 -0
  686. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/LICENSE +19 -0
  687. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/README +13 -0
  688. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/SOURCES +2 -0
  689. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt +1 -0
  690. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt +34 -0
  691. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt +12 -0
  692. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt +10 -0
  693. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt +13 -0
  694. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt +2 -0
  695. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt +7 -0
  696. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt +170 -0
  697. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt +170 -0
  698. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/gsub/IndicFontFeatureGSUB.txt +1156 -0
  699. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/misc/misc.txt +2 -0
  700. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/LICENSE +19 -0
  701. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/README +13 -0
  702. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/SOURCES +2 -0
  703. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt +38 -0
  704. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt +9 -0
  705. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt +10 -0
  706. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-GurmukhiSpecific.txt +6 -0
  707. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt +10 -0
  708. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt +2 -0
  709. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt +6 -0
  710. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt +22 -0
  711. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt +2 -0
  712. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/gsub/IndicFontFeatureGSUB.txt +152 -0
  713. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-kannada/misc/misc.txt +20 -0
  714. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-kannada/misc/right-matras.txt +7 -0
  715. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/LICENSE +19 -0
  716. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/README +13 -0
  717. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/SOURCES +2 -0
  718. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalConsonants.txt +1 -0
  719. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt +4 -0
  720. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt +40 -0
  721. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt +13 -0
  722. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt +10 -0
  723. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt +14 -0
  724. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt +2 -0
  725. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt +9 -0
  726. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt +188 -0
  727. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/gsub/IndicFontFeatureGSUB.txt +306 -0
  728. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/misc/cibu.txt +188 -0
  729. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/misc/dot-reph.txt +15 -0
  730. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/misc/misc.txt +65 -0
  731. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/utrrs/LICENSE +19 -0
  732. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/utrrs/README +13 -0
  733. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/utrrs/SOURCES +2 -0
  734. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt +2 -0
  735. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt +36 -0
  736. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt +12 -0
  737. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt +10 -0
  738. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt +14 -0
  739. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt +2 -0
  740. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt +4 -0
  741. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/utrrs/gsub/IndicFontFeatureGSUB.txt +254 -0
  742. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-oriya/misc/bindu.txt +2 -0
  743. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-oriya/misc/misc.txt +28 -0
  744. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/LICENSE +19 -0
  745. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/README +13 -0
  746. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/SOURCES +2 -0
  747. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalConsonants.txt +3 -0
  748. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt +2 -0
  749. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt +34 -0
  750. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt +12 -0
  751. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt +10 -0
  752. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt +12 -0
  753. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-OriyaSpecific.txt +2 -0
  754. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt +2 -0
  755. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt +8 -0
  756. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/gsub/IndicFontFeatureGSUB.txt +170 -0
  757. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/misc/extensive.txt +4390 -0
  758. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/misc/misc.txt +41 -0
  759. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/misc/reph.txt +3 -0
  760. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/misc/split-matras.txt +4 -0
  761. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/LICENSE +19 -0
  762. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/README +13 -0
  763. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/SOURCES +2 -0
  764. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt +41 -0
  765. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt +17 -0
  766. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt +18 -0
  767. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-Punctuation.txt +1 -0
  768. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt +3 -0
  769. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/gpos/IndicFontFeatureGPOS.txt +162 -0
  770. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Conjunct.txt +1 -0
  771. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Rakaaraansaya.txt +41 -0
  772. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Repaya.txt +42 -0
  773. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Special-Cases.txt +2 -0
  774. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-TouchingLetters.txt +1 -0
  775. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Yansaya.txt +41 -0
  776. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB.txt +1 -0
  777. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/misc/misc.txt +43 -0
  778. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/LICENSE +19 -0
  779. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/README +13 -0
  780. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/SOURCES +2 -0
  781. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt +23 -0
  782. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-CurrencySymbols.txt +1 -0
  783. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt +11 -0
  784. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt +10 -0
  785. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt +12 -0
  786. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Numerics.txt +3 -0
  787. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt +2 -0
  788. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Symbols.txt +6 -0
  789. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-TamilSymbol.txt +1 -0
  790. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt +4 -0
  791. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt +64 -0
  792. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt +44 -0
  793. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/gsub/IndicFontFeatureGSUB.txt +4 -0
  794. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-telugu/misc/misc.txt +12 -0
  795. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-telugu/utrrs/LICENSE +19 -0
  796. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-telugu/utrrs/README +13 -0
  797. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-telugu/utrrs/SOURCES +2 -0
  798. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt +2 -0
  799. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt +38 -0
  800. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt +13 -0
  801. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt +10 -0
  802. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt +14 -0
  803. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt +2 -0
  804. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt +6 -0
  805. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-telugu/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt +385 -0
  806. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/indic/script-telugu/utrrs/gsub/IndicFontFeatureGSUB.txt +287 -0
  807. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/south-east-asian/script-javanese/misc.txt +54 -0
  808. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/south-east-asian/script-khmer/misc/misc.txt +23 -0
  809. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/south-east-asian/script-khmer/misc/other-marks-invalid.txt +4 -0
  810. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-indic/south-east-asian/script-khmer/misc/other-marks.txt +7 -0
  811. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-myanmar/script-myanmar/misc/misc.txt +7 -0
  812. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-myanmar/script-myanmar/misc/otspec.txt +1 -0
  813. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-myanmar/script-myanmar/misc/utn11.txt +34 -0
  814. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-thai/script-lao/misc/sara-am.txt +20 -0
  815. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-thai/script-thai/misc/misc.txt +11 -0
  816. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-thai/script-thai/misc/phinthu.txt +16 -0
  817. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-thai/script-thai/misc/pua-shaping.txt +11 -0
  818. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-thai/script-thai/misc/sara-am.txt +20 -0
  819. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-tibetan/script-tibetan/misc/contractions.txt +612 -0
  820. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-tibetan/script-tibetan/misc/misc.txt +2 -0
  821. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-use/script-batak/misc.txt +9 -0
  822. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-use/script-buginese/misc.txt +70 -0
  823. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-use/script-cham/misc.txt +3 -0
  824. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-use/script-kaithi/misc.txt +6 -0
  825. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-use/script-kharoshti/misc.txt +36 -0
  826. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-use/script-tai-tham/misc.txt +2 -0
  827. data/vendor/github.com/harfbuzz/harfbuzz/test/shaping/texts/in-house/shaper-use/script-tai-tham/torture.txt +23 -0
  828. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/CMakeLists.txt +10 -0
  829. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/Makefile.am +22 -0
  830. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/Makefile.am +24 -0
  831. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/Makefile.sources +10 -0
  832. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/expected/basics/Roboto-Regular.abc.default.61,62,63.ttf +0 -0
  833. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/expected/basics/Roboto-Regular.abc.default.61,63.ttf +0 -0
  834. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/expected/basics/Roboto-Regular.abc.default.61.ttf +0 -0
  835. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/expected/basics/Roboto-Regular.abc.default.62.ttf +0 -0
  836. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/expected/basics/Roboto-Regular.abc.default.63.ttf +0 -0
  837. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/expected/basics/Roboto-Regular.abc.drop-hints.61,62,63.ttf +0 -0
  838. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/expected/basics/Roboto-Regular.abc.drop-hints.61,63.ttf +0 -0
  839. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/expected/basics/Roboto-Regular.abc.drop-hints.61.ttf +0 -0
  840. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/expected/basics/Roboto-Regular.abc.drop-hints.62.ttf +0 -0
  841. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/expected/basics/Roboto-Regular.abc.drop-hints.63.ttf +0 -0
  842. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/expected/full-font/Roboto-Regular.default.1FC,21,41,20,62,63.ttf +0 -0
  843. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/expected/full-font/Roboto-Regular.default.61,62,63.ttf +0 -0
  844. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/expected/full-font/Roboto-Regular.drop-hints.1FC,21,41,20,62,63.ttf +0 -0
  845. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/expected/full-font/Roboto-Regular.drop-hints.61,62,63.ttf +0 -0
  846. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/fonts/Roboto-Regular.abc.ttf +0 -0
  847. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/fonts/Roboto-Regular.ttf +0 -0
  848. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/profiles/default.txt +0 -0
  849. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/profiles/drop-hints.txt +1 -0
  850. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/tests/basics.tests +13 -0
  851. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/data/tests/full-font.tests +11 -0
  852. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/generate-expected-outputs.py +47 -0
  853. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/run-tests.py +133 -0
  854. data/vendor/github.com/harfbuzz/harfbuzz/test/subset/subset_test_suite.py +87 -0
  855. data/vendor/github.com/harfbuzz/harfbuzz/util/Makefile.am +75 -0
  856. data/vendor/github.com/harfbuzz/harfbuzz/util/Makefile.sources +37 -0
  857. data/vendor/github.com/harfbuzz/harfbuzz/util/ansi-print.cc +427 -0
  858. data/vendor/github.com/harfbuzz/harfbuzz/util/ansi-print.hh +40 -0
  859. data/vendor/github.com/harfbuzz/harfbuzz/util/hb-fc-list.c +222 -0
  860. data/vendor/github.com/harfbuzz/harfbuzz/util/hb-fc.cc +149 -0
  861. data/vendor/github.com/harfbuzz/harfbuzz/util/hb-fc.h +46 -0
  862. data/vendor/github.com/harfbuzz/harfbuzz/util/hb-ot-shape-closure.cc +119 -0
  863. data/vendor/github.com/harfbuzz/harfbuzz/util/hb-shape.cc +165 -0
  864. data/vendor/github.com/harfbuzz/harfbuzz/util/hb-subset.cc +127 -0
  865. data/vendor/github.com/harfbuzz/harfbuzz/util/hb-view.cc +40 -0
  866. data/vendor/github.com/harfbuzz/harfbuzz/util/helper-cairo-ansi.cc +102 -0
  867. data/vendor/github.com/harfbuzz/harfbuzz/util/helper-cairo-ansi.hh +40 -0
  868. data/vendor/github.com/harfbuzz/harfbuzz/util/helper-cairo.cc +553 -0
  869. data/vendor/github.com/harfbuzz/harfbuzz/util/helper-cairo.hh +86 -0
  870. data/vendor/github.com/harfbuzz/harfbuzz/util/main-font-text.hh +96 -0
  871. data/vendor/github.com/harfbuzz/harfbuzz/util/options.cc +1026 -0
  872. data/vendor/github.com/harfbuzz/harfbuzz/util/options.hh +690 -0
  873. data/vendor/github.com/harfbuzz/harfbuzz/util/shape-consumer.hh +101 -0
  874. data/vendor/github.com/harfbuzz/harfbuzz/util/view-cairo.cc +133 -0
  875. data/vendor/github.com/harfbuzz/harfbuzz/util/view-cairo.hh +102 -0
  876. metadata +939 -0
@@ -0,0 +1,1569 @@
1
+ /*
2
+ * Copyright © 2011,2012 Google, Inc.
3
+ *
4
+ * This is part of HarfBuzz, a text shaping library.
5
+ *
6
+ * Permission is hereby granted, without written agreement and without
7
+ * license or royalty fees, to use, copy, modify, and distribute this
8
+ * software and its documentation for any purpose, provided that the
9
+ * above copyright notice and the following two paragraphs appear in
10
+ * all copies of this software.
11
+ *
12
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
13
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
14
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
15
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
16
+ * DAMAGE.
17
+ *
18
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
19
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
20
+ * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
21
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
22
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
23
+ *
24
+ * Google Author(s): Behdad Esfahbod
25
+ */
26
+
27
+ #include "hb-ot-shape-complex-indic-private.hh"
28
+ #include "hb-ot-layout-private.hh"
29
+
30
+
31
+ /*
32
+ * Indic shaper.
33
+ */
34
+
35
+
36
+ /*
37
+ * Indic configurations. Note that we do not want to keep every single script-specific
38
+ * behavior in these tables necessarily. This should mainly be used for per-script
39
+ * properties that are cheaper keeping here, than in the code. Ie. if, say, one and
40
+ * only one script has an exception, that one script can be if'ed directly in the code,
41
+ * instead of adding a new flag in these structs.
42
+ */
43
+
44
+ enum base_position_t {
45
+ BASE_POS_LAST_SINHALA,
46
+ BASE_POS_LAST
47
+ };
48
+ enum reph_position_t {
49
+ REPH_POS_AFTER_MAIN = POS_AFTER_MAIN,
50
+ REPH_POS_BEFORE_SUB = POS_BEFORE_SUB,
51
+ REPH_POS_AFTER_SUB = POS_AFTER_SUB,
52
+ REPH_POS_BEFORE_POST = POS_BEFORE_POST,
53
+ REPH_POS_AFTER_POST = POS_AFTER_POST
54
+ };
55
+ enum reph_mode_t {
56
+ REPH_MODE_IMPLICIT, /* Reph formed out of initial Ra,H sequence. */
57
+ REPH_MODE_EXPLICIT, /* Reph formed out of initial Ra,H,ZWJ sequence. */
58
+ REPH_MODE_LOG_REPHA /* Encoded Repha character, needs reordering. */
59
+ };
60
+ enum blwf_mode_t {
61
+ BLWF_MODE_PRE_AND_POST, /* Below-forms feature applied to pre-base and post-base. */
62
+ BLWF_MODE_POST_ONLY /* Below-forms feature applied to post-base only. */
63
+ };
64
+ struct indic_config_t
65
+ {
66
+ hb_script_t script;
67
+ bool has_old_spec;
68
+ hb_codepoint_t virama;
69
+ base_position_t base_pos;
70
+ reph_position_t reph_pos;
71
+ reph_mode_t reph_mode;
72
+ blwf_mode_t blwf_mode;
73
+ };
74
+
75
+ static const indic_config_t indic_configs[] =
76
+ {
77
+ /* Default. Should be first. */
78
+ {HB_SCRIPT_INVALID, false, 0,BASE_POS_LAST, REPH_POS_BEFORE_POST,REPH_MODE_IMPLICIT, BLWF_MODE_PRE_AND_POST},
79
+ {HB_SCRIPT_DEVANAGARI,true, 0x094Du,BASE_POS_LAST, REPH_POS_BEFORE_POST,REPH_MODE_IMPLICIT, BLWF_MODE_PRE_AND_POST},
80
+ {HB_SCRIPT_BENGALI, true, 0x09CDu,BASE_POS_LAST, REPH_POS_AFTER_SUB, REPH_MODE_IMPLICIT, BLWF_MODE_PRE_AND_POST},
81
+ {HB_SCRIPT_GURMUKHI, true, 0x0A4Du,BASE_POS_LAST, REPH_POS_BEFORE_SUB, REPH_MODE_IMPLICIT, BLWF_MODE_PRE_AND_POST},
82
+ {HB_SCRIPT_GUJARATI, true, 0x0ACDu,BASE_POS_LAST, REPH_POS_BEFORE_POST,REPH_MODE_IMPLICIT, BLWF_MODE_PRE_AND_POST},
83
+ {HB_SCRIPT_ORIYA, true, 0x0B4Du,BASE_POS_LAST, REPH_POS_AFTER_MAIN, REPH_MODE_IMPLICIT, BLWF_MODE_PRE_AND_POST},
84
+ {HB_SCRIPT_TAMIL, true, 0x0BCDu,BASE_POS_LAST, REPH_POS_AFTER_POST, REPH_MODE_IMPLICIT, BLWF_MODE_PRE_AND_POST},
85
+ {HB_SCRIPT_TELUGU, true, 0x0C4Du,BASE_POS_LAST, REPH_POS_AFTER_POST, REPH_MODE_EXPLICIT, BLWF_MODE_POST_ONLY},
86
+ {HB_SCRIPT_KANNADA, true, 0x0CCDu,BASE_POS_LAST, REPH_POS_AFTER_POST, REPH_MODE_IMPLICIT, BLWF_MODE_POST_ONLY},
87
+ {HB_SCRIPT_MALAYALAM, true, 0x0D4Du,BASE_POS_LAST, REPH_POS_AFTER_MAIN, REPH_MODE_LOG_REPHA,BLWF_MODE_PRE_AND_POST},
88
+ {HB_SCRIPT_SINHALA, false,0x0DCAu,BASE_POS_LAST_SINHALA,
89
+ REPH_POS_AFTER_MAIN, REPH_MODE_EXPLICIT, BLWF_MODE_PRE_AND_POST},
90
+ };
91
+
92
+
93
+
94
+ /*
95
+ * Indic shaper.
96
+ */
97
+
98
+ struct feature_list_t {
99
+ hb_tag_t tag;
100
+ hb_ot_map_feature_flags_t flags;
101
+ };
102
+
103
+ static const feature_list_t
104
+ indic_features[] =
105
+ {
106
+ /*
107
+ * Basic features.
108
+ * These features are applied in order, one at a time, after initial_reordering.
109
+ */
110
+ {HB_TAG('n','u','k','t'), F_GLOBAL},
111
+ {HB_TAG('a','k','h','n'), F_GLOBAL},
112
+ {HB_TAG('r','p','h','f'), F_NONE},
113
+ {HB_TAG('r','k','r','f'), F_GLOBAL},
114
+ {HB_TAG('p','r','e','f'), F_NONE},
115
+ {HB_TAG('b','l','w','f'), F_NONE},
116
+ {HB_TAG('a','b','v','f'), F_NONE},
117
+ {HB_TAG('h','a','l','f'), F_NONE},
118
+ {HB_TAG('p','s','t','f'), F_NONE},
119
+ {HB_TAG('v','a','t','u'), F_GLOBAL},
120
+ {HB_TAG('c','j','c','t'), F_GLOBAL},
121
+ /*
122
+ * Other features.
123
+ * These features are applied all at once, after final_reordering.
124
+ * Default Bengali font in Windows for example has intermixed
125
+ * lookups for init,pres,abvs,blws features.
126
+ */
127
+ {HB_TAG('i','n','i','t'), F_NONE},
128
+ {HB_TAG('p','r','e','s'), F_GLOBAL},
129
+ {HB_TAG('a','b','v','s'), F_GLOBAL},
130
+ {HB_TAG('b','l','w','s'), F_GLOBAL},
131
+ {HB_TAG('p','s','t','s'), F_GLOBAL},
132
+ {HB_TAG('h','a','l','n'), F_GLOBAL},
133
+ /* Positioning features, though we don't care about the types. */
134
+ {HB_TAG('d','i','s','t'), F_GLOBAL},
135
+ {HB_TAG('a','b','v','m'), F_GLOBAL},
136
+ {HB_TAG('b','l','w','m'), F_GLOBAL},
137
+ };
138
+
139
+ /*
140
+ * Must be in the same order as the indic_features array.
141
+ */
142
+ enum {
143
+ _NUKT,
144
+ _AKHN,
145
+ RPHF,
146
+ _RKRF,
147
+ PREF,
148
+ BLWF,
149
+ ABVF,
150
+ HALF,
151
+ PSTF,
152
+ _VATU,
153
+ _CJCT,
154
+
155
+ INIT,
156
+ _PRES,
157
+ _ABVS,
158
+ _BLWS,
159
+ _PSTS,
160
+ _HALN,
161
+ _DIST,
162
+ _ABVM,
163
+ _BLWM,
164
+
165
+ INDIC_NUM_FEATURES,
166
+ INDIC_BASIC_FEATURES = INIT /* Don't forget to update this! */
167
+ };
168
+
169
+ static void
170
+ setup_syllables (const hb_ot_shape_plan_t *plan,
171
+ hb_font_t *font,
172
+ hb_buffer_t *buffer);
173
+ static void
174
+ initial_reordering (const hb_ot_shape_plan_t *plan,
175
+ hb_font_t *font,
176
+ hb_buffer_t *buffer);
177
+ static void
178
+ final_reordering (const hb_ot_shape_plan_t *plan,
179
+ hb_font_t *font,
180
+ hb_buffer_t *buffer);
181
+ static void
182
+ clear_syllables (const hb_ot_shape_plan_t *plan,
183
+ hb_font_t *font,
184
+ hb_buffer_t *buffer);
185
+
186
+ static void
187
+ collect_features_indic (hb_ot_shape_planner_t *plan)
188
+ {
189
+ hb_ot_map_builder_t *map = &plan->map;
190
+
191
+ /* Do this before any lookups have been applied. */
192
+ map->add_gsub_pause (setup_syllables);
193
+
194
+ map->add_global_bool_feature (HB_TAG('l','o','c','l'));
195
+ /* The Indic specs do not require ccmp, but we apply it here since if
196
+ * there is a use of it, it's typically at the beginning. */
197
+ map->add_global_bool_feature (HB_TAG('c','c','m','p'));
198
+
199
+
200
+ unsigned int i = 0;
201
+ map->add_gsub_pause (initial_reordering);
202
+ for (; i < INDIC_BASIC_FEATURES; i++) {
203
+ map->add_feature (indic_features[i].tag, 1, indic_features[i].flags | F_MANUAL_ZWJ | F_MANUAL_ZWNJ);
204
+ map->add_gsub_pause (nullptr);
205
+ }
206
+ map->add_gsub_pause (final_reordering);
207
+ for (; i < INDIC_NUM_FEATURES; i++) {
208
+ map->add_feature (indic_features[i].tag, 1, indic_features[i].flags | F_MANUAL_ZWJ | F_MANUAL_ZWNJ);
209
+ }
210
+
211
+ map->add_global_bool_feature (HB_TAG('c','a','l','t'));
212
+ map->add_global_bool_feature (HB_TAG('c','l','i','g'));
213
+
214
+ map->add_gsub_pause (clear_syllables);
215
+ }
216
+
217
+ static void
218
+ override_features_indic (hb_ot_shape_planner_t *plan)
219
+ {
220
+ plan->map.add_feature (HB_TAG('l','i','g','a'), 0, F_GLOBAL);
221
+ }
222
+
223
+
224
+ struct would_substitute_feature_t
225
+ {
226
+ inline void init (const hb_ot_map_t *map, hb_tag_t feature_tag, bool zero_context_)
227
+ {
228
+ zero_context = zero_context_;
229
+ map->get_stage_lookups (0/*GSUB*/,
230
+ map->get_feature_stage (0/*GSUB*/, feature_tag),
231
+ &lookups, &count);
232
+ }
233
+
234
+ inline bool would_substitute (const hb_codepoint_t *glyphs,
235
+ unsigned int glyphs_count,
236
+ hb_face_t *face) const
237
+ {
238
+ for (unsigned int i = 0; i < count; i++)
239
+ if (hb_ot_layout_lookup_would_substitute_fast (face, lookups[i].index, glyphs, glyphs_count, zero_context))
240
+ return true;
241
+ return false;
242
+ }
243
+
244
+ private:
245
+ const hb_ot_map_t::lookup_map_t *lookups;
246
+ unsigned int count;
247
+ bool zero_context;
248
+ };
249
+
250
+ struct indic_shape_plan_t
251
+ {
252
+ ASSERT_POD ();
253
+
254
+ inline bool get_virama_glyph (hb_font_t *font, hb_codepoint_t *pglyph) const
255
+ {
256
+ hb_codepoint_t glyph = virama_glyph;
257
+ if (unlikely (virama_glyph == (hb_codepoint_t) -1))
258
+ {
259
+ if (!config->virama || !font->get_nominal_glyph (config->virama, &glyph))
260
+ glyph = 0;
261
+ /* Technically speaking, the spec says we should apply 'locl' to virama too.
262
+ * Maybe one day... */
263
+
264
+ /* Our get_nominal_glyph() function needs a font, so we can't get the virama glyph
265
+ * during shape planning... Instead, overwrite it here. It's safe. Don't worry! */
266
+ virama_glyph = glyph;
267
+ }
268
+
269
+ *pglyph = glyph;
270
+ return glyph != 0;
271
+ }
272
+
273
+ const indic_config_t *config;
274
+
275
+ bool is_old_spec;
276
+ mutable hb_codepoint_t virama_glyph;
277
+
278
+ would_substitute_feature_t rphf;
279
+ would_substitute_feature_t pref;
280
+ would_substitute_feature_t blwf;
281
+ would_substitute_feature_t pstf;
282
+
283
+ hb_mask_t mask_array[INDIC_NUM_FEATURES];
284
+ };
285
+
286
+ static void *
287
+ data_create_indic (const hb_ot_shape_plan_t *plan)
288
+ {
289
+ indic_shape_plan_t *indic_plan = (indic_shape_plan_t *) calloc (1, sizeof (indic_shape_plan_t));
290
+ if (unlikely (!indic_plan))
291
+ return nullptr;
292
+
293
+ indic_plan->config = &indic_configs[0];
294
+ for (unsigned int i = 1; i < ARRAY_LENGTH (indic_configs); i++)
295
+ if (plan->props.script == indic_configs[i].script) {
296
+ indic_plan->config = &indic_configs[i];
297
+ break;
298
+ }
299
+
300
+ indic_plan->is_old_spec = indic_plan->config->has_old_spec && ((plan->map.chosen_script[0] & 0x000000FFu) != '2');
301
+ indic_plan->virama_glyph = (hb_codepoint_t) -1;
302
+
303
+ /* Use zero-context would_substitute() matching for new-spec of the main
304
+ * Indic scripts, and scripts with one spec only, but not for old-specs.
305
+ * The new-spec for all dual-spec scripts says zero-context matching happens.
306
+ *
307
+ * However, testing with Malayalam shows that old and new spec both allow
308
+ * context. Testing with Bengali new-spec however shows that it doesn't.
309
+ * So, the heuristic here is the way it is. It should *only* be changed,
310
+ * as we discover more cases of what Windows does. DON'T TOUCH OTHERWISE.
311
+ */
312
+ bool zero_context = !indic_plan->is_old_spec && plan->props.script != HB_SCRIPT_MALAYALAM;
313
+ indic_plan->rphf.init (&plan->map, HB_TAG('r','p','h','f'), zero_context);
314
+ indic_plan->pref.init (&plan->map, HB_TAG('p','r','e','f'), zero_context);
315
+ indic_plan->blwf.init (&plan->map, HB_TAG('b','l','w','f'), zero_context);
316
+ indic_plan->pstf.init (&plan->map, HB_TAG('p','s','t','f'), zero_context);
317
+
318
+ for (unsigned int i = 0; i < ARRAY_LENGTH (indic_plan->mask_array); i++)
319
+ indic_plan->mask_array[i] = (indic_features[i].flags & F_GLOBAL) ?
320
+ 0 : plan->map.get_1_mask (indic_features[i].tag);
321
+
322
+ return indic_plan;
323
+ }
324
+
325
+ static void
326
+ data_destroy_indic (void *data)
327
+ {
328
+ free (data);
329
+ }
330
+
331
+ static indic_position_t
332
+ consonant_position_from_face (const indic_shape_plan_t *indic_plan,
333
+ const hb_codepoint_t consonant,
334
+ const hb_codepoint_t virama,
335
+ hb_face_t *face)
336
+ {
337
+ /* For old-spec, the order of glyphs is Consonant,Virama,
338
+ * whereas for new-spec, it's Virama,Consonant. However,
339
+ * some broken fonts (like Free Sans) simply copied lookups
340
+ * from old-spec to new-spec without modification.
341
+ * And oddly enough, Uniscribe seems to respect those lookups.
342
+ * Eg. in the sequence U+0924,U+094D,U+0930, Uniscribe finds
343
+ * base at 0. The font however, only has lookups matching
344
+ * 930,94D in 'blwf', not the expected 94D,930 (with new-spec
345
+ * table). As such, we simply match both sequences. Seems
346
+ * to work. */
347
+ hb_codepoint_t glyphs[3] = {virama, consonant, virama};
348
+ if (indic_plan->blwf.would_substitute (glyphs , 2, face) ||
349
+ indic_plan->blwf.would_substitute (glyphs+1, 2, face))
350
+ return POS_BELOW_C;
351
+ if (indic_plan->pstf.would_substitute (glyphs , 2, face) ||
352
+ indic_plan->pstf.would_substitute (glyphs+1, 2, face))
353
+ return POS_POST_C;
354
+ if (indic_plan->pref.would_substitute (glyphs , 2, face) ||
355
+ indic_plan->pref.would_substitute (glyphs+1, 2, face))
356
+ return POS_POST_C;
357
+ return POS_BASE_C;
358
+ }
359
+
360
+
361
+ enum syllable_type_t {
362
+ consonant_syllable,
363
+ vowel_syllable,
364
+ standalone_cluster,
365
+ symbol_cluster,
366
+ broken_cluster,
367
+ non_indic_cluster,
368
+ };
369
+
370
+ #include "hb-ot-shape-complex-indic-machine.hh"
371
+
372
+
373
+ static void
374
+ setup_masks_indic (const hb_ot_shape_plan_t *plan HB_UNUSED,
375
+ hb_buffer_t *buffer,
376
+ hb_font_t *font HB_UNUSED)
377
+ {
378
+ HB_BUFFER_ALLOCATE_VAR (buffer, indic_category);
379
+ HB_BUFFER_ALLOCATE_VAR (buffer, indic_position);
380
+
381
+ /* We cannot setup masks here. We save information about characters
382
+ * and setup masks later on in a pause-callback. */
383
+
384
+ unsigned int count = buffer->len;
385
+ hb_glyph_info_t *info = buffer->info;
386
+ for (unsigned int i = 0; i < count; i++)
387
+ set_indic_properties (info[i]);
388
+ }
389
+
390
+ static void
391
+ setup_syllables (const hb_ot_shape_plan_t *plan HB_UNUSED,
392
+ hb_font_t *font HB_UNUSED,
393
+ hb_buffer_t *buffer)
394
+ {
395
+ find_syllables (buffer);
396
+ foreach_syllable (buffer, start, end)
397
+ buffer->unsafe_to_break (start, end);
398
+ }
399
+
400
+ static int
401
+ compare_indic_order (const hb_glyph_info_t *pa, const hb_glyph_info_t *pb)
402
+ {
403
+ int a = pa->indic_position();
404
+ int b = pb->indic_position();
405
+
406
+ return a < b ? -1 : a == b ? 0 : +1;
407
+ }
408
+
409
+
410
+
411
+ static void
412
+ update_consonant_positions (const hb_ot_shape_plan_t *plan,
413
+ hb_font_t *font,
414
+ hb_buffer_t *buffer)
415
+ {
416
+ const indic_shape_plan_t *indic_plan = (const indic_shape_plan_t *) plan->data;
417
+
418
+ if (indic_plan->config->base_pos != BASE_POS_LAST)
419
+ return;
420
+
421
+ hb_codepoint_t virama;
422
+ if (indic_plan->get_virama_glyph (font, &virama))
423
+ {
424
+ hb_face_t *face = font->face;
425
+ unsigned int count = buffer->len;
426
+ hb_glyph_info_t *info = buffer->info;
427
+ for (unsigned int i = 0; i < count; i++)
428
+ if (info[i].indic_position() == POS_BASE_C)
429
+ {
430
+ hb_codepoint_t consonant = info[i].codepoint;
431
+ info[i].indic_position() = consonant_position_from_face (indic_plan, consonant, virama, face);
432
+ }
433
+ }
434
+ }
435
+
436
+
437
+ /* Rules from:
438
+ * https://www.microsoft.com/typography/otfntdev/devanot/shaping.aspx */
439
+
440
+ static void
441
+ initial_reordering_consonant_syllable (const hb_ot_shape_plan_t *plan,
442
+ hb_face_t *face,
443
+ hb_buffer_t *buffer,
444
+ unsigned int start, unsigned int end)
445
+ {
446
+ const indic_shape_plan_t *indic_plan = (const indic_shape_plan_t *) plan->data;
447
+ hb_glyph_info_t *info = buffer->info;
448
+
449
+ /* https://github.com/harfbuzz/harfbuzz/issues/435#issuecomment-335560167
450
+ * // For compatibility with legacy usage in Kannada,
451
+ * // Ra+h+ZWJ must behave like Ra+ZWJ+h...
452
+ */
453
+ if (buffer->props.script == HB_SCRIPT_KANNADA &&
454
+ start + 3 <= end &&
455
+ is_one_of (info[start ], FLAG (OT_Ra)) &&
456
+ is_one_of (info[start+1], FLAG (OT_H)) &&
457
+ is_one_of (info[start+2], FLAG (OT_ZWJ)))
458
+ {
459
+ buffer->merge_clusters (start+1, start+3);
460
+ hb_glyph_info_t tmp = info[start+1];
461
+ info[start+1] = info[start+2];
462
+ info[start+2] = tmp;
463
+ }
464
+
465
+ /* 1. Find base consonant:
466
+ *
467
+ * The shaping engine finds the base consonant of the syllable, using the
468
+ * following algorithm: starting from the end of the syllable, move backwards
469
+ * until a consonant is found that does not have a below-base or post-base
470
+ * form (post-base forms have to follow below-base forms), or that is not a
471
+ * pre-base-reordering Ra, or arrive at the first consonant. The consonant
472
+ * stopped at will be the base.
473
+ *
474
+ * o If the syllable starts with Ra + Halant (in a script that has Reph)
475
+ * and has more than one consonant, Ra is excluded from candidates for
476
+ * base consonants.
477
+ */
478
+
479
+ unsigned int base = end;
480
+ bool has_reph = false;
481
+
482
+ {
483
+ /* -> If the syllable starts with Ra + Halant (in a script that has Reph)
484
+ * and has more than one consonant, Ra is excluded from candidates for
485
+ * base consonants. */
486
+ unsigned int limit = start;
487
+ if (indic_plan->mask_array[RPHF] &&
488
+ start + 3 <= end &&
489
+ (
490
+ (indic_plan->config->reph_mode == REPH_MODE_IMPLICIT && !is_joiner (info[start + 2])) ||
491
+ (indic_plan->config->reph_mode == REPH_MODE_EXPLICIT && info[start + 2].indic_category() == OT_ZWJ)
492
+ ))
493
+ {
494
+ /* See if it matches the 'rphf' feature. */
495
+ hb_codepoint_t glyphs[3] = {info[start].codepoint,
496
+ info[start + 1].codepoint,
497
+ indic_plan->config->reph_mode == REPH_MODE_EXPLICIT ?
498
+ info[start + 2].codepoint : 0};
499
+ if (indic_plan->rphf.would_substitute (glyphs, 2, face) ||
500
+ (indic_plan->config->reph_mode == REPH_MODE_EXPLICIT &&
501
+ indic_plan->rphf.would_substitute (glyphs, 3, face)))
502
+ {
503
+ limit += 2;
504
+ while (limit < end && is_joiner (info[limit]))
505
+ limit++;
506
+ base = start;
507
+ has_reph = true;
508
+ }
509
+ } else if (indic_plan->config->reph_mode == REPH_MODE_LOG_REPHA && info[start].indic_category() == OT_Repha)
510
+ {
511
+ limit += 1;
512
+ while (limit < end && is_joiner (info[limit]))
513
+ limit++;
514
+ base = start;
515
+ has_reph = true;
516
+ }
517
+
518
+ switch (indic_plan->config->base_pos)
519
+ {
520
+ case BASE_POS_LAST:
521
+ {
522
+ /* -> starting from the end of the syllable, move backwards */
523
+ unsigned int i = end;
524
+ bool seen_below = false;
525
+ do {
526
+ i--;
527
+ /* -> until a consonant is found */
528
+ if (is_consonant (info[i]))
529
+ {
530
+ /* -> that does not have a below-base or post-base form
531
+ * (post-base forms have to follow below-base forms), */
532
+ if (info[i].indic_position() != POS_BELOW_C &&
533
+ (info[i].indic_position() != POS_POST_C || seen_below))
534
+ {
535
+ base = i;
536
+ break;
537
+ }
538
+ if (info[i].indic_position() == POS_BELOW_C)
539
+ seen_below = true;
540
+
541
+ /* -> or that is not a pre-base-reordering Ra,
542
+ *
543
+ * IMPLEMENTATION NOTES:
544
+ *
545
+ * Our pre-base-reordering Ra's are marked POS_POST_C, so will be skipped
546
+ * by the logic above already.
547
+ */
548
+
549
+ /* -> or arrive at the first consonant. The consonant stopped at will
550
+ * be the base. */
551
+ base = i;
552
+ }
553
+ else
554
+ {
555
+ /* A ZWJ after a Halant stops the base search, and requests an explicit
556
+ * half form.
557
+ * A ZWJ before a Halant, requests a subjoined form instead, and hence
558
+ * search continues. This is particularly important for Bengali
559
+ * sequence Ra,H,Ya that should form Ya-Phalaa by subjoining Ya. */
560
+ if (start < i &&
561
+ info[i].indic_category() == OT_ZWJ &&
562
+ info[i - 1].indic_category() == OT_H)
563
+ break;
564
+ }
565
+ } while (i > limit);
566
+ }
567
+ break;
568
+
569
+ case BASE_POS_LAST_SINHALA:
570
+ {
571
+ /* Sinhala base positioning is slightly different from main Indic, in that:
572
+ * 1. Its ZWJ behavior is different,
573
+ * 2. We don't need to look into the font for consonant positions.
574
+ */
575
+
576
+ if (!has_reph)
577
+ base = limit;
578
+
579
+ /* Find the last base consonant that is not blocked by ZWJ. If there is
580
+ * a ZWJ right before a base consonant, that would request a subjoined form. */
581
+ for (unsigned int i = limit; i < end; i++)
582
+ if (is_consonant (info[i]))
583
+ {
584
+ if (limit < i && info[i - 1].indic_category() == OT_ZWJ)
585
+ break;
586
+ else
587
+ base = i;
588
+ }
589
+
590
+ /* Mark all subsequent consonants as below. */
591
+ for (unsigned int i = base + 1; i < end; i++)
592
+ if (is_consonant (info[i]))
593
+ info[i].indic_position() = POS_BELOW_C;
594
+ }
595
+ break;
596
+ }
597
+
598
+ /* -> If the syllable starts with Ra + Halant (in a script that has Reph)
599
+ * and has more than one consonant, Ra is excluded from candidates for
600
+ * base consonants.
601
+ *
602
+ * Only do this for unforced Reph. (ie. not for Ra,H,ZWJ. */
603
+ if (has_reph && base == start && limit - base <= 2) {
604
+ /* Have no other consonant, so Reph is not formed and Ra becomes base. */
605
+ has_reph = false;
606
+ }
607
+ }
608
+
609
+
610
+ /* 2. Decompose and reorder Matras:
611
+ *
612
+ * Each matra and any syllable modifier sign in the syllable are moved to the
613
+ * appropriate position relative to the consonant(s) in the syllable. The
614
+ * shaping engine decomposes two- or three-part matras into their constituent
615
+ * parts before any repositioning. Matra characters are classified by which
616
+ * consonant in a conjunct they have affinity for and are reordered to the
617
+ * following positions:
618
+ *
619
+ * o Before first half form in the syllable
620
+ * o After subjoined consonants
621
+ * o After post-form consonant
622
+ * o After main consonant (for above marks)
623
+ *
624
+ * IMPLEMENTATION NOTES:
625
+ *
626
+ * The normalize() routine has already decomposed matras for us, so we don't
627
+ * need to worry about that.
628
+ */
629
+
630
+
631
+ /* 3. Reorder marks to canonical order:
632
+ *
633
+ * Adjacent nukta and halant or nukta and vedic sign are always repositioned
634
+ * if necessary, so that the nukta is first.
635
+ *
636
+ * IMPLEMENTATION NOTES:
637
+ *
638
+ * We don't need to do this: the normalize() routine already did this for us.
639
+ */
640
+
641
+
642
+ /* Reorder characters */
643
+
644
+ for (unsigned int i = start; i < base; i++)
645
+ info[i].indic_position() = MIN (POS_PRE_C, (indic_position_t) info[i].indic_position());
646
+
647
+ if (base < end)
648
+ info[base].indic_position() = POS_BASE_C;
649
+
650
+ /* Mark final consonants. A final consonant is one appearing after a matra.
651
+ * Happens in Sinhala. */
652
+ for (unsigned int i = base + 1; i < end; i++)
653
+ if (info[i].indic_category() == OT_M) {
654
+ for (unsigned int j = i + 1; j < end; j++)
655
+ if (is_consonant (info[j])) {
656
+ info[j].indic_position() = POS_FINAL_C;
657
+ break;
658
+ }
659
+ break;
660
+ }
661
+
662
+ /* Handle beginning Ra */
663
+ if (has_reph)
664
+ info[start].indic_position() = POS_RA_TO_BECOME_REPH;
665
+
666
+ /* For old-style Indic script tags, move the first post-base Halant after
667
+ * last consonant.
668
+ *
669
+ * Reports suggest that in some scripts Uniscribe does this only if there
670
+ * is *not* a Halant after last consonant already (eg. Kannada), while it
671
+ * does it unconditionally in other scripts (eg. Malayalam). We don't
672
+ * currently know about other scripts, so we single out Malayalam for now.
673
+ *
674
+ * Kannada test case:
675
+ * U+0C9A,U+0CCD,U+0C9A,U+0CCD
676
+ * With some versions of Lohit Kannada.
677
+ * https://bugs.freedesktop.org/show_bug.cgi?id=59118
678
+ *
679
+ * Malayalam test case:
680
+ * U+0D38,U+0D4D,U+0D31,U+0D4D,U+0D31,U+0D4D
681
+ * With lohit-ttf-20121122/Lohit-Malayalam.ttf
682
+ */
683
+ if (indic_plan->is_old_spec)
684
+ {
685
+ bool disallow_double_halants = buffer->props.script != HB_SCRIPT_MALAYALAM;
686
+ for (unsigned int i = base + 1; i < end; i++)
687
+ if (info[i].indic_category() == OT_H)
688
+ {
689
+ unsigned int j;
690
+ for (j = end - 1; j > i; j--)
691
+ if (is_consonant (info[j]) ||
692
+ (disallow_double_halants && info[j].indic_category() == OT_H))
693
+ break;
694
+ if (info[j].indic_category() != OT_H && j > i) {
695
+ /* Move Halant to after last consonant. */
696
+ hb_glyph_info_t t = info[i];
697
+ memmove (&info[i], &info[i + 1], (j - i) * sizeof (info[0]));
698
+ info[j] = t;
699
+ }
700
+ break;
701
+ }
702
+ }
703
+
704
+ /* Attach misc marks to previous char to move with them. */
705
+ {
706
+ indic_position_t last_pos = POS_START;
707
+ for (unsigned int i = start; i < end; i++)
708
+ {
709
+ if ((FLAG_UNSAFE (info[i].indic_category()) & (JOINER_FLAGS | FLAG (OT_N) | FLAG (OT_RS) | MEDIAL_FLAGS | FLAG (OT_H))))
710
+ {
711
+ info[i].indic_position() = last_pos;
712
+ if (unlikely (info[i].indic_category() == OT_H &&
713
+ info[i].indic_position() == POS_PRE_M))
714
+ {
715
+ /*
716
+ * Uniscribe doesn't move the Halant with Left Matra.
717
+ * TEST: U+092B,U+093F,U+094DE
718
+ * We follow. This is important for the Sinhala
719
+ * U+0DDA split matra since it decomposes to U+0DD9,U+0DCA
720
+ * where U+0DD9 is a left matra and U+0DCA is the virama.
721
+ * We don't want to move the virama with the left matra.
722
+ * TEST: U+0D9A,U+0DDA
723
+ */
724
+ for (unsigned int j = i; j > start; j--)
725
+ if (info[j - 1].indic_position() != POS_PRE_M) {
726
+ info[i].indic_position() = info[j - 1].indic_position();
727
+ break;
728
+ }
729
+ }
730
+ } else if (info[i].indic_position() != POS_SMVD) {
731
+ last_pos = (indic_position_t) info[i].indic_position();
732
+ }
733
+ }
734
+ }
735
+ /* For post-base consonants let them own anything before them
736
+ * since the last consonant or matra. */
737
+ {
738
+ unsigned int last = base;
739
+ for (unsigned int i = base + 1; i < end; i++)
740
+ if (is_consonant (info[i]))
741
+ {
742
+ for (unsigned int j = last + 1; j < i; j++)
743
+ if (info[j].indic_position() < POS_SMVD)
744
+ info[j].indic_position() = info[i].indic_position();
745
+ last = i;
746
+ } else if (info[i].indic_category() == OT_M)
747
+ last = i;
748
+ }
749
+
750
+
751
+ {
752
+ /* Use syllable() for sort accounting temporarily. */
753
+ unsigned int syllable = info[start].syllable();
754
+ for (unsigned int i = start; i < end; i++)
755
+ info[i].syllable() = i - start;
756
+
757
+ /* Sit tight, rock 'n roll! */
758
+ hb_stable_sort (info + start, end - start, compare_indic_order);
759
+ /* Find base again */
760
+ base = end;
761
+ for (unsigned int i = start; i < end; i++)
762
+ if (info[i].indic_position() == POS_BASE_C)
763
+ {
764
+ base = i;
765
+ break;
766
+ }
767
+ /* Things are out-of-control for post base positions, they may shuffle
768
+ * around like crazy. In old-spec mode, we move halants around, so in
769
+ * that case merge all clusters after base. Otherwise, check the sort
770
+ * order and merge as needed.
771
+ * For pre-base stuff, we handle cluster issues in final reordering.
772
+ *
773
+ * We could use buffer->sort() for this, if there was no special
774
+ * reordering of pre-base stuff happening later...
775
+ */
776
+ if (indic_plan->is_old_spec || end - base > 127)
777
+ buffer->merge_clusters (base, end);
778
+ else
779
+ {
780
+ /* Note! syllable() is a one-byte field. */
781
+ for (unsigned int i = base; i < end; i++)
782
+ if (info[i].syllable() != 255)
783
+ {
784
+ unsigned int max = i;
785
+ unsigned int j = start + info[i].syllable();
786
+ while (j != i)
787
+ {
788
+ max = MAX (max, j);
789
+ unsigned int next = start + info[j].syllable();
790
+ info[j].syllable() = 255; /* So we don't process j later again. */
791
+ j = next;
792
+ }
793
+ if (i != max)
794
+ buffer->merge_clusters (i, max + 1);
795
+ }
796
+ }
797
+
798
+ /* Put syllable back in. */
799
+ for (unsigned int i = start; i < end; i++)
800
+ info[i].syllable() = syllable;
801
+ }
802
+
803
+ /* Setup masks now */
804
+
805
+ {
806
+ hb_mask_t mask;
807
+
808
+ /* Reph */
809
+ for (unsigned int i = start; i < end && info[i].indic_position() == POS_RA_TO_BECOME_REPH; i++)
810
+ info[i].mask |= indic_plan->mask_array[RPHF];
811
+
812
+ /* Pre-base */
813
+ mask = indic_plan->mask_array[HALF];
814
+ if (!indic_plan->is_old_spec &&
815
+ indic_plan->config->blwf_mode == BLWF_MODE_PRE_AND_POST)
816
+ mask |= indic_plan->mask_array[BLWF];
817
+ for (unsigned int i = start; i < base; i++)
818
+ info[i].mask |= mask;
819
+ /* Base */
820
+ mask = 0;
821
+ if (base < end)
822
+ info[base].mask |= mask;
823
+ /* Post-base */
824
+ mask = indic_plan->mask_array[BLWF] | indic_plan->mask_array[ABVF] | indic_plan->mask_array[PSTF];
825
+ for (unsigned int i = base + 1; i < end; i++)
826
+ info[i].mask |= mask;
827
+ }
828
+
829
+ if (indic_plan->is_old_spec &&
830
+ buffer->props.script == HB_SCRIPT_DEVANAGARI)
831
+ {
832
+ /* Old-spec eye-lash Ra needs special handling. From the
833
+ * spec:
834
+ *
835
+ * "The feature 'below-base form' is applied to consonants
836
+ * having below-base forms and following the base consonant.
837
+ * The exception is vattu, which may appear below half forms
838
+ * as well as below the base glyph. The feature 'below-base
839
+ * form' will be applied to all such occurrences of Ra as well."
840
+ *
841
+ * Test case: U+0924,U+094D,U+0930,U+094d,U+0915
842
+ * with Sanskrit 2003 font.
843
+ *
844
+ * However, note that Ra,Halant,ZWJ is the correct way to
845
+ * request eyelash form of Ra, so we wouldbn't inhibit it
846
+ * in that sequence.
847
+ *
848
+ * Test case: U+0924,U+094D,U+0930,U+094d,U+200D,U+0915
849
+ */
850
+ for (unsigned int i = start; i + 1 < base; i++)
851
+ if (info[i ].indic_category() == OT_Ra &&
852
+ info[i+1].indic_category() == OT_H &&
853
+ (i + 2 == base ||
854
+ info[i+2].indic_category() != OT_ZWJ))
855
+ {
856
+ info[i ].mask |= indic_plan->mask_array[BLWF];
857
+ info[i+1].mask |= indic_plan->mask_array[BLWF];
858
+ }
859
+ }
860
+
861
+ unsigned int pref_len = 2;
862
+ if (indic_plan->mask_array[PREF] && base + pref_len < end)
863
+ {
864
+ /* Find a Halant,Ra sequence and mark it for pre-base-reordering processing. */
865
+ for (unsigned int i = base + 1; i + pref_len - 1 < end; i++) {
866
+ hb_codepoint_t glyphs[2];
867
+ for (unsigned int j = 0; j < pref_len; j++)
868
+ glyphs[j] = info[i + j].codepoint;
869
+ if (indic_plan->pref.would_substitute (glyphs, pref_len, face))
870
+ {
871
+ for (unsigned int j = 0; j < pref_len; j++)
872
+ info[i++].mask |= indic_plan->mask_array[PREF];
873
+ break;
874
+ }
875
+ }
876
+ }
877
+
878
+ /* Apply ZWJ/ZWNJ effects */
879
+ for (unsigned int i = start + 1; i < end; i++)
880
+ if (is_joiner (info[i])) {
881
+ bool non_joiner = info[i].indic_category() == OT_ZWNJ;
882
+ unsigned int j = i;
883
+
884
+ do {
885
+ j--;
886
+
887
+ /* ZWJ/ZWNJ should disable CJCT. They do that by simply
888
+ * being there, since we don't skip them for the CJCT
889
+ * feature (ie. F_MANUAL_ZWJ) */
890
+
891
+ /* A ZWNJ disables HALF. */
892
+ if (non_joiner)
893
+ info[j].mask &= ~indic_plan->mask_array[HALF];
894
+
895
+ } while (j > start && !is_consonant (info[j]));
896
+ }
897
+ }
898
+
899
+ static void
900
+ initial_reordering_standalone_cluster (const hb_ot_shape_plan_t *plan,
901
+ hb_face_t *face,
902
+ hb_buffer_t *buffer,
903
+ unsigned int start, unsigned int end)
904
+ {
905
+ /* We treat placeholder/dotted-circle as if they are consonants, so we
906
+ * should just chain. Only if not in compatibility mode that is... */
907
+
908
+ if (hb_options ().uniscribe_bug_compatible)
909
+ {
910
+ /* For dotted-circle, this is what Uniscribe does:
911
+ * If dotted-circle is the last glyph, it just does nothing.
912
+ * Ie. It doesn't form Reph. */
913
+ if (buffer->info[end - 1].indic_category() == OT_DOTTEDCIRCLE)
914
+ return;
915
+ }
916
+
917
+ initial_reordering_consonant_syllable (plan, face, buffer, start, end);
918
+ }
919
+
920
+ static void
921
+ initial_reordering_syllable (const hb_ot_shape_plan_t *plan,
922
+ hb_face_t *face,
923
+ hb_buffer_t *buffer,
924
+ unsigned int start, unsigned int end)
925
+ {
926
+ syllable_type_t syllable_type = (syllable_type_t) (buffer->info[start].syllable() & 0x0F);
927
+ switch (syllable_type)
928
+ {
929
+ case vowel_syllable: /* We made the vowels look like consonants. So let's call the consonant logic! */
930
+ case consonant_syllable:
931
+ initial_reordering_consonant_syllable (plan, face, buffer, start, end);
932
+ break;
933
+
934
+ case broken_cluster: /* We already inserted dotted-circles, so just call the standalone_cluster. */
935
+ case standalone_cluster:
936
+ initial_reordering_standalone_cluster (plan, face, buffer, start, end);
937
+ break;
938
+
939
+ case symbol_cluster:
940
+ case non_indic_cluster:
941
+ break;
942
+ }
943
+ }
944
+
945
+ static inline void
946
+ insert_dotted_circles (const hb_ot_shape_plan_t *plan HB_UNUSED,
947
+ hb_font_t *font,
948
+ hb_buffer_t *buffer)
949
+ {
950
+ /* Note: This loop is extra overhead, but should not be measurable. */
951
+ bool has_broken_syllables = false;
952
+ unsigned int count = buffer->len;
953
+ hb_glyph_info_t *info = buffer->info;
954
+ for (unsigned int i = 0; i < count; i++)
955
+ if ((info[i].syllable() & 0x0F) == broken_cluster)
956
+ {
957
+ has_broken_syllables = true;
958
+ break;
959
+ }
960
+ if (likely (!has_broken_syllables))
961
+ return;
962
+
963
+
964
+ hb_codepoint_t dottedcircle_glyph;
965
+ if (!font->get_nominal_glyph (0x25CCu, &dottedcircle_glyph))
966
+ return;
967
+
968
+ hb_glyph_info_t dottedcircle = {0};
969
+ dottedcircle.codepoint = 0x25CCu;
970
+ set_indic_properties (dottedcircle);
971
+ dottedcircle.codepoint = dottedcircle_glyph;
972
+
973
+ buffer->clear_output ();
974
+
975
+ buffer->idx = 0;
976
+ unsigned int last_syllable = 0;
977
+ while (buffer->idx < buffer->len && !buffer->in_error)
978
+ {
979
+ unsigned int syllable = buffer->cur().syllable();
980
+ syllable_type_t syllable_type = (syllable_type_t) (syllable & 0x0F);
981
+ if (unlikely (last_syllable != syllable && syllable_type == broken_cluster))
982
+ {
983
+ last_syllable = syllable;
984
+
985
+ hb_glyph_info_t ginfo = dottedcircle;
986
+ ginfo.cluster = buffer->cur().cluster;
987
+ ginfo.mask = buffer->cur().mask;
988
+ ginfo.syllable() = buffer->cur().syllable();
989
+ /* TODO Set glyph_props? */
990
+
991
+ /* Insert dottedcircle after possible Repha. */
992
+ while (buffer->idx < buffer->len && !buffer->in_error &&
993
+ last_syllable == buffer->cur().syllable() &&
994
+ buffer->cur().indic_category() == OT_Repha)
995
+ buffer->next_glyph ();
996
+
997
+ buffer->output_info (ginfo);
998
+ }
999
+ else
1000
+ buffer->next_glyph ();
1001
+ }
1002
+
1003
+ buffer->swap_buffers ();
1004
+ }
1005
+
1006
+ static void
1007
+ initial_reordering (const hb_ot_shape_plan_t *plan,
1008
+ hb_font_t *font,
1009
+ hb_buffer_t *buffer)
1010
+ {
1011
+ update_consonant_positions (plan, font, buffer);
1012
+ insert_dotted_circles (plan, font, buffer);
1013
+
1014
+ foreach_syllable (buffer, start, end)
1015
+ initial_reordering_syllable (plan, font->face, buffer, start, end);
1016
+ }
1017
+
1018
+ static void
1019
+ final_reordering_syllable (const hb_ot_shape_plan_t *plan,
1020
+ hb_buffer_t *buffer,
1021
+ unsigned int start, unsigned int end)
1022
+ {
1023
+ const indic_shape_plan_t *indic_plan = (const indic_shape_plan_t *) plan->data;
1024
+ hb_glyph_info_t *info = buffer->info;
1025
+
1026
+
1027
+ /* This function relies heavily on halant glyphs. Lots of ligation
1028
+ * and possibly multiple substitutions happened prior to this
1029
+ * phase, and that might have messed up our properties. Recover
1030
+ * from a particular case of that where we're fairly sure that a
1031
+ * class of OT_H is desired but has been lost. */
1032
+ if (indic_plan->virama_glyph)
1033
+ {
1034
+ unsigned int virama_glyph = indic_plan->virama_glyph;
1035
+ for (unsigned int i = start; i < end; i++)
1036
+ if (info[i].codepoint == virama_glyph &&
1037
+ _hb_glyph_info_ligated (&info[i]) &&
1038
+ _hb_glyph_info_multiplied (&info[i]))
1039
+ {
1040
+ /* This will make sure that this glyph passes is_halant() test. */
1041
+ info[i].indic_category() = OT_H;
1042
+ _hb_glyph_info_clear_ligated_and_multiplied (&info[i]);
1043
+ }
1044
+ }
1045
+
1046
+
1047
+ /* 4. Final reordering:
1048
+ *
1049
+ * After the localized forms and basic shaping forms GSUB features have been
1050
+ * applied (see below), the shaping engine performs some final glyph
1051
+ * reordering before applying all the remaining font features to the entire
1052
+ * syllable.
1053
+ */
1054
+
1055
+ bool try_pref = !!indic_plan->mask_array[PREF];
1056
+
1057
+ /* Find base again */
1058
+ unsigned int base;
1059
+ for (base = start; base < end; base++)
1060
+ if (info[base].indic_position() >= POS_BASE_C)
1061
+ {
1062
+ if (try_pref && base + 1 < end)
1063
+ {
1064
+ for (unsigned int i = base + 1; i < end; i++)
1065
+ if ((info[i].mask & indic_plan->mask_array[PREF]) != 0)
1066
+ {
1067
+ if (!(_hb_glyph_info_substituted (&info[i]) &&
1068
+ _hb_glyph_info_ligated_and_didnt_multiply (&info[i])))
1069
+ {
1070
+ /* Ok, this was a 'pref' candidate but didn't form any.
1071
+ * Base is around here... */
1072
+ base = i;
1073
+ while (base < end && is_halant (info[base]))
1074
+ base++;
1075
+ info[base].indic_position() = POS_BASE_C;
1076
+
1077
+ try_pref = false;
1078
+ }
1079
+ break;
1080
+ }
1081
+ }
1082
+ /* For Malayalam, skip over unformed below- (but NOT post-) forms. */
1083
+ if (buffer->props.script == HB_SCRIPT_MALAYALAM)
1084
+ {
1085
+ for (unsigned int i = base + 1; i < end; i++)
1086
+ {
1087
+ while (i < end && is_joiner (info[i]))
1088
+ i++;
1089
+ if (i == end || !is_halant (info[i]))
1090
+ break;
1091
+ i++; /* Skip halant. */
1092
+ while (i < end && is_joiner (info[i]))
1093
+ i++;
1094
+ if (i < end && is_consonant (info[i]) && info[i].indic_position() == POS_BELOW_C)
1095
+ {
1096
+ base = i;
1097
+ info[base].indic_position() = POS_BASE_C;
1098
+ }
1099
+ }
1100
+ }
1101
+
1102
+ if (start < base && info[base].indic_position() > POS_BASE_C)
1103
+ base--;
1104
+ break;
1105
+ }
1106
+ if (base == end && start < base &&
1107
+ is_one_of (info[base - 1], FLAG (OT_ZWJ)))
1108
+ base--;
1109
+ if (base < end)
1110
+ while (start < base &&
1111
+ is_one_of (info[base], (FLAG (OT_N) | FLAG (OT_H))))
1112
+ base--;
1113
+
1114
+
1115
+ /* o Reorder matras:
1116
+ *
1117
+ * If a pre-base matra character had been reordered before applying basic
1118
+ * features, the glyph can be moved closer to the main consonant based on
1119
+ * whether half-forms had been formed. Actual position for the matra is
1120
+ * defined as “after last standalone halant glyph, after initial matra
1121
+ * position and before the main consonant”. If ZWJ or ZWNJ follow this
1122
+ * halant, position is moved after it.
1123
+ */
1124
+
1125
+ if (start + 1 < end && start < base) /* Otherwise there can't be any pre-base matra characters. */
1126
+ {
1127
+ /* If we lost track of base, alas, position before last thingy. */
1128
+ unsigned int new_pos = base == end ? base - 2 : base - 1;
1129
+
1130
+ /* Malayalam / Tamil do not have "half" forms or explicit virama forms.
1131
+ * The glyphs formed by 'half' are Chillus or ligated explicit viramas.
1132
+ * We want to position matra after them.
1133
+ */
1134
+ if (buffer->props.script != HB_SCRIPT_MALAYALAM && buffer->props.script != HB_SCRIPT_TAMIL)
1135
+ {
1136
+ while (new_pos > start &&
1137
+ !(is_one_of (info[new_pos], (FLAG (OT_M) | FLAG (OT_H)))))
1138
+ new_pos--;
1139
+
1140
+ /* If we found no Halant we are done.
1141
+ * Otherwise only proceed if the Halant does
1142
+ * not belong to the Matra itself! */
1143
+ if (is_halant (info[new_pos]) &&
1144
+ info[new_pos].indic_position() != POS_PRE_M)
1145
+ {
1146
+ /* -> If ZWJ or ZWNJ follow this halant, position is moved after it. */
1147
+ if (new_pos + 1 < end && is_joiner (info[new_pos + 1]))
1148
+ new_pos++;
1149
+ }
1150
+ else
1151
+ new_pos = start; /* No move. */
1152
+ }
1153
+
1154
+ if (start < new_pos && info[new_pos].indic_position () != POS_PRE_M)
1155
+ {
1156
+ /* Now go see if there's actually any matras... */
1157
+ for (unsigned int i = new_pos; i > start; i--)
1158
+ if (info[i - 1].indic_position () == POS_PRE_M)
1159
+ {
1160
+ unsigned int old_pos = i - 1;
1161
+ if (old_pos < base && base <= new_pos) /* Shouldn't actually happen. */
1162
+ base--;
1163
+
1164
+ hb_glyph_info_t tmp = info[old_pos];
1165
+ memmove (&info[old_pos], &info[old_pos + 1], (new_pos - old_pos) * sizeof (info[0]));
1166
+ info[new_pos] = tmp;
1167
+
1168
+ /* Note: this merge_clusters() is intentionally *after* the reordering.
1169
+ * Indic matra reordering is special and tricky... */
1170
+ buffer->merge_clusters (new_pos, MIN (end, base + 1));
1171
+
1172
+ new_pos--;
1173
+ }
1174
+ } else {
1175
+ for (unsigned int i = start; i < base; i++)
1176
+ if (info[i].indic_position () == POS_PRE_M) {
1177
+ buffer->merge_clusters (i, MIN (end, base + 1));
1178
+ break;
1179
+ }
1180
+ }
1181
+ }
1182
+
1183
+
1184
+ /* o Reorder reph:
1185
+ *
1186
+ * Reph’s original position is always at the beginning of the syllable,
1187
+ * (i.e. it is not reordered at the character reordering stage). However,
1188
+ * it will be reordered according to the basic-forms shaping results.
1189
+ * Possible positions for reph, depending on the script, are; after main,
1190
+ * before post-base consonant forms, and after post-base consonant forms.
1191
+ */
1192
+
1193
+ /* Two cases:
1194
+ *
1195
+ * - If repha is encoded as a sequence of characters (Ra,H or Ra,H,ZWJ), then
1196
+ * we should only move it if the sequence ligated to the repha form.
1197
+ *
1198
+ * - If repha is encoded separately and in the logical position, we should only
1199
+ * move it if it did NOT ligate. If it ligated, it's probably the font trying
1200
+ * to make it work without the reordering.
1201
+ */
1202
+ if (start + 1 < end &&
1203
+ info[start].indic_position() == POS_RA_TO_BECOME_REPH &&
1204
+ ((info[start].indic_category() == OT_Repha) ^
1205
+ _hb_glyph_info_ligated_and_didnt_multiply (&info[start])))
1206
+ {
1207
+ unsigned int new_reph_pos;
1208
+ reph_position_t reph_pos = indic_plan->config->reph_pos;
1209
+
1210
+ /* 1. If reph should be positioned after post-base consonant forms,
1211
+ * proceed to step 5.
1212
+ */
1213
+ if (reph_pos == REPH_POS_AFTER_POST)
1214
+ {
1215
+ goto reph_step_5;
1216
+ }
1217
+
1218
+ /* 2. If the reph repositioning class is not after post-base: target
1219
+ * position is after the first explicit halant glyph between the
1220
+ * first post-reph consonant and last main consonant. If ZWJ or ZWNJ
1221
+ * are following this halant, position is moved after it. If such
1222
+ * position is found, this is the target position. Otherwise,
1223
+ * proceed to the next step.
1224
+ *
1225
+ * Note: in old-implementation fonts, where classifications were
1226
+ * fixed in shaping engine, there was no case where reph position
1227
+ * will be found on this step.
1228
+ */
1229
+ {
1230
+ new_reph_pos = start + 1;
1231
+ while (new_reph_pos < base && !is_halant (info[new_reph_pos]))
1232
+ new_reph_pos++;
1233
+
1234
+ if (new_reph_pos < base && is_halant (info[new_reph_pos]))
1235
+ {
1236
+ /* ->If ZWJ or ZWNJ are following this halant, position is moved after it. */
1237
+ if (new_reph_pos + 1 < base && is_joiner (info[new_reph_pos + 1]))
1238
+ new_reph_pos++;
1239
+ goto reph_move;
1240
+ }
1241
+ }
1242
+
1243
+ /* 3. If reph should be repositioned after the main consonant: find the
1244
+ * first consonant not ligated with main, or find the first
1245
+ * consonant that is not a potential pre-base-reordering Ra.
1246
+ */
1247
+ if (reph_pos == REPH_POS_AFTER_MAIN)
1248
+ {
1249
+ new_reph_pos = base;
1250
+ while (new_reph_pos + 1 < end && info[new_reph_pos + 1].indic_position() <= POS_AFTER_MAIN)
1251
+ new_reph_pos++;
1252
+ if (new_reph_pos < end)
1253
+ goto reph_move;
1254
+ }
1255
+
1256
+ /* 4. If reph should be positioned before post-base consonant, find
1257
+ * first post-base classified consonant not ligated with main. If no
1258
+ * consonant is found, the target position should be before the
1259
+ * first matra, syllable modifier sign or vedic sign.
1260
+ */
1261
+ /* This is our take on what step 4 is trying to say (and failing, BADLY). */
1262
+ if (reph_pos == REPH_POS_AFTER_SUB)
1263
+ {
1264
+ new_reph_pos = base;
1265
+ while (new_reph_pos + 1 < end &&
1266
+ !( FLAG_UNSAFE (info[new_reph_pos + 1].indic_position()) & (FLAG (POS_POST_C) | FLAG (POS_AFTER_POST) | FLAG (POS_SMVD))))
1267
+ new_reph_pos++;
1268
+ if (new_reph_pos < end)
1269
+ goto reph_move;
1270
+ }
1271
+
1272
+ /* 5. If no consonant is found in steps 3 or 4, move reph to a position
1273
+ * immediately before the first post-base matra, syllable modifier
1274
+ * sign or vedic sign that has a reordering class after the intended
1275
+ * reph position. For example, if the reordering position for reph
1276
+ * is post-main, it will skip above-base matras that also have a
1277
+ * post-main position.
1278
+ */
1279
+ reph_step_5:
1280
+ {
1281
+ /* Copied from step 2. */
1282
+ new_reph_pos = start + 1;
1283
+ while (new_reph_pos < base && !is_halant (info[new_reph_pos]))
1284
+ new_reph_pos++;
1285
+
1286
+ if (new_reph_pos < base && is_halant (info[new_reph_pos]))
1287
+ {
1288
+ /* ->If ZWJ or ZWNJ are following this halant, position is moved after it. */
1289
+ if (new_reph_pos + 1 < base && is_joiner (info[new_reph_pos + 1]))
1290
+ new_reph_pos++;
1291
+ goto reph_move;
1292
+ }
1293
+ }
1294
+
1295
+ /* 6. Otherwise, reorder reph to the end of the syllable.
1296
+ */
1297
+ {
1298
+ new_reph_pos = end - 1;
1299
+ while (new_reph_pos > start && info[new_reph_pos].indic_position() == POS_SMVD)
1300
+ new_reph_pos--;
1301
+
1302
+ /*
1303
+ * If the Reph is to be ending up after a Matra,Halant sequence,
1304
+ * position it before that Halant so it can interact with the Matra.
1305
+ * However, if it's a plain Consonant,Halant we shouldn't do that.
1306
+ * Uniscribe doesn't do this.
1307
+ * TEST: U+0930,U+094D,U+0915,U+094B,U+094D
1308
+ */
1309
+ if (!hb_options ().uniscribe_bug_compatible &&
1310
+ unlikely (is_halant (info[new_reph_pos]))) {
1311
+ for (unsigned int i = base + 1; i < new_reph_pos; i++)
1312
+ if (info[i].indic_category() == OT_M) {
1313
+ /* Ok, got it. */
1314
+ new_reph_pos--;
1315
+ }
1316
+ }
1317
+ goto reph_move;
1318
+ }
1319
+
1320
+ reph_move:
1321
+ {
1322
+ /* Move */
1323
+ buffer->merge_clusters (start, new_reph_pos + 1);
1324
+ hb_glyph_info_t reph = info[start];
1325
+ memmove (&info[start], &info[start + 1], (new_reph_pos - start) * sizeof (info[0]));
1326
+ info[new_reph_pos] = reph;
1327
+
1328
+ if (start < base && base <= new_reph_pos)
1329
+ base--;
1330
+ }
1331
+ }
1332
+
1333
+
1334
+ /* o Reorder pre-base-reordering consonants:
1335
+ *
1336
+ * If a pre-base-reordering consonant is found, reorder it according to
1337
+ * the following rules:
1338
+ */
1339
+
1340
+ if (try_pref && base + 1 < end) /* Otherwise there can't be any pre-base-reordering Ra. */
1341
+ {
1342
+ for (unsigned int i = base + 1; i < end; i++)
1343
+ if ((info[i].mask & indic_plan->mask_array[PREF]) != 0)
1344
+ {
1345
+ /* 1. Only reorder a glyph produced by substitution during application
1346
+ * of the <pref> feature. (Note that a font may shape a Ra consonant with
1347
+ * the feature generally but block it in certain contexts.)
1348
+ */
1349
+ /* Note: We just check that something got substituted. We don't check that
1350
+ * the <pref> feature actually did it...
1351
+ *
1352
+ * Reorder pref only if it ligated. */
1353
+ if (_hb_glyph_info_ligated_and_didnt_multiply (&info[i]))
1354
+ {
1355
+ /*
1356
+ * 2. Try to find a target position the same way as for pre-base matra.
1357
+ * If it is found, reorder pre-base consonant glyph.
1358
+ *
1359
+ * 3. If position is not found, reorder immediately before main
1360
+ * consonant.
1361
+ */
1362
+
1363
+ unsigned int new_pos = base;
1364
+ /* Malayalam / Tamil do not have "half" forms or explicit virama forms.
1365
+ * The glyphs formed by 'half' are Chillus or ligated explicit viramas.
1366
+ * We want to position matra after them.
1367
+ */
1368
+ if (buffer->props.script != HB_SCRIPT_MALAYALAM && buffer->props.script != HB_SCRIPT_TAMIL)
1369
+ {
1370
+ while (new_pos > start &&
1371
+ !(is_one_of (info[new_pos - 1], FLAG(OT_M) | FLAG (OT_H))))
1372
+ new_pos--;
1373
+ }
1374
+
1375
+ if (new_pos > start && is_halant (info[new_pos - 1]))
1376
+ {
1377
+ /* -> If ZWJ or ZWNJ follow this halant, position is moved after it. */
1378
+ if (new_pos < end && is_joiner (info[new_pos]))
1379
+ new_pos++;
1380
+ }
1381
+
1382
+ {
1383
+ unsigned int old_pos = i;
1384
+
1385
+ buffer->merge_clusters (new_pos, old_pos + 1);
1386
+ hb_glyph_info_t tmp = info[old_pos];
1387
+ memmove (&info[new_pos + 1], &info[new_pos], (old_pos - new_pos) * sizeof (info[0]));
1388
+ info[new_pos] = tmp;
1389
+
1390
+ if (new_pos <= base && base < old_pos)
1391
+ base++;
1392
+ }
1393
+ }
1394
+
1395
+ break;
1396
+ }
1397
+ }
1398
+
1399
+
1400
+ /* Apply 'init' to the Left Matra if it's a word start. */
1401
+ if (info[start].indic_position () == POS_PRE_M)
1402
+ {
1403
+ if (!start ||
1404
+ !(FLAG_UNSAFE (_hb_glyph_info_get_general_category (&info[start - 1])) &
1405
+ FLAG_RANGE (HB_UNICODE_GENERAL_CATEGORY_FORMAT, HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK)))
1406
+ info[start].mask |= indic_plan->mask_array[INIT];
1407
+ else
1408
+ buffer->unsafe_to_break (start - 1, start + 1);
1409
+ }
1410
+
1411
+
1412
+ /*
1413
+ * Finish off the clusters and go home!
1414
+ */
1415
+ if (hb_options ().uniscribe_bug_compatible)
1416
+ {
1417
+ switch ((hb_tag_t) plan->props.script)
1418
+ {
1419
+ case HB_SCRIPT_TAMIL:
1420
+ case HB_SCRIPT_SINHALA:
1421
+ break;
1422
+
1423
+ default:
1424
+ /* Uniscribe merges the entire syllable into a single cluster... Except for Tamil & Sinhala.
1425
+ * This means, half forms are submerged into the main consonant's cluster.
1426
+ * This is unnecessary, and makes cursor positioning harder, but that's what
1427
+ * Uniscribe does. */
1428
+ buffer->merge_clusters (start, end);
1429
+ break;
1430
+ }
1431
+ }
1432
+ }
1433
+
1434
+
1435
+ static void
1436
+ final_reordering (const hb_ot_shape_plan_t *plan,
1437
+ hb_font_t *font HB_UNUSED,
1438
+ hb_buffer_t *buffer)
1439
+ {
1440
+ unsigned int count = buffer->len;
1441
+ if (unlikely (!count)) return;
1442
+
1443
+ foreach_syllable (buffer, start, end)
1444
+ final_reordering_syllable (plan, buffer, start, end);
1445
+
1446
+ HB_BUFFER_DEALLOCATE_VAR (buffer, indic_category);
1447
+ HB_BUFFER_DEALLOCATE_VAR (buffer, indic_position);
1448
+ }
1449
+
1450
+
1451
+ static void
1452
+ clear_syllables (const hb_ot_shape_plan_t *plan HB_UNUSED,
1453
+ hb_font_t *font HB_UNUSED,
1454
+ hb_buffer_t *buffer)
1455
+ {
1456
+ hb_glyph_info_t *info = buffer->info;
1457
+ unsigned int count = buffer->len;
1458
+ for (unsigned int i = 0; i < count; i++)
1459
+ info[i].syllable() = 0;
1460
+ }
1461
+
1462
+
1463
+ static bool
1464
+ decompose_indic (const hb_ot_shape_normalize_context_t *c,
1465
+ hb_codepoint_t ab,
1466
+ hb_codepoint_t *a,
1467
+ hb_codepoint_t *b)
1468
+ {
1469
+ switch (ab)
1470
+ {
1471
+ /* Don't decompose these. */
1472
+ case 0x0931u : return false; /* DEVANAGARI LETTER RRA */
1473
+ case 0x0B94u : return false; /* TAMIL LETTER AU */
1474
+
1475
+
1476
+ /*
1477
+ * Decompose split matras that don't have Unicode decompositions.
1478
+ */
1479
+
1480
+ #if 0
1481
+ /* Gujarati */
1482
+ /* This one has no decomposition in Unicode, but needs no decomposition either. */
1483
+ /* case 0x0AC9u : return false; */
1484
+
1485
+ /* Oriya */
1486
+ case 0x0B57u : *a = no decomp, -> RIGHT; return true;
1487
+ #endif
1488
+ }
1489
+
1490
+ if ((ab == 0x0DDAu || hb_in_range<hb_codepoint_t> (ab, 0x0DDCu, 0x0DDEu)))
1491
+ {
1492
+ /*
1493
+ * Sinhala split matras... Let the fun begin.
1494
+ *
1495
+ * These four characters have Unicode decompositions. However, Uniscribe
1496
+ * decomposes them "Khmer-style", that is, it uses the character itself to
1497
+ * get the second half. The first half of all four decompositions is always
1498
+ * U+0DD9.
1499
+ *
1500
+ * Now, there are buggy fonts, namely, the widely used lklug.ttf, that are
1501
+ * broken with Uniscribe. But we need to support them. As such, we only
1502
+ * do the Uniscribe-style decomposition if the character is transformed into
1503
+ * its "sec.half" form by the 'pstf' feature. Otherwise, we fall back to
1504
+ * Unicode decomposition.
1505
+ *
1506
+ * Note that we can't unconditionally use Unicode decomposition. That would
1507
+ * break some other fonts, that are designed to work with Uniscribe, and
1508
+ * don't have positioning features for the Unicode-style decomposition.
1509
+ *
1510
+ * Argh...
1511
+ *
1512
+ * The Uniscribe behavior is now documented in the newly published Sinhala
1513
+ * spec in 2012:
1514
+ *
1515
+ * http://www.microsoft.com/typography/OpenTypeDev/sinhala/intro.htm#shaping
1516
+ */
1517
+
1518
+ const indic_shape_plan_t *indic_plan = (const indic_shape_plan_t *) c->plan->data;
1519
+
1520
+ hb_codepoint_t glyph;
1521
+
1522
+ if (hb_options ().uniscribe_bug_compatible ||
1523
+ (c->font->get_nominal_glyph (ab, &glyph) &&
1524
+ indic_plan->pstf.would_substitute (&glyph, 1, c->font->face)))
1525
+ {
1526
+ /* Ok, safe to use Uniscribe-style decomposition. */
1527
+ *a = 0x0DD9u;
1528
+ *b = ab;
1529
+ return true;
1530
+ }
1531
+ }
1532
+
1533
+ return (bool) c->unicode->decompose (ab, a, b);
1534
+ }
1535
+
1536
+ static bool
1537
+ compose_indic (const hb_ot_shape_normalize_context_t *c,
1538
+ hb_codepoint_t a,
1539
+ hb_codepoint_t b,
1540
+ hb_codepoint_t *ab)
1541
+ {
1542
+ /* Avoid recomposing split matras. */
1543
+ if (HB_UNICODE_GENERAL_CATEGORY_IS_MARK (c->unicode->general_category (a)))
1544
+ return false;
1545
+
1546
+ /* Composition-exclusion exceptions that we want to recompose. */
1547
+ if (a == 0x09AFu && b == 0x09BCu) { *ab = 0x09DFu; return true; }
1548
+
1549
+ return (bool) c->unicode->compose (a, b, ab);
1550
+ }
1551
+
1552
+
1553
+ const hb_ot_complex_shaper_t _hb_ot_complex_shaper_indic =
1554
+ {
1555
+ collect_features_indic,
1556
+ override_features_indic,
1557
+ data_create_indic,
1558
+ data_destroy_indic,
1559
+ nullptr, /* preprocess_text */
1560
+ nullptr, /* postprocess_glyphs */
1561
+ HB_OT_SHAPE_NORMALIZATION_MODE_COMPOSED_DIACRITICS_NO_SHORT_CIRCUIT,
1562
+ decompose_indic,
1563
+ compose_indic,
1564
+ setup_masks_indic,
1565
+ nullptr, /* disable_otl */
1566
+ nullptr, /* reorder_marks */
1567
+ HB_OT_SHAPE_ZERO_WIDTH_MARKS_NONE,
1568
+ false, /* fallback_position */
1569
+ };