Skip to content
Choose a tag to compare
  • Make sure hb_blob_create_from_file_or_fail() always returns nullptr in case of failure and not empty blob sometimes. (Khaled Hosny)
  • Add --passthrough-tables option to hb-subset. (Cosimo Lupo)
  • Reinstate a pause after basic features in Khmer shaper, fixing a regression introduced in previous release. (Behdad Esfahbod)
  • Better handling of Regional_Indicator when shaped with RTL-native scripts, reverting earlier fix that caused regressions in AAT shaping. (Behdad Esfahbod)
Choose a tag to compare
  • Source code reorganization, splitting large hb-ot-layout files into smaller, per-subtable ones under OT/Layout/*. Code for more tables will follow suit in later releases. (Garret Rieger, Behdad Esfahbod)

  • Revert Indic shaper change in previous release that broke some fonts and instead make per-syllable restriction of “GSUB” application limited to script-specific Indic features, while applying them and discretionary features in one go. (Behdad Esfahbod)

  • Fix decoding of private in gvar table. (Behdad Esfahbod)

  • Fix handling of contextual lookups that delete too many glyphs. (Behdad Esfahbod)

  • Make “morx” deleted glyphs don’t block “GPOS” application. (Behdad Esfahbod)

  • Various build fixes. (Chun-wei Fan, Khaled Hosny)

  • New API
    +hb_set_next_many() (Andrew John)

Choose a tag to compare
  • Various OSS-Fuzz fixes. (Behdad Esfahbod)

  • Make fallback vertical-origin match FreeType’s. (Behdad Esfahbod)

  • Treat visible viramas like dependent vowels in USE shaper. (David Corbett)

  • Apply presentation forms features and discretionary features in one go in Indic shaper, which seems to match Uniscribe and CoreText behaviour. (Behdad Esfahbod, David Corbett)

  • Various bug fixes.

  • New API
    +hb_set_add_sorted_array() (Andrew John)

Choose a tag to compare
  • Update OpenType to AAT mappings for hist and vrtr features. (Florian Pircher)

  • Update IANA Language Subtag Registry to 2022-03-02. (David Corbett)

  • Update USE shaper to allow any non-numeric tail in a symbol cluster, and remove obsolete data overrides. (David Corbett)

  • Fix handling of baseline variations to return correctly scaled values. (Matthias Clasen)

  • A new experimental hb_subset_repack_or_fail() to repack an array of objects, eliminating offset overflows. The API is not available unless HarfBuzz is built with experimental APIs enabled. (Qunxin Liu)

  • New experimental API

Choose a tag to compare
  • New public API to create subset plan and gather information on things like glyph mappings in the final subset. The plan can then be passed on to perform the subsetting operation. (Garret Rieger)

  • Draw API for extracting glyph shapes have been extended and finalized and is no longer an experimental API. The draw API supports glyf, CFF and CFF2 glyph outlines tables, and applies variation settings set on the font as well as synthetic slant. The new public API is not backward compatible with the previous, non-public, experimental API. (Behdad Esfahbod)

  • The hb-view tool will use HarfBuzz draw API to render the glyphs instead of cairo-ft when compiled with Cairo 1.17.5 or newer, setting HB_DRAW environment variable to 1 or 0 will force using or not use the draw API, respectively. (Behdad Esfahbod)

  • The hb-shape and hb-view tools now default to using HarfBuzz’s own font loading functions (ot) instead of FreeType ones (ft). They also have a new option, --font-slant, to apply synthetic slant to the font. (Behdad Esfahbod)

  • HarfBuzz now supports more than 65535 (the OpenType limit) glyph shapes and metrics. See be-fonts/boring-expansion-spec#6 and be-fonts/boring-expansion-spec#7 for details. (Behdad Esfahbod)

  • New API to get the dominant horizontal baseline tag for a given script. (Behdad Esfahbod)

  • New API to get the baseline positions from the font, and synthesize missing ones. As well as new API to get font metrics and synthesize missing ones. (Matthias Clasen)

  • Improvements to finding dependencies on Windows when building with Visual Studio. (Chun-wei Fan)

  • New buffer flag, HB_BUFFER_FLAG_PRODUCE_UNSAFE_TO_CONCAT, that must be set during shaping for HB_GLYPH_FLAG_UNSAFE_TO_CONCAT flag to be reliably produced. This is to limit the performance hit of producing this flag to when
    it is actually needed. (Behdad Esfahbod)

  • Documentation improvements. (Matthias Clasen)

  • New API

    • General:

    • Draw:

    • OpenType layout

    • Metrics:

    • Subset:

Choose a tag to compare
  • Perform sanity checks on shaping results is now part of “harfbuzz” library and can be enabled by setting the buffer flag HB_BUFFER_FLAG_VERIFY. (Behdad Esfahbod)

  • Arabic Mark Transient Reordering Algorithm have been updated to revision 6. (Khaled Hosny)

  • ISO 15924 code for mathematical notation, ‘Zmth’, now maps to the OpenType ‘math’ tag. (Alexis King)

  • It is now possible to get at once all math kerning values for a given glyph at a given corner. (Alexis King)

  • Fix locale_t portability issues on systems the typedef’s it to a void pointer. (Behdad Esfahbod)

  • New API:

  • Deprecated API

Choose a tag to compare
  • Revert splitting of pair positioning values introduced in 3.3.0 as it proved problematic. (Behdad Esfahbod)
Choose a tag to compare

Fix heap-use-after-free in harfbuzz-subset introduced in previous release. (Garret Rieger)

Choose a tag to compare
  • Improved documentation. (Matthias Clasen)

  • Internal code cleanup, using C++ standard library more. (Behdad Esfahbod)

  • The low 16-bits of face index will be used by hb_face_create() to select a face inside a font collection file format, while the high 16-bits will be used by hb_font_create() to load the named instance. (Behdad Esfahbod)

  • Glyph positions and other font metrics now apply synthetic slant set by hb_font_set_synthetic_slant(), for improved positioning for synthetically slanted fonts. (Behdad Esfahbod)

  • Fixed unintentional locale dependency in hb_variation_to_string() for decimal point representation. (Matthias Clasen)

  • When applying pair positioning (kerning) the positioning value is split between the two sides of the pair for improved cursor positioning between such pairs. (Behdad Esfahbod)

  • Introduced new HB_GLYPH_FLAG_UNSAFE_TO_CONCAT, to be used in conjunction with HB_GLYPH_FLAG_UNSAFE_TO_BREAK for optimizing re-shaping during line breaking. Check the documentation for further details. (Behdad Esfahbod)

  • Improved handling of macrolanguages when mapping BCP 47 codes to OpenType tags. (David Corbett)

  • New API:

Choose a tag to compare

harfbuzz library improvements:

harfbuzz-subset library improvements:

  • Improved packing of cmap, loca, and Ligature tables. (Garret Rieger)
  • Significantly improved overflow-resolution strategy in the repacker. (Garret Rieger)