1 Overview of changes leading to 3.4.0
2 Sunday, February 13, 2022
3 ====================================
4 - Perform sanity checks on shaping results is now part of “harfbuzz” library
5 and can be enabled by setting the buffer flag HB_BUFFER_FLAG_VERIFY.
7 - Arabic Mark Transient Reordering Algorithm have been updated to revision 6.
9 - ISO 15924 code for mathematical notation, ‘Zmth’, now maps to the OpenType
10 ‘math’ tag. (Alexis King)
11 - It is now possible to get at once all math kerning values for a given glyph
12 at a given corner. (Alexis King)
13 - Fix locale_t portability issues on systems the typdef’s it to a void pointer.
17 +HB_BUFFER_FLAG_VERIFY
18 +HB_OT_TAG_MATH_SCRIPT
20 +hb_ot_math_kern_entry_t
21 +hb_ot_math_get_glyph_kernings
27 Overview of changes leading to 3.3.2
28 Sunday, February 6, 2022
29 ====================================
30 - Revert splitting of pair positioning values introduced in 3.3.0 as it proved
31 problematic. (Behdad Esfahbod)
34 Overview of changes leading to 3.3.1
35 Monday, January 31, 2022
36 ====================================
37 - Fix heap-use-after-free in harfbuzz-subset introduced in previous release.
41 Overview of changes leading to 3.3.0
42 Monday, January 31, 2022
43 ====================================
44 - Improved documentation. (Matthias Clasen)
45 - Internal code cleanup, using C++ standard library more. (Behdad Esfahbod)
46 - The low 16-bits of face index will be used by hb_face_create() to select a
47 face inside a font collection file format, while the high 16-bits will be
48 used by hb_font_create() to load the named instance. (Behdad Esfahbod)
49 - Glyph positions and other font metrics now apply synthetic slant set by
50 hb_font_set_synthetic_slant(), for improved positioning for synthetically
51 slanted fonts. (Behdad Esfahbod)
52 - Fixed unintentional locale dependency in hb_variation_to_string() for decimal
53 point representation. (Matthias Clasen)
54 - When applying pair positioning (kerning) the positioning value is split
55 between the two sides of the pair for improved cursor positioning between
56 such pairs. (Behdad Esfahbod)
57 - Introduced new HB_GLYPH_FLAG_UNSAFE_TO_CONCAT, to be used in conjunction
58 with HB_GLYPH_FLAG_UNSAFE_TO_BREAK for optimizing re-shaping during line
59 breaking. Check the documentation for further details. (Behdad Esfahbod)
60 - Improved handling of macrolanguages when mapping BCP 47 codes to OpenType
64 +HB_GLYPH_FLAG_UNSAFE_TO_CONCAT
65 +hb_segment_properties_overlay()
66 +hb_buffer_create_similar()
67 +hb_font_set_synthetic_slant()
68 +hb_font_get_synthetic_slant()
69 +hb_font_get_var_coords_design()
72 Overview of changes leading to 3.2.0
73 Friday, November 26, 2021
74 ====================================
75 “harfbuzz” library improvements:
76 - Fixed shaping of Apple Color Emoji flags in right-to-left context. (Behdad Esfahbod)
77 - Fixed positioning of CFF fonts in HB_TINY profile. (Behdad Esfahbod)
78 - OpenType 1.9 language tags update. (David Corbett)
79 - Add HB_NO_VERTICAL config option.
80 - Add HB_CONFIG_OVERRIDE_H for easier configuration. (Behdad Esfahbod)
82 “harfbuzz-subset” library improvements:
83 - Improved packing of cmap, loca, and Ligature tables. (Garret Rieger)
84 - Significantly improved overflow-resolution strategy in the repacker. (Garret Rieger)
87 Overview of changes leading to 3.1.2
88 Friday, November 26, 2021
89 ====================================
90 - hb-shape / hb-view: revert treating text on the commandline as single
91 paragraph (was introduced in 3.0.0); add new --single-par to do that.
93 - Subsetter bug fixes. (Garret Rieger, Qunxin Liu, Behdad Esfahbod)
96 Overview of changes leading to 3.1.1
97 Wednesday, November 8, 2021
98 ====================================
99 - Work around GCC cast-align error/warning on some platforms. (Behdad Esfahbod)
100 - Documentation improvements. (Matthias Clasen)
103 Overview of changes leading to 3.1.0
104 Wednesday, November 3, 2021
105 ====================================
106 - Better offset-overflow handling in the subsetter library. (Garret Rieger)
107 - Improved Unicode 14 properties in the USE shaper, and various other USE
108 shaper fixes. (David Corbett)
109 - MATH and COLR v1 tables subsetting support, and various other subsetter fixes.
111 - Support for Pwo Karen / Ason Chin medial la. (Simon Cozens)
112 - Apply GPOS positioning when substituting with morx table, if kerx is missing.
114 - Apply calt and clig features across syllable boundaries in Indic shaper.
116 - meson option for enabling Graphite 2 has been renamed to graphite2.
117 - Build and documentation fixes.
120 +hb_buffer_set_not_found_glyph()
121 +hb_buffer_get_not_found_glyph()
124 Overview of changes leading to 3.0.0
125 Friday, September 17, 2021
126 ====================================
127 - Unicode 14.0 support (David Corbett).
128 - The hb-subset API and the harfbuzz-subset library's ABI are now declared
129 stable. The harfbuzz-subset library would not have been possible without the
130 work of Garret Rieger and Qunxin Liu from Google Fonts, and the earlier work
131 of Michiharu Ariza from Adobe.
132 - The hb-style API is now stable and no longer experimental.
136 +hb_style_get_value()
140 +hb_subset_input_create_or_fail()
141 +hb_subset_input_reference()
142 +hb_subset_input_destroy()
143 +hb_subset_input_set_user_data()
144 +hb_subset_input_get_user_data()
145 +hb_subset_input_unicode_set()
146 +hb_subset_input_glyph_set()
147 +hb_subset_input_set()
148 +hb_subset_input_get_flags()
149 +hb_subset_input_set_flags()
152 - Removed old unstable harfbuzz-subset API:
153 -hb_subset_input_nameid_set()
154 -hb_subset_input_namelangid_set()
155 -hb_subset_input_layout_features_set()
156 -hb_subset_input_no_subset_tables_set()
157 -hb_subset_input_drop_tables_set()
158 -hb_subset_input_set_drop_hints()
159 -hb_subset_input_get_drop_hints()
160 -hb_subset_input_set_desubroutinize()
161 -hb_subset_input_get_desubroutinize()
162 -hb_subset_input_set_retain_gids()
163 -hb_subset_input_get_retain_gids()
164 -hb_subset_input_set_name_legacy()
165 -hb_subset_input_get_name_legacy()
166 -hb_subset_input_set_overlaps_flag()
167 -hb_subset_input_get_overlaps_flag()
168 -hb_subset_input_set_notdef_outline()
169 -hb_subset_input_get_notdef_outline()
170 -hb_subset_input_set_no_prune_unicode_ranges()
171 -hb_subset_input_get_no_prune_unicode_ranges()
175 Overview of changes leading to 2.9.1
176 Tuesday, September 7, 2021
177 ====================================
178 - Final subset API is in place and if no issues are discovered, it will be the
179 stable subset API of HarfBuzz 3.0.0. Old API is kept to ease transition, but
180 will be removed in 3.0.0.
181 - Various fuzzer-found bug fixes.
182 - hb_buffer_append() now handles the pre- and post-context which previously
183 were left unchanged in the destination buffer.
184 - hb-view / hb-shape now accept following new arguments:
185 o --unicodes-before/after: takes a list of hex numbers that represent Unicode
191 Overview of changes leading to 2.9.0
192 Wednesday, August 18, 2021
193 History Repeats Itself (Afghanistan)
194 ====================================
195 - Subsetter API is being stabilized, with the first stable API to happen in
196 3.0.0 release (https://github.com/harfbuzz/harfbuzz/issues/3078).
197 - Support multiple variation axes with same tag, aka HOI.
198 - The “coretext” testing shaper now passes font variations to CoreText.
199 - hb-shape/hb-view does not break line at new lines unless text is read from
201 - hb-view and hb-subset has a --batch now, similar to hb-shape.
202 - The --batch mode now uses ; as argument separator instead of : used previously.
203 - The --batch in hb-shape does not expect 0th argument anymore. That is, the
204 lines read are interpreted as argv[1:], instead of argv[0:].
205 - The --batch option has been undocumented. We are ready to document it; send
206 feedback if you find it useful.
207 - hb-subset got arguments revamps. Added much-requested --gids-file, --glyphs,
208 --glyphs-file, --unicodes-file, supporting ranges in --unicodes.
212 Overview of changes leading to 2.8.2
213 Tuesday, July 8, 2021
214 ====================================
215 - Shaping LTR digits for RTL scripts now makes the native direction of the
216 digits LTR, applying shaping and positioning rules on the same glyph order as
217 Uniscribe. (Jonathan Kew, Khaled Hosny).
218 - Subsetting COLR v1 and CPAL tables is now supported. (Garret Rieger, Qunxin Liu)
219 - Various fixes and improvements to the subsetter. (Garret Rieger, Qunxin Liu, Behdad)
220 - When applying morx table, mark glyph widths should not be zeroed. (Jonathan Kew)
221 - GPOS is preferred over kerx, if GSUB was applied. (Behdad)
222 - Regional_Indicator pairs are grouped together when clustering. (Behdad)
224 +hb_blob_create_or_fail()
225 +hb_blob_create_from_file_or_fail()
229 Overview of changes leading to 2.8.1
231 ====================================
232 - Subsetter now fully supports GSUB/GPOS/GDEF tables (including variations); as
233 such, layout tables are retained by subsetter by default. (Garret Rieger, Qunxin Liu)
234 - Build scripts no longer check for FontConfig as HarfBuzz does not use it.
235 - hb-view supports iTerm2 and kitty inline image protocols (Khaled Hosny),
236 it can also use Chafa for terminal graphics if available (Hans Petter Jansson).
238 Overview of changes leading to 2.8.0
239 Tuesday, March 16, 2021
240 ====================================
241 - Shape joining scripts other than Arabic/Syriac using the Universal Shaping Engine.
242 Previously these were shaped using the generalized Arabic shaper. (David Corbett)
243 - Fix regression in shaping of U+0B55 ORIYA SIGN OVERLINE. (David Corbett)
244 - Update language tags. (David Corbett)
245 - Variations: reduce error: do not round each interpolated delta. (Just van Rossum)
246 - Documentation improvements. (Khaled Hosny, Nathan Willis)
247 - Subsetter improvements: subsets most, if not all, lookup types now. (Garret Rieger, Qunxin Liu)
248 - Fuzzer-found fixes and other improvements when memory failures happen. (Behdad)
249 - Removed most atomic implementations now that we have C++11 atomic impl. (Behdad)
250 - General codebase upkeep; using more C++11 features: constexpr constructors, etc. (Behdad)
253 Overview of changes leading to 2.7.4
254 Sunday, December 27, 2020
255 ====================================
256 - Fix missing --enable-introspection configure option from previous release
258 - Documentation updates.
261 Overview of changes leading to 2.7.3
262 Wednesday, December 23, 2020
263 ====================================
264 - Update USE shaper to 2020-08-13 specification, and other improvements.
265 - Don’t disable liga feature in myanmar shaper, to match Uniscribe.
266 - Improvements to language and script tags handling.
267 - Update language system tag registry to OpenType 1.8.4
268 - Support for serializing and deserializing Unicode buffers. Serialized buffers
269 are now delimited with `<>` or `[]` based on whether it is a Unicode or
271 - Increase buffer work limits to handle fonts with many complex lookups.
272 - Handle more shaping operations in trace output.
273 - Memory access fixes.
275 - Improved documentation.
276 - Build system improvements.
278 +hb_buffer_has_positions()
279 +hb_buffer_serialize()
280 +hb_buffer_serialize_unicode()
281 +hb_buffer_deserialize_unicode()
284 Overview of changes leading to 2.7.2
285 Saturday, August 29, 2020
286 ====================================
287 - Fix a regression in the previous release that caused a crash with Kaithi.
291 Overview of changes leading to 2.7.1
292 Thursday, August 13, 2020
293 ====================================
294 - ot-funcs now handles variable empty glyphs better when hvar/vvar isn't present.
295 - Reverted a GDEF processing regression.
296 - A couple of fixes to handle OOM better.
299 Overview of changes leading to 2.7.0
300 Saturday, July 25, 2020
301 ====================================
302 - Use an implementation for round that always rounds up, some minor fluctuations
303 are expected on var font specially when hb-ot callback is used.
304 - Fix an AAT's `kerx` issue on broken rendering of Devanagari Sangam MN.
305 - Remove AAT's `lcar` table support from _get_ligature_carets API, not even much
306 use on macOS installed fonts (only two files). GDEF support is the recommended
307 one and expected to work properly after issues fixed two releases ago.
308 - Minor memory fixes to handle OOM better specially in hb-ft.
309 - Minor .so files versioning scheme change and remove stable/unstable scheme
310 differences, was never used in practice (always default to stable scheme).
311 - We are now suggesting careful packaging of the library using meson,
312 https://github.com/harfbuzz/harfbuzz/wiki/Notes-on-migration-to-meson
313 for more information.
314 - Distribution package URL is changed, either use GitHub generated tarballs,
315 `https://github.com/harfbuzz/harfbuzz/archive/$pkgver.tar.gz`
316 or, even more preferably use commit hash of the release and git checkouts like,
317 `git+https://github.com/harfbuzz/harfbuzz#commit=$commit`
320 Overview of changes leading to 2.6.8
321 Monday, June 22, 2020
322 ====================================
323 - New API to fetch glyph alternates from GSUB table.
324 - hb-coretext build fix for macOS < 10.10.
325 - Meson build fixes, cmake port removal is postponed but please prepare for
326 it and give us feedback.
327 Autotools is still our main build system however please consider
328 experimenting with meson also for packaging the library.
330 +hb_ot_layout_lookup_get_glyph_alternates()
333 Overview of changes leading to 2.6.7
334 Wednesday, June 3, 2020
335 ====================================
336 - Update to Unicode 13.0.0.
337 - Fix hb_ot_layout_get_ligature_carets for fonts without lcar table, it was
338 completely broken for all the other fonts since 2.1.2.
339 - As a part of our migration to meson, this release will be the last one
340 to provide cmake port files but autotools still is our main build system.
341 There is a possibility that the next version or the after be released
345 Overview of changes leading to 2.6.6
346 Tuesday, May 12, 2020
347 ====================================
348 - A fix in AAT kerning for Geeza Pro.
349 - Better support for resource fork fonts on macOS.
352 Overview of changes leading to 2.6.5
353 Friday, April 17, 2020
354 ====================================
355 - Add experimental meson build system. Autotools is still the primary
356 and supported build system.
357 - AAT is now always preferred for horizontal scripts when both AAT and OT
358 layout tables exist at the same time.
359 - Subsetter improvements.
361 +hb_ft_font_lock_face()
362 +hb_ft_font_unlock_face()
365 Overview of changes leading to 2.6.4
366 Monday, October 29, 2019
367 ====================================
372 Overview of changes leading to 2.6.3
373 Monday, October 28, 2019
374 ====================================
375 - Misc small fixes, mostly to build-related issues.
377 +hb_font_get_nominal_glyphs()
380 Overview of changes leading to 2.6.2
381 Monday, September 30, 2019
382 ====================================
383 - Misc small fixes, mostly to build-related issues.
386 Overview of changes leading to 2.6.1
387 Thursday, August 22, 2019
388 ====================================
389 - Fix regression with hb_font_create_sub_font scaling introduced in 2.6.0.
390 - Change interpretation of font PTEM size / CoreText font size handling.
391 See https://github.com/harfbuzz/harfbuzz/pull/1484
392 - hb-ot-font: Prefer symbol cmap subtable if present.
393 - Apply 'dist'/'abvm'/'blwm' features to all scripts.
394 - Drop experimental DirectWrite API.
397 Overview of changes leading to 2.6.0
398 Tuesday, August 13, 2019
399 ====================================
400 - New OpenType metrics, baseline, and metadata table access APIs.
401 - New API to set font variations to a named-instance.
402 - New hb-gdi.h header and API for creating hb_face_t from HFONT.
403 - Amalgam: Provide a single-file harfbuzz.cc file for easier alternate building.
404 - More size-reduction configurable options, enabled by HB_TINY.
406 +hb_font_set_var_named_instance()
407 +hb_gdi_face_create()
408 +hb_ot_layout_baseline_tag_t
409 +hb_ot_layout_get_baseline()
411 +hb_ot_meta_get_entry_tags()
412 +hb_ot_meta_reference_entry()
414 +hb_ot_metrics_get_position()
415 +hb_ot_metrics_get_variation()
416 +hb_ot_metrics_get_x_variation()
417 +hb_ot_metrics_get_y_variation()
420 Overview of changes leading to 2.5.3
421 Wednesday, June 26, 2019
422 ====================================
423 - Fix UCD script data for Unicode 10+ scripts. This was broken since 2.5.0.
424 - More optimizations for HB_TINY.
427 Overview of changes leading to 2.5.2
428 Thursday, June 20, 2019
429 ====================================
430 - More hb-config.hh facilities to shrink library size, namely when built as
432 - New documentation of custom configurations in CONFIG.md.
433 - Fix build on gcc 4.8. That's supported again.
434 - Universal Shaping Engine improvements thanks to David Corbett.
435 - API Changes: Undeprecate some horizontal-kerning API and re-enable in hb-ft,
436 such that Type1 fonts will continue kerning.
439 Overview of changes leading to 2.5.1
441 ====================================
442 - Fix build with various versions of Visual Studio.
443 - Improved documentation, thanks to Nathan Willis.
444 - Bugfix in subsetting glyf table.
445 - Improved scripts for cross-compiling for Windows using mingw.
446 - Rename HB_MATH_GLYPH_PART_FLAG_EXTENDER to HB_OT_MATH_GLYPH_PART_FLAG_EXTENDER.
447 A deprecated macro is added for backwards-compatibility.
450 Overview of changes leading to 2.5.0
452 ====================================
453 - This release does not include much functional changes, but includes major internal
454 code-base changes. We now require C++11. Support for gcc 4.8 and earlier has been
456 - New hb-config.hh facility for compiling smaller library for embedded and web usecases.
457 - New Unicode Character Database implementation that is half the size of previously-used
459 - Subsetter improvements.
460 - Improved documentation, thanks to Nathan Willis.
461 - Misc shaping fixes.
464 Overview of changes leading to 2.4.0
465 Monday, March 25, 2019
466 ====================================
469 - Subsetter improvements.
471 HB_BUFFER_FLAG_DO_NOT_INSERT_DOTTED_CIRCLE
472 hb_directwrite_face_create()
475 Overview of changes leading to 2.3.1
476 Wednesday, January 30, 2019
477 ====================================
479 - Misc internal housekeeping cleanup.
482 Overview of changes leading to 2.3.0
483 Thursday, December 20, 2018
484 ====================================
485 - Fix regression on big-endian architectures. Ouch!
486 - Misc bug and build fixes.
487 - Fix subsetting of simple GSUB/GDEF.
488 - Merge CFF / CFF2 support contributed by Adobe. This mostly involves
489 the subsetter, but also get_glyph_extents on CFF fonts.
492 +hb_aat_layout_has_substitution()
493 +hb_aat_layout_has_positioning()
494 +hb_aat_layout_has_tracking()
497 Overview of changes leading to 2.2.0
498 Thursday, November 29, 2018
499 ====================================
500 - Misc shaping bug fixes.
501 - Add font variations named-instance API.
502 - Deprecate font variations axis enumeration API and add replacement.
503 - AAT shaping improvements:
504 o Fixed 'kern' table Format 2 implementation.
505 o Implement 'feat' table API for feature detection.
506 o Blacklist 'GSUB' table of fonts from 'MUTF' foundry that also have 'morx'.
509 +hb_aat_layout_feature_type_t
510 +hb_aat_layout_feature_selector_t
511 +hb_aat_layout_get_feature_types()
512 +hb_aat_layout_feature_type_get_name_id
513 +hb_aat_layout_feature_selector_info_t
514 +HB_AAT_LAYOUT_NO_SELECTOR_INDEX
515 +hb_aat_layout_feature_type_get_selector_infos()
516 +hb_ot_var_axis_flags_t
517 +hb_ot_var_axis_info_t
518 +hb_ot_var_get_axis_infos()
519 +hb_ot_var_find_axis_info()
520 +hb_ot_var_get_named_instance_count()
521 +hb_ot_var_named_instance_get_subfamily_name_id()
522 +hb_ot_var_named_instance_get_postscript_name_id()
523 +hb_ot_var_named_instance_get_design_coords()
526 +HB_OT_VAR_NO_AXIS_INDEX
528 +hb_ot_var_get_axes()
529 +hb_ot_var_find_axis()
532 Overview of changes leading to 2.1.3
533 Friday, November 16, 2018
534 ====================================
535 - Fix AAT 'mort' shaping, which was broken in 2.1.2
538 Overview of changes leading to 2.1.2
539 Friday, November 16, 2018
540 ====================================
541 - Various internal changes.
542 - AAT shaping improvements:
543 o Implement kern table Format 1 state-machine-based kerning.
544 o Implement cross-stream kerning (cursive positioning, etc).
545 o Ignore emptyish GSUB tables (zero scripts) if morx present.
546 o Don't apply GPOS if morx is being applied. Matches Apple.
549 -Overview of changes leading to 2.1.1
550 Monday, November 5, 2018
551 ====================================
553 o Implement 'mort' table.
554 o Implement 'kern' subtables Format 1 and Format 3.
557 Overview of changes leading to 2.1.0
558 Tuesday, October 30, 2018
559 ====================================
560 - AAT shaping improvements:
561 o Allow user controlling AAT features, for whole buffer only currently.
562 o Several 'morx' fixes.
563 o Implement tuple-kerns in 'kerx'; Fixes kerning with Apple default
565 - Support for color fonts:
566 o COLR/CPAL API to fetch color layers.
567 o SVG table to fetch SVG documents.
568 o CBDT/sbix API to fetch PNG images.
569 - New 'name' table API.
570 - hb-ot-font now uses 'VORG' table to correctly position CFF glyphs
572 - Various fuzzer-found bug fixes.
576 A type and a macro added in 2.0.0 were renamed:
578 hb_name_id_t -> hb_ot_name_id_t
579 HB_NAME_ID_INVALID -> HB_OT_NAME_ID_INVALID
585 +hb_color_get_alpha()
587 +hb_color_get_green()
589 +hb_ot_color_has_palettes()
590 +hb_ot_color_palette_get_count()
591 +hb_ot_color_palette_get_name_id()
592 +hb_ot_color_palette_color_get_name_id()
593 +hb_ot_color_palette_flags_t
594 +hb_ot_color_palette_get_flags()
595 +hb_ot_color_palette_get_colors()
596 +hb_ot_color_has_layers()
598 +hb_ot_color_glyph_get_layers()
599 +hb_ot_color_has_svg()
600 +hb_ot_color_glyph_reference_svg()
601 +hb_ot_color_has_png()
602 +hb_ot_color_glyph_reference_png()
605 +HB_OT_NAME_ID_INVALID
606 +HB_OT_NAME_ID_COPYRIGHT
607 +HB_OT_NAME_ID_FONT_FAMILY
608 +HB_OT_NAME_ID_FONT_SUBFAMILY
609 +HB_OT_NAME_ID_UNIQUE_ID
610 +HB_OT_NAME_ID_FULL_NAME
611 +HB_OT_NAME_ID_VERSION_STRING
612 +HB_OT_NAME_ID_POSTSCRIPT_NAME
613 +HB_OT_NAME_ID_TRADEMARK
614 +HB_OT_NAME_ID_MANUFACTURER
615 +HB_OT_NAME_ID_DESIGNER
616 +HB_OT_NAME_ID_DESCRIPTION
617 +HB_OT_NAME_ID_VENDOR_URL
618 +HB_OT_NAME_ID_DESIGNER_URL
619 +HB_OT_NAME_ID_LICENSE
620 +HB_OT_NAME_ID_LICENSE_URL
621 +HB_OT_NAME_ID_TYPOGRAPHIC_FAMILY
622 +HB_OT_NAME_ID_TYPOGRAPHIC_SUBFAMILY
623 +HB_OT_NAME_ID_MAC_FULL_NAME
624 +HB_OT_NAME_ID_SAMPLE_TEXT
625 +HB_OT_NAME_ID_CID_FINDFONT_NAME
626 +HB_OT_NAME_ID_WWS_FAMILY
627 +HB_OT_NAME_ID_WWS_SUBFAMILY
628 +HB_OT_NAME_ID_LIGHT_BACKGROUND
629 +HB_OT_NAME_ID_DARK_BACKGROUND
630 +HB_OT_NAME_ID_VARIATIONS_PS_PREFIX
632 +hb_ot_name_list_names()
633 +hb_ot_name_get_utf8()
634 +hb_ot_name_get_utf16()
635 +hb_ot_name_get_utf32()
638 Overview of changes leading to 2.0.2
639 Saturday, October 20, 2018
640 ====================================
641 - Fix two minor memory access issues in AAT tables.
644 Overview of changes leading to 2.0.1
645 Friday, October 19, 2018
646 ====================================
647 - Fix hb-version.h reported release version that went wrong (1.8.0)
648 with previous release.
649 - Fix extrapolation in 'trak' table.
650 - Fix hb-font infinite-recursion issue with some font funcs and
652 - Implement variation-kerning format in kerx table, although without
654 - Fix return value of hb_map_is_empty().
657 Overview of changes leading to 2.0.0
658 Thursday, October 18, 2018
659 ====================================
660 - Added AAT shaping support (morx/kerx/trak).
661 Automatically used if GSUB/GPOS are not available respectively.
662 Set HB_OPTIONS=aat env var to have morx/kerx preferred over
664 - Apply TrueType kern table internally, instead of relying on
666 - Khmer shaper significantly rewritten to better match Uniscribe.
667 - Indic3 tags ('dev3', etc) are passed to USE shaper.
668 - .dfont Mac font containers implemented.
669 - Script- and language-mapping revamped to better use BCP 47.
670 - Misc USE and Indic fixes.
671 - Misc everything fixes.
672 - Too many things to list. Biggest release since 0.9.1, with
673 over 500 commits in just over 5 weeks! Didn't intend it to
674 be a big release. Just happened to become.
675 - hb-ft now locks underlying FT_Face during use.
679 - Newly-created hb_font_t's now have our internal "hb-ot-font"
680 callbacks set on them, so they should work out of the box
681 without any callbacks set. If callbacks are set, everything
682 is back to what it was before, the fallback callbacks are
683 null. If you to get the internal implementation modified,
686 - New hb_font_funcs_set_nominal_glyphs_func() allows speeding
687 up character to glyph mapping.
690 +HB_FEATURE_GLOBAL_START
691 +HB_FEATURE_GLOBAL_END
692 +hb_buffer_set_invisible_glyph()
693 +hb_buffer_get_invisible_glyph()
694 +hb_font_funcs_set_nominal_glyphs_func()
695 +hb_ot_layout_table_select_script()
696 +hb_ot_layout_script_select_language()
697 +hb_ot_layout_feature_get_name_ids()
698 +hb_ot_layout_feature_get_characters()
701 +HB_OT_MAX_TAGS_PER_SCRIPT
702 +hb_ot_tags_from_script_and_language()
703 +hb_ot_tags_to_script_and_language()
706 -hb_font_funcs_set_glyph_func()
707 -hb_unicode_eastasian_width_func_t
708 -hb_unicode_funcs_set_eastasian_width_func()
709 -hb_unicode_eastasian_width()
710 -hb_unicode_decompose_compatibility_func_t
711 -HB_UNICODE_MAX_DECOMPOSITION_LEN
712 -hb_unicode_funcs_set_decompose_compatibility_func()
713 -hb_unicode_decompose_compatibility()
714 -hb_font_funcs_set_glyph_h_kerning_func()
715 -hb_font_funcs_set_glyph_v_kerning_func()
716 -hb_font_get_glyph_h_kerning()
717 -hb_font_get_glyph_v_kerning()
718 -hb_font_get_glyph_kerning_for_direction()
719 -hb_ot_layout_table_choose_script()
720 -hb_ot_layout_script_find_language()
721 -hb_ot_tags_from_script()
722 -hb_ot_tag_from_language()
725 Overview of changes leading to 1.9.0
726 Monday, September 10, 2018
727 ====================================
728 - Added 'cmap' API to hb_face_t.
730 - hb-ot-font re-creation should be much leaner now, as the
731 font tables it uses are cached on hb_face_t now.
732 - Internal source header file name changes:
733 hb-*-private.hh is renamed to hb-*.hh.
737 +hb_face_collect_unicodes()
738 +hb_face_collect_variation_selectors()
739 +hb_face_collect_variation_unicodes()
740 +hb_face_builder_create()
741 +hb_face_builder_add_table()
744 Overview of changes leading to 1.8.8
745 Tuesday, August 14, 2018
746 ====================================
747 - Fix hb-icu crash on architectures where compare_exchange_weak() can
748 fail falsely. This bug was introduced in 1.8.4.
749 https://bugs.chromium.org/p/chromium/issues/detail?id=873568
750 - More internal refactoring of atomic operations and singletons.
752 The following functions do NOT reference their return value before
754 * hb_unicode_funcs_get_default()
755 * hb_glib_get_unicode_funcs()
756 * hb_icu_get_unicode_funcs()
757 This is consistent with their naming ("get", instead of "reference")
758 as well as how they are used in the wild (ie. no one calls destroy()
759 on their return value.)
762 Overview of changes leading to 1.8.7
763 Wednesday, August 8, 2018
764 ====================================
765 - Fix assertion failure with GDEF-blacklisted fonts.
768 Overview of changes leading to 1.8.6
769 Tuesday, August 7, 2018
770 ====================================
771 - Internal code shuffling.
772 - New API to speed up getting advance widths for implementations
773 that have heavy overhead in get_h_advance callback:
774 +hb_font_funcs_set_glyph_h_advances_func
775 +hb_font_funcs_set_glyph_v_advances_func
776 +hb_font_get_glyph_advances_for_direction
777 +hb_font_get_glyph_h_advances
778 +hb_font_get_glyph_h_advances_func_t
779 +hb_font_get_glyph_v_advances
780 +hb_font_get_glyph_v_advances_func_t
783 Overview of changes leading to 1.8.5
784 Wednesday, August 1, 2018
785 ====================================
786 - Major Khmer shaper improvements to better match Microsoft.
788 - Internal improvements to atomic operations.
791 Overview of changes leading to 1.8.4
792 Tuesday, July 17, 2018
793 ====================================
794 - Fix build on non-C++11.
795 - Use C++-style GCC atomics and C++11 atomics.
798 Overview of changes leading to 1.8.3
799 Wednesday, July 11, 2018
800 ====================================
801 - A couple of Indic / USE bug fixes.
802 - Disable vectorization, as it was causing unaligned access bus error on
803 certain 32bit architectures.
806 Overview of changes leading to 1.8.2
807 Tuesday, July 3, 2018
808 ====================================
809 - Fix infinite loop in Khmer shaper.
810 - Improve hb_blob_create_from_file() for streams.
813 Overview of changes leading to 1.8.1
814 Tuesday, June 12, 2018
815 ====================================
816 - Fix hb-version.h file generation; last two releases went out with wrong ones.
817 - Add correctness bug in hb_set_t operations, introduced in 1.7.7.
818 - Remove HB_SUBSET_BUILTIN build option. Not necessary.
821 Overview of changes leading to 1.8.0
822 Tuesday, June 5, 2018
823 ====================================
824 - Update to Unicode 11.0.0.
827 Overview of changes leading to 1.7.7
828 Tuesday, June 5, 2018
829 ====================================
830 - Lots of internal changes, but not yet exposed externally.
831 - All HarfBuzz objects are significantly smaller in size now.
832 - Sinhala: Position repha on top of post-consonant, not base.
833 This better matches Windows 10 behavior, which was changed
834 from previous Windows versions.
836 o New cpp macro HB_NO_ATEXIT
837 o New cpp macro HB_SUBSET_BUILTIN
838 - Significant libharfbuzz-subset changes. API subject to change.
839 - New API in libharfbuzz:
841 +hb_blob_create_from_file()
844 A hashmap implementation:
846 +HB_MAP_VALUE_INVALID
852 +hb_map_set_user_data()
853 +hb_map_get_user_data()
854 +hb_map_allocation_successful()
857 +hb_map_get_population()
864 Overview of changes leading to 1.7.6
865 Wednesday, March 7, 2018
866 ====================================
868 - Fix to hb_set_t binary operations. Ouch.
869 - New experimental harfbuzz-subset library. All of hb-subset.h
870 is experimental right now and API WILL change.
873 hb_blob_copy_writable_or_fail()
876 hb_set_previous_range()
879 Overview of changes leading to 1.7.5
880 Tuesday, January 30, 2018
881 ====================================
883 - Separate Khmer shaper from Indic.
884 - First stab at AAT morx. Not hooked up.
888 Overview of changes leading to 1.7.4
889 Wednesday, December 20, 2017
890 ====================================
892 - Fix collect_glyphs() regression caused by hb_set_t changes.
895 Overview of changes leading to 1.7.3
896 Monday, December 18, 2017
897 ====================================
899 - hb_set_t performance tuning and optimizations.
900 - Speed up collect_glyphs() and reject garbage data.
901 - In hb_coretext_font_create() set font point-size (ptem).
905 Overview of changes leading to 1.7.2
906 Monday, December 4, 2017
907 ====================================
909 - Optimize hb_set_add_range().
912 hb_coretext_font_create()
915 Overview of changes leading to 1.7.1
916 Tuesday, November 14, 2017
917 ====================================
919 - Fix atexit object destruction regression.
920 - Fix minor integer-overflow.
923 Overview of changes leading to 1.7.0
924 Monday, November 13, 2017
925 ====================================
928 - Implement kerning and glyph names in hb-ot-font.
929 - Various DSO optimization re .data and .bss sizes.
930 - Make C++11 optional; build fixes.
931 - Mark all other backends "unsafe-to-break".
935 Overview of changes leading to 1.6.3
936 Thursday, October 26th, 2017
937 ====================================
939 - Fix hb_set_t some more. Should be solid now.
940 - Implement get_glyph_name() for hb-ot-font.
944 Overview of changes leading to 1.6.2
945 Monday, October 23nd, 2017
946 ====================================
948 - Yesterday's release had a bad crasher; don't use it. That's what
949 happens when one works on Sunday...
950 https://github.com/harfbuzz/harfbuzz/issues/578
951 - Build fixes for FreeBSD and Chrome Android.
954 Overview of changes leading to 1.6.1
955 Sunday, October 22nd, 2017
956 ====================================
958 - Don't skip over COMBINING GRAPHEME JOINER when ligating, etc.
959 To be refined: https://github.com/harfbuzz/harfbuzz/issues/554
960 - Faster hb_set_t implementation.
961 - Don't use deprecated ICU API.
962 - Fix undefined-behavior in Myanmar shaper, introduced in 1.6.0
967 Overview of changes leading to 1.6.0
968 Friday, October the 13th, 2017
969 ====================================
971 - Update to Unicode 10.
973 - Various Indic and Universal Shaping Engine fixes as a result of
974 HarfBuzz Hackfest with Jonathan Kew at Web Engines Hackfest at
975 the Igalia offices in A Coruña, Spain. Thanks Igalia for having
978 - Implement Unicode Arabic Mark Ordering Algorithm UTR#53.
980 - Implement optical sizing / tracking in CoreText backend, using
981 new API hb_font_set_ptem().
983 - Allow notifying hb_font_t that underlying FT_Face changed sizing,
984 using new API hb_ft_font_changed().
986 - More Graphite backend RTL fixes.
988 - Fix caching of variable font shaping plans.
990 - hb-view / hb-shape now accept following new arguments:
992 o --unicodes: takes a list of hex numbers that represent Unicode
996 +hb_face_get_table_tags()
999 +hb_ft_font_changed()
1002 Overview of changes leading to 1.5.1
1003 Tuesday, September 5, 2017
1004 ====================================
1006 - Fix "unsafe-to-break" in fallback shaping and other corner cases.
1007 All our tests pass with --verify now, meaning unsafe-to-break API
1009 - Add --unicodes to hb-view / hb-shape.
1010 - [indic] Treat Consonant_With_Stacker as consonant. This will need
1012 - hb_buffer_diff() tweaks.
1015 Overview of changes leading to 1.5.0
1016 Wednesday, August 23, 2017
1017 ====================================
1019 - Misc new API, for appending a buffer to another, and for comparing
1020 contents of two buffers for types of differences.
1022 - New "unsafe-to-break" API. Can be used to speed up reshaping
1023 in line-breaking situations. Essentially, after shaping, it returns
1024 positions in the input string (some of the cluster boundaries) that
1025 are "safe to break" in that if the text is segmented at that position
1026 and two sides reshaped and concatenated, the shaping result is
1027 exactly the same as shaping the text in one piece.
1029 hb-view and hb-shape and hb-shape now take --verify, which verifies
1032 Some corner cases of the implementation are still not quite working.
1033 Those will be fixed in subsequent releases.
1040 HB_GLYPH_FLAG_UNSAFE_TO_BREAK
1041 HB_GLYPH_FLAG_DEFINED
1042 hb_glyph_info_get_glyph_flags()
1044 HB_BUFFER_SERIALIZE_FLAG_GLYPH_FLAGS
1046 hb_buffer_diff_flags_t
1047 HB_BUFFER_DIFF_FLAG_EQUAL
1048 HB_BUFFER_DIFF_FLAG_CONTENT_TYPE_MISMATCH
1049 HB_BUFFER_DIFF_FLAG_LENGTH_MISMATCH
1050 HB_BUFFER_DIFF_FLAG_NOTDEF_PRESENT
1051 HB_BUFFER_DIFF_FLAG_DOTTED_CIRCLE_PRESENT
1052 HB_BUFFER_DIFF_FLAG_CODEPOINT_MISMATCH
1053 HB_BUFFER_DIFF_FLAG_CLUSTER_MISMATCH
1054 HB_BUFFER_DIFF_FLAG_GLYPH_FLAGS_MISMATCH
1055 HB_BUFFER_DIFF_FLAG_POSITION_MISMATCH
1059 Overview of changes leading to 1.4.8
1060 Tuesday, August 8, 2017
1061 ====================================
1063 - Major fix to avar table handling.
1064 - Rename hb-shape --show-message to --trace.
1068 Overview of changes leading to 1.4.7
1069 Tuesday, July 18, 2017
1070 ====================================
1072 - Multiple Indic, Tibetan, and Cham fixes.
1073 - CoreText: Allow disabling kerning.
1074 - Adjust Arabic feature order again.
1078 Overview of changes leading to 1.4.6
1079 Sunday, April 23, 2017
1080 ====================================
1082 - Graphite2: Fix RTL positioning issue.
1083 - Backlist GDEF of more versions of Padauk and Tahoma.
1084 - New, experimental, cmake alternative build system.
1087 Overview of changes leading to 1.4.5
1088 Friday, March 10, 2017
1089 ====================================
1091 - Revert "Fix Context lookup application when moving back after a glyph..."
1092 This introduced memory access problems. To be fixed properly soon.
1095 Overview of changes leading to 1.4.4
1096 Sunday, March 5, 2017
1097 ====================================
1099 - Fix Context lookup application when moving back after a glyph deletion.
1100 - Fix buffer-overrun in Bengali.
1103 Overview of changes leading to 1.4.3
1104 Saturday, February 25, 2017
1105 ====================================
1107 - Route Adlam script to Arabic shaper.
1112 hb_graphite2_font_get_gr_font()
1115 Overview of changes leading to 1.4.2
1116 Monday, January 23, 2017
1117 ====================================
1119 - Implement OpenType Font Variation tables avar/fvar/HVAR/VVAR.
1120 - hb-shape and hb-view now accept --variations.
1124 hb_variation_from_string()
1125 hb_variation_to_string()
1127 hb_font_set_variations()
1128 hb_font_set_var_coords_design()
1129 hb_font_get_var_coords_normalized()
1133 hb_ot_var_has_data()
1134 hb_ot_var_get_axis_count()
1135 hb_ot_var_get_axes()
1136 hb_ot_var_find_axis()
1137 hb_ot_var_normalize_variations()
1138 hb_ot_var_normalize_coords()
1140 - MVAR to be implemented later. Access to named instances to be
1141 implemented later as well.
1146 Overview of changes leading to 1.4.1
1147 Thursday, January 5, 2017
1148 ====================================
1150 - Always build and use UCDN for Unicode data by default.
1151 Reduces dependence on version of Unicode data in glib,
1152 specially in the Windows bundles we are shipping, which
1156 Overview of changes leading to 1.4.0
1157 Thursday, January 5, 2017
1158 ====================================
1160 - Merged "OpenType GX" branch which adds core of support for
1161 OpenType 1.8 Font Variations. To that extent, the relevant
1165 hb_font_set_var_coords_normalized()
1167 with supporting API:
1170 HB_OT_LAYOUT_NO_VARIATIONS_INDEX
1171 hb_ot_layout_table_find_feature_variations()
1172 hb_ot_layout_feature_with_variations_get_lookups()
1173 hb_shape_plan_create2()
1174 hb_shape_plan_create_cached2()
1176 Currently variations in GSUB/GPOS/GDEF are fully supported,
1177 and no other tables are supported. In particular, fvar/avar
1178 are NOT supported, hence the hb_font_set_var_coords_normalized()
1179 taking normalized coordinates. API to take design coordinates
1180 will be added in the future.
1182 HVAR/VVAR/MVAR support will also be added to hb-ot-font in the
1185 - Fix regression in GDEF glyph class processing.
1186 - Add decompositions for Chakma, Limbu, and Balinese in USE shaper.
1190 Overview of changes leading to 1.3.4
1191 Monday, December 5, 2016
1192 ====================================
1194 - Fix vertical glyph origin in hb-ot-font.
1195 - Implement CBDT/CBLC color font glyph extents in hb-ot-font.
1198 Overview of changes leading to 1.3.3
1199 Wednesday, September 28, 2016
1200 ====================================
1202 - Implement parsing of OpenType MATH table.
1206 hb_ot_math_constant_t
1208 hb_ot_math_glyph_variant_t
1209 hb_ot_math_glyph_part_flags_t
1210 hb_ot_math_glyph_part_t
1212 hb_ot_math_get_constant
1213 hb_ot_math_get_glyph_italics_correction
1214 hb_ot_math_get_glyph_top_accent_attachment
1215 hb_ot_math_get_glyph_kerning
1216 hb_ot_math_is_glyph_extended_shape
1217 hb_ot_math_get_glyph_variants
1218 hb_ot_math_get_min_connector_overlap
1219 hb_ot_math_get_glyph_assembly
1222 Overview of changes leading to 1.3.2
1223 Wednesday, September 27, 2016
1224 ====================================
1226 - Fix build of hb-coretext on older OS X versions.
1229 Overview of changes leading to 1.3.1
1230 Wednesday, September 7, 2016
1231 ====================================
1233 - Blacklist bad GDEF of more fonts (Padauk).
1234 - More CoreText backend crash fixes with OS X 10.9.5.
1238 Overview of changes leading to 1.3.0
1239 Thursday, July 21, 2016
1240 ====================================
1242 - Update to Unicode 9.0.0
1243 - Move Javanese from Indic shaper to Universal Shaping Engine.
1244 - Allow MultipleSubst to delete a glyph (matching Windows engine).
1245 - Update Universal Shaping Engine to latest draft from Microsoft.
1246 - DirectWrite backend improvements. Note: this backend is for testing ONLY.
1247 - CoreText backend improvements with unreachable fonts.
1248 - Implement symbol fonts (cmap 3.0.0) in hb-ft and hb-ot-font.
1249 - Blacklist bad GDEF of more fonts (Tahoma & others).
1253 Overview of changes leading to 1.2.7
1255 ====================================
1257 - Blacklist another version of Times New Roman (Bold) Italic from Windows 7.
1258 - Fix Mongolian Free Variation Selectors shaping with certain fonts.
1259 - Fix Tibetan shorthand contractions shaping.
1260 - Improved list of language tag mappings.
1261 - Unbreak build on Windows CE.
1262 - Make 'glyf' table loading lazy in hb-ot-font.
1265 Overview of changes leading to 1.2.6
1266 Friday, April 8, 2016
1267 ====================================
1269 - Blacklist GDEF table of another set of Times New Roman (Bold) Italic.
1270 - DirectWrite backend improvements. Note: DirectWrite backend is
1271 exclusively for our internal testing and should NOT be used in any
1272 production system whatsoever.
1275 Overview of changes leading to 1.2.5
1276 Monday, April 4, 2016
1277 ====================================
1279 - Fix GDEF mark-filtering-set, which was broken in 1.2.3.
1282 Overview of changes leading to 1.2.4
1283 Thursday, March 17, 2016
1284 ====================================
1286 - Synthesize GDEF glyph class for any glyph that does not have one in GDEF.
1287 I really hope we don't discover broken fonts that shape badly with this
1289 - Misc build and other minor fixes.
1291 - Added HB_NDEBUG. It's fine for production systems to define this to
1292 disable high-overhead debugging checks. However, I also reduced the
1293 overhead of those checks, so it's a non-issue right now. You can
1294 forget it. Just not defining anything at all is fine.
1297 Overview of changes leading to 1.2.3
1298 Thursday, February 25, 2016
1299 ====================================
1301 - Blacklist GDEF table of certain versions of Times New Roman (Bold) Italic,
1302 due to bug in glyph class of ASCII double-quote character. This should
1303 address "regression" introduced in 1.2.0 when we switched mark zeroing
1304 in most shapers from BY_UNICODE_LATE to BY_GDEF_LATE.
1305 This fourth release in a week should finally stabilize things...
1307 - hb-ot-font's get_glyph() implementation saw some optimizations. Though,
1308 might be really hard to measure in real-world situations.
1310 - Also, two rather small API changes:
1312 We now disable some time-consuming internal bookkeeping if built with NDEBUG
1313 defined. This is a first time that we use NDEBUG to disable debug code. If
1314 there exist production systems that do NOT want to enable NDEBUG, please let
1315 me know and I'll add HB_NDEBUG.
1317 Added get_nominal_glyph() and get_variation_glyph() instead of get_glyph()
1320 - hb_font_get_nominal_glyph_func_t
1321 - hb_font_get_variation_glyph_func_t
1322 - hb_font_funcs_set_nominal_glyph_func()
1323 - hb_font_funcs_set_variation_glyph_func()
1324 - hb_font_get_nominal_glyph()
1325 - hb_font_get_variation_glyph()
1328 - hb_font_get_glyph_func_t
1329 - hb_font_funcs_set_glyph_func()
1331 Clients that implement their own font-funcs are encouraged to replace
1332 their get_glyph() implementation with a get_nominal_glyph() and
1333 get_variation_glyph() pair. The variation version can assume that
1334 variation_selector argument is not zero. Old (deprecated) functions
1335 will continue working indefinitely using internal gymnastics; it is
1336 just more efficient to use the new functions.
1339 Overview of changes leading to 1.2.2
1340 Wednesday, February 24, 2016
1341 ====================================
1343 - Fix regression with mark positioning with fonts that have
1344 non-zero mark advances. This was introduced in 1.2.0 while
1345 trying to make mark and cursive attachments to work together.
1346 I have partially reverted that, so this version is much more
1347 like what we had before. All clients who updated to 1.2.0
1348 should update to this version.
1351 Overview of changes leading to 1.2.1
1352 Tuesday, February 23, 2016
1353 ====================================
1355 - CoreText: Fix bug with wrong scale if font scale was changed later.
1356 https://github.com/libass/libass/issues/212
1357 - CoreText: Drastically speed up font initialization.
1358 - CoreText: Fix tiny leak.
1359 - Group ZWJ/ZWNJ with previous syllable under cluster-level=0.
1360 https://github.com/harfbuzz/harfbuzz/issues/217
1361 - Add test/shaping/README.md about how to add tests to the suite.
1364 Overview of changes leading to 1.2.0
1365 Friday, February 19, 2016
1366 ====================================
1368 - Fix various issues (hangs mostly) in case of memory allocation failure.
1369 - Change mark zeroing types of most shapers from BY_UNICODE_LATE to
1370 BY_GDEF_LATE. This seems to be what Uniscribe does.
1371 - Change mark zeroing of USE shaper from NONE to BY_GDEF_EARLY. That's
1373 - Allow GPOS cursive connection on marks, and fix the interaction with
1374 mark attachment. This work resulted in some changes to how mark
1375 attachments work. See:
1376 https://github.com/harfbuzz/harfbuzz/issues/211
1377 https://github.com/harfbuzz/harfbuzz/commit/86c68c7a2c971efe8e35b1f1bd99401dc8b688d2
1378 - Graphite2 shaper: improved negative advance handling (eg. Nastaliq).
1379 - Add nmake-based build system for Windows.
1381 - Misc. improvements.
1384 Overview of changes leading to 1.1.3
1385 Monday, January 11, 2016
1386 ====================================
1388 - Ported Indic shaper to Unicode 8.0 data.
1389 - Universal Shaping Engine fixes.
1390 - Speed up CoreText shaper when font fallback happens in CoreText.
1391 - Documentation improvements, thanks to Khaled Hosny.
1392 - Very rough directwrite shaper for testing, thanks to Ebrahim Byagowi.
1398 hb_font_get_font_extents_func_t
1399 hb_font_get_font_h_extents_func_t
1400 hb_font_get_font_v_extents_func_t
1401 hb_font_funcs_set_font_h_extents_func
1402 hb_font_funcs_set_font_v_extents_func
1403 hb_font_get_h_extents
1404 hb_font_get_v_extents
1405 hb_font_get_extents_for_direction
1407 * Buffer message (aka debug):
1408 hb_buffer_message_func_t
1409 hb_buffer_set_message_func()
1410 Actual message protocol to be fleshed out later.
1413 Overview of changes leading to 1.1.2
1414 Wednesday, November 26, 2015
1415 ====================================
1417 - Fix badly-broken fallback shaper that affected terminology.
1418 https://github.com/harfbuzz/harfbuzz/issues/187
1419 - Fix y_scaling in Graphite shaper.
1421 * An unset glyph_h_origin() function in font-funcs now (sensibly)
1422 implies horizontal origin at 0,0. Ie, the nil callback returns
1423 true instead of false. As such, implementations that have a
1424 glyph_h_origin() that simply returns true, can remove that function
1425 with HarfBuzz >= 1.1.2. This results in a tiny speedup.
1428 Overview of changes leading to 1.1.1
1429 Wednesday, November 24, 2015
1430 ====================================
1432 - Build fixes, specially for hb-coretext.
1435 Overview of changes leading to 1.1.0
1436 Wednesday, November 18, 2015
1437 ====================================
1439 - Implement 'stch' stretch feature for Syriac Abbreviation Mark.
1440 https://github.com/harfbuzz/harfbuzz/issues/141
1441 - Disable use of decompose_compatibility() callback.
1442 - Implement "shaping" of various Unicode space characters, even
1443 if the font does not support them.
1444 https://github.com/harfbuzz/harfbuzz/issues/153
1445 - If font does not support U+2011 NO-BREAK HYPHEN, fallback to
1447 - Changes resulting from libFuzzer continuous fuzzing:
1448 * Reject font tables that need more than 8 edits,
1449 * Bound buffer growth during shaping to 32x,
1450 * Fix assertions and other issues at OOM / buffer max-growth.
1451 - Misc fixes and optimizations.
1453 * All fonts created with hb_font_create() now inherit from
1454 (ie. have parent) hb_font_get_empty().
1457 Overview of changes leading to 1.0.6
1458 Thursday, October 15, 2015
1459 ====================================
1461 - Reduce max nesting level in OT lookups from 8 to 6.
1462 Should not affect any real font as far as I know.
1463 - Fix memory access issue in ot-font.
1464 - Revert default load-flags of fonts created using hb_ft_font_create()
1465 back to FT_LOAD_DEFAULT|FT_LOAD_NO_HINTING. This was changed in
1466 last release (1.0.5), but caused major issues, so revert.
1467 https://github.com/harfbuzz/harfbuzz/issues/143
1470 Overview of changes leading to 1.0.5
1471 Tuesday, October 13, 2015
1472 ====================================
1474 - Fix multiple memory access bugs discovered using libFuzzer.
1475 https://github.com/harfbuzz/harfbuzz/issues/139
1476 Everyone should upgrade to this version as soon as possible.
1477 We now have continuous fuzzing set up, to avoid issues like
1478 these creeping in again.
1482 * hb_font_set_parent().
1483 * hb_ft_font_[sg]et_load_flags()
1484 The default flags for fonts created using hb_ft_font_create()
1485 has changed to default to FT_LOAD_DEFAULT now. Previously it
1486 was defaulting to FT_LOAD_DFEAULT|FT_LOAD_NO_HINTING.
1489 * Fonts now default to units-per-EM as their scale, instead of 0.
1490 * hb_font_create_sub_font() does NOT make parent font immutable
1491 anymore. hb_font_make_immutable() does.
1494 Overview of changes leading to 1.0.4
1495 Wednesday, September 30, 2015
1496 ====================================
1498 - Fix minor out-of-bounds read error.
1501 Overview of changes leading to 1.0.3
1502 Tuesday, September 1, 2015
1503 ====================================
1505 - Start of user documentation, from Simon Cozens!
1506 - Implement glyph_extents() for TrueType fonts in hb-ot-font.
1507 - Improve GPOS cursive attachments with conflicting lookups.
1508 - More fixes for cluster-level = 1.
1509 - Uniscribe positioning fix.
1512 Overview of changes leading to 1.0.2
1513 Wednesday, August 19, 2015
1514 ====================================
1516 - Fix shaping with cluster-level > 0.
1517 - Fix Uniscribe backend font-size scaling.
1518 - Declare dependencies in harfbuzz.pc.
1519 FreeType is not declared though, to avoid bugs in pkg-config
1520 0.26 with recursive dependencies.
1521 - Slightly improved debug infrastructure. More to come later.
1525 Overview of changes leading to 1.0.1
1526 Monday, July 27, 2015
1527 ====================================
1529 - Fix out-of-bounds access in USE shaper.
1532 Overview of changes leading to 1.0.0
1533 Sunday, July 26, 2015
1534 ====================================
1536 - Implement Universal Shaping Engine:
1537 https://www.microsoft.com/typography/OpenTypeDev/USE/intro.htm
1538 http://blogs.windows.com/bloggingwindows/2015/02/23/windows-shapes-the-worlds-languages/
1539 - Bump version to 1.0.0. The soname was NOT bumped.
1542 Overview of changes leading to 0.9.42
1543 Thursday, July 26, 2015
1544 =====================================
1546 - New API to allow for retrieving finer-grained cluster
1547 mappings if the client desires to handle them. Default
1548 behavior is unchanged.
1549 - Fix cluster merging when removing default-ignorables.
1550 - Update to Unicode 8.0
1551 - hb-graphite2 fixes.
1553 - Removed HB_NO_MERGE_CLUSTERS hack.
1555 hb_buffer_cluster_level_t enum
1556 hb_buffer_get_cluster_level()
1557 hb_buffer_set_cluster_level()
1558 hb-shape / hb-view --cluster-level
1561 Overview of changes leading to 0.9.41
1562 Thursday, June 18, 2015
1563 =====================================
1565 - Fix hb-coretext with trailing whitespace in right-to-left.
1566 - New API: hb_buffer_reverse_range().
1567 - Allow implementing atomic ops in config.h.
1568 - Fix hb_language_t in language bindings.
1572 Overview of changes leading to 0.9.40
1573 Friday, March 20, 2015
1574 =====================================
1576 - Another hb-coretext crasher fix. Ouch!
1580 Overview of changes leading to 0.9.39
1581 Wednesday, March 4, 2015
1582 =====================================
1584 - Critical hb-coretext fixes.
1585 - Optimizations and refactoring; no functional change
1590 Overview of changes leading to 0.9.38
1591 Friday, January 23, 2015
1592 =====================================
1594 - Fix minor out-of-bounds access in Indic shaper.
1595 - Change New Tai Lue shaping engine from South-East Asian to default,
1596 reflecting change in Unicode encoding model.
1597 - Add hb-shape --font-size. Can take up to two numbers for separate
1599 - Fix CoreText and FreeType scale issues with negative scales.
1600 - Reject blobs larger than 2GB. This might break some icu-le-hb clients
1601 that need security fixes. See:
1602 http://www.icu-project.org/trac/ticket/11450
1603 - Avoid accessing font tables during face destruction, in casce rogue
1604 clients released face data already.
1605 - Fix up gobject-introspection a bit. Python bindings kinda working.
1609 hb_ft_face_create_referenced()
1610 hb_ft_font_create_referenced()
1613 Overview of changes leading to 0.9.37
1614 Wednesday, December 17, 2014
1615 =====================================
1617 - Fix out-of-bounds access in Context lookup format 3.
1618 - Indic: Allow ZWJ/ZWNJ before syllable modifiers.
1621 Overview of changes leading to 0.9.36
1622 Thursday, November 20, 2014
1623 =====================================
1625 - First time that three months went by without a release since
1626 0.9.2 was released on August 10, 2012!
1627 - Fix performance bug in hb_ot_collect_glyphs():
1628 https://bugzilla.mozilla.org/show_bug.cgi?id=1090869
1629 - Add basic vertical-text support to hb-ot-font.
1633 Overview of changes leading to 0.9.35
1634 Saturday, August 13, 2014
1635 =====================================
1637 - Fix major shape-plan caching bug when more than one shaper were
1638 provided to hb_shape_full() (as exercised by XeTeX).
1639 http://www.mail-archive.com/debian-bugs-dist@lists.debian.org/msg1246370.html
1640 - Fix Arabic fallback shaping regression. This was broken in 0.9.32.
1641 - Major hb-coretext fixes. That backend is complete now, including
1642 respecing buffer direction and language, down to vertical writing.
1643 - Build fixes for Windows CE. Should build fine now.
1645 Use atexit() only if it's safe to call from shared library
1646 https://bugs.freedesktop.org/show_bug.cgi?id=82246
1647 Mandaic had errors in its Unicode Joining_Type
1648 https://bugs.freedesktop.org/show_bug.cgi?id=82306
1651 * hb_buffer_clear_contents() does not reset buffer flags now.
1653 After 763e5466c0a03a7c27020e1e2598e488612529a7, one doesn't
1654 need to set flags for different pieces of text. The flags now
1655 are something the client sets up once, depending on how it
1656 actually uses the buffer. As such, don't clear it in
1659 I don't expect any changes to be needed to any existing client.
1662 Overview of changes leading to 0.9.34
1663 Saturday, August 2, 2014
1664 =====================================
1666 - hb_feature_from_string() now accepts CSS font-feature-settings format.
1667 - As a result, hb-shape / hb-view --features also accept CSS-style strings.
1668 Eg, "'liga' off" is accepted now.
1669 - Add old-spec Myanmar shaper:
1670 https://bugs.freedesktop.org/show_bug.cgi?id=81775
1671 - Don't apply 'calt' in Hangul shaper.
1672 - Fix mark advance zeroing for Hebrew shaper:
1673 https://bugs.freedesktop.org/show_bug.cgi?id=76767
1674 - Implement Windows-1256 custom Arabic shaping. Only built on Windows,
1675 and requires help from get_glyph(). Used by Firefox.
1676 https://bugzilla.mozilla.org/show_bug.cgi?id=1045139
1677 - Disable 'liga' in vertical text.
1681 * Make HB_BUFFER_FLAG_BOT/EOT easier to use.
1683 Previously, we expected users to provide BOT/EOT flags when the
1684 text *segment* was at paragraph boundaries. This meant that for
1685 clients that provide full paragraph to HarfBuzz (eg. Pango), they
1688 hb_buffer_set_flags (hb_buffer,
1689 (item_offset == 0 ? HB_BUFFER_FLAG_BOT : 0) |
1690 (item_offset + item_length == paragraph_length ?
1691 HB_BUFFER_FLAG_EOT : 0));
1693 hb_buffer_add_utf8 (hb_buffer,
1694 paragraph_text, paragraph_length,
1695 item_offset, item_length);
1697 After this change such clients can simply say:
1699 hb_buffer_set_flags (hb_buffer,
1700 HB_BUFFER_FLAG_BOT | HB_BUFFER_FLAG_EOT);
1702 hb_buffer_add_utf8 (hb_buffer,
1703 paragraph_text, paragraph_length,
1704 item_offset, item_length);
1706 Ie, HarfBuzz itself checks whether the segment is at the beginning/end
1707 of the paragraph. Clients that only pass item-at-a-time to HarfBuzz
1708 continue not setting any flags whatsoever.
1710 Another way to put it is: if there's pre-context text in the buffer,
1711 HarfBuzz ignores the BOT flag. If there's post-context, it ignores
1715 Overview of changes leading to 0.9.33
1716 Tuesday, July 22, 2014
1717 =====================================
1719 - Turn off ARabic 'cswh' feature that was accidentally turned on.
1720 - Add HB_TAG_MAX_SIGNED.
1721 - Make hb_face_make_immutable() really make face immutable!
1722 - Windows build fixes.
1725 Overview of changes leading to 0.9.32
1726 Thursday, July 17, 2014
1727 =====================================
1729 - Apply Arabic shaping features in spec order exactly.
1730 - Another fix for Mongolian free variation selectors.
1731 - For non-Arabic scripts in Arabic shaper apply 'rlig' and 'calt'
1733 - Minor adjustment to U+FFFD logic.
1734 - Fix hb-coretext build.
1737 Overview of changes leading to 0.9.31
1738 Wednesday, July 16, 2014
1739 =====================================
1741 - Only accept valid UTF-8/16/32; we missed many cases before.
1742 - Better shaping of invalid UTF-8/16/32. Falls back to
1743 U+FFFD REPLACEMENT CHARACTER now.
1744 - With all changes in this release, the buffer will contain fully
1745 valid Unicode after hb_buffer_add_utf8/16/32 no matter how
1746 broken the input is. This can be overridden though. See below.
1747 - Fix Mongolian Variation Selectors for fonts without GDEF.
1748 - Fix minor invalid buffer access.
1749 - Accept zh-Hant and zh-Hans language tags. hb_ot_tag_to_language()
1750 now uses these instead of private tags.
1753 * hb_buffer_add_codepoints(). This does what hb_buffer_add_utf32()
1754 used to do, ie. no validity check on the input at all. add_utf32
1755 now replaces invalid Unicode codepoints with the replacement
1756 character (see below).
1757 * hb_buffer_set_replacement_codepoint()
1758 * hb_buffer_get_replacement_codepoint()
1759 Previously, in hb_buffer_add_utf8 and hb_buffer_add_utf16, when
1760 we detected broken input, we replaced that with (hb_codepoint_t)-1.
1761 This has changed to use U+FFFD now, but can be changed using these
1765 Overview of changes leading to 0.9.30
1766 Wednesday, July 9, 2014
1767 =====================================
1769 - Update to Unicode 7.0.0:
1770 * New scripts Manichaean and Psalter Pahlavi are shaped using
1772 * All the other new scripts to through the generic shaper for
1774 - Minor Indic improvements.
1775 - Fix graphite2 backend cluster mapping [crasher!]
1777 * New HB_SCRIPT_* values for Unicode 7.0 scripts.
1778 * New function hb_ot_layout_language_get_required_feature().
1782 Overview of changes leading to 0.9.29
1783 Thursday, May 29, 2014
1784 =====================================
1786 - Implement cmap in hb-ot-font.h. No variation-selectors yet.
1787 - Myanmar: Allow MedialYa+Asat.
1788 - Various Indic fixes:
1789 * Support most characters in Extended Devanagary and Vedic
1791 * Allow digits and a some punctuation as consonant placeholders.
1795 Overview of changes leading to 0.9.28
1796 Monday, April 28, 2014
1797 =====================================
1799 - Unbreak old-spec Indic shaping. (bug 76705)
1800 - Fix shaping of U+17DD and U+0FC6.
1801 - Add HB_NO_MERGE_CLUSTERS build option. NOT to be enabled by default
1802 for shipping libraries. It's an option for further experimentation
1803 right now. When we are sure how to do it properly, we will add
1804 public run-time API for the functionality.
1808 Overview of changes leading to 0.9.27
1809 Tuesday, March 18, 2014
1810 =====================================
1812 - Don't use "register" storage class specifier
1813 - Wrap definition of free_langs() with HAVE_ATEXIT
1814 - Add coretext_aat shaper and hb_coretext_face_create() constructor
1815 - If HAVE_ICU_BUILTIN is defined, use hb-icu Unicode callbacks
1816 - Add Myanmar test case from OpenType Myanmar spec
1817 - Only do fallback Hebrew composition if no GPOS 'mark' available
1818 - Allow bootstrapping without gtk-doc
1819 - Use AM_MISSING_PROG for ragel and git
1820 - Typo in ucdn's Makefile.am
1821 - Improve MemoryBarrier() implementation
1824 Overview of changes leading to 0.9.26
1825 Thursday, January 30, 2014
1826 =====================================
1829 - Fix application of 'rtlm' feature.
1830 - Automatically apply frac/numr/dnom around U+2044 FRACTION SLASH.
1831 - New header: hb-ot-shape.h
1832 - Uniscribe: fix scratch-buffer accounting.
1833 - Reorder Tai Tham SAKOT to after tone-marks.
1834 - Add Hangul shaper.
1836 hb-ot-shape-complex-hangul.cc
1837 hb-ot-shape-complex-hebrew.cc
1838 hb-ot-shape-complex-tibetan.cc
1839 - Disable 'cswh' feature in Arabic shaper.
1840 - Coretext: better handle surrogate pairs.
1841 - Add HB_TAG_MAX and _HB_SCRIPT_MAX_VALUE.
1844 Overview of changes leading to 0.9.25
1845 Wednesday, December 4, 2013
1846 =====================================
1848 - Myanmar shaper improvements.
1849 - Avoid font fallback in CoreText backend.
1850 - Additional OpenType language tag mappiongs.
1851 - More aggressive shape-plan caching.
1852 - Build with / require automake 1.13.
1853 - Build with libtool 2.4.2.418 alpha to support ppc64le.
1856 Overview of changes leading to 0.9.24
1857 Tuesday, November 13, 2013
1858 =====================================
1860 - Misc compiler warning fixes with clang.
1861 - No functional changes.
1864 Overview of changes leading to 0.9.23
1865 Monday, October 28, 2013
1866 =====================================
1868 - "Udupi HarfBuzz Hackfest", Paris, October 14..18 2013.
1869 - Fix (Chain)Context recursion with non-monotone lookup positions.
1870 - Misc Indic bug fixes.
1871 - New Javanese / Buginese shaping, similar to Windows 8.1.
1874 Overview of changes leading to 0.9.22
1875 Thursday, October 3, 2013
1876 =====================================
1878 - Fix use-after-end-of-scope in hb_language_from_string().
1879 - Fix hiding of default_ignorables if font doesn't have space glyph.
1880 - Protect against out-of-range lookup indices.
1884 * Added hb_ot_layout_table_get_lookup_count()
1887 Overview of changes leading to 0.9.21
1888 Monday, September 16, 2013
1889 =====================================
1891 - Rename gobject-introspection library name from harfbuzz to HarfBuzz.
1892 - Remove (long disabled) hb-old and hb-icu-le test shapers.
1893 - Misc gtk-doc and gobject-introspection annotations.
1897 * Add HB_SET_VALUE_INVALID
1899 Overview of changes leading to 0.9.20
1900 Thursday, August 29, 2013
1901 =====================================
1904 - Misc substitute_closure() fixes.
1908 - gtk-doc boilerplate integrated. Docs are built now, but
1909 contain no contents. By next release hopefully we have
1910 some content in. Enable using --enable-gtk-doc.
1912 GObject and Introspection:
1913 - Added harfbuzz-gobject library (hb-gobject.h) that has type
1914 bindings for all HarfBuzz objects and enums. Enable using
1916 - Added gobject-introspection boilerplate. Nothing useful
1917 right now. Work in progress. Gets enabled automatically if
1918 --with-gobject is used. Override with --disable-introspection.
1921 - Apply 'mark' in Myanmar shaper.
1922 - Don't apply 'dlig' by default.
1925 - Support user features.
1926 - Fix loading of fonts that are also installed on the system.
1927 - Fix shaping of Arabic Presentation Forms.
1928 - Fix build with wide chars.
1931 - Support user features.
1934 - hb_face_t code moved to hb-face.h / hb-face.cc.
1935 - Added hb-deprecated.h.
1938 - Added HB_DISABLE_DEPRECATED.
1939 - Deprecated HB_SCRIPT_CANADIAN_ABORIGINAL; replaced by
1940 HB_SCRIPT_CANADIAN_SYLLABICS.
1941 - Deprecated HB_BUFFER_FLAGS_DEFAULT; replaced by
1942 HB_BUFFER_FLAG_DEFAULT.
1943 - Deprecated HB_BUFFER_SERIALIZE_FLAGS_DEFAULT; replaced by
1944 HB_BUFFER_SERIALIZE_FLAG_DEFAULT.
1947 Overview of changes leading to 0.9.19
1948 Tuesday, July 16, 2013
1949 =====================================
1952 - Better handling of multiple variation selectors in a row.
1953 - Pass on variation selector to GSUB if not consumed by cmap.
1954 - Fix undefined memory access.
1955 - Add Javanese config to Indic shaper.
1958 Overview of changes leading to 0.9.18
1959 Tuesday, May 28, 2013
1960 =====================================
1964 - All unneeded code is all disabled by default,
1966 - Uniscribe and CoreText shapers can be enabled with their --with options,
1968 - icu_le and old shapers cannot be enabled for now,
1970 - glib, freetype, and cairo will be detected automatically.
1971 They can be force on/off'ed with their --with options,
1973 - icu and graphite2 are default off, can be enabled with their --with
1976 Moreover, ICU support is now build into a separate library:
1977 libharfbuzz-icu.so, and a new harfbuzz-icu.pc is shipped for it.
1978 Distros can enable ICU now without every application on earth
1979 getting linked to via libharfbuzz.so.
1981 For distros I recommend that they make sure they are building --with-glib
1982 --with-freetype --with-cairo, --with-icu, and optionally --with-graphite2;
1983 And package harfbuzz and harfbuzz-icu separately.
1986 Overview of changes leading to 0.9.17
1987 Monday, May 20, 2013
1988 =====================================
1991 - Fix bug in hb_set_get_min().
1992 - Fix regression with Arabic mark positioning / width-zeroing.
1994 Overview of changes leading to 0.9.16
1995 Friday, April 19, 2013
1996 =====================================
1998 - Major speedup in OpenType lookup processing. With the Amiri
1999 Arabic font, this release is over 3x faster than previous
2000 release. All scripts / languages should see this speedup.
2002 - New --num-iterations option for hb-shape / hb-view; useful for
2005 Overview of changes leading to 0.9.15
2006 Friday, April 05, 2013
2007 =====================================
2010 - Fix crasher in graphite2 shaper.
2011 - Fix Arabic mark width zeroing regression.
2012 - Don't compose Hangul jamo into Unicode syllables.
2015 Overview of changes leading to 0.9.14
2016 Thursday, March 21, 2013
2017 =====================================
2020 - Fix time-consuming sanitize with malicious fonts.
2021 - Implement hb_buffer_deserialize_glyphs() for both json and text.
2022 - Do not ignore Hangul filler characters.
2024 * Fix Malayalam pre-base reordering interaction with post-forms.
2025 * Further adjust ZWJ handling. Should fix known regressions from
2029 Overview of changes leading to 0.9.13
2030 Thursday, February 25, 2013
2031 =====================================
2034 - Ngapi HarfBuzz Hackfest in London (February 2013):
2035 * Fixed all known Indic bugs,
2036 * New Win8-style Myanmar shaper,
2037 * New South-East Asian shaper for Tai Tham, Cham, and New Tai Lue,
2038 * Smartly ignore Default_Ignorable characters (joiners, etc) wheb
2039 matching GSUB/GPOS lookups,
2040 * Fix 'Phags-Pa U+A872 shaping,
2041 * Fix partial disabling of default-on features,
2042 * Allow disabling of TrueType kerning.
2043 - Fix possible crasher with broken fonts with overlapping tables.
2044 - Removed generated files from git again. So, one needs ragel to
2045 bootstrap from the git tree.
2048 - hb_shape() and related APIs now abort if buffer direction is
2049 HB_DIRECTION_INVALID. Previously, hb_shape() was calling
2050 hb_buffer_guess_segment_properties() on the buffer before
2051 shaping. The heuristics in that function are fragile. If the
2052 user really wants the old behvaior, they can call that function
2053 right before calling hb_shape() to get the old behavior.
2054 - hb_blob_create_sub_blob() always creates sub-blob with
2055 HB_MEMORY_MODE_READONLY. See comments for the reason.
2058 Overview of changes leading to 0.9.12
2059 Thursday, January 18, 2013
2060 =====================================
2062 - Build fixes for Sun compiler.
2065 Overview of changes leading to 0.9.11
2066 Thursday, January 10, 2013
2067 =====================================
2070 - Fix GPOS mark attachment with null Anchor offsets.
2071 - [Indic] Fix old-spec reordering of viramas if sequence ends in one.
2072 - Fix multi-threaded shaper data creation crash.
2073 - Add atomic ops for Solaris.
2076 - Rename hb_buffer_clear() to hb_buffer_clear_contents().
2079 Overview of changes leading to 0.9.10
2080 Thursday, January 3, 2013
2081 =====================================
2083 - [Indic] Fixed rendering of Malayalam dot-reph
2084 - Updated OT language tags.
2085 - Updated graphite2 backend.
2086 - Improved hb_ot_layout_get_size_params() logic.
2087 - Improve hb-shape/hb-view help output.
2088 - Fixed hb-set.h implementation to not crash.
2089 - Fixed various issues with hb_ot_layout_collect_lookups().
2090 - Various build fixes.
2094 hb_graphite2_face_get_gr_face()
2095 hb_graphite2_font_get_gr_font()
2096 hb_coretext_face_get_cg_font()
2100 hb_ot_layout_get_size_params()
2103 Overview of changes leading to 0.9.9
2104 Wednesday, December 5, 2012
2105 ====================================
2107 - Fix build on Windows.
2108 - Minor improvements.
2111 Overview of changes leading to 0.9.8
2112 Tuesday, December 4, 2012
2113 ====================================
2116 - Actually implement hb_shape_plan_get_shaper ().
2117 - Make UCDB data tables const.
2118 - Lots of internal refactoring in OTLayout tables.
2119 - Flesh out hb_ot_layout_lookup_collect_glyphs().
2123 hb_ot_layout_collect_lookups()
2124 hb_ot_layout_get_size_params()
2127 Overview of changes leading to 0.9.7
2128 Sunday, November 21, 2012
2129 ====================================
2132 HarfBuzz "All-You-Can-Eat-Sushi" (aka Vancouver) Hackfest and follow-on fixes.
2134 - Fix Arabic contextual joining using pre-context text.
2135 - Fix Sinhala "split matra" mess.
2136 - Fix Khmer shaping with broken fonts.
2137 - Implement Thai "PUA" shaping for old fonts.
2138 - Do NOT route Kharoshthi script through the Indic shaper.
2139 - Disable fallback positioning for Indic and Thai shapers.
2143 hb-shape / hb-view changes:
2145 - Add --text-before and --text-after
2146 - Add --bot / --eot / --preserve-default-ignorables
2147 - hb-shape --output-format=json
2156 HB_BUFFER_FLAGS_DEFAULT
2159 HB_BUFFER_FLAG_PRESERVE_DEFAULT_IGNORABLES
2161 hb_buffer_set_flags()
2162 hb_buffer_get_flags()
2164 HB_BUFFER_SERIALIZE_FLAGS
2165 hb_buffer_serialize_glyphs()
2166 hb_buffer_deserialize_glyphs()
2167 hb_buffer_serialize_list_formats()
2171 hb_set_get_population()
2174 hb_face_[sg]et_glyph_count()
2176 hb_segment_properties_t
2177 HB_SEGMENT_PROPERTIES_DEFAULT
2178 hb_segment_properties_equal()
2179 hb_segment_properties_hash()
2181 hb_buffer_set_segment_properties()
2182 hb_buffer_get_segment_properties()
2184 hb_ot_layout_glyph_class_t
2185 hb_ot_layout_get_glyph_class()
2186 hb_ot_layout_get_glyphs_in_class()
2189 hb_shape_plan_create()
2190 hb_shape_plan_create_cached()
2191 hb_shape_plan_get_empty()
2192 hb_shape_plan_reference()
2193 hb_shape_plan_destroy()
2194 hb_shape_plan_set_user_data()
2195 hb_shape_plan_get_user_data()
2196 hb_shape_plan_execute()
2197 hb_shape_plan_get_shaper()
2199 hb_ot_shape_plan_collect_lookups()
2204 - Remove "mask" parameter from hb_buffer_add().
2205 - Rename hb_ot_layout_would_substitute_lookup() and hb_ot_layout_substitute_closure_lookup().
2206 - hb-set.h API const correction.
2207 - Renamed hb_set_min/max() to hb_set_get_min/max().
2208 - Rename hb_ot_layout_feature_get_lookup_indexes() to hb_ot_layout_feature_get_lookups().
2209 - Rename hb_buffer_guess_properties() to hb_buffer_guess_segment_properties().
2213 Overview of changes leading to 0.9.6
2214 Sunday, November 13, 2012
2215 ====================================
2217 - Don't clear pre-context text if no new context is provided.
2218 - Fix ReverseChainingSubstLookup, which was totally borked.
2219 - Adjust output format of hb-shape a bit.
2220 - Include config.h.in in-tree. Makes it easier for alternate build systems.
2221 - Fix hb_buffer_set_length(buffer, 0) invalid memory allocation.
2222 - Use ICU LayoutEngine's C API instead of C++. Avoids much headache.
2223 - Drop glyphs for all of Unicode Default_Ignorable characters.
2227 - Enable 'dlig' and 'mset' features in Arabic shaper.
2228 - Implement 'Phags-pa shaping, improve Mongolian.
2231 - Decompose Sinhala split matras the way old HarfBuzz / Pango did.
2232 - Initial support for Consonant Medials.
2233 - Start adding new-style Myanmar shaping.
2234 - Make reph and 'pref' logic introspect the font.
2235 - Route Meetei-Mayek through the Indic shaper.
2236 - Don't apply 'liga' in Indic shaper.
2237 - Improve Malayalam pre-base reordering Ra interaction with Chillus.
2241 Overview of changes leading to 0.9.5
2242 Sunday, October 14, 2012
2243 ====================================
2245 - Synthetic-GSUB Arabic fallback shaping.
2247 - Misc Indic improvements.
2249 - Add build system support for pthread.
2251 - Imported UCDN for in-tree Unicode callbacks implementation.
2253 - Context-aware Arabic joining.
2259 hb_feature_to/from-string()
2260 hb_buffer_[sg]et_content_type()
2264 Overview of changes leading to 0.9.4
2265 Tuesday, Sep 03, 2012
2266 ====================================
2268 - Indic improvements with old-spec Malayalam.
2270 - Better fallback glyph positioning, specially with Thai / Lao marks.
2272 - Implement dotted-circle insertion.
2274 - Better Arabic fallback shaping / ligation.
2276 - Added ICU LayoutEngine backend for testing. Call it by the 'icu_le' name.
2282 Overview of changes leading to 0.9.3
2283 Friday, Aug 18, 2012
2284 ====================================
2286 - Fixed fallback mark positioning for left-to-right text.
2288 - Improve mark positioning for the remaining combining classes.
2290 - Unbreak Thai and fallback Arabic shaping.
2292 - Port Arabic shaper to shape-plan caching.
2294 - Use new ICU normalizer functions.
2298 Overview of changes leading to 0.9.2
2299 Friday, Aug 10, 2012
2300 ====================================
2302 - Over a thousand commits! This is the first major release of HarfBuzz.
2304 - HarfBuzz is feature-complete now! It should be in par, or better, than
2305 both Pango's shapers and old HarfBuzz / Qt shapers.
2307 - New Indic shaper, supporting main Indic scripts, Sinhala, and Khmer.
2309 - Improved Arabic shaper, with fallback Arabic shaping, supporting Arabic,
2310 Sinhala, N'ko, Mongolian, and Mandaic.
2312 - New Thai / Lao shaper.
2314 - Tibetan / Hangul support in the generic shaper.
2316 - Synthetic GDEF support for fonts without a GDEF table.
2318 - Fallback mark positioning for fonts without a GPOS table.
2320 - Unicode normalization shaping heuristic during glyph mapping.
2322 - New experimental Graphite2 backend.
2324 - New Uniscribe backend (primarily for testing).
2326 - New CoreText backend (primarily for testing).
2328 - Major optimization and speedup.
2330 - Test suites and testing infrastructure (work in progress).
2332 - Greatly improved hb-view cmdline tool.
2334 - hb-shape cmdline tool.
2336 - Unicode 6.1 support.
2338 Summary of API changes:
2342 - Users are expected to only include main header files now (ie. hb.h,
2343 hb-glib.h, hb-ft.h, ...)
2345 - All struct tag names had their initial underscore removed.
2346 Ie. "struct _hb_buffer_t" is "struct hb_buffer_t" now.
2348 - All set_user_data() functions now take a "replace" boolean parameter.
2350 - hb_buffer_create() takes zero arguments now.
2351 Use hb_buffer_pre_allocate() to pre-allocate.
2353 - hb_buffer_add_utf*() now accept -1 for length parameters,
2354 meaning "nul-terminated".
2356 - hb_direction_t enum values changed.
2358 - All *_from_string() APIs now take a length parameter to allow for
2359 non-nul-terminated strings. A -1 length means "nul-terminated".
2361 - Typedef for hb_language_t changed.
2363 - hb_get_table_func_t renamed to hb_reference_table_func_t.
2365 - hb_ot_layout_table_choose_script()
2367 - Various renames in hb-unicode.h.
2371 - hb_buffer_guess_properties()
2372 Automatically called by hb_shape().
2374 - hb_buffer_normalize_glyphs()
2376 - hb_tag_from_string()
2382 - hb_face_reference_blob()
2383 - hb_face_[sg]et_index()
2384 - hb_face_set_upem()
2386 - hb_font_get_glyph_name_func_t
2387 hb_font_get_glyph_from_name_func_t
2388 hb_font_funcs_set_glyph_name_func()
2389 hb_font_funcs_set_glyph_from_name_func()
2390 hb_font_get_glyph_name()
2391 hb_font_get_glyph_from_name()
2392 hb_font_glyph_to_string()
2393 hb_font_glyph_from_string()
2395 - hb_font_set_funcs_data()
2397 - hb_ft_font_set_funcs()
2398 - hb_ft_font_get_face()
2400 - hb-gobject.h (work in progress)
2402 - hb_ot_shape_glyphs_closure()
2403 hb_ot_layout_substitute_closure_lookup()
2409 - hb_unicode_combining_class_t
2411 - hb_unicode_compose_func_t
2412 hb_unicode_decompose_func_t
2413 hb_unicode_decompose_compatibility_func_t
2414 hb_unicode_funcs_set_compose_func()
2415 hb_unicode_funcs_set_decompose_func()
2416 hb_unicode_funcs_set_decompose_compatibility_func()
2417 hb_unicode_compose()
2418 hb_unicode_decompose()
2419 hb_unicode_decompose_compatibility()
2423 - hb_ft_get_font_funcs()
2425 - hb_ot_layout_substitute_start()
2426 hb_ot_layout_substitute_lookup()
2427 hb_ot_layout_substitute_finish()
2428 hb_ot_layout_position_start()
2429 hb_ot_layout_position_lookup()
2430 hb_ot_layout_position_finish()
2434 Overview of changes leading to 0.6.0
2435 Friday, May 27, 2011
2436 ====================================
2438 - Vertical text support in GPOS
2439 - Almost all API entries have unit tests now, under test/
2440 - All thread-safety issues are fixed
2442 Summary of API changes follows.
2449 hb_language_get_default()
2450 hb_direction_to_string()
2451 hb_direction_from_string()
2452 hb_script_get_horizontal_direction()
2456 hb_category_t renamed to hb_unicode_general_category_t
2459 hb_language_t is a typed pointers now
2465 * Use ISO 15924 tags for hb_script_t:
2468 hb_script_from_iso15924_tag()
2469 hb_script_to_iso15924_tag()
2470 hb_script_from_string()
2473 HB_SCRIPT_* enum members changed value.
2476 * Buffer API streamlined:
2480 hb_buffer_set_length()
2481 hb_buffer_allocation_successful()
2484 hb_buffer_ensure() renamed to hb_buffer_pre_allocate()
2485 hb_buffer_add_glyph() renamed to hb_buffer_add()
2489 hb_buffer_clear_positions()
2492 hb_buffer_get_glyph_infos() takes an out length parameter now
2493 hb_buffer_get_glyph_positions() takes an out length parameter now
2496 * Blob API streamlined:
2500 hb_blob_get_data_writable()
2503 hb_blob_create_empty() renamed to hb_blob_get_empty()
2508 hb_blob_is_writable()
2509 hb_blob_try_writable()
2512 hb_blob_create() takes user_data before destroy now
2515 * Unicode functions API:
2517 o Unicode function vectors can subclass other unicode function vectors now.
2518 Unimplemented callbacks in the subclass automatically chainup to the parent.
2520 o All hb_unicode_funcs_t callbacks take a user_data now. Their setters
2521 take a user_data and its respective destroy callback.
2524 hb_unicode_funcs_get_empty()
2525 hb_unicode_funcs_get_default()
2526 hb_unicode_funcs_get_parent()
2529 hb_unicode_funcs_create() now takes a parent_funcs.
2531 o Removed func getter functions:
2532 hb_unicode_funcs_get_mirroring_func()
2533 hb_unicode_funcs_get_general_category_func()
2534 hb_unicode_funcs_get_script_func()
2535 hb_unicode_funcs_get_combining_class_func()
2536 hb_unicode_funcs_get_eastasian_width_func()
2542 hb_face_get_table() renamed to hb_face_reference_table()
2543 hb_face_create_for_data() renamed to hb_face_create()
2546 hb_face_create_for_tables() takes user_data before destroy now
2547 hb_face_reference_table() returns empty blob instead of NULL
2548 hb_get_table_func_t accepts the face as first parameter now
2552 o Fonts can subclass other fonts now. Unimplemented callbacks in the
2553 subclass automatically chainup to the parent. When chaining up,
2554 scale is adjusted if the parent font has a different scale.
2556 o All hb_font_funcs_t callbacks take a user_data now. Their setters
2557 take a user_data and its respective destroy callback.
2560 hb_font_get_parent()
2561 hb_font_funcs_get_empty()
2562 hb_font_create_sub_font()
2565 hb_font_funcs_copy()
2566 hb_font_unset_funcs()
2568 o Removed func getter functions:
2569 hb_font_funcs_get_glyph_func()
2570 hb_font_funcs_get_glyph_advance_func()
2571 hb_font_funcs_get_glyph_extents_func()
2572 hb_font_funcs_get_contour_point_func()
2573 hb_font_funcs_get_kerning_func()
2576 hb_font_create() takes a face and references it now
2577 hb_font_set_funcs() takes user_data before destroy now
2578 hb_font_set_scale() accepts signed integers now
2579 hb_font_get_contour_point_func_t now takes glyph first, then point_index
2580 hb_font_get_glyph_func_t returns a success boolean now
2583 * Changed object model:
2585 o All object types have a _get_empty() now:
2587 hb_buffer_get_empty()
2590 hb_font_funcs_get_empty()
2591 hb_unicode_funcs_get_empty()
2593 o Added _set_user_data() and _get_user_data() for all object types:
2594 hb_blob_get_user_data()
2595 hb_blob_set_user_data()
2596 hb_buffer_get_user_data()
2597 hb_buffer_set_user_data()
2598 hb_face_get_user_data()
2599 hb_face_set_user_data()
2600 hb_font_funcs_get_user_data()
2601 hb_font_funcs_set_user_data()
2602 hb_font_get_user_data()
2603 hb_font_set_user_data()
2604 hb_unicode_funcs_get_user_data()
2605 hb_unicode_funcs_set_user_data()
2607 o Removed the _get_reference_count() from all object types:
2608 hb_blob_get_reference_count()
2609 hb_buffer_get_reference_count()
2610 hb_face_get_reference_count()
2611 hb_font_funcs_get_reference_count()
2612 hb_font_get_reference_count()
2613 hb_unicode_funcs_get_reference_count()
2615 o Added _make_immutable() and _is_immutable() for all object types except for buffer:
2616 hb_blob_make_immutable()
2617 hb_blob_is_immutable()
2618 hb_face_make_immutable()
2619 hb_face_is_immutable()
2622 * Changed API for vertical text support
2624 o The following callbacks where removed:
2625 hb_font_get_glyph_advance_func_t
2626 hb_font_get_kerning_func_t
2628 o The following new callbacks added instead:
2629 hb_font_get_glyph_h_advance_func_t
2630 hb_font_get_glyph_v_advance_func_t
2631 hb_font_get_glyph_h_origin_func_t
2632 hb_font_get_glyph_v_origin_func_t
2633 hb_font_get_glyph_h_kerning_func_t
2634 hb_font_get_glyph_v_kerning_func_t
2636 o The following API removed as such:
2637 hb_font_funcs_set_glyph_advance_func()
2638 hb_font_funcs_set_kerning_func()
2639 hb_font_get_glyph_advance()
2640 hb_font_get_kerning()
2642 o New API added instead:
2643 hb_font_funcs_set_glyph_h_advance_func()
2644 hb_font_funcs_set_glyph_v_advance_func()
2645 hb_font_funcs_set_glyph_h_origin_func()
2646 hb_font_funcs_set_glyph_v_origin_func()
2647 hb_font_funcs_set_glyph_h_kerning_func()
2648 hb_font_funcs_set_glyph_v_kerning_func()
2649 hb_font_get_glyph_h_advance()
2650 hb_font_get_glyph_v_advance()
2651 hb_font_get_glyph_h_origin()
2652 hb_font_get_glyph_v_origin()
2653 hb_font_get_glyph_h_kerning()
2654 hb_font_get_glyph_v_kerning()
2656 o The following higher-leve API added for convenience:
2657 hb_font_get_glyph_advance_for_direction()
2658 hb_font_get_glyph_origin_for_direction()
2659 hb_font_add_glyph_origin_for_direction()
2660 hb_font_subtract_glyph_origin_for_direction()
2661 hb_font_get_glyph_kerning_for_direction()
2662 hb_font_get_glyph_extents_for_origin()
2663 hb_font_get_glyph_contour_point_for_origin()
2666 * OpenType Layout API:
2669 hb_ot_layout_position_start()
2670 hb_ot_layout_substitute_start()
2671 hb_ot_layout_substitute_finish()
2677 hb_glib_script_to_script()
2678 hb_glib_script_from_script()
2679 hb_icu_script_to_script()
2680 hb_icu_script_from_script()
2683 * Version API added: