Closed Bug 1757738 Opened 2 years ago Closed 2 years ago

Update HarfBuzz to 4.1.0

Categories

(Core :: Graphics: Text, task, P3)

task

Tracking

()

RESOLVED FIXED
100 Branch
Tracking Status
firefox100 --- fixed

People

(Reporter: RyanVM, Assigned: RyanVM)

References

Details

(Whiteboard: [third-party-lib-audit][gfx-noted])

Attachments

(1 file)

+++ This bug was initially created as a clone of Bug #1756664 +++

Mostly filing this as a placeholder for now as we almost certainly want to let this release bake for awhile before trying to update our in-tree copy.

Overview of changes leading to 4.0.0
Tuesday, March 1, 2022

  • 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()

Overview of changes leading to 4.0.1
Friday, March 11, 2022

  • 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()

Summary: Update HarfBuzz to 4.0.0 → Update HarfBuzz to 4.0.1
Attachment #9266073 - Attachment description: Bug 1757738 - Update HarfBuzz to 4.0.0. → Bug 1757738 - Update HarfBuzz to 4.0.1. r=jfkthame

Overview of changes leading to 4.1.0
Wednesday, March 23, 2022

  • 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()

Try push:
https://treeherder.mozilla.org/jobs?repo=try&revision=3e4b246d7d2dfb997fcf0cea7d31e422ad727e01

Summary: Update HarfBuzz to 4.0.1 → Update HarfBuzz to 4.1.0
Attachment #9266073 - Attachment description: Bug 1757738 - Update HarfBuzz to 4.0.1. r=jfkthame → Bug 1757738 - Update HarfBuzz to 4.1.0. r=jfkthame
Status: NEW → RESOLVED
Closed: 2 years ago
Resolution: --- → FIXED
Target Milestone: --- → 100 Branch

Ryan, as a heads-up: it turns out this harfbuzz version regressed the rendering of the current version of Lohit Devanagari (commonly found on Linux, and potentially used elsewhere); the same issue may affect other Indic fonts as well.

This has been fixed upstream, and I expect a new release (4.1.1?) will appear shortly. But given where we are in our release cycle, I wondered whether we should back out this patch from trunk for now? I don't want us to ship this regression -- it impacts the correct readability of the text -- so we need to either take the (not-yet-formally-released) fix or a backout for Firefox 100, and we don't have much time before it goes to beta.

I'd prefer the forward fix, as the next release will also fix an emoji rendering issue on latest macOS, but that at least isn't a regression for (some people's) everyday language.

Flags: needinfo?(ryanvm)
Regressions: 1762183

(In reply to Jonathan Kew (:jfkthame) from comment #8)

Ryan, as a heads-up: it turns out this harfbuzz version regressed the rendering of the current version of Lohit Devanagari (commonly found on Linux, and potentially used elsewhere); the same issue may affect other Indic fonts as well.

Filed bug 1762183 for this.

Flags: needinfo?(ryanvm)
Blocks: 1762191
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: