Bot releases are visible (Hide)
Fix regressions in hb-ft font functions for FT_Face
s with transformation matrix. (Behdad Esfahbod)
The experimental hb-repacker API now supports splitting several GPOS subtable types when needed. (Garret Rieger)
The HarfBuzz extensions to OpenType font format are now opt-in behind build-time flags. (Behdad Esfahbod)
The experimental hb-subset variable fonts instantiation API can now instantiate more font tables and arbitrary axis locations. (Qunxin Liu)
Unicode 15 support. (David Corbett)
Various documentation improvements. (Behdad Esfahbod, Matthias Clasen)
The hb-view
command line tool now detects WezTerm inline images support. (Wez Furlong)
Fix FreeType and ICU dependency lookup with meson. (Xavier Claessens)
New API:
+HB_SCRIPT_KAWI
+HB_SCRIPT_NAG_MUNDARI
Published by khaledhosny about 2 years ago
More extensive buffer tracing messages. (Behdad Esfahbod)
Fix hb-ft regression in bitmap fonts rendering. (Behdad Esfahbod)
Support extension promotion of lookups in hb-subset-repacker. (Garret Rieger)
A new HB_GLYPH_FLAG_SAFE_TO_INSERT_TATWEEL
for scripts that use elongation (e.g. Arabic) to signify where it is safe to insert tatweel glyph without interrupting shaping. (Behdad Esfahbod)
Add --safe-to-insert-tatweel
to hb-shape
tool. (Behdad Esfahbod)
New API
+HB_GLYPH_FLAG_SAFE_TO_INSERT_TATWEEL
+HB_BUFFER_FLAG_PRODUCE_SAFE_TO_INSERT_TATWEEL
avar
table with hb-ft. (Behdad Esfahbod)Support fonts with more than 65535 glyphs in GDEF
, GSUB
, and GPOS
tables. This is part of boring-expansion-spec to extend OpenType in a backward-compatible way. (Behdad Esfahbod, Garret Riegerr)
Complete support for more than 65535 glyphs in glyf
table that started in 4.0.0 release. Part of boring-expansion-spec. (Behdad Esfahbod)
Support version 2 of avar
table. Part of boring-expansion-spec. (Behdad Esfahbod)
Fix mark attachment on multiple substitutions in some cases. (Behdad Esfahbod)
Fix application of calt
, rclt
, and ccmp
features to better match Uniscribe behaviour with some Arabic fonts. (Behdad Esfahbod)
Improvement to interaction between multiple cursive attachments. (Behdad Esfahbod)
Improve multiple mark interactions in Hebrew. (Behdad Esfahbod)
Implement language-specific forms in AAT shaping. (Behdad Esfahbod)
Fix variation of VORG
table. (Behdad Esfahbod)
Support for specific script tags to be retained in the subsetter, and add --layout-scripts
option to hb-subset
tool. (Garret Rieger)
Accept space as delimiter for --features
/--variations
in command line tools. (Behdad Esfahbod)
Improve subsetting of COLR
table. (Qunxin Liu)
Improved fuzzing coverage for ot-math API. (Frédéric Wang)
Fix kern
table version 2 (AAT) sanitization on 32-bit systems. (Behdad Esfahbod)
Allow negative glyph advances from graphite2
shaper. (Stephan Bergmann)
Implement loading (color) bitmap fonts with hb-ft. (Behdad Esfahbod)
Fix regression in hb-ft when changing font size. (Behdad Esfahbod)
Fix build on GCC < 7. (Kleis Auke Wolthuizen)
Dynamically load dwrite.dll on windows if directwrite
shaper is enabled. (Luca Bacci)
Provide a single-file harfbuzz-subset.cc
file for easier alternate building of hb-subset library, similar to harfbuzz.cc
. (Khaled Hosny)
New API
+HB_SUBSET_SETS_LAYOUT_SCRIPT_TAG
+hb_language_matches()
Published by khaledhosny over 2 years ago
Caching of variable fonts shaping, in particular when using HarfBuzz’s own font loading functions (ot). Bringing performance of variable shaping in par with non-variable fonts shaping. (Behdad Esfahbod)
Caching of format 2 “Contextual Substitution” and “Chained Contexts Substitution” lookups. Resulting in up to 20% speedup of lookup-heavy fonts like Gulzar or Noto Nastaliq Urdu. (Behdad Esfahbod)
Improved ANSI output from hb-view. (Behdad Esfahbod)
Support for shaping legacy, pre-OpenType, Windows 3.1-era, Arabic fonts that relied on a fixed PUA encoding. (Khaled Hosny, Behdad Esfahbod)
Sinhala script is now shaped by the USE shaper instead of “indic” one. (Behdad Esfahbod, David Corbett)
Thai shaper improvements. (David Corbett)
hb-ot-name API supports approximate BCP-47 language matching, for example asking for “en_US” in a font that has only “en” names will return them. (Behdad Esfahbod)
Optimized TrueType glyph shape loading. (Behdad Esfahbod)
Fix subsetting of HarfBuzz faces created via hb_face_create_for_tables()
. (Garret Rieger)
Add 32 bit var store support to the subsetter. (Garret Rieger)
New API
+HB_BUFFER_FLAG_DEFINED
+HB_BUFFER_SERIALIZE_FLAG_DEFINED
+hb_font_changed()
+hb_font_get_serial()
+hb_ft_hb_font_changed()
+hb_set_hash()
+hb_map_copy()
+hb_map_hash()
Major speed up in loading and subsetting fonts, especially in handling CFF table. Subsetting some fonts is now 3 times faster. (Behdad Esfahbod, Garret Rieger)
Speed up blending CFF2 table. (Behdad Esfahbod)
Speed up hb_ot_tags_from_language()
. (Behdad Esfahbod, David Corbett)
Fix USE classification of U+10A38 to fix multiple marks on single Kharoshthi base. (David Corbett)
Fix parsing of empty CFF Index. (Behdad Esfahbod)
Fix subsetting CPAL table with partial palette overlaps. (Garret Rieger)
New API
+hb_map_is_equal() (Behdad Esfahbod)
hb_blob_create_from_file_or_fail()
always returns nullptr
in case of failure and not empty blob sometimes. (Khaled Hosny)--passthrough-tables
option to hb-subset
. (Cosimo Lupo)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)
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)
Published by khaledhosny over 2 years ago
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
+hb_link_t
+hb_object_t
+hb_subset_repack_or_fail()
Published by khaledhosny over 2 years ago
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 https://github.com/be-fonts/boring-expansion-spec/issues/6 and https://github.com/be-fonts/boring-expansion-spec/issues/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:
+HB_BUFFER_FLAG_PRODUCE_UNSAFE_TO_CONCAT
+hb_var_num_t
Draw:
+hb_draw_funcs_t
+hb_draw_funcs_create()
+hb_draw_funcs_reference()
+hb_draw_funcs_destroy()
+hb_draw_funcs_is_immutable()
+hb_draw_funcs_make_immutable()
+hb_draw_move_to_func_t
+hb_draw_funcs_set_move_to_func()
+hb_draw_line_to_func_t
+hb_draw_funcs_set_line_to_func()
+hb_draw_quadratic_to_func_t
+hb_draw_funcs_set_quadratic_to_func()
+hb_draw_cubic_to_func_t
+hb_draw_funcs_set_cubic_to_func()
+hb_draw_close_path_func_t
+hb_draw_funcs_set_close_path_func()
+hb_draw_state_t
+HB_DRAW_STATE_DEFAULT
+hb_draw_move_to()
+hb_draw_line_to()
+hb_draw_quadratic_to()
+hb_draw_cubic_to()
+hb_draw_close_path()
+hb_font_get_glyph_shape_func_t
+hb_font_funcs_set_glyph_shape_func()
+hb_font_get_glyph_shape()
OpenType layout
+HB_OT_LAYOUT_BASELINE_TAG_IDEO_FACE_CENTRAL
+HB_OT_LAYOUT_BASELINE_TAG_IDEO_EMBOX_CENTRAL
+hb_ot_layout_get_horizontal_baseline_tag_for_script()
+hb_ot_layout_get_baseline_with_fallback()
Metrics:
+hb_ot_metrics_get_position_with_fallback()
Subset:
+hb_subset_plan_t
+hb_subset_plan_create_or_fail()
+hb_subset_plan_reference()
+hb_subset_plan_destroy()
+hb_subset_plan_set_user_data()
+hb_subset_plan_get_user_data()
+hb_subset_plan_execute_or_fail()
+hb_subset_plan_unicode_to_old_glyph_mapping()
+hb_subset_plan_new_to_old_glyph_mapping()
+hb_subset_plan_old_to_new_glyph_mapping()
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:
+HB_BUFFER_FLAG_VERIFY
+HB_OT_TAG_MATH_SCRIPT
+HB_SCRIPT_MATH
+hb_ot_math_kern_entry_t
+hb_ot_math_get_glyph_kernings()
Deprecated API
+HB_OT_MATH_SCRIPT
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:
+HB_GLYPH_FLAG_UNSAFE_TO_CONCAT
+hb_segment_properties_overlay()
+hb_buffer_create_similar()
+hb_font_set_synthetic_slant()
+hb_font_get_synthetic_slant()
+hb_font_get_var_coords_design()
harfbuzz
library improvements:
HB_TINY
profile. (Behdad Esfahbod)HB_NO_VERTICAL
config option. (Behdad Esfahbod)HB_CONFIG_OVERRIDE_H
for easier configuration. (Behdad Esfahbod)harfbuzz-subset
library improvements:
cmap
, loca
, and Ligature
tables. (Garret Rieger)Better offset-overflow handling in the subsetter library. (Garret Rieger)
Improved Unicode 14 properties in the USE shaper, and various other USE shaper fixes. (David Corbett)
MATH and COLR v1 tables subsetting support, and various other subsetter fixes. (Qunxin Liu)
Support for Pwo Karen / Ason Chin medial la. (Simon Cozens)
Apply GPOS positioning when substituting with morx table, if kerx is missing. (Behdad Esfahbod)
Apply calt and clig features across syllable boundaries in Indic shaper. (Behdad Esfahbod)
Meson option for enabling Graphite 2 has been renamed to graphite2.
Build and documentation fixes.
New API:
+hb_buffer_set_not_found_glyph()
+hb_buffer_get_not_found_glyph()