uharfbuzz 0.51.5__tar.gz → 0.51.6__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of uharfbuzz might be problematic. Click here for more details.

Files changed (482) hide show
  1. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/PKG-INFO +1 -1
  2. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/Color/COLR/COLR.hh +1 -1
  3. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/Layout/GPOS/ValueFormat.hh +6 -1
  4. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/glyf/SimpleGlyph.hh +1 -1
  5. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/graph/graph.hh +68 -89
  6. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/graph/gsubgpos-graph.hh +9 -0
  7. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/graph/serialize.hh +26 -15
  8. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-algs.hh +19 -0
  9. uharfbuzz-0.51.6/harfbuzz/src/hb-alloc-pool.hh +105 -0
  10. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-atomic.hh +80 -20
  11. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-bimap.hh +1 -1
  12. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-bit-page.hh +31 -0
  13. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-bit-set-invertible.hh +1 -1
  14. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-bit-set.hh +7 -6
  15. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-buffer.hh +13 -16
  16. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-config.hh +0 -1
  17. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-debug.hh +1 -1
  18. uharfbuzz-0.51.5/harfbuzz/src/hb-pool.hh → uharfbuzz-0.51.6/harfbuzz/src/hb-free-pool.hh +7 -7
  19. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-kbts.cc +2 -2
  20. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-map.hh +27 -17
  21. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-open-type.hh +29 -32
  22. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-cff1-table.hh +2 -2
  23. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-layout-common.hh +77 -83
  24. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-layout-gsubgpos.hh +5 -6
  25. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-layout.cc +17 -12
  26. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-layout.hh +3 -3
  27. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-shape.cc +48 -25
  28. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-shaper-thai.cc +1 -1
  29. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-var-common.hh +242 -217
  30. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-var-cvar-table.hh +4 -3
  31. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-var-gvar-table.hh +36 -51
  32. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-repacker.hh +11 -5
  33. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-serialize.hh +2 -2
  34. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-set-digest.hh +3 -3
  35. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-subset-instancer-iup.cc +75 -46
  36. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-subset-instancer-iup.hh +15 -0
  37. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-subset-plan-layout.cc +40 -2
  38. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-subset-plan-member-list.hh +4 -0
  39. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-subset-plan.cc +11 -2
  40. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-subset.h +5 -0
  41. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-vector.hh +65 -24
  42. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-version.h +3 -3
  43. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb.hh +1 -0
  44. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/test-repacker.cc +68 -51
  45. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/test-tuple-varstore.cc +2 -1
  46. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/src/uharfbuzz/_version.py +3 -3
  47. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/src/uharfbuzz.egg-info/PKG-INFO +1 -1
  48. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/src/uharfbuzz.egg-info/SOURCES.txt +2 -1
  49. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/tests/test_uharfbuzz.py +0 -17
  50. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/.coveragerc +0 -0
  51. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/.github/workflows/ci.yml +0 -0
  52. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/.gitignore +0 -0
  53. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/.gitmodules +0 -0
  54. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/.readthedocs.yml +0 -0
  55. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/LICENSE +0 -0
  56. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/MANIFEST.in +0 -0
  57. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/README.md +0 -0
  58. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/docs/.gitignore +0 -0
  59. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/docs/requirements.in +0 -0
  60. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/docs/requirements.txt +0 -0
  61. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/docs/source/conf.py +0 -0
  62. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/docs/source/index.rst +0 -0
  63. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/docs/source/reference.rst +0 -0
  64. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/Color/CBDT/CBDT.hh +0 -0
  65. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/Color/COLR/colrv1-closure.hh +0 -0
  66. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/Color/CPAL/CPAL.hh +0 -0
  67. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/Color/sbix/sbix.hh +0 -0
  68. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/Color/svg/svg.hh +0 -0
  69. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/Layout/Common/Coverage.hh +0 -0
  70. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/Layout/Common/CoverageFormat1.hh +0 -0
  71. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/Layout/Common/CoverageFormat2.hh +0 -0
  72. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/Layout/Common/RangeRecord.hh +0 -0
  73. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/Layout/GDEF/GDEF.hh +0 -0
  74. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/Layout/GPOS/Anchor.hh +0 -0
  75. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/Layout/GPOS/AnchorFormat1.hh +0 -0
  76. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/Layout/GPOS/AnchorFormat2.hh +0 -0
  77. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/Layout/GPOS/AnchorFormat3.hh +0 -0
  78. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/Layout/GPOS/AnchorMatrix.hh +0 -0
  79. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/Layout/GPOS/ChainContextPos.hh +0 -0
  80. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/Layout/GPOS/Common.hh +0 -0
  81. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/Layout/GPOS/ContextPos.hh +0 -0
  82. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/Layout/GPOS/CursivePos.hh +0 -0
  83. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/Layout/GPOS/CursivePosFormat1.hh +0 -0
  84. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/Layout/GPOS/ExtensionPos.hh +0 -0
  85. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/Layout/GPOS/GPOS.hh +0 -0
  86. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/Layout/GPOS/LigatureArray.hh +0 -0
  87. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/Layout/GPOS/MarkArray.hh +0 -0
  88. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/Layout/GPOS/MarkBasePos.hh +0 -0
  89. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/Layout/GPOS/MarkBasePosFormat1.hh +0 -0
  90. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/Layout/GPOS/MarkLigPos.hh +0 -0
  91. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/Layout/GPOS/MarkLigPosFormat1.hh +0 -0
  92. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/Layout/GPOS/MarkMarkPos.hh +0 -0
  93. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/Layout/GPOS/MarkMarkPosFormat1.hh +0 -0
  94. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/Layout/GPOS/MarkRecord.hh +0 -0
  95. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/Layout/GPOS/PairPos.hh +0 -0
  96. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/Layout/GPOS/PairPosFormat1.hh +0 -0
  97. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/Layout/GPOS/PairPosFormat2.hh +0 -0
  98. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/Layout/GPOS/PairSet.hh +0 -0
  99. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/Layout/GPOS/PairValueRecord.hh +0 -0
  100. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/Layout/GPOS/PosLookup.hh +0 -0
  101. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/Layout/GPOS/PosLookupSubTable.hh +0 -0
  102. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/Layout/GPOS/SinglePos.hh +0 -0
  103. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/Layout/GPOS/SinglePosFormat1.hh +0 -0
  104. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/Layout/GPOS/SinglePosFormat2.hh +0 -0
  105. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/Layout/GSUB/AlternateSet.hh +0 -0
  106. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/Layout/GSUB/AlternateSubst.hh +0 -0
  107. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/Layout/GSUB/AlternateSubstFormat1.hh +0 -0
  108. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/Layout/GSUB/ChainContextSubst.hh +0 -0
  109. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/Layout/GSUB/Common.hh +0 -0
  110. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/Layout/GSUB/ContextSubst.hh +0 -0
  111. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/Layout/GSUB/ExtensionSubst.hh +0 -0
  112. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/Layout/GSUB/GSUB.hh +0 -0
  113. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/Layout/GSUB/Ligature.hh +0 -0
  114. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/Layout/GSUB/LigatureSet.hh +0 -0
  115. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/Layout/GSUB/LigatureSubst.hh +0 -0
  116. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/Layout/GSUB/LigatureSubstFormat1.hh +0 -0
  117. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/Layout/GSUB/MultipleSubst.hh +0 -0
  118. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/Layout/GSUB/MultipleSubstFormat1.hh +0 -0
  119. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/Layout/GSUB/ReverseChainSingleSubst.hh +0 -0
  120. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/Layout/GSUB/ReverseChainSingleSubstFormat1.hh +0 -0
  121. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/Layout/GSUB/Sequence.hh +0 -0
  122. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/Layout/GSUB/SingleSubst.hh +0 -0
  123. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/Layout/GSUB/SingleSubstFormat1.hh +0 -0
  124. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/Layout/GSUB/SingleSubstFormat2.hh +0 -0
  125. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/Layout/GSUB/SubstLookup.hh +0 -0
  126. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/Layout/GSUB/SubstLookupSubTable.hh +0 -0
  127. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/Layout/types.hh +0 -0
  128. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/Var/VARC/VARC.cc +0 -0
  129. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/Var/VARC/VARC.hh +0 -0
  130. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/Var/VARC/coord-setter.hh +0 -0
  131. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/glyf/CompositeGlyph.hh +0 -0
  132. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/glyf/Glyph.hh +0 -0
  133. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/glyf/GlyphHeader.hh +0 -0
  134. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/glyf/SubsetGlyph.hh +0 -0
  135. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/glyf/composite-iter.hh +0 -0
  136. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/glyf/glyf-helpers.hh +0 -0
  137. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/glyf/glyf.hh +0 -0
  138. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/glyf/loca.hh +0 -0
  139. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/glyf/path-builder.hh +0 -0
  140. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/OT/name/name.hh +0 -0
  141. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/graph/classdef-graph.hh +0 -0
  142. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/graph/coverage-graph.hh +0 -0
  143. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/graph/gsubgpos-context.cc +0 -0
  144. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/graph/gsubgpos-context.hh +0 -0
  145. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/graph/ligature-graph.hh +0 -0
  146. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/graph/markbasepos-graph.hh +0 -0
  147. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/graph/pairpos-graph.hh +0 -0
  148. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/graph/split-helpers.hh +0 -0
  149. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/graph/test-classdef-graph.cc +0 -0
  150. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/harfbuzz-subset.cc +0 -0
  151. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/harfbuzz.cc +0 -0
  152. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-aat-layout-ankr-table.hh +0 -0
  153. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-aat-layout-bsln-table.hh +0 -0
  154. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-aat-layout-common.hh +0 -0
  155. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-aat-layout-feat-table.hh +0 -0
  156. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-aat-layout-just-table.hh +0 -0
  157. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-aat-layout-kerx-table.hh +0 -0
  158. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-aat-layout-morx-table.hh +0 -0
  159. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-aat-layout-opbd-table.hh +0 -0
  160. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-aat-layout-trak-table.hh +0 -0
  161. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-aat-layout.cc +0 -0
  162. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-aat-layout.h +0 -0
  163. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-aat-layout.hh +0 -0
  164. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-aat-ltag-table.hh +0 -0
  165. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-aat-map.cc +0 -0
  166. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-aat-map.hh +0 -0
  167. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-aat.h +0 -0
  168. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-array.hh +0 -0
  169. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-bit-vector.hh +0 -0
  170. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-blob.cc +0 -0
  171. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-blob.h +0 -0
  172. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-blob.hh +0 -0
  173. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-buffer-deserialize-json.hh +0 -0
  174. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-buffer-deserialize-text-glyphs.hh +0 -0
  175. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-buffer-deserialize-text-unicode.hh +0 -0
  176. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-buffer-serialize.cc +0 -0
  177. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-buffer-verify.cc +0 -0
  178. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-buffer.cc +0 -0
  179. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-buffer.h +0 -0
  180. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-cache.hh +0 -0
  181. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-cairo-utils.cc +0 -0
  182. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-cairo-utils.hh +0 -0
  183. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-cairo.cc +0 -0
  184. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-cairo.h +0 -0
  185. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-cff-interp-common.hh +0 -0
  186. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-cff-interp-cs-common.hh +0 -0
  187. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-cff-interp-dict-common.hh +0 -0
  188. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-cff1-interp-cs.hh +0 -0
  189. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-cff2-interp-cs.hh +0 -0
  190. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-common.cc +0 -0
  191. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-common.h +0 -0
  192. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-coretext-font.cc +0 -0
  193. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-coretext-shape.cc +0 -0
  194. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-coretext.cc +0 -0
  195. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-coretext.h +0 -0
  196. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-coretext.hh +0 -0
  197. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-cplusplus.hh +0 -0
  198. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-decycler.hh +0 -0
  199. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-deprecated.h +0 -0
  200. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-directwrite-font.cc +0 -0
  201. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-directwrite-shape.cc +0 -0
  202. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-directwrite.cc +0 -0
  203. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-directwrite.h +0 -0
  204. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-directwrite.hh +0 -0
  205. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-dispatch.hh +0 -0
  206. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-draw.cc +0 -0
  207. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-draw.h +0 -0
  208. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-draw.hh +0 -0
  209. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-face-builder.cc +0 -0
  210. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-face.cc +0 -0
  211. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-face.h +0 -0
  212. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-face.hh +0 -0
  213. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-fallback-shape.cc +0 -0
  214. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-font.cc +0 -0
  215. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-font.h +0 -0
  216. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-font.hh +0 -0
  217. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-fontations.h +0 -0
  218. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ft-colr.hh +0 -0
  219. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ft.cc +0 -0
  220. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ft.h +0 -0
  221. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-gdi.cc +0 -0
  222. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-gdi.h +0 -0
  223. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-geometry.hh +0 -0
  224. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-glib.cc +0 -0
  225. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-glib.h +0 -0
  226. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-gobject-structs.cc +0 -0
  227. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-gobject-structs.h +0 -0
  228. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-gobject.h +0 -0
  229. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-graphite2.cc +0 -0
  230. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-graphite2.h +0 -0
  231. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-harfrust.cc +0 -0
  232. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-icu.cc +0 -0
  233. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-icu.h +0 -0
  234. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-iter.hh +0 -0
  235. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-kern.hh +0 -0
  236. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-limits.hh +0 -0
  237. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-machinery.hh +0 -0
  238. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-map.cc +0 -0
  239. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-map.h +0 -0
  240. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-meta.hh +0 -0
  241. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ms-feature-ranges.hh +0 -0
  242. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-multimap.hh +0 -0
  243. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-mutex.hh +0 -0
  244. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-null.hh +0 -0
  245. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-number-parser.hh +0 -0
  246. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-number.cc +0 -0
  247. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-number.hh +0 -0
  248. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-object.hh +0 -0
  249. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-open-file.hh +0 -0
  250. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-cff-common.hh +0 -0
  251. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-cff1-std-str.hh +0 -0
  252. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-cff1-table.cc +0 -0
  253. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-cff2-table.cc +0 -0
  254. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-cff2-table.hh +0 -0
  255. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-cmap-table.hh +0 -0
  256. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-color.cc +0 -0
  257. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-color.h +0 -0
  258. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-deprecated.h +0 -0
  259. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-face-table-list.hh +0 -0
  260. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-face.cc +0 -0
  261. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-face.hh +0 -0
  262. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-font.cc +0 -0
  263. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-font.h +0 -0
  264. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-gasp-table.hh +0 -0
  265. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-glyf-table.hh +0 -0
  266. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-hdmx-table.hh +0 -0
  267. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-head-table.hh +0 -0
  268. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-hhea-table.hh +0 -0
  269. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-hmtx-table.hh +0 -0
  270. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-kern-table.hh +0 -0
  271. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-layout-base-table.hh +0 -0
  272. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-layout-gdef-table.hh +0 -0
  273. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-layout-gpos-table.hh +0 -0
  274. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-layout-gsub-table.hh +0 -0
  275. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-layout-jstf-table.hh +0 -0
  276. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-layout.h +0 -0
  277. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-map.cc +0 -0
  278. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-map.hh +0 -0
  279. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-math-table.hh +0 -0
  280. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-math.cc +0 -0
  281. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-math.h +0 -0
  282. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-maxp-table.hh +0 -0
  283. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-meta-table.hh +0 -0
  284. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-meta.cc +0 -0
  285. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-meta.h +0 -0
  286. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-metrics.cc +0 -0
  287. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-metrics.h +0 -0
  288. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-metrics.hh +0 -0
  289. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-name-language-static.hh +0 -0
  290. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-name-language.hh +0 -0
  291. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-name-table.hh +0 -0
  292. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-name.cc +0 -0
  293. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-name.h +0 -0
  294. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-os2-table.hh +0 -0
  295. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-os2-unicode-ranges.hh +0 -0
  296. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-post-macroman.hh +0 -0
  297. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-post-table-v2subset.hh +0 -0
  298. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-post-table.hh +0 -0
  299. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-shape-fallback.cc +0 -0
  300. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-shape-fallback.hh +0 -0
  301. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-shape-normalize.cc +0 -0
  302. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-shape-normalize.hh +0 -0
  303. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-shape.h +0 -0
  304. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-shape.hh +0 -0
  305. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-shaper-arabic-fallback.hh +0 -0
  306. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-shaper-arabic-joining-list.hh +0 -0
  307. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-shaper-arabic-pua.hh +0 -0
  308. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-shaper-arabic-table.hh +0 -0
  309. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-shaper-arabic-win1256.hh +0 -0
  310. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-shaper-arabic.cc +0 -0
  311. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-shaper-arabic.hh +0 -0
  312. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-shaper-default.cc +0 -0
  313. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-shaper-hangul.cc +0 -0
  314. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-shaper-hebrew.cc +0 -0
  315. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-shaper-indic-machine.hh +0 -0
  316. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-shaper-indic-table.cc +0 -0
  317. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-shaper-indic.cc +0 -0
  318. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-shaper-indic.hh +0 -0
  319. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-shaper-khmer-machine.hh +0 -0
  320. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-shaper-khmer.cc +0 -0
  321. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-shaper-myanmar-machine.hh +0 -0
  322. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-shaper-myanmar.cc +0 -0
  323. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-shaper-syllabic.cc +0 -0
  324. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-shaper-syllabic.hh +0 -0
  325. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-shaper-use-machine.hh +0 -0
  326. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-shaper-use-table.hh +0 -0
  327. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-shaper-use.cc +0 -0
  328. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-shaper-vowel-constraints.cc +0 -0
  329. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-shaper-vowel-constraints.hh +0 -0
  330. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-shaper.hh +0 -0
  331. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-stat-table.hh +0 -0
  332. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-tag-table.hh +0 -0
  333. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-tag.cc +0 -0
  334. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-var-avar-table.hh +0 -0
  335. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-var-fvar-table.hh +0 -0
  336. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-var-hvar-table.hh +0 -0
  337. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-var-mvar-table.hh +0 -0
  338. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-var-varc-table.hh +0 -0
  339. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-var.cc +0 -0
  340. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-var.h +0 -0
  341. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot-vorg-table.hh +0 -0
  342. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ot.h +0 -0
  343. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-outline.cc +0 -0
  344. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-outline.hh +0 -0
  345. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-paint-bounded.cc +0 -0
  346. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-paint-bounded.hh +0 -0
  347. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-paint-extents.cc +0 -0
  348. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-paint-extents.hh +0 -0
  349. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-paint.cc +0 -0
  350. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-paint.h +0 -0
  351. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-paint.hh +0 -0
  352. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-priority-queue.hh +0 -0
  353. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-sanitize.hh +0 -0
  354. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-script-list.h +0 -0
  355. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-set.cc +0 -0
  356. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-set.h +0 -0
  357. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-set.hh +0 -0
  358. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-shape-plan.cc +0 -0
  359. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-shape-plan.h +0 -0
  360. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-shape-plan.hh +0 -0
  361. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-shape.cc +0 -0
  362. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-shape.h +0 -0
  363. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-shaper-impl.hh +0 -0
  364. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-shaper-list.hh +0 -0
  365. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-shaper.cc +0 -0
  366. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-shaper.hh +0 -0
  367. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-static.cc +0 -0
  368. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-string-array.hh +0 -0
  369. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-style.cc +0 -0
  370. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-style.h +0 -0
  371. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-subset-accelerator.hh +0 -0
  372. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-subset-cff-common.cc +0 -0
  373. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-subset-cff-common.hh +0 -0
  374. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-subset-cff1.cc +0 -0
  375. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-subset-cff2.cc +0 -0
  376. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-subset-input.cc +0 -0
  377. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-subset-input.hh +0 -0
  378. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-subset-instancer-solver.cc +0 -0
  379. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-subset-instancer-solver.hh +0 -0
  380. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-subset-plan-var.cc +0 -0
  381. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-subset-plan.hh +0 -0
  382. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-subset-serialize.cc +0 -0
  383. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-subset-serialize.h +0 -0
  384. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-subset-table-cff.cc +0 -0
  385. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-subset-table-color.cc +0 -0
  386. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-subset-table-layout.cc +0 -0
  387. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-subset-table-other.cc +0 -0
  388. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-subset-table-var.cc +0 -0
  389. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-subset-table.hh +0 -0
  390. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-subset.cc +0 -0
  391. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-subset.hh +0 -0
  392. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ucd-table.hh +0 -0
  393. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-ucd.cc +0 -0
  394. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-unicode-emoji-table.hh +0 -0
  395. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-unicode.cc +0 -0
  396. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-unicode.h +0 -0
  397. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-unicode.hh +0 -0
  398. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-uniscribe.cc +0 -0
  399. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-uniscribe.h +0 -0
  400. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-utf.hh +0 -0
  401. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-wasm-api-blob.hh +0 -0
  402. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-wasm-api-buffer.hh +0 -0
  403. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-wasm-api-common.hh +0 -0
  404. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-wasm-api-face.hh +0 -0
  405. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-wasm-api-font.hh +0 -0
  406. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-wasm-api-list.hh +0 -0
  407. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-wasm-api-shape.hh +0 -0
  408. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-wasm-api.cc +0 -0
  409. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-wasm-api.h +0 -0
  410. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-wasm-api.hh +0 -0
  411. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb-wasm-shape.cc +0 -0
  412. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/hb.h +0 -0
  413. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/main.cc +0 -0
  414. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/test-algs.cc +0 -0
  415. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/test-array.cc +0 -0
  416. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/test-bimap.cc +0 -0
  417. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/test-buffer-serialize.cc +0 -0
  418. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/test-cff.cc +0 -0
  419. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/test-decycler.cc +0 -0
  420. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/test-gpos-size-params.cc +0 -0
  421. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/test-gsub-get-alternates.cc +0 -0
  422. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/test-gsub-would-substitute.cc +0 -0
  423. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/test-item-varstore.cc +0 -0
  424. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/test-iter.cc +0 -0
  425. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/test-machinery.cc +0 -0
  426. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/test-map.cc +0 -0
  427. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/test-multimap.cc +0 -0
  428. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/test-number.cc +0 -0
  429. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/test-ot-glyphname.cc +0 -0
  430. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/test-ot-meta.cc +0 -0
  431. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/test-ot-name.cc +0 -0
  432. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/test-priority-queue.cc +0 -0
  433. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/test-serialize.cc +0 -0
  434. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/test-set.cc +0 -0
  435. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/test-subset-instancer-solver.cc +0 -0
  436. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/test-unicode-ranges.cc +0 -0
  437. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/test-use-table.cc +0 -0
  438. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/test-vector.cc +0 -0
  439. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/test.cc +0 -0
  440. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/wasm/graphite/shape.cc +0 -0
  441. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/wasm/sample/c/shape-fallback.cc +0 -0
  442. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/harfbuzz/src/wasm/sample/c/shape-ot.cc +0 -0
  443. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/pyproject.toml +0 -0
  444. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/requirements-dev.txt +0 -0
  445. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/setup.cfg +0 -0
  446. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/setup.py +0 -0
  447. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/src/uharfbuzz/__init__.py +0 -0
  448. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/src/uharfbuzz/_draw_test_funcs.cc +0 -0
  449. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/src/uharfbuzz/_harfbuzz.cpp +0 -0
  450. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/src/uharfbuzz/_harfbuzz.pyx +0 -0
  451. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/src/uharfbuzz/_harfbuzz_test.cpp +0 -0
  452. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/src/uharfbuzz/_harfbuzz_test.pyx +0 -0
  453. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/src/uharfbuzz/charfbuzz.pxd +0 -0
  454. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/src/uharfbuzz.egg-info/dependency_links.txt +0 -0
  455. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/src/uharfbuzz.egg-info/not-zip-safe +0 -0
  456. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/src/uharfbuzz.egg-info/top_level.txt +0 -0
  457. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/tests/data/AUTHORS_StixTwoMath.txt +0 -0
  458. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/tests/data/AdobeBlank.fea +0 -0
  459. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/tests/data/AdobeBlank.subset.ttf +0 -0
  460. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/tests/data/LICENSE_AdobeBlank.txt +0 -0
  461. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/tests/data/LICENSE_ChromaCheck_colr.txt +0 -0
  462. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/tests/data/LICENSE_MutatorSans.txt +0 -0
  463. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/tests/data/LICENSE_OpenSans.txt +0 -0
  464. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/tests/data/LICENSE_STIXTwoMath.txt +0 -0
  465. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/tests/data/MutatorSans-VF.subset.ttf +0 -0
  466. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/tests/data/OpenSans.subset.ttf +0 -0
  467. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/tests/data/STIXTwoMath-Regular.ttf +0 -0
  468. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/tests/data/SparseFont.ttf +0 -0
  469. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/tests/data/chromacheck-colr.ttf +0 -0
  470. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/tests/data/expected/hand-10 +0 -0
  471. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/tests/data/expected/test-10 +0 -0
  472. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/tests/data/expected/test-106 +0 -0
  473. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/tests/data/expected/test-116 +0 -0
  474. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/tests/data/expected/test-123 +0 -0
  475. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/tests/data/expected/test-154 +0 -0
  476. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/tests/data/expected/test-165 +0 -0
  477. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/tests/data/expected/test-175 +0 -0
  478. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/tests/data/expected/test-6 +0 -0
  479. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/tests/data/expected/test-92 +0 -0
  480. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/tests/data/noto_handwriting-cff2_colr_1.otf +0 -0
  481. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/tests/data/test_glyphs-glyf_colr_1.ttf +0 -0
  482. {uharfbuzz-0.51.5 → uharfbuzz-0.51.6}/tox.ini +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: uharfbuzz
3
- Version: 0.51.5
3
+ Version: 0.51.6
4
4
  Summary: Streamlined Cython bindings for the harfbuzz shaping engine
5
5
  Home-page: https://github.com/trufont/uharfbuzz
6
6
  Author: Adrien Tétar
@@ -2060,7 +2060,7 @@ struct delta_set_index_map_subset_plan_t
2060
2060
  outer_bit_count = 1;
2061
2061
  inner_bit_count = 1;
2062
2062
 
2063
- if (unlikely (!output_map.resize (map_count, false))) return false;
2063
+ if (unlikely (!output_map.resize_dirty (map_count))) return false;
2064
2064
 
2065
2065
  for (unsigned idx = 0; idx < map_count; idx++)
2066
2066
  {
@@ -58,7 +58,12 @@ struct ValueFormat : HBUINT16
58
58
 
59
59
  NumType& operator = (uint16_t i) { v = i; return *this; }
60
60
 
61
- unsigned int get_len () const { return hb_popcount ((unsigned int) *this); }
61
+ // Note: spec says skip 2 bytes per bit in the valueformat. But reports
62
+ // from Microsoft developers indicate that only the fields that are
63
+ // currently defined are counted. We don't expect any new fields to
64
+ // be added to ValueFormat. As such, we use the faster hb_popcount8
65
+ // that only processes the lowest 8 bits.
66
+ unsigned int get_len () const { return hb_popcount8 ((uint8_t) *this); }
62
67
  unsigned int get_size () const { return get_len () * Value::static_size; }
63
68
 
64
69
  hb_vector_t<unsigned> get_device_table_indices () const {
@@ -189,7 +189,7 @@ struct SimpleGlyph
189
189
 
190
190
  unsigned old_length = points.length;
191
191
  points.alloc (points.length + num_points + 4); // Allocate for phantom points, to avoid a possible copy
192
- if (unlikely (!points.resize (points.length + num_points, false))) return false;
192
+ if (unlikely (!points.resize_dirty (points.length + num_points))) return false;
193
193
  auto points_ = points.as_array ().sub_array (old_length);
194
194
  if (!phantom_only)
195
195
  hb_memset (points_.arrayZ, 0, sizeof (contour_point_t) * num_points);
@@ -470,8 +470,12 @@ struct graph_t
470
470
  num_roots_for_space_.push (1);
471
471
  bool removed_nil = false;
472
472
  vertices_.alloc (objects.length);
473
- vertices_scratch_.alloc (objects.length);
473
+ ordering_.resize (objects.length);
474
+ ordering_scratch_.alloc (objects.length);
475
+
474
476
  unsigned count = objects.length;
477
+ unsigned order = objects.length;
478
+ unsigned skip = 0;
475
479
  for (unsigned i = 0; i < count; i++)
476
480
  {
477
481
  // If this graph came from a serialization buffer object 0 is the
@@ -479,6 +483,9 @@ struct graph_t
479
483
  if (i == 0 && !objects.arrayZ[i])
480
484
  {
481
485
  removed_nil = true;
486
+ order--;
487
+ ordering_.resize(objects.length - 1);
488
+ skip++;
482
489
  continue;
483
490
  }
484
491
 
@@ -488,6 +495,12 @@ struct graph_t
488
495
 
489
496
  check_success (v->link_positions_valid (count, removed_nil));
490
497
 
498
+ // To start we set the ordering to match the provided objects
499
+ // list. Note: objects are provided to us in reverse order (ie.
500
+ // the last object is the root).
501
+ unsigned obj_idx = i - skip;
502
+ ordering_[--order] = obj_idx;
503
+
491
504
  if (!removed_nil) continue;
492
505
  // Fix indices to account for removed nil object.
493
506
  for (auto& l : v->obj.all_links_writer ()) {
@@ -508,10 +521,10 @@ struct graph_t
508
521
  }
509
522
 
510
523
  void print () const {
511
- for (int i = vertices_.length - 1; i >= 0; i--)
524
+ for (unsigned id : ordering_)
512
525
  {
513
- const auto& v = vertices_[i];
514
- printf("%d: %u [", i, (unsigned int)v.table_size());
526
+ const auto& v = vertices_[id];
527
+ printf("%u: %u [", id, (unsigned int)v.table_size());
515
528
  for (const auto &l : v.obj.real_links) {
516
529
  printf("%u, ", l.objidx);
517
530
  }
@@ -533,6 +546,7 @@ struct graph_t
533
546
  {
534
547
  return !successful ||
535
548
  vertices_.in_error () ||
549
+ ordering_.in_error() ||
536
550
  num_roots_for_space_.in_error ();
537
551
  }
538
552
 
@@ -543,10 +557,10 @@ struct graph_t
543
557
 
544
558
  unsigned root_idx () const
545
559
  {
546
- // Object graphs are in reverse order, the first object is at the end
547
- // of the vector. Since the graph is topologically sorted it's safe to
560
+ // First element of ordering_ is the root.
561
+ // Since the graph is topologically sorted it's safe to
548
562
  // assume the first object has no incoming edges.
549
- return vertices_.length - 1;
563
+ return ordering_[0];
550
564
  }
551
565
 
552
566
  const hb_serialize_context_t::object_t& object (unsigned i) const
@@ -604,55 +618,51 @@ struct graph_t
604
618
 
605
619
  hb_priority_queue_t<int64_t> queue;
606
620
  queue.alloc (vertices_.length);
607
- hb_vector_t<vertex_t> &sorted_graph = vertices_scratch_;
608
- if (unlikely (!check_success (sorted_graph.resize (vertices_.length)))) return;
609
- hb_vector_t<unsigned> id_map;
610
- if (unlikely (!check_success (id_map.resize (vertices_.length)))) return;
621
+ hb_vector_t<unsigned> &new_ordering = ordering_scratch_;
622
+ if (unlikely (!check_success (new_ordering.resize (vertices_.length)))) return;
611
623
 
612
624
  hb_vector_t<unsigned> removed_edges;
613
625
  if (unlikely (!check_success (removed_edges.resize (vertices_.length)))) return;
614
626
  update_parents ();
615
627
 
616
628
  queue.insert (root ().modified_distance (0), root_idx ());
617
- int new_id = root_idx ();
618
629
  unsigned order = 1;
630
+ unsigned pos = 0;
619
631
  while (!queue.in_error () && !queue.is_empty ())
620
632
  {
621
633
  unsigned next_id = queue.pop_minimum().second;
622
634
 
623
- sorted_graph[new_id] = std::move (vertices_[next_id]);
624
- const vertex_t& next = sorted_graph[new_id];
625
-
626
- if (unlikely (!check_success(new_id >= 0))) {
635
+ if (unlikely (!check_success(pos < new_ordering.length))) {
627
636
  // We are out of ids. Which means we've visited a node more than once.
628
637
  // This graph contains a cycle which is not allowed.
629
638
  DEBUG_MSG (SUBSET_REPACK, nullptr, "Invalid graph. Contains cycle.");
630
639
  return;
631
640
  }
632
-
633
- id_map[next_id] = new_id--;
641
+ new_ordering[pos++] = next_id;
642
+ const vertex_t& next = vertices_[next_id];
634
643
 
635
644
  for (const auto& link : next.obj.all_links ()) {
636
645
  removed_edges[link.objidx]++;
637
- if (!(vertices_[link.objidx].incoming_edges () - removed_edges[link.objidx]))
646
+ const auto& v = vertices_[link.objidx];
647
+ if (!(v.incoming_edges () - removed_edges[link.objidx]))
638
648
  // Add the order that the links were encountered to the priority.
639
649
  // This ensures that ties between priorities objects are broken in a consistent
640
650
  // way. More specifically this is set up so that if a set of objects have the same
641
651
  // distance they'll be added to the topological order in the order that they are
642
652
  // referenced from the parent object.
643
- queue.insert (vertices_[link.objidx].modified_distance (order++),
653
+ queue.insert (v.modified_distance (order++),
644
654
  link.objidx);
645
655
  }
646
656
  }
647
657
 
648
658
  check_success (!queue.in_error ());
649
- check_success (!sorted_graph.in_error ());
659
+ check_success (!new_ordering.in_error ());
650
660
 
651
- check_success (remap_all_obj_indices (id_map, &sorted_graph));
652
- vertices_ = std::move (sorted_graph);
661
+ hb_swap (ordering_, new_ordering);
653
662
 
654
- if (!check_success (new_id == -1))
663
+ if (!check_success (pos == vertices_.length)) {
655
664
  print_orphaned_nodes ();
665
+ }
656
666
  }
657
667
 
658
668
  /*
@@ -662,8 +672,8 @@ struct graph_t
662
672
  */
663
673
  void find_space_roots (hb_set_t& visited, hb_set_t& roots)
664
674
  {
665
- int root_index = (int) root_idx ();
666
- for (int i = root_index; i >= 0; i--)
675
+ unsigned root_index = root_idx ();
676
+ for (unsigned i : ordering_)
667
677
  {
668
678
  if (visited.has (i)) continue;
669
679
 
@@ -846,7 +856,6 @@ struct graph_t
846
856
  if (subgraph.in_error ())
847
857
  return false;
848
858
 
849
- unsigned original_root_idx = root_idx ();
850
859
  hb_map_t index_map;
851
860
  bool made_changes = false;
852
861
  for (auto entry : subgraph.iter ())
@@ -869,14 +878,6 @@ struct graph_t
869
878
  if (!made_changes)
870
879
  return false;
871
880
 
872
- if (original_root_idx != root_idx ()
873
- && parents.has (original_root_idx))
874
- {
875
- // If the root idx has changed since parents was determined, update root idx in parents
876
- parents.add (root_idx ());
877
- parents.del (original_root_idx);
878
- }
879
-
880
881
  auto new_subgraph =
881
882
  + subgraph.keys ()
882
883
  | hb_map([&] (uint32_t node_idx) {
@@ -1065,8 +1066,11 @@ struct graph_t
1065
1066
  distance_invalid = true;
1066
1067
 
1067
1068
  auto* clone = vertices_.push ();
1069
+ unsigned clone_idx = vertices_.length - 1;
1070
+ ordering_.push(clone_idx);
1071
+
1068
1072
  auto& child = vertices_[node_idx];
1069
- if (vertices_.in_error ()) {
1073
+ if (vertices_.in_error () || ordering_.in_error()) {
1070
1074
  return -1;
1071
1075
  }
1072
1076
 
@@ -1076,7 +1080,6 @@ struct graph_t
1076
1080
  clone->space = child.space;
1077
1081
  clone->reset_parents ();
1078
1082
 
1079
- unsigned clone_idx = vertices_.length - 2;
1080
1083
  for (const auto& l : child.obj.real_links)
1081
1084
  {
1082
1085
  clone->obj.real_links.push (l);
@@ -1091,15 +1094,6 @@ struct graph_t
1091
1094
  check_success (!clone->obj.real_links.in_error ());
1092
1095
  check_success (!clone->obj.virtual_links.in_error ());
1093
1096
 
1094
- // The last object is the root of the graph, so swap back the root to the end.
1095
- // The root's obj idx does change, however since it's root nothing else refers to it.
1096
- // all other obj idx's will be unaffected.
1097
- hb_swap (vertices_[vertices_.length - 2], *clone);
1098
-
1099
- // Since the root moved, update the parents arrays of all children on the root.
1100
- for (const auto& l : root ().obj.all_links ())
1101
- vertices_[l.objidx].remap_parent (root_idx () - 1, root_idx ());
1102
-
1103
1097
  return clone_idx;
1104
1098
  }
1105
1099
 
@@ -1249,7 +1243,10 @@ struct graph_t
1249
1243
  distance_invalid = true;
1250
1244
 
1251
1245
  auto* clone = vertices_.push ();
1252
- if (vertices_.in_error ()) {
1246
+ unsigned clone_idx = vertices_.length - 1;
1247
+ ordering_.push(clone_idx);
1248
+
1249
+ if (vertices_.in_error () || ordering_.in_error()) {
1253
1250
  return -1;
1254
1251
  }
1255
1252
 
@@ -1258,17 +1255,6 @@ struct graph_t
1258
1255
  clone->distance = 0;
1259
1256
  clone->space = 0;
1260
1257
 
1261
- unsigned clone_idx = vertices_.length - 2;
1262
-
1263
- // The last object is the root of the graph, so swap back the root to the end.
1264
- // The root's obj idx does change, however since it's root nothing else refers to it.
1265
- // all other obj idx's will be unaffected.
1266
- hb_swap (vertices_[vertices_.length - 2], *clone);
1267
-
1268
- // Since the root moved, update the parents arrays of all children on the root.
1269
- for (const auto& l : root ().obj.all_links ())
1270
- vertices_[l.objidx].remap_parent (root_idx () - 1, root_idx ());
1271
-
1272
1258
  return clone_idx;
1273
1259
  }
1274
1260
 
@@ -1430,7 +1416,8 @@ struct graph_t
1430
1416
  size_t total_size = 0;
1431
1417
  unsigned count = vertices_.length;
1432
1418
  for (unsigned i = 0; i < count; i++) {
1433
- size_t size = vertices_.arrayZ[i].obj.tail - vertices_.arrayZ[i].obj.head;
1419
+ const auto& obj = vertices_.arrayZ[i].obj;
1420
+ size_t size = obj.tail - obj.head;
1434
1421
  total_size += size;
1435
1422
  }
1436
1423
  return total_size;
@@ -1503,7 +1490,7 @@ struct graph_t
1503
1490
  if (!positions_invalid) return;
1504
1491
 
1505
1492
  unsigned current_pos = 0;
1506
- for (int i = root_idx (); i >= 0; i--)
1493
+ for (unsigned i : ordering_)
1507
1494
  {
1508
1495
  auto& v = vertices_[i];
1509
1496
  v.start = current_pos;
@@ -1535,11 +1522,11 @@ struct graph_t
1535
1522
  unsigned count = vertices_.length;
1536
1523
  for (unsigned i = 0; i < count; i++)
1537
1524
  vertices_.arrayZ[i].distance = hb_int_max (int64_t);
1538
- vertices_.tail ().distance = 0;
1525
+ vertices_[root_idx ()].distance = 0;
1539
1526
 
1540
1527
  hb_priority_queue_t<int64_t> queue;
1541
1528
  queue.alloc (count);
1542
- queue.insert (0, vertices_.length - 1);
1529
+ queue.insert (0, root_idx ());
1543
1530
 
1544
1531
  hb_vector_t<bool> visited;
1545
1532
  visited.resize (vertices_.length);
@@ -1549,22 +1536,23 @@ struct graph_t
1549
1536
  unsigned next_idx = queue.pop_minimum ().second;
1550
1537
  if (visited[next_idx]) continue;
1551
1538
  const auto& next = vertices_[next_idx];
1552
- int64_t next_distance = vertices_[next_idx].distance;
1539
+ int64_t next_distance = next.distance;
1553
1540
  visited[next_idx] = true;
1554
1541
 
1555
1542
  for (const auto& link : next.obj.all_links ())
1556
1543
  {
1557
1544
  if (visited[link.objidx]) continue;
1558
1545
 
1559
- const auto& child = vertices_.arrayZ[link.objidx].obj;
1546
+ auto& child_v = vertices_.arrayZ[link.objidx];
1547
+ const auto& child = child_v.obj;
1560
1548
  unsigned link_width = link.width ? link.width : 4; // treat virtual offsets as 32 bits wide
1561
1549
  int64_t child_weight = (child.tail - child.head) +
1562
- ((int64_t) 1 << (link_width * 8)) * (vertices_.arrayZ[link.objidx].space + 1);
1550
+ ((int64_t) 1 << (link_width * 8)) * (child_v.space + 1);
1563
1551
  int64_t child_distance = next_distance + child_weight;
1564
1552
 
1565
- if (child_distance < vertices_.arrayZ[link.objidx].distance)
1553
+ if (child_distance < child_v.distance)
1566
1554
  {
1567
- vertices_.arrayZ[link.objidx].distance = child_distance;
1555
+ child_v.distance = child_distance;
1568
1556
  queue.insert (child_distance, link.objidx);
1569
1557
  }
1570
1558
  }
@@ -1607,9 +1595,10 @@ struct graph_t
1607
1595
  if (!id_map) return;
1608
1596
  for (unsigned i : subgraph)
1609
1597
  {
1610
- unsigned num_real = vertices_[i].obj.real_links.length;
1598
+ auto& obj = vertices_[i].obj;
1599
+ unsigned num_real = obj.real_links.length;
1611
1600
  unsigned count = 0;
1612
- for (auto& link : vertices_[i].obj.all_links_writer ())
1601
+ for (auto& link : obj.all_links_writer ())
1613
1602
  {
1614
1603
  count++;
1615
1604
  const uint32_t *v;
@@ -1621,25 +1610,6 @@ struct graph_t
1621
1610
  }
1622
1611
  }
1623
1612
 
1624
- /*
1625
- * Updates all objidx's in all links using the provided mapping.
1626
- */
1627
- bool remap_all_obj_indices (const hb_vector_t<unsigned>& id_map,
1628
- hb_vector_t<vertex_t>* sorted_graph) const
1629
- {
1630
- unsigned count = sorted_graph->length;
1631
- for (unsigned i = 0; i < count; i++)
1632
- {
1633
- if (!(*sorted_graph)[i].remap_parents (id_map))
1634
- return false;
1635
- for (auto& link : sorted_graph->arrayZ[i].obj.all_links_writer ())
1636
- {
1637
- link.objidx = id_map[link.objidx];
1638
- }
1639
- }
1640
- return true;
1641
- }
1642
-
1643
1613
  /*
1644
1614
  * Finds all nodes in targets that are reachable from start_idx, nodes in visited will be skipped.
1645
1615
  * For this search the graph is treated as being undirected.
@@ -1675,7 +1645,16 @@ struct graph_t
1675
1645
  public:
1676
1646
  // TODO(garretrieger): make private, will need to move most of offset overflow code into graph.
1677
1647
  hb_vector_t<vertex_t> vertices_;
1678
- hb_vector_t<vertex_t> vertices_scratch_;
1648
+
1649
+ // Specifies the current topological ordering of this graph
1650
+ //
1651
+ // ordering_[pos] = obj index
1652
+ //
1653
+ // specifies that the 'pos'th spot is filled by the object
1654
+ // given by obj index.
1655
+ hb_vector_t<unsigned> ordering_;
1656
+ hb_vector_t<unsigned> ordering_scratch_;
1657
+
1679
1658
  private:
1680
1659
  bool parents_invalid;
1681
1660
  bool distance_invalid;
@@ -87,6 +87,12 @@ struct Lookup : public OT::Lookup
87
87
  return lookupType == extension_type (table_tag);
88
88
  }
89
89
 
90
+ bool use_mark_filtering_set () const
91
+ {
92
+ unsigned flag = lookupFlag;
93
+ return flag & 0x0010u;
94
+ }
95
+
90
96
  bool make_extension (gsubgpos_graph_context_t& c,
91
97
  unsigned this_index)
92
98
  {
@@ -220,6 +226,9 @@ struct Lookup : public OT::Lookup
220
226
  }
221
227
  hb_memcpy (buffer, v->obj.head, v->table_size());
222
228
 
229
+ if (use_mark_filtering_set ())
230
+ hb_memcpy (buffer + new_size - 2, v->obj.tail - 2, 2);
231
+
223
232
  v->obj.head = buffer;
224
233
  v->obj.tail = buffer + new_size;
225
234
 
@@ -113,7 +113,7 @@ will_overflow (graph_t& graph,
113
113
 
114
114
  hb_hashmap_t<overflow_record_t*, bool> record_set;
115
115
  const auto& vertices = graph.vertices_;
116
- for (int parent_idx = vertices.length - 1; parent_idx >= 0; parent_idx--)
116
+ for (unsigned parent_idx : graph.ordering_)
117
117
  {
118
118
  // Don't need to check virtual links for overflow
119
119
  for (const auto& link : vertices.arrayZ[parent_idx].obj.real_links)
@@ -173,6 +173,7 @@ template <typename O> inline void
173
173
  serialize_link_of_type (const hb_serialize_context_t::object_t::link_t& link,
174
174
  char* head,
175
175
  unsigned size,
176
+ const hb_vector_t<unsigned>& id_map,
176
177
  hb_serialize_context_t* c)
177
178
  {
178
179
  assert(link.position + link.width <= size);
@@ -180,9 +181,7 @@ serialize_link_of_type (const hb_serialize_context_t::object_t::link_t& link,
180
181
  OT::Offset<O>* offset = reinterpret_cast<OT::Offset<O>*> (head + link.position);
181
182
  *offset = 0;
182
183
  c->add_link (*offset,
183
- // serializer has an extra nil object at the start of the
184
- // object array. So all id's are +1 of what our id's are.
185
- link.objidx + 1,
184
+ id_map[link.objidx],
186
185
  (hb_serialize_context_t::whence_t) link.whence,
187
186
  link.bias);
188
187
  }
@@ -191,6 +190,7 @@ inline
191
190
  void serialize_link (const hb_serialize_context_t::object_t::link_t& link,
192
191
  char* head,
193
192
  unsigned size,
193
+ const hb_vector_t<unsigned>& id_map,
194
194
  hb_serialize_context_t* c)
195
195
  {
196
196
  switch (link.width)
@@ -201,21 +201,21 @@ void serialize_link (const hb_serialize_context_t::object_t::link_t& link,
201
201
  case 4:
202
202
  if (link.is_signed)
203
203
  {
204
- serialize_link_of_type<OT::HBINT32> (link, head, size, c);
204
+ serialize_link_of_type<OT::HBINT32> (link, head, size, id_map, c);
205
205
  } else {
206
- serialize_link_of_type<OT::HBUINT32> (link, head, size, c);
206
+ serialize_link_of_type<OT::HBUINT32> (link, head, size, id_map, c);
207
207
  }
208
208
  return;
209
209
  case 2:
210
210
  if (link.is_signed)
211
211
  {
212
- serialize_link_of_type<OT::HBINT16> (link, head, size, c);
212
+ serialize_link_of_type<OT::HBINT16> (link, head, size, id_map, c);
213
213
  } else {
214
- serialize_link_of_type<OT::HBUINT16> (link, head, size, c);
214
+ serialize_link_of_type<OT::HBUINT16> (link, head, size, id_map, c);
215
215
  }
216
216
  return;
217
217
  case 3:
218
- serialize_link_of_type<OT::HBUINT24> (link, head, size, c);
218
+ serialize_link_of_type<OT::HBUINT24> (link, head, size, id_map, c);
219
219
  return;
220
220
  default:
221
221
  // Unexpected link width.
@@ -241,25 +241,36 @@ inline hb_blob_t* serialize (const graph_t& graph)
241
241
 
242
242
  c.start_serialize<void> ();
243
243
  const auto& vertices = graph.vertices_;
244
- for (unsigned i = 0; i < vertices.length; i++) {
244
+
245
+ // Objects are placed in the serializer in reverse order since children need
246
+ // to be inserted before their parents.
247
+
248
+ // Maps from our obj id's to the id's used during this serialization.
249
+ hb_vector_t<unsigned> id_map;
250
+ id_map.resize(graph.ordering_.length);
251
+ for (int pos = graph.ordering_.length - 1; pos >= 0; pos--) {
252
+ unsigned i = graph.ordering_[pos];
245
253
  c.push ();
246
254
 
247
- size_t size = vertices[i].obj.tail - vertices[i].obj.head;
255
+ auto& v = vertices[i];
256
+
257
+ size_t size = v.obj.tail - v.obj.head;
258
+
248
259
  char* start = c.allocate_size <char> (size);
249
260
  if (!start) {
250
261
  DEBUG_MSG (SUBSET_REPACK, nullptr, "Buffer out of space.");
251
262
  return nullptr;
252
263
  }
253
264
 
254
- hb_memcpy (start, vertices[i].obj.head, size);
265
+ hb_memcpy (start, v.obj.head, size);
255
266
 
256
267
  // Only real links needs to be serialized.
257
- for (const auto& link : vertices[i].obj.real_links)
258
- serialize_link (link, start, size, &c);
268
+ for (const auto& link : v.obj.real_links)
269
+ serialize_link (link, start, size, id_map, &c);
259
270
 
260
271
  // All duplications are already encoded in the graph, so don't
261
272
  // enable sharing during packing.
262
- c.pop_pack (false);
273
+ id_map[i] = c.pop_pack (false);
263
274
  }
264
275
  c.end_serialize ();
265
276
 
@@ -92,6 +92,7 @@ template <typename Type>
92
92
  struct __attribute__((packed)) hb_packed_t { Type v; };
93
93
 
94
94
  #ifndef HB_FAST_NUM_ACCESS
95
+
95
96
  #if defined(__OPTIMIZE__) && \
96
97
  defined(__BYTE_ORDER) && \
97
98
  (__BYTE_ORDER == __BIG_ENDIAN || \
@@ -102,6 +103,13 @@ struct __attribute__((packed)) hb_packed_t { Type v; };
102
103
  #else
103
104
  #define HB_FAST_NUM_ACCESS 0
104
105
  #endif
106
+
107
+ // https://github.com/harfbuzz/harfbuzz/issues/5456
108
+ #if defined(__GNUC__) && !defined(__clang__) && (__GNUC__ <= 12)
109
+ #undef HB_FAST_NUM_ACCESS
110
+ #define HB_FAST_NUM_ACCESS 0
111
+ #endif
112
+
105
113
  #endif
106
114
 
107
115
  template <bool BE, typename Type, int Bytes = sizeof (Type)>
@@ -846,6 +854,17 @@ HB_FUNCOBJ (hb_clamp);
846
854
  * Bithacks.
847
855
  */
848
856
 
857
+ /* Return the number of 1 bits in a uint8_t; faster than hb_popcount() */
858
+ static inline unsigned
859
+ hb_popcount8 (uint8_t v)
860
+ {
861
+ static const uint8_t popcount4[16] = {
862
+ 0, 1, 1, 2, 1, 2, 2, 3,
863
+ 1, 2, 2, 3, 2, 3, 3, 4
864
+ };
865
+ return popcount4[v & 0xF] + popcount4[v >> 4];
866
+ }
867
+
849
868
  /* Return the number of 1 bits in v. */
850
869
  template <typename T>
851
870
  static inline unsigned int
@@ -0,0 +1,105 @@
1
+ /*
2
+ * This is part of HarfBuzz, a text shaping library.
3
+ *
4
+ * Permission is hereby granted, without written agreement and without
5
+ * license or royalty fees, to use, copy, modify, and distribute this
6
+ * software and its documentation for any purpose, provided that the
7
+ * above copyright notice and the following two paragraphs appear in
8
+ * all copies of this software.
9
+ *
10
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
11
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
12
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
13
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
14
+ * DAMAGE.
15
+ *
16
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
17
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
18
+ * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
19
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
20
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
21
+ *
22
+ * Author(s): Behdad Esfahbod
23
+ */
24
+
25
+ #ifndef HB_ALLOC_POOL_HH
26
+ #define HB_ALLOC_POOL_HH
27
+
28
+ #include "hb-vector.hh"
29
+
30
+ /* Memory pool for persistent small- to medium-sized allocations.
31
+ *
32
+ * Some AI musings on this, not necessarily true:
33
+ *
34
+ * This is a very simple implementation, but it's good enough for our
35
+ * purposes. It's not thread-safe. It's not very fast. It's not
36
+ * very memory efficient. It's not very cache efficient. It's not
37
+ * very anything efficient. But it's simple and it works. And it's
38
+ * good enough for our purposes. If you need something more
39
+ * sophisticated, use a real allocator. Or use a real language. */
40
+
41
+ struct hb_alloc_pool_t
42
+ {
43
+ unsigned ChunkSize = 65536 - 2 * sizeof (void *);
44
+
45
+ void *alloc (size_t size, unsigned alignment = 2 * sizeof (void *))
46
+ {
47
+ if (unlikely (chunks.in_error ())) return nullptr;
48
+
49
+ assert (alignment > 0);
50
+ assert (alignment <= 2 * sizeof (void *));
51
+ assert ((alignment & (alignment - 1)) == 0); /* power of two */
52
+
53
+ if (size > (ChunkSize) / 4)
54
+ {
55
+ /* Big chunk, allocate separately. */
56
+ hb_vector_t<char> chunk;
57
+ if (unlikely (!chunk.resize (size))) return nullptr;
58
+ void *ret = chunk.arrayZ;
59
+ chunks.push (std::move (chunk));
60
+ if (chunks.in_error ()) return nullptr;
61
+ if (chunks.length > 1)
62
+ {
63
+ // Bring back the previous last chunk to the end, so that
64
+ // we can continue to allocate from it.
65
+ hb_swap (chunks.arrayZ[chunks.length - 1], chunks.arrayZ[chunks.length - 2]);
66
+ }
67
+ return ret;
68
+ }
69
+
70
+ unsigned pad = current_chunk.length & (alignment - 1);
71
+ if (pad) pad = alignment - pad;
72
+
73
+ // Small chunk, allocate from the last chunk.
74
+ if (current_chunk.length < pad + size)
75
+ {
76
+ chunks.push ();
77
+ if (unlikely (chunks.in_error ())) return nullptr;
78
+ hb_vector_t<char> &chunk = chunks.arrayZ[chunks.length - 1];
79
+ if (unlikely (!chunk.resize (ChunkSize))) return nullptr;
80
+ current_chunk = chunk;
81
+ }
82
+ else
83
+ current_chunk += pad;
84
+
85
+ assert (current_chunk.length >= size);
86
+ void *ret = current_chunk.arrayZ;
87
+ current_chunk += size;
88
+ return ret;
89
+ }
90
+
91
+ void discard (void *p_, size_t size)
92
+ {
93
+ // Reclaim memory if we can.
94
+ char *p = (char *) p_;
95
+ if (current_chunk.arrayZ == p + size && current_chunk.backwards_length >= size)
96
+ current_chunk -= size;
97
+ }
98
+
99
+ private:
100
+ hb_vector_t<hb_vector_t<char>> chunks;
101
+ hb_array_t<char> current_chunk;
102
+ };
103
+
104
+
105
+ #endif /* HB_ALLOC_POOL_HH */