4.0.0
diff --git a/NEWS b/NEWS
index 80ea0f0..b602896 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 @@
+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 6ab2725..5b63c68 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 75c5e04..bb94611 100644
--- a/docs/harfbuzz-docs.xml
+++ b/docs/harfbuzz-docs.xml
@@ -117,6 +117,7 @@
<index id="api-index-full"><title>API Index</title><xi:include href="xml/api-index-full.xml"><xi:fallback /></xi:include></index>
<index id="deprecated-api-index" role="deprecated"><title>Index of deprecated API</title><xi:include href="xml/api-index-deprecated.xml"><xi:fallback /></xi:include></index>
+ <index id="api-index-4-0-0" role="4.0.0"><title>Index of new symbols in 4.0.0</title><xi:include href="xml/api-index-4.0.0.xml"><xi:fallback /></xi:include></index>
<index id="api-index-3-4-0" role="3.4.0"><title>Index of new symbols in 3.4.0</title><xi:include href="xml/api-index-3.4.0.xml"><xi:fallback /></xi:include></index>
<index id="api-index-3-3-0" role="3.3.0"><title>Index of new symbols in 3.3.0</title><xi:include href="xml/api-index-3.3.0.xml"><xi:fallback /></xi:include></index>
<index id="api-index-3-1-0" role="3.1.0"><title>Index of new symbols in 3.1.0</title><xi:include href="xml/api-index-3.1.0.xml"><xi:fallback /></xi:include></index>
diff --git a/meson.build b/meson.build
index 27cd3da..17fb837 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 8e73a09..ece7d2d 100644
--- a/src/hb-buffer.h
+++ b/src/hb-buffer.h
@@ -141,7 +141,7 @@
* @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_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 023cb81..b31019b 100644
--- a/src/hb-draw.cc
+++ b/src/hb-draw.cc
@@ -118,7 +118,7 @@
* 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 @@
* 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 @@
* 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 @@
*
* 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 @@
*
* 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 @@
*
* 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 @@
*
* 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 @@
*
* 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 @@
*
* 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 @@
*
* 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 8627e6e..c45a532 100644
--- a/src/hb-draw.h
+++ b/src/hb-draw.h
@@ -44,7 +44,7 @@
*
* Current drawing state.
*
- * Since: REPLACEME
+ * Since: 4.0.0
**/
typedef struct hb_draw_state_t {
hb_bool_t path_open;
@@ -83,7 +83,7 @@
* #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 @@
* 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 @@
* 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 @@
* 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 @@
* 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 @@
* 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 @@
*
* 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 @@
*
* 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 @@
*
* 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 @@
*
* 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 @@
*
* 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 1a08582..db05f01 100644
--- a/src/hb-font.cc
+++ b/src/hb-font.cc
@@ -1310,7 +1310,7 @@
* 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 2179f18..9548857 100644
--- a/src/hb-font.h
+++ b/src/hb-font.h
@@ -522,7 +522,7 @@
*
* 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 @@
*
* 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 25836d7..07bbe3b 100644
--- a/src/hb-ot-layout.cc
+++ b/src/hb-ot-layout.cc
@@ -1974,7 +1974,7 @@
*
* 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 @@
* 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 6bc44e7..4edddd9 100644
--- a/src/hb-ot-layout.h
+++ b/src/hb-ot-layout.h
@@ -440,11 +440,11 @@
* 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 79aa682..43c3cbd 100644
--- a/src/hb-ot-metrics.cc
+++ b/src/hb-ot-metrics.cc
@@ -247,7 +247,7 @@
* 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 8f737ca..4481758 100644
--- a/src/hb-subset-plan.cc
+++ b/src/hb-subset-plan.cc
@@ -470,7 +470,7 @@
* 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 @@
* 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 @@
* 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 @@
* 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 @@
* 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 @@
*
* 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 @@
*
* 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 @@
*
* 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 9faac05..aa8f2c6 100644
--- a/src/hb-subset.cc
+++ b/src/hb-subset.cc
@@ -364,7 +364,7 @@
* 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 1f52d92..dd2c528 100644
--- a/src/hb-version.h
+++ b/src/hb-version.h
@@ -41,13 +41,13 @@
*
* 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 @@
*
* 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: