diff --git a/NEWS b/NEWS
index 4e7dbe0d9..363bcaf82 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,64 @@
+Overview of changes leading to 11.0.0
+Monday, March 24, 2025
+====================================
+- There are three new font-functions implementations (integrations) in this
+ release:
+ * `hb-coretext` has gained one, calling into the CoreText library,
+ * `hb-directwrite` has gained one, calling into the DirectWrite library.
+ * `hb-fontations` has gained one, calling into the Skrifa Rust library.
+ All three are mostly useful for performance and correctness testing, but some
+ clients might find them useful.
+ An API is added to use them from a single API by providing a backend name
+ string:
+ * `hb_font_set_funcs_using()`
+- Several new APIs are added, to load a font-face using different
+ "face-loaders", and a single entry point to them all using a loader name
+ string:
+ * `hb_ft_face_create_from_file_or_fail()` and
+ `hb_ft_face_create_from_blob_or_fail()`
+ * `hb_coretext_face_create_from_file_or_fail()` and
+ `hb_coretext_face_create_from_blob_or_fail()`
+ * `hb_directwrite_face_create_from_file_or_fail()` and
+ `hb_directwrite_face_create_from_blob_or_fail()`
+ * `hb_face_create_from_file_or_fail_using()`
+- All drawing and painting operations using the default, `hb-ot` functions have
+ become memory allocation-free.
+- Several performance optimizations have been implemented.
+- Application of the `trak` table during shaping has been improved.
+- The `directwrite` shaper now supports font variations, and correctly applies
+ user features.
+- The `hb-directwrite` API and shaper has graduated from experimental.
+- Various bug fixes and other improvements.
+
+- New API:
++hb_malloc
++hb_calloc
++hb_realloc
++hb_free
++hb_face_list_loaders
++hb_face_create_or_fail_using
++hb_face_create_from_file_or_fail_using
++hb_font_list_funcs
++hb_font_set_funcs_using
++hb_coretext_face_create_from_blob_or_fail
++hb_directwrite_face_create_from_file_or_fail
++hb_directwrite_face_create_from_blob_or_fail
++hb_directwrite_font_create
++hb_directwrite_font_get_dw_font_face
++hb_directwrite_font_set_funcs
++hb_fontations_font_set_funcs
++hb_ft_face_create_from_blob_or_fail
++hb_paint_push_font_transform
++hb_paint_push_inverse_font_transform
++HB_BUFFER_CLUSTER_LEVEL_GRAPHEMES
++HB_BUFFER_CLUSTER_LEVEL_IS_MONOTONE
++HB_BUFFER_CLUSTER_LEVEL_IS_GRAPHEMES
++HB_BUFFER_CLUSTER_LEVEL_IS_CHARACTERS
+
+- Deprecated API:
++hb_directwrite_font_get_dw_font
+
+
Overview of changes leading to 10.4.0
Saturday, March 1, 2025
====================================
diff --git a/RELEASING.md b/RELEASING.md
index e510022a2..a8a6705f2 100644
--- a/RELEASING.md
+++ b/RELEASING.md
@@ -17,7 +17,7 @@
- [ ] Based on severity of changes, decide whether it's a minor or micro release number bump.
-- [ ] Search for 'XSince: REPLACEME' on the repository and replace it with the chosen version for the release, e.g. 'Since: 1.4.7'.
+- [ ] Search for 'REPLACEME' on the repository and replace it with the chosen version for the release, e.g. 'Since: 1.4.7'.
- [ ] Make sure you have correct date and new version at the top of NEWS file.
diff --git a/docs/harfbuzz-docs.xml b/docs/harfbuzz-docs.xml
index f7d24e9ad..46288de43 100644
--- a/docs/harfbuzz-docs.xml
+++ b/docs/harfbuzz-docs.xml
@@ -121,6 +121,7 @@
API Index
Index of deprecated API
+ Index of new symbols in 11.0.0
Index of new symbols in 10.4.0
Index of new symbols in 10.3.0
Index of new symbols in 10.2.0
diff --git a/meson.build b/meson.build
index 31fa1aaf1..91c94bf0a 100644
--- a/meson.build
+++ b/meson.build
@@ -1,6 +1,6 @@
project('harfbuzz', ['c', 'cpp'],
meson_version: '>= 0.55.0',
- version: '10.4.0',
+ version: '11.0.0',
default_options: [
'cpp_eh=none', # Just to support msvc, we are passing -fno-exceptions also anyway
# 'cpp_rtti=false', # Do NOT enable, wraps inherit it and ICU needs RTTI
diff --git a/src/hb-buffer.h b/src/hb-buffer.h
index 14063ccd0..705b767b6 100644
--- a/src/hb-buffer.h
+++ b/src/hb-buffer.h
@@ -473,7 +473,7 @@ typedef enum {
* Tests whether a cluster level groups cluster values into monotone order.
* Requires that the level be valid.
*
- * XSince: REPLACEME
+ * Since: 11.0.0
*/
#define HB_BUFFER_CLUSTER_LEVEL_IS_MONOTONE(level) \
((bool) ((1u << (unsigned) (level)) & \
@@ -487,7 +487,7 @@ typedef enum {
* Tests whether a cluster level groups cluster values by graphemes. Requires
* that the level be valid.
*
- * XSince: REPLACEME
+ * Since: 11.0.0
*/
#define HB_BUFFER_CLUSTER_LEVEL_IS_GRAPHEMES(level) \
((bool) ((1u << (unsigned) (level)) & \
@@ -501,7 +501,7 @@ typedef enum {
* Tests whether a cluster level does not group cluster values by graphemes.
* Requires that the level be valid.
*
- * XSince: REPLACEME
+ * Since: 11.0.0
*/
#define HB_BUFFER_CLUSTER_LEVEL_IS_CHARACTERS(level) \
((bool) ((1u << (unsigned) (level)) & \
diff --git a/src/hb-common.cc b/src/hb-common.cc
index cae073b61..16fd883d2 100644
--- a/src/hb-common.cc
+++ b/src/hb-common.cc
@@ -1226,7 +1226,7 @@ uint8_t
*
* Return value: A pointer to the allocated memory.
*
- * XSince: REPLACEME
+ * Since: 11.0.0
**/
void* hb_malloc(size_t size) { return hb_malloc_impl (size); }
@@ -1240,7 +1240,7 @@ void* hb_malloc(size_t size) { return hb_malloc_impl (size); }
*
* Return value: A pointer to the allocated memory.
*
- * XSince: REPLACEME
+ * Since: 11.0.0
**/
void* hb_calloc(size_t nmemb, size_t size) { return hb_calloc_impl (nmemb, size); }
@@ -1254,7 +1254,7 @@ void* hb_calloc(size_t nmemb, size_t size) { return hb_calloc_impl (nmemb, size)
*
* Return value: A pointer to the reallocated memory.
*
- * XSince: REPLACEME
+ * Since: 11.0.0
**/
void* hb_realloc(void *ptr, size_t size) { return hb_realloc_impl (ptr, size); }
@@ -1265,7 +1265,7 @@ void* hb_realloc(void *ptr, size_t size) { return hb_realloc_impl (ptr, size); }
* Frees the memory pointed to by @ptr, using the allocator set at
* compile-time. Typically just free().
*
- * XSince: REPLACEME
+ * Since: 11.0.0
**/
void hb_free(void *ptr) { hb_free_impl (ptr); }
diff --git a/src/hb-coretext.cc b/src/hb-coretext.cc
index 028052810..6c0525b3a 100644
--- a/src/hb-coretext.cc
+++ b/src/hb-coretext.cc
@@ -445,7 +445,7 @@ hb_coretext_face_create_from_file_or_fail (const char *file_name,
* Return value: (transfer full): The new face object, or `NULL` if
* no face is found at the specified index or the blob cannot be read.
*
- * XSince: REPLACEME
+ * Since: 11.0.0
*/
hb_face_t *
hb_coretext_face_create_from_blob_or_fail (hb_blob_t *blob,
diff --git a/src/hb-directwrite-font.cc b/src/hb-directwrite-font.cc
index 4e140b767..9752110e4 100644
--- a/src/hb-directwrite-font.cc
+++ b/src/hb-directwrite-font.cc
@@ -363,7 +363,7 @@ _hb_directwrite_get_font_funcs ()
* Note: Internally, this function creates a DirectWrite font.
*
*
- * XSince: REPLACEME
+ * Since: 11.0.0
**/
void
hb_directwrite_font_set_funcs (hb_font_t *font)
diff --git a/src/hb-directwrite.cc b/src/hb-directwrite.cc
index 4c2a8e1d6..9c4bab95d 100644
--- a/src/hb-directwrite.cc
+++ b/src/hb-directwrite.cc
@@ -239,7 +239,7 @@ hb_directwrite_face_create (IDWriteFontFace *dw_face)
* Return value: (transfer full): The new face object, or `NULL` if
* no face is found at the specified index or the file cannot be read.
*
- * XSince: REPLACEME
+ * Since: 11.0.0
*/
hb_face_t *
hb_directwrite_face_create_from_file_or_fail (const char *file_name,
@@ -266,7 +266,7 @@ hb_directwrite_face_create_from_file_or_fail (const char *file_name,
* Return value: (transfer full): The new face object, or `NULL` if
* no face is found at the specified index or the blob cannot be read.
*
- * XSince: REPLACEME
+ * Since: 11.0.0
*/
HB_EXTERN hb_face_t *
hb_directwrite_face_create_from_blob_or_fail (hb_blob_t *blob,
@@ -334,7 +334,7 @@ hb_directwrite_face_get_font_face (hb_face_t *face)
*
* Return value: #hb_font_t object corresponding to the given input
*
- * XSince: REPLACEME
+ * Since: 11.0.0
**/
hb_font_t *
hb_directwrite_font_create (IDWriteFontFace *dw_face)
@@ -389,7 +389,7 @@ hb_directwrite_font_create (IDWriteFontFace *dw_face)
*
* Return value: DirectWrite IDWriteFontFace object corresponding to the given input
*
-* XSince: REPLACEME
+* Since: 11.0.0
**/
IDWriteFontFace *
hb_directwrite_font_get_dw_font_face (hb_font_t *font)
@@ -407,7 +407,7 @@ hb_directwrite_font_get_dw_font_face (hb_font_t *font)
* Return value: Returns `NULL`.
*
* Since: 10.3.0
-* XDeprecated: REPLACEME:
+* Deprecated: 11.0.0:
**/
IDWriteFont *
hb_directwrite_font_get_dw_font (hb_font_t *font)
diff --git a/src/hb-draw.h b/src/hb-draw.h
index a213a3594..de36901e2 100644
--- a/src/hb-draw.h
+++ b/src/hb-draw.h
@@ -41,7 +41,7 @@ HB_BEGIN_DECLS
* @path_start_y: Y component of the start of current path
* @current_x: X component of current point
* @current_y: Y component of current point
- * @slant_xy: (XSince: REPLACEME): Slanting factor for synthetic oblique
+ * @slant_xy: (Since: 11.0.0): Slanting factor for synthetic oblique
*
* Current drawing state.
*
diff --git a/src/hb-face.cc b/src/hb-face.cc
index 6f593fdf4..9051247bc 100644
--- a/src/hb-face.cc
+++ b/src/hb-face.cc
@@ -395,7 +395,7 @@ static const char *get_default_loader_name ()
* Return value: (transfer full): The new face object, or `NULL` if
* the file cannot be read or the loader fails to load the face.
*
- * XSince: REPLACEME
+ * Since: 11.0.0
**/
hb_face_t *
hb_face_create_from_file_or_fail_using (const char *file_name,
@@ -445,7 +445,7 @@ retry:
* Return value: (transfer full): The new face object, or `NULL` if
* the loader fails to load the face.
*
- * XSince: REPLACEME
+ * Since: 11.0.0
**/
hb_face_t *
hb_face_create_or_fail_using (hb_blob_t *blob,
@@ -522,7 +522,7 @@ void free_static_face_loader_list ()
* constant strings. The returned array is owned by HarfBuzz
* and should not be modified or freed.
*
- * XSince: REPLACEME
+ * Since: 11.0.0
**/
const char **
hb_face_list_loaders ()
diff --git a/src/hb-font.cc b/src/hb-font.cc
index f16e4402c..b73a87048 100644
--- a/src/hb-font.cc
+++ b/src/hb-font.cc
@@ -2355,7 +2355,7 @@ static const char *get_default_funcs_name ()
*
* Return value: `true` if the font-functions was found and set, `false` otherwise
*
- * XSince: REPLACEME
+ * Since: 11.0.0
**/
hb_bool_t
hb_font_set_funcs_using (hb_font_t *font,
@@ -2433,7 +2433,7 @@ void free_static_font_funcs_list ()
* constant strings. The returned array is owned by HarfBuzz
* and should not be modified or freed.
*
- * XSince: REPLACEME
+ * Since: 11.0.0
**/
const char **
hb_font_list_funcs ()
diff --git a/src/hb-fontations.h b/src/hb-fontations.h
index 400800be4..6a3fce0b5 100644
--- a/src/hb-fontations.h
+++ b/src/hb-fontations.h
@@ -46,7 +46,7 @@ HB_BEGIN_DECLS
* Configures the font-functions structure of the specified #hb_font_t font
* object to use Fontations font functions.
*
- * XSince: REPLACEME
+ * Since: 11.0.0
**/
HB_EXTERN void
hb_fontations_font_set_funcs (hb_font_t *font);
diff --git a/src/hb-ft.cc b/src/hb-ft.cc
index b04b7b30f..756ba8a54 100644
--- a/src/hb-ft.cc
+++ b/src/hb-ft.cc
@@ -1449,7 +1449,7 @@ hb_ft_font_changed (hb_font_t *font)
* variation-axis settings on the @font.
* This call is fast if nothing has changed on @font.
*
- * Note that as of version REPLACEME, calling this function is not necessary,
+ * Note that as of version 11.0.0, calling this function is not necessary,
* as HarfBuzz will automatically detect changes to the font and update
* the underlying FT_Face as needed.
*
@@ -1645,7 +1645,7 @@ _destroy_blob (void *p)
* Return value: (transfer full): The new face object, or `NULL` if
* loading fails (eg. blob does not contain valid font data).
*
- * XSince: REPLACEME
+ * Since: 11.0.0
*/
hb_face_t *
hb_ft_face_create_from_blob_or_fail (hb_blob_t *blob,
diff --git a/src/hb-paint.cc b/src/hb-paint.cc
index 3ff8dfd56..755b18169 100644
--- a/src/hb-paint.cc
+++ b/src/hb-paint.cc
@@ -473,7 +473,7 @@ hb_paint_push_transform (hb_paint_funcs_t *funcs, void *paint_data,
* Push the transform reflecting the font's scale and slant
* settings onto the paint functions.
*
- * XSince: REPLACEME
+ * Since: 11.0.0
*/
void
hb_paint_push_font_transform (hb_paint_funcs_t *funcs, void *paint_data,
@@ -491,7 +491,7 @@ hb_paint_push_font_transform (hb_paint_funcs_t *funcs, void *paint_data,
* Push the inverse of the transform reflecting the font's
* scale and slant settings onto the paint functions.
*
- * XSince: REPLACEME
+ * Since: 11.0.0
*/
void
hb_paint_push_inverse_font_transform (hb_paint_funcs_t *funcs, void *paint_data,
diff --git a/src/hb-version.h b/src/hb-version.h
index 2ffbf990c..59601fe10 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 10
+#define HB_VERSION_MAJOR 11
/**
* 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 "10.4.0"
+#define HB_VERSION_STRING "11.0.0"
/**
* HB_VERSION_ATLEAST: