From 8d1b000a3edc90c12267b836b4ef3f81c0e53edc Mon Sep 17 00:00:00 2001 From: Khaled Hosny Date: Tue, 1 Mar 2022 21:27:32 +0200 Subject: [PATCH] 4.0.0 --- NEWS | 92 +++++++++++++++++++++++++++++++++++++++++- configure.ac | 2 +- docs/harfbuzz-docs.xml | 1 + meson.build | 2 +- src/hb-buffer.h | 4 +- src/hb-draw.cc | 20 ++++----- src/hb-draw.h | 24 +++++------ src/hb-font.cc | 2 +- src/hb-font.h | 4 +- src/hb-ot-layout.cc | 4 +- src/hb-ot-layout.h | 4 +- src/hb-ot-metrics.cc | 2 +- src/hb-subset-plan.cc | 16 ++++---- src/hb-subset.cc | 2 +- src/hb-version.h | 6 +-- 15 files changed, 138 insertions(+), 47 deletions(-) diff --git a/NEWS b/NEWS index 80ea0f0ee..b6028968a 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,93 @@ +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 3.4.0 Sunday, February 13, 2022 ==================================== @@ -18,7 +108,7 @@ Sunday, February 13, 2022 +HB_OT_TAG_MATH_SCRIPT +HB_SCRIPT_MATH +hb_ot_math_kern_entry_t -+hb_ot_math_get_glyph_kernings ++hb_ot_math_get_glyph_kernings() - Deprecated API +HB_OT_MATH_SCRIPT diff --git a/configure.ac b/configure.ac index 6ab272595..5b63c68c3 100644 --- a/configure.ac +++ b/configure.ac @@ -1,6 +1,6 @@ AC_PREREQ([2.64]) AC_INIT([HarfBuzz], - [3.4.0], + [4.0.0], [https://github.com/harfbuzz/harfbuzz/issues/new], [harfbuzz], [http://harfbuzz.org/]) diff --git a/docs/harfbuzz-docs.xml b/docs/harfbuzz-docs.xml index 75c5e049a..bb94611c3 100644 --- a/docs/harfbuzz-docs.xml +++ b/docs/harfbuzz-docs.xml @@ -117,6 +117,7 @@ API Index Index of deprecated API + Index of new symbols in 4.0.0 Index of new symbols in 3.4.0 Index of new symbols in 3.3.0 Index of new symbols in 3.1.0 diff --git a/meson.build b/meson.build index 27cd3daa9..17fb837a3 100644 --- a/meson.build +++ b/meson.build @@ -1,6 +1,6 @@ project('harfbuzz', 'c', 'cpp', meson_version: '>= 0.55.0', - version: '3.4.0', + version: '4.0.0', default_options: [ 'cpp_rtti=false', # Just to support msvc, we are passing -fno-exceptions also anyway 'cpp_std=c++11', diff --git a/src/hb-buffer.h b/src/hb-buffer.h index 8e73a090e..ece7d2d8c 100644 --- a/src/hb-buffer.h +++ b/src/hb-buffer.h @@ -141,7 +141,7 @@ typedef struct hb_glyph_info_t { * @HB_BUFFER_FLAG_PRODUCE_UNSAFE_TO_CONCAT during * shaping, otherwise the buffer flag will not be * reliably produced. - * Since: REPLACEME + * Since: 4.0.0 * @HB_GLYPH_FLAG_DEFINED: All the currently defined flags. * * Flags for #hb_glyph_info_t. @@ -372,7 +372,7 @@ hb_buffer_guess_segment_properties (hb_buffer_t *buffer); * @HB_BUFFER_FLAG_PRODUCE_UNSAFE_TO_CONCAT: * flag indicating that the @HB_GLYPH_FLAG_UNSAFE_TO_CONCAT * glyph-flag should be produced by the shaper. By default - * it will not be produced since it incurs a cost. Since: REPLACEME + * it will not be produced since it incurs a cost. Since: 4.0.0 * * Flags for #hb_buffer_t. * diff --git a/src/hb-draw.cc b/src/hb-draw.cc index 023cb815f..b31019b07 100644 --- a/src/hb-draw.cc +++ b/src/hb-draw.cc @@ -118,7 +118,7 @@ HB_DRAW_FUNCS_IMPLEMENT_CALLBACKS * memory cannot be allocated, a special singleton #hb_draw_funcs_t object will * be returned. * - * Since: REPLACEME + * Since: 4.0.0 **/ hb_draw_funcs_t * hb_draw_funcs_create () @@ -154,7 +154,7 @@ DEFINE_NULL_INSTANCE (hb_draw_funcs_t) = * Return value: (transfer full): * The referenced #hb_draw_funcs_t. * - * Since: REPLACEME + * Since: 4.0.0 **/ hb_draw_funcs_t * hb_draw_funcs_reference (hb_draw_funcs_t *dfuncs) @@ -170,7 +170,7 @@ hb_draw_funcs_reference (hb_draw_funcs_t *dfuncs) * Decreases the reference count on @dfuncs by one. If the result is zero, then * @dfuncs and all associated resources are freed. See hb_draw_funcs_reference(). * - * Since: REPLACEME + * Since: 4.0.0 **/ void hb_draw_funcs_destroy (hb_draw_funcs_t *dfuncs) @@ -192,7 +192,7 @@ hb_draw_funcs_destroy (hb_draw_funcs_t *dfuncs) * * Makes @dfuncs object immutable. * - * Since: REPLACEME + * Since: 4.0.0 **/ void hb_draw_funcs_make_immutable (hb_draw_funcs_t *dfuncs) @@ -211,7 +211,7 @@ hb_draw_funcs_make_immutable (hb_draw_funcs_t *dfuncs) * * Return value: %true if @dfuncs is immutable, %false otherwise * - * Since: REPLACEME + * Since: 4.0.0 **/ hb_bool_t hb_draw_funcs_is_immutable (hb_draw_funcs_t *dfuncs) @@ -230,7 +230,7 @@ hb_draw_funcs_is_immutable (hb_draw_funcs_t *dfuncs) * * Perform a "move-to" draw operation. * - * Since: REPLACEME + * Since: 4.0.0 **/ void hb_draw_move_to (hb_draw_funcs_t *dfuncs, void *draw_data, @@ -251,7 +251,7 @@ hb_draw_move_to (hb_draw_funcs_t *dfuncs, void *draw_data, * * Perform a "line-to" draw operation. * - * Since: REPLACEME + * Since: 4.0.0 **/ void hb_draw_line_to (hb_draw_funcs_t *dfuncs, void *draw_data, @@ -274,7 +274,7 @@ hb_draw_line_to (hb_draw_funcs_t *dfuncs, void *draw_data, * * Perform a "quadratic-to" draw operation. * - * Since: REPLACEME + * Since: 4.0.0 **/ void hb_draw_quadratic_to (hb_draw_funcs_t *dfuncs, void *draw_data, @@ -301,7 +301,7 @@ hb_draw_quadratic_to (hb_draw_funcs_t *dfuncs, void *draw_data, * * Perform a "cubic-to" draw operation. * - * Since: REPLACEME + * Since: 4.0.0 **/ void hb_draw_cubic_to (hb_draw_funcs_t *dfuncs, void *draw_data, @@ -324,7 +324,7 @@ hb_draw_cubic_to (hb_draw_funcs_t *dfuncs, void *draw_data, * * Perform a "close-path" draw operation. * - * Since: REPLACEME + * Since: 4.0.0 **/ void hb_draw_close_path (hb_draw_funcs_t *dfuncs, void *draw_data, diff --git a/src/hb-draw.h b/src/hb-draw.h index 8627e6e9e..c45a53212 100644 --- a/src/hb-draw.h +++ b/src/hb-draw.h @@ -44,7 +44,7 @@ HB_BEGIN_DECLS * * Current drawing state. * - * Since: REPLACEME + * Since: 4.0.0 **/ typedef struct hb_draw_state_t { hb_bool_t path_open; @@ -83,7 +83,7 @@ typedef struct hb_draw_state_t { * #hb_draw_quadratic_to_func_t calls to #hb_draw_cubic_to_func_t if the * callback isn't defined. * - * Since: REPLACEME + * Since: 4.0.0 **/ typedef struct hb_draw_funcs_t hb_draw_funcs_t; @@ -101,7 +101,7 @@ typedef struct hb_draw_funcs_t hb_draw_funcs_t; * A virtual method for the #hb_draw_funcs_t to perform a "move-to" draw * operation. * - * Since: REPLACEME + * Since: 4.0.0 * **/ typedef void (*hb_draw_move_to_func_t) (hb_draw_funcs_t *dfuncs, void *draw_data, @@ -121,7 +121,7 @@ typedef void (*hb_draw_move_to_func_t) (hb_draw_funcs_t *dfuncs, void *draw_data * A virtual method for the #hb_draw_funcs_t to perform a "line-to" draw * operation. * - * Since: REPLACEME + * Since: 4.0.0 * **/ typedef void (*hb_draw_line_to_func_t) (hb_draw_funcs_t *dfuncs, void *draw_data, @@ -143,7 +143,7 @@ typedef void (*hb_draw_line_to_func_t) (hb_draw_funcs_t *dfuncs, void *draw_data * A virtual method for the #hb_draw_funcs_t to perform a "quadratic-to" draw * operation. * - * Since: REPLACEME + * Since: 4.0.0 * **/ typedef void (*hb_draw_quadratic_to_func_t) (hb_draw_funcs_t *dfuncs, void *draw_data, @@ -168,7 +168,7 @@ typedef void (*hb_draw_quadratic_to_func_t) (hb_draw_funcs_t *dfuncs, void *draw * A virtual method for the #hb_draw_funcs_t to perform a "cubic-to" draw * operation. * - * Since: REPLACEME + * Since: 4.0.0 * **/ typedef void (*hb_draw_cubic_to_func_t) (hb_draw_funcs_t *dfuncs, void *draw_data, @@ -188,7 +188,7 @@ typedef void (*hb_draw_cubic_to_func_t) (hb_draw_funcs_t *dfuncs, void *draw_dat * A virtual method for the #hb_draw_funcs_t to perform a "close-path" draw * operation. * - * Since: REPLACEME + * Since: 4.0.0 * **/ typedef void (*hb_draw_close_path_func_t) (hb_draw_funcs_t *dfuncs, void *draw_data, @@ -204,7 +204,7 @@ typedef void (*hb_draw_close_path_func_t) (hb_draw_funcs_t *dfuncs, void *draw_d * * Sets move-to callback to the draw functions object. * - * Since: REPLACEME + * Since: 4.0.0 **/ HB_EXTERN void hb_draw_funcs_set_move_to_func (hb_draw_funcs_t *dfuncs, @@ -220,7 +220,7 @@ hb_draw_funcs_set_move_to_func (hb_draw_funcs_t *dfuncs, * * Sets line-to callback to the draw functions object. * - * Since: REPLACEME + * Since: 4.0.0 **/ HB_EXTERN void hb_draw_funcs_set_line_to_func (hb_draw_funcs_t *dfuncs, @@ -236,7 +236,7 @@ hb_draw_funcs_set_line_to_func (hb_draw_funcs_t *dfuncs, * * Sets quadratic-to callback to the draw functions object. * - * Since: REPLACEME + * Since: 4.0.0 **/ HB_EXTERN void hb_draw_funcs_set_quadratic_to_func (hb_draw_funcs_t *dfuncs, @@ -252,7 +252,7 @@ hb_draw_funcs_set_quadratic_to_func (hb_draw_funcs_t *dfuncs, * * Sets cubic-to callback to the draw functions object. * - * Since: REPLACEME + * Since: 4.0.0 **/ HB_EXTERN void hb_draw_funcs_set_cubic_to_func (hb_draw_funcs_t *dfuncs, @@ -268,7 +268,7 @@ hb_draw_funcs_set_cubic_to_func (hb_draw_funcs_t *dfuncs, * * Sets close-path callback to the draw functions object. * - * Since: REPLACEME + * Since: 4.0.0 **/ HB_EXTERN void hb_draw_funcs_set_close_path_func (hb_draw_funcs_t *dfuncs, diff --git a/src/hb-font.cc b/src/hb-font.cc index 1a0858291..db05f017a 100644 --- a/src/hb-font.cc +++ b/src/hb-font.cc @@ -1310,7 +1310,7 @@ hb_font_get_glyph_from_name (hb_font_t *font, * The shape is returned by way of calls to the callsbacks of the @dfuncs * objects, with @draw_data passed to them. * - * Since: REPLACEME + * Since: 4.0.0 **/ void hb_font_get_glyph_shape (hb_font_t *font, diff --git a/src/hb-font.h b/src/hb-font.h index 2179f1838..954885753 100644 --- a/src/hb-font.h +++ b/src/hb-font.h @@ -522,7 +522,7 @@ typedef hb_bool_t (*hb_font_get_glyph_from_name_func_t) (hb_font_t *font, void * * * A virtual method for the #hb_font_funcs_t of an #hb_font_t object. * - * Since: REPLACEME + * Since: 4.0.0 * **/ typedef void (*hb_font_get_glyph_shape_func_t) (hb_font_t *font, void *font_data, @@ -798,7 +798,7 @@ hb_font_funcs_set_glyph_from_name_func (hb_font_funcs_t *ffuncs, * * Sets the implementation function for #hb_font_get_glyph_shape_func_t. * - * Since: REPLACEME + * Since: 4.0.0 **/ HB_EXTERN void hb_font_funcs_set_glyph_shape_func (hb_font_funcs_t *ffuncs, diff --git a/src/hb-ot-layout.cc b/src/hb-ot-layout.cc index 25836d7c5..07bbe3bc8 100644 --- a/src/hb-ot-layout.cc +++ b/src/hb-ot-layout.cc @@ -1974,7 +1974,7 @@ hb_ot_layout_substitute_lookup (OT::hb_ot_apply_context_t *c, * * Return value: dominant baseline tag for the @script. * - * Since: REPLACEME + * Since: 4.0.0 **/ hb_ot_layout_baseline_tag_t hb_ot_layout_get_horizontal_baseline_tag_for_script (hb_script_t script) @@ -2080,7 +2080,7 @@ hb_ot_layout_get_baseline (hb_font_t *font, * Fetches a baseline value from the face, and synthesizes * it if the font does not have it. * - * Since: REPLACEME + * Since: 4.0.0 **/ void hb_ot_layout_get_baseline_with_fallback (hb_font_t *font, diff --git a/src/hb-ot-layout.h b/src/hb-ot-layout.h index 6bc44e7d5..4edddd9e0 100644 --- a/src/hb-ot-layout.h +++ b/src/hb-ot-layout.h @@ -440,11 +440,11 @@ hb_ot_layout_feature_get_characters (hb_face_t *face, * if the direction is horizontal or vertical, respectively. * @HB_OT_LAYOUT_BASELINE_TAG_IDEO_FACE_TOP_OR_RIGHT: Ideographic character face top or right edge, * if the direction is horizontal or vertical, respectively. - * @HB_OT_LAYOUT_BASELINE_TAG_IDEO_FACE_CENTRAL: The center of the ideographic character face. Since: REPLACEME + * @HB_OT_LAYOUT_BASELINE_TAG_IDEO_FACE_CENTRAL: The center of the ideographic character face. Since: 4.0.0 * @HB_OT_LAYOUT_BASELINE_TAG_IDEO_EMBOX_BOTTOM_OR_LEFT: Ideographic em-box bottom or left edge, * if the direction is horizontal or vertical, respectively. * @HB_OT_LAYOUT_BASELINE_TAG_IDEO_EMBOX_TOP_OR_RIGHT: Ideographic em-box top or right edge baseline, - * @HB_OT_LAYOUT_BASELINE_TAG_IDEO_EMBOX_CENTRAL: The center of the ideographic em-box. Since: REPLACEME + * @HB_OT_LAYOUT_BASELINE_TAG_IDEO_EMBOX_CENTRAL: The center of the ideographic em-box. Since: 4.0.0 * if the direction is horizontal or vertical, respectively. * @HB_OT_LAYOUT_BASELINE_TAG_MATH: The baseline about which mathematical characters are centered. * In vertical writing mode when mathematical characters rotated 90 degrees clockwise, are centered. diff --git a/src/hb-ot-metrics.cc b/src/hb-ot-metrics.cc index 79aa682aa..43c3cbd41 100644 --- a/src/hb-ot-metrics.cc +++ b/src/hb-ot-metrics.cc @@ -247,7 +247,7 @@ hb_ot_metrics_get_position (hb_font_t *font, * Fetches metrics value corresponding to @metrics_tag from @font, * and synthesizes a value if it the value is missing in the font. * - * Since: REPLACEME + * Since: 4.0.0 **/ void hb_ot_metrics_get_position_with_fallback (hb_font_t *font, diff --git a/src/hb-subset-plan.cc b/src/hb-subset-plan.cc index 8f737ca79..448175841 100644 --- a/src/hb-subset-plan.cc +++ b/src/hb-subset-plan.cc @@ -470,7 +470,7 @@ _nameid_closure (hb_face_t *face, * hb_subset_plan_destroy(). If there is a failure creating the plan * nullptr will be returned. * - * Since: REPLACEME + * Since: 4.0.0 **/ hb_subset_plan_t * hb_subset_plan_create_or_fail (hb_face_t *face, @@ -548,7 +548,7 @@ hb_subset_plan_create_or_fail (hb_face_t *face, * Decreases the reference count on @plan, and if it reaches zero, destroys * @plan, freeing all memory. * - * Since: REPLACEME + * Since: 4.0.0 **/ void hb_subset_plan_destroy (hb_subset_plan_t *plan) @@ -613,7 +613,7 @@ hb_subset_plan_destroy (hb_subset_plan_t *plan) * Return value: (transfer none): * A pointer to the #hb_map_t of the mapping. * - * Since: REPLACEME + * Since: 4.0.0 **/ const hb_map_t* hb_subset_plan_old_to_new_glyph_mapping (const hb_subset_plan_t *plan) @@ -631,7 +631,7 @@ hb_subset_plan_old_to_new_glyph_mapping (const hb_subset_plan_t *plan) * Return value: (transfer none): * A pointer to the #hb_map_t of the mapping. * - * Since: REPLACEME + * Since: 4.0.0 **/ const hb_map_t* hb_subset_plan_new_to_old_glyph_mapping (const hb_subset_plan_t *plan) @@ -649,7 +649,7 @@ hb_subset_plan_new_to_old_glyph_mapping (const hb_subset_plan_t *plan) * Return value: (transfer none): * A pointer to the #hb_map_t of the mapping. * - * Since: REPLACEME + * Since: 4.0.0 **/ const hb_map_t* hb_subset_plan_unicode_to_old_glyph_mapping (const hb_subset_plan_t *plan) @@ -665,7 +665,7 @@ hb_subset_plan_unicode_to_old_glyph_mapping (const hb_subset_plan_t *plan) * * Return value: @plan. * - * Since: REPLACEME + * Since: 4.0.0 **/ hb_subset_plan_t * hb_subset_plan_reference (hb_subset_plan_t *plan) @@ -685,7 +685,7 @@ hb_subset_plan_reference (hb_subset_plan_t *plan) * * Return value: %true if success, %false otherwise * - * Since: REPLACEME + * Since: 4.0.0 **/ hb_bool_t hb_subset_plan_set_user_data (hb_subset_plan_t *plan, @@ -707,7 +707,7 @@ hb_subset_plan_set_user_data (hb_subset_plan_t *plan, * * Return value: (transfer none): A pointer to the user data * - * Since: REPLACEME + * Since: 4.0.0 **/ void * hb_subset_plan_get_user_data (const hb_subset_plan_t *plan, diff --git a/src/hb-subset.cc b/src/hb-subset.cc index 9faac05c4..aa8f2c6fb 100644 --- a/src/hb-subset.cc +++ b/src/hb-subset.cc @@ -364,7 +364,7 @@ hb_subset_or_fail (hb_face_t *source, const hb_subset_input_t *input) * on success returns a reference to generated font subset. If the subsetting operation fails * returns nullptr. * - * Since: REPLACEME + * Since: 4.0.0 **/ hb_face_t * hb_subset_plan_execute_or_fail (hb_subset_plan_t *plan) diff --git a/src/hb-version.h b/src/hb-version.h index 1f52d9228..dd2c5288c 100644 --- a/src/hb-version.h +++ b/src/hb-version.h @@ -41,13 +41,13 @@ HB_BEGIN_DECLS * * The major component of the library version available at compile-time. */ -#define HB_VERSION_MAJOR 3 +#define HB_VERSION_MAJOR 4 /** * HB_VERSION_MINOR: * * The minor component of the library version available at compile-time. */ -#define HB_VERSION_MINOR 4 +#define HB_VERSION_MINOR 0 /** * HB_VERSION_MICRO: * @@ -60,7 +60,7 @@ HB_BEGIN_DECLS * * A string literal containing the library version available at compile-time. */ -#define HB_VERSION_STRING "3.4.0" +#define HB_VERSION_STRING "4.0.0" /** * HB_VERSION_ATLEAST: