3.1.0
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()
Overview of changes leading to 3.0.0
Friday, September 17, 2021
====================================
- Unicode 14.0 support (David Corbett).
- The hb-subset API and the harfbuzz-subset library's ABI are now declared
stable. The harfbuzz-subset library would not have been possible without the
work of Garret Rieger and Qunxin Liu from Google Fonts, and the earlier work
of Michiharu Ariza from Adobe.
- The hb-style API is now stable and no longer experimental.
- New API:
+hb_style_tag_t
+hb_style_get_value()
+hb_subset_input_t
+hb_subset_flags_t
+hb_subset_sets_t
+hb_subset_input_create_or_fail()
+hb_subset_input_reference()
+hb_subset_input_destroy()
+hb_subset_input_set_user_data()
+hb_subset_input_get_user_data()
+hb_subset_input_unicode_set()
+hb_subset_input_glyph_set()
+hb_subset_input_set()
+hb_subset_input_get_flags()
+hb_subset_input_set_flags()
+hb_subset_or_fail()
- Removed old unstable harfbuzz-subset API:
-hb_subset_input_nameid_set()
-hb_subset_input_namelangid_set()
-hb_subset_input_layout_features_set()
-hb_subset_input_no_subset_tables_set()
-hb_subset_input_drop_tables_set()
-hb_subset_input_set_drop_hints()
-hb_subset_input_get_drop_hints()
-hb_subset_input_set_desubroutinize()
-hb_subset_input_get_desubroutinize()
-hb_subset_input_set_retain_gids()
-hb_subset_input_get_retain_gids()
-hb_subset_input_set_name_legacy()
-hb_subset_input_get_name_legacy()
-hb_subset_input_set_overlaps_flag()
-hb_subset_input_get_overlaps_flag()
-hb_subset_input_set_notdef_outline()
-hb_subset_input_get_notdef_outline()
-hb_subset_input_set_no_prune_unicode_ranges()
-hb_subset_input_get_no_prune_unicode_ranges()
-hb_subset()
Overview of changes leading to 2.9.1
Tuesday, September 7, 2021
====================================
- Final subset API is in place and if no issues are discovered, it will be the
stable subset API of HarfBuzz 3.0.0. Old API is kept to ease transition, but
will be removed in 3.0.0.
- Various fuzzer-found bug fixes.
- hb_buffer_append() now handles the pre- and post-context which previously
were left unchanged in the destination buffer.
- hb-view / hb-shape now accept following new arguments:
o --unicodes-before/after: takes a list of hex numbers that represent Unicode
codepoints.
- Undeprecated API:
hb_set_invert()
Overview of changes leading to 2.9.0
Wednesday, August 18, 2021
History Repeats Itself (Afghanistan)
====================================
- Subsetter API is being stabilized, with the first stable API to happen in
3.0.0 release (https://github.com/harfbuzz/harfbuzz/issues/3078).
- Support multiple variation axes with same tag, aka HOI.
- The “coretext” testing shaper now passes font variations to CoreText.
- hb-shape/hb-view does not break line at new lines unless text is read from
file.
- hb-view and hb-subset has a --batch now, similar to hb-shape.
- The --batch mode now uses ; as argument separator instead of : used previously.
- The --batch in hb-shape does not expect 0th argument anymore. That is, the
lines read are interpreted as argv[1:], instead of argv[0:].
- The --batch option has been undocumented. We are ready to document it; send
feedback if you find it useful.
- hb-subset got arguments revamps. Added much-requested --gids-file, --glyphs,
--glyphs-file, --unicodes-file, supporting ranges in --unicodes.
- Various bug fixes.
Overview of changes leading to 2.8.1
Tuesday, May 4, 2021
====================================
- Subsetter now fully supports GSUB/GPOS/GDEF tables (including variations); as
such, layout tables are retained by subsetter by default. (Garret Rieger, Qunxin Liu)
- Build scripts no longer check for FontConfig as HarfBuzz does not use it.
- hb-view supports iTerm2 and kitty inline image protocols (Khaled Hosny),
it can also use Chafa for terminal graphics if available (Hans Petter Jansson).
Overview of changes leading to 2.8.0
Tuesday, March 16, 2021
====================================
- Shape joining scripts other than Arabic/Syriac using the Universal Shaping Engine.
Previously these were shaped using the generalized Arabic shaper. (David Corbett)
- Fix regression in shaping of U+0B55 ORIYA SIGN OVERLINE. (David Corbett)
- Update language tags. (David Corbett)
- Variations: reduce error: do not round each interpolated delta. (Just van Rossum)
- Documentation improvements. (Khaled Hosny, Nathan Willis)
- Subsetter improvements: subsets most, if not all, lookup types now. (Garret Rieger,
Qunxin Liu)
- Fuzzer-found fixes and other improvements when memory failures happen. (Behdad)
- Removed most atomic implementations now that we have C++11 atomic impl. (Behdad)
- General codebase upkeep; using more C++11 features: constexpr constructors, etc.
(Behdad)
Changelog:
2.7.4
Fix missing --enable-introspection configure option from previous release tarball.
Documentation updates.
2.7.3
Update USE shaper to 2020-08-13 specification, and other improvements.
Don't disable liga feature in myanmar shaper, to match Uniscribe.
Improvements to language and script tags handling.
Update language system tag registry to OpenType 1.8.4
Support for serializing and deserializing Unicode buffers. Serialized buffers
are now delimited with <> or [] based on whether it is a Unicode or
glyphs buffer.
Increase buffer work limits to handle fonts with many complex lookups.
Handle more shaping operations in trace output.
Memory access fixes.
More OOM fixes.
Improved documentation.
Build system improvements.
New API:
+hb_buffer_has_positions()
+hb_buffer_serialize()
+hb_buffer_serialize_unicode()
+hb_buffer_deserialize_unicode()
> In file included from ../test/api/test-aat-layout.c:25:0:
> ../test/api/hb-test.h: In function 'hb_test_assert_blobs_equal':
> ../test/api/hb-test.h:178:5: error: 'for' loop initial declarations are only allowed in C99 or C11 mode
> for (unsigned int i = 0; i < expected_length; i++)
> ^
> ../test/api/hb-test.h:178:5: note: use option -std=c99, -std=gnu99, -std=c11 or -std=gnu11 to compile your code
Only a few pieces of software are using the ICU integration library,
these aren't the big harfbuzz users (i.e. gtk). this is intended to lessen
the impact of icu's frequent ABI breaks.
Add introspection option defaulting to ON as new pango needs this.
Overview of changes leading to 2.7.2
Saturday, August 29, 2020
====================================
- Fix a regression in the previous release that caused a crash with Kaithi.
- More OOM fixes.
The `doc' option still had the issue that gtk-doc - if already installed - will
be accidentally picked up also if the option was disabled.
Be explicit in enabling/disabling it.
ot-funcs now handles variable empty glyphs better when hvar/vvar isn't present.
Reverted a GDEF processing regression.
A couple of fixes to handle OOM better.
Overview of changes leading to 2.7.0
Saturday, July 25, 2020
====================================
- Use an implementation for round that always rounds up, some minor fluctuations
are expected on var font specially when hb-ot callback is used.
- Fix an AAT's `kerx` issue on broken rendering of Devanagari Sangam MN.
- Remove AAT's `lcar` table support from _get_ligature_carets API, not even much
use on macOS installed fonts (only two files). GDEF support is the recommended
one and expected to work properly after issues fixed two releases ago.
- Minor memory fixes to handle OOM better specially in hb-ft.
- Minor .so files versioning scheme change and remove stable/unstable scheme
differences, was never used in practice (always default to stable scheme).
- We are now suggesting careful packaging of the library using meson,
https://github.com/harfbuzz/harfbuzz/wiki/Notes-on-migration-to-meson
for more information.
- Distribution package URL is changed, either use GitHub generated tarballs,
`https://github.com/harfbuzz/harfbuzz/archive/$pkgver.tar.gz`
or, even more preferably use commit hash of the release and git checkouts like,
`git+https://github.com/harfbuzz/harfbuzz#commit=$commit`
Overview of changes leading to 2.6.8
Monday, June 22, 2020
====================================
- New API to fetch glyph alternates from GSUB table.
- hb-coretext build fix for macOS < 10.10.
- Meson build fixes, cmake port removal is postponed but please prepare for
it and give us feedback.
Autotools is still our main build system however please consider
experimenting with meson also for packaging the library.
- New API:
+hb_ot_layout_lookup_get_glyph_alternates()
Overview of changes leading to 2.6.7
Wednesday, June 3, 2020
====================================
- Update to Unicode 13.0.0.
- Fix hb_ot_layout_get_ligature_carets for fonts without lcar table, it was
completely broken for all the other fonts since 2.1.2.
- As a part of our migration to meson, this release will be the last one
to provide cmake port files but autotools still is our main build system.
There is a possibility that the next version or the after be released
using meson.
Overview of changes leading to 2.6.6
Tuesday, May 12, 2020
====================================
- A fix in AAT kerning for Geeza Pro.
- Better support for resource fork fonts on macOS.
Overview of changes leading to 2.6.5
Friday, April 17, 2020
====================================
- Add experimental meson build system. Autotools is still the primary
and supported build system.
- AAT is now always preferred for horizontal scripts when both AAT and OT
layout tables exist at the same time.
- Subsetter improvements.
- New API:
+hb_ft_font_lock_face()
+hb_ft_font_unlock_face()
Overview of changes leading to 2.6.4
Monday, October 29, 2019
====================================
- Small bug fix.
- Build fixes.
Overview of changes leading to 2.6.3
Monday, October 28, 2019
====================================
- Misc small fixes, mostly to build-related issues.
- New API:
+hb_font_get_nominal_glyphs()
Overview of changes leading to 2.6.2
Monday, September 30, 2019
====================================
- Misc small fixes, mostly to build-related issues.
Overview of changes leading to 2.6.1
Thursday, August 22, 2019
Fix regression with hb_font_create_sub_font scaling introduced in 2.6.0.
Change interpretation of font PTEM size / CoreText font size handling.
See #1484
hb-ot-font: Prefer symbol cmap subtable if present.
Apply 'dist'/'abvm'/'blwm' features to all scripts.
Drop experimental DirectWrite API.
Overview of changes leading to 2.6.0
Tuesday, August 13, 2019
====================================
- New OpenType metrics, baseline, and metadata table access APIs.
- New API to set font variations to a named-instance.
- New hb-gdi.h header and API for creating hb_face_t from HFONT.
- Amalgam: Provide a single-file harfbuzz.cc file for easier alternate building.
- More size-reduction configurable options, enabled by HB_TINY.
- New API:
+hb_font_set_var_named_instance()
+hb_gdi_face_create()
+hb_ot_layout_baseline_tag_t
+hb_ot_layout_get_baseline()
+hb_ot_meta_tag_t
+hb_ot_meta_get_entry_tags()
+hb_ot_meta_reference_entry()
+hb_ot_metrics_tag_t
+hb_ot_metrics_get_position()
+hb_ot_metrics_get_variation()
+hb_ot_metrics_get_x_variation()
+hb_ot_metrics_get_y_variation()
Changelog:
Overview of changes leading to 2.5.3
Wednesday, June 26, 2019
====================================
- Fix UCD script data for Unicode 10+ scripts. This was broken since 2.5.0.
- More optimizations for HB_TINY.
Overview of changes leading to 2.5.2
Thursday, June 20, 2019
====================================
- More hb-config.hh facilities to shrink library size, namely when built as
HB_TINY.
- New documentation of custom configurations in CONFIG.md.
- Fix build on gcc 4.8. That's supported again.
- Universal Shaping Engine improvements thanks to David Corbett.
- API Changes: Undeprecate some horizontal-kerning API and re-enable in hb-ft,
such that Type1 fonts will continue kerning.
Overview of changes leading to 2.5.1
Friday, May 31, 2019
====================================
- Fix build with various versions of Visual Studio.
- Improved documentation, thanks to Nathan Willis.
- Bugfix in subsetting glyf table.
- Improved scripts for cross-compiling for Windows using mingw.
- Rename HB_MATH_GLYPH_PART_FLAG_EXTENDER to HB_OT_MATH_GLYPH_PART_FLAG_EXTENDER.
A deprecated macro is added for backwards-compatibility.
Overview of changes leading to 2.5.0
Friday, May 24, 2019
====================================
- This release does not include much functional changes, but includes major internal
code-base changes. We now require C++11. Support for gcc 4.8 and earlier has been
dropped.
- New hb-config.hh facility for compiling smaller library for embedded and web usecases.
- New Unicode Character Databse implementation that is half the size of previously-used
UCDN.
- Subsetter improvements.
- Improved documentation, thanks to Nathan Willis.
- Misc shaping fixes.
librsvg with pango and harfbuzz with graphite2 is required for libreoffice.
librsvg-c has the problem on NetBSD and libreoffice uses internal static
harfbuzz library. Rust-based librsvg has no problem and libreoffice use
dynamic harfbuzz from fonts/harfbuzz.
Bump PKGREVISIONs.
Overview of changes leading to 2.4.0
Monday, March 25, 2019
====================================
- Unicode 12.
- Misc fixes.
- Subsetter improvements.
- New API:
HB_BUFFER_FLAG_DO_NOT_INSERT_DOTTED_CIRCLE
hb_directwrite_face_create()
Overview of changes leading to 2.3.1
Wednesday, January 30, 2019
====================================
- AAT bug fixes.
- Misc internal housekeeping cleanup.
- Fix regression on big-endian architectures. Ouch!
- Misc bug and build fixes.
- Fix subsetting of simple GSUB/GDEF.
- Merge CFF / CFF2 support contributed by Adobe. This mostly involves
the subsetter, but also get_glyph_extents on CFF fonts.
Overview of changes leading to 2.2.0
Thursday, November 29, 2018
====================================
- Misc shaping bug fixes.
- Add font variations named-instance API.
- Deprecate font variations axis enumeration API and add replacement.
- AAT shaping improvements:
o Fixed 'kern' table Format 2 implementation.
o Implement 'feat' table API for feature detection.
o Blacklist 'GSUB' table of fonts from 'MUTF' foundry that also have 'morx'.
New API:
+hb_aat_layout_feature_type_t
+hb_aat_layout_feature_selector_t
+hb_aat_layout_get_feature_types()
+hb_aat_layout_feature_type_get_name_id
+hb_aat_layout_feature_selector_info_t
+HB_AAT_LAYOUT_NO_SELECTOR_INDEX
+hb_aat_layout_feature_type_get_selector_infos()
+hb_ot_var_axis_flags_t
+hb_ot_var_axis_info_t
+hb_ot_var_get_axis_infos()
+hb_ot_var_find_axis_info()
+hb_ot_var_get_named_instance_count()
+hb_ot_var_named_instance_get_subfamily_name_id()
+hb_ot_var_named_instance_get_postscript_name_id()
+hb_ot_var_named_instance_get_design_coords()
Deprecated API:
+HB_OT_VAR_NO_AXIS_INDEX
+hb_ot_var_axis_t
+hb_ot_var_get_axes()
+hb_ot_var_find_axis()
Overview of changes leading to 2.1.3
Friday, November 16, 2018
====================================
- Fix AAT 'mort' shaping, which was broken in 2.1.2
Overview of changes leading to 2.1.2
Friday, November 16, 2018
====================================
- Various internal changes.
- AAT shaping improvements:
o Implement kern table Format 1 state-machine-based kerning.
o Implement cross-stream kerning (cursive positioning, etc).
o Ignore emptyish GSUB tables (zero scripts) if morx present.
o Don't apply GPOS if morx is being applied. Matches Apple.