| Overview of changes leading to 3.0.0 | 
 | Friday, September 17, 2021 | 
 | ==================================== | 
 | - Unicode 14.0 support (David Corbett). | 
 | - The hb-subset API and the harfbuzz-subset library's ABI are now declared | 
 |   stable. The harfbuzz-subset library would not have been possible without the | 
 |   work of Garret Rieger and Qunxin Liu from Google Fonts, and the earlier work | 
 |   of Michiharu Ariza from Adobe. | 
 | - The hb-style API is now stable and no longer experimental. | 
 |  | 
 | - New API: | 
 | +hb_style_tag_t | 
 | +hb_style_get_value() | 
 | +hb_subset_input_t | 
 | +hb_subset_flags_t | 
 | +hb_subset_sets_t | 
 | +hb_subset_input_create_or_fail() | 
 | +hb_subset_input_reference() | 
 | +hb_subset_input_destroy() | 
 | +hb_subset_input_set_user_data() | 
 | +hb_subset_input_get_user_data() | 
 | +hb_subset_input_unicode_set() | 
 | +hb_subset_input_glyph_set() | 
 | +hb_subset_input_set() | 
 | +hb_subset_input_get_flags() | 
 | +hb_subset_input_set_flags() | 
 | +hb_subset_or_fail() | 
 |  | 
 | - Removed old unstable harfbuzz-subset API: | 
 | -hb_subset_input_nameid_set() | 
 | -hb_subset_input_namelangid_set() | 
 | -hb_subset_input_layout_features_set() | 
 | -hb_subset_input_no_subset_tables_set() | 
 | -hb_subset_input_drop_tables_set() | 
 | -hb_subset_input_set_drop_hints() | 
 | -hb_subset_input_get_drop_hints() | 
 | -hb_subset_input_set_desubroutinize() | 
 | -hb_subset_input_get_desubroutinize() | 
 | -hb_subset_input_set_retain_gids() | 
 | -hb_subset_input_get_retain_gids() | 
 | -hb_subset_input_set_name_legacy() | 
 | -hb_subset_input_get_name_legacy() | 
 | -hb_subset_input_set_overlaps_flag() | 
 | -hb_subset_input_get_overlaps_flag() | 
 | -hb_subset_input_set_notdef_outline() | 
 | -hb_subset_input_get_notdef_outline() | 
 | -hb_subset_input_set_no_prune_unicode_ranges() | 
 | -hb_subset_input_get_no_prune_unicode_ranges() | 
 | -hb_subset() | 
 |  | 
 |  | 
 | Overview of changes leading to 2.9.1 | 
 | Tuesday, September 7, 2021 | 
 | ==================================== | 
 | - Final subset API is in place and if no issues are discovered, it will be the | 
 |   stable subset API of HarfBuzz 3.0.0. Old API is kept to ease transition, but | 
 |   will be removed in 3.0.0. | 
 | - Various fuzzer-found bug fixes. | 
 | - hb_buffer_append() now handles the pre- and post-context which previously | 
 |   were left unchanged in the destination buffer. | 
 | - hb-view / hb-shape now accept following new arguments: | 
 |   o --unicodes-before/after: takes a list of hex numbers that represent Unicode | 
 |     codepoints. | 
 | - Undeprecated API: | 
 |   hb_set_invert() | 
 |  | 
 |  | 
 | Overview of changes leading to 2.9.0 | 
 | Wednesday, August 18, 2021 | 
 | History Repeats Itself (Afghanistan) | 
 | ==================================== | 
 | - Subsetter API is being stabilized, with the first stable API to happen in | 
 |   3.0.0 release (https://github.com/harfbuzz/harfbuzz/issues/3078). | 
 | - Support multiple variation axes with same tag, aka HOI. | 
 | - The “coretext” testing shaper now passes font variations to CoreText. | 
 | - hb-shape/hb-view does not break line at new lines unless text is read from | 
 |   file. | 
 | - hb-view and hb-subset has a --batch now, similar to hb-shape. | 
 | - The --batch mode now uses ; as argument separator instead of : used previously. | 
 | - The --batch in hb-shape does not expect 0th argument anymore. That is, the | 
 |   lines read are interpreted as argv[1:], instead of argv[0:]. | 
 | - The --batch option has been undocumented. We are ready to document it; send | 
 |   feedback if you find it useful. | 
 | - hb-subset got arguments revamps. Added much-requested --gids-file, --glyphs, | 
 |   --glyphs-file, --unicodes-file, supporting ranges in --unicodes. | 
 | - Various bug fixes. | 
 |  | 
 |  | 
 | Overview of changes leading to 2.8.2 | 
 | Tuesday, July 8, 2021 | 
 | ==================================== | 
 | - Shaping LTR digits for RTL scripts now makes the native direction of the | 
 |   digits LTR, applying shaping and positioning rules on the same glyph order as | 
 |   Uniscribe. (Jonathan Kew, Khaled Hosny). | 
 | - Subsetting COLR v1 and CPAL tables is now supported. (Garret Rieger, Qunxin Liu) | 
 | - Various fixes and improvements to the subsetter. (Garret Rieger, Qunxin Liu, Behdad) | 
 | - When applying morx table, mark glyph widths should not be zeroed. (Jonathan Kew) | 
 | - GPOS is preferred over kerx, if GSUB was applied. (Behdad) | 
 | - Regional_Indicator pairs are grouped together when clustering. (Behdad) | 
 | - New API: | 
 | +hb_blob_create_or_fail() | 
 | +hb_blob_create_from_file_or_fail() | 
 | +hb_set_copy() | 
 |  | 
 |  | 
 | Overview of changes leading to 2.8.1 | 
 | Tuesday, May 4, 2021 | 
 | ==================================== | 
 | - Subsetter now fully supports GSUB/GPOS/GDEF tables (including variations); as | 
 |   such, layout tables are retained by subsetter by default. (Garret Rieger, Qunxin Liu) | 
 | - Build scripts no longer check for FontConfig as HarfBuzz does not use it. | 
 | - hb-view supports iTerm2 and kitty inline image protocols (Khaled Hosny), | 
 |   it can also use Chafa for terminal graphics if available (Hans Petter Jansson). | 
 |  | 
 | Overview of changes leading to 2.8.0 | 
 | Tuesday, March 16, 2021 | 
 | ==================================== | 
 | - Shape joining scripts other than Arabic/Syriac using the Universal Shaping Engine. | 
 |   Previously these were shaped using the generalized Arabic shaper. (David Corbett) | 
 | - Fix regression in shaping of U+0B55 ORIYA SIGN OVERLINE. (David Corbett) | 
 | - Update language tags. (David Corbett) | 
 | - Variations: reduce error: do not round each interpolated delta. (Just van Rossum)  | 
 | - Documentation improvements. (Khaled Hosny, Nathan Willis) | 
 | - Subsetter improvements: subsets most, if not all, lookup types now. (Garret Rieger, Qunxin Liu) | 
 | - Fuzzer-found fixes and other improvements when memory failures happen. (Behdad) | 
 | - Removed most atomic implementations now that we have C++11 atomic impl. (Behdad) | 
 | - General codebase upkeep; using more C++11 features: constexpr constructors, etc. (Behdad) | 
 |  | 
 |  | 
 | Overview of changes leading to 2.7.4 | 
 | Sunday, December 27, 2020 | 
 | ==================================== | 
 | - Fix missing --enable-introspection configure option from previous release | 
 |   tarball. | 
 | - Documentation updates. | 
 |  | 
 |  | 
 | Overview of changes leading to 2.7.3 | 
 | Wednesday, December 23, 2020 | 
 | ==================================== | 
 | - Update USE shaper to 2020-08-13 specification, and other improvements. | 
 | - Don’t disable liga feature in myanmar shaper, to match Uniscribe. | 
 | - Improvements to language and script tags handling. | 
 | - Update language system tag registry to OpenType 1.8.4 | 
 | - Support for serializing and deserializing Unicode buffers. Serialized buffers | 
 |   are now delimited with `<>` or `[]` based on whether it is a Unicode or | 
 |   glyphs buffer. | 
 | - Increase buffer work limits to handle fonts with many complex lookups. | 
 | - Handle more shaping operations in trace output. | 
 | - Memory access fixes. | 
 | - More OOM fixes. | 
 | - Improved documentation. | 
 | - Build system improvements. | 
 | - New API: | 
 | +hb_buffer_has_positions() | 
 | +hb_buffer_serialize() | 
 | +hb_buffer_serialize_unicode() | 
 | +hb_buffer_deserialize_unicode() | 
 |  | 
 |  | 
 | Overview of changes leading to 2.7.2 | 
 | Saturday, August 29, 2020 | 
 | ==================================== | 
 | - Fix a regression in the previous release that caused a crash with Kaithi. | 
 | - More OOM fixes. | 
 |  | 
 |  | 
 | Overview of changes leading to 2.7.1 | 
 | Thursday, August 13, 2020 | 
 | ==================================== | 
 | - ot-funcs now handles variable empty glyphs better when hvar/vvar isn't present. | 
 | - Reverted a GDEF processing regression. | 
 | - A couple of fixes to handle OOM better. | 
 |  | 
 |  | 
 | Overview of changes leading to 2.7.0 | 
 | Saturday, July 25, 2020 | 
 | ==================================== | 
 | - Use an implementation for round that always rounds up, some minor fluctuations | 
 |   are expected on var font specially when hb-ot callback is used. | 
 | - Fix an AAT's `kerx` issue on broken rendering of Devanagari Sangam MN. | 
 | - Remove AAT's `lcar` table support from _get_ligature_carets API, not even much | 
 |   use on macOS installed fonts (only two files).  GDEF support is the recommended | 
 |   one and expected to work properly after issues fixed two releases ago. | 
 | - Minor memory fixes to handle OOM better specially in hb-ft. | 
 | - Minor .so files versioning scheme change and remove stable/unstable scheme | 
 |   differences, was never used in practice (always default to stable scheme). | 
 | - We are now suggesting careful packaging of the library using meson, | 
 |   https://github.com/harfbuzz/harfbuzz/wiki/Notes-on-migration-to-meson | 
 |   for more information. | 
 | - Distribution package URL is changed, either use GitHub generated tarballs, | 
 |   `https://github.com/harfbuzz/harfbuzz/archive/$pkgver.tar.gz` | 
 |   or, even more preferably use commit hash of the release and git checkouts like, | 
 |   `git+https://github.com/harfbuzz/harfbuzz#commit=$commit` | 
 |  | 
 |  | 
 | Overview of changes leading to 2.6.8 | 
 | Monday, June 22, 2020 | 
 | ==================================== | 
 | - New API to fetch glyph alternates from GSUB table. | 
 | - hb-coretext build fix for macOS < 10.10. | 
 | - Meson build fixes, cmake port removal is postponed but please prepare for | 
 |   it and give us feedback. | 
 |   Autotools is still our main build system however please consider | 
 |   experimenting with meson also for packaging the library. | 
 | - New API: | 
 | +hb_ot_layout_lookup_get_glyph_alternates() | 
 |  | 
 |  | 
 | Overview of changes leading to 2.6.7 | 
 | Wednesday, June 3, 2020 | 
 | ==================================== | 
 | - Update to Unicode 13.0.0. | 
 | - Fix hb_ot_layout_get_ligature_carets for fonts without lcar table, it was | 
 |   completely broken for all the other fonts since 2.1.2. | 
 | - As a part of our migration to meson, this release will be the last one | 
 |   to provide cmake port files but autotools still is our main build system. | 
 |   There is a possibility that the next version or the after be released | 
 |   using meson. | 
 |  | 
 |  | 
 | Overview of changes leading to 2.6.6 | 
 | Tuesday, May 12, 2020 | 
 | ==================================== | 
 | - A fix in AAT kerning for Geeza Pro. | 
 | - Better support for resource fork fonts on macOS. | 
 |  | 
 |  | 
 | Overview of changes leading to 2.6.5 | 
 | Friday, April 17, 2020 | 
 | ==================================== | 
 | - Add experimental meson build system.  Autotools is still the primary | 
 |   and supported build system. | 
 | - AAT is now always preferred for horizontal scripts when both AAT and OT | 
 |   layout tables exist at the same time. | 
 | - Subsetter improvements. | 
 | - New API: | 
 | +hb_ft_font_lock_face() | 
 | +hb_ft_font_unlock_face() | 
 |  | 
 |  | 
 | Overview of changes leading to 2.6.4 | 
 | Monday, October 29, 2019 | 
 | ==================================== | 
 | - Small bug fix. | 
 | - Build fixes. | 
 |  | 
 |  | 
 | Overview of changes leading to 2.6.3 | 
 | Monday, October 28, 2019 | 
 | ==================================== | 
 | - Misc small fixes, mostly to build-related issues. | 
 | - New API: | 
 | +hb_font_get_nominal_glyphs() | 
 |  | 
 |  | 
 | Overview of changes leading to 2.6.2 | 
 | Monday, September 30, 2019 | 
 | ==================================== | 
 | - Misc small fixes, mostly to build-related issues. | 
 |  | 
 |  | 
 | Overview of changes leading to 2.6.1 | 
 | Thursday, August 22, 2019 | 
 | ==================================== | 
 | - Fix regression with hb_font_create_sub_font scaling introduced in 2.6.0. | 
 | - Change interpretation of font PTEM size / CoreText font size handling. | 
 |   See https://github.com/harfbuzz/harfbuzz/pull/1484 | 
 | - hb-ot-font: Prefer symbol cmap subtable if present. | 
 | - Apply 'dist'/'abvm'/'blwm' features to all scripts. | 
 | - Drop experimental DirectWrite API. | 
 |  | 
 |  | 
 | Overview of changes leading to 2.6.0 | 
 | Tuesday, August 13, 2019 | 
 | ==================================== | 
 | - New OpenType metrics, baseline, and metadata table access APIs. | 
 | - New API to set font variations to a named-instance. | 
 | - New hb-gdi.h header and API for creating hb_face_t from HFONT. | 
 | - Amalgam: Provide a single-file harfbuzz.cc file for easier alternate building. | 
 | - More size-reduction configurable options, enabled by HB_TINY. | 
 | - New API: | 
 | +hb_font_set_var_named_instance() | 
 | +hb_gdi_face_create() | 
 | +hb_ot_layout_baseline_tag_t | 
 | +hb_ot_layout_get_baseline() | 
 | +hb_ot_meta_tag_t | 
 | +hb_ot_meta_get_entry_tags() | 
 | +hb_ot_meta_reference_entry() | 
 | +hb_ot_metrics_tag_t | 
 | +hb_ot_metrics_get_position() | 
 | +hb_ot_metrics_get_variation() | 
 | +hb_ot_metrics_get_x_variation() | 
 | +hb_ot_metrics_get_y_variation() | 
 |  | 
 |  | 
 | Overview of changes leading to 2.5.3 | 
 | Wednesday, June 26, 2019 | 
 | ==================================== | 
 | - Fix UCD script data for Unicode 10+ scripts.  This was broken since 2.5.0. | 
 | - More optimizations for HB_TINY. | 
 |  | 
 |  | 
 | Overview of changes leading to 2.5.2 | 
 | Thursday, June 20, 2019 | 
 | ==================================== | 
 | - More hb-config.hh facilities to shrink library size, namely when built as | 
 |   HB_TINY. | 
 | - New documentation of custom configurations in CONFIG.md. | 
 | - Fix build on gcc 4.8.  That's supported again. | 
 | - Universal Shaping Engine improvements thanks to David Corbett. | 
 | - API Changes: Undeprecate some horizontal-kerning API and re-enable in hb-ft, | 
 |   such that Type1 fonts will continue kerning. | 
 |  | 
 |  | 
 | Overview of changes leading to 2.5.1 | 
 | Friday, May 31, 2019 | 
 | ==================================== | 
 | - Fix build with various versions of Visual Studio. | 
 | - Improved documentation, thanks to Nathan Willis. | 
 | - Bugfix in subsetting glyf table. | 
 | - Improved scripts for cross-compiling for Windows using mingw. | 
 | - Rename HB_MATH_GLYPH_PART_FLAG_EXTENDER to HB_OT_MATH_GLYPH_PART_FLAG_EXTENDER. | 
 |   A deprecated macro is added for backwards-compatibility. | 
 |  | 
 |  | 
 | Overview of changes leading to 2.5.0 | 
 | Friday, May 24, 2019 | 
 | ==================================== | 
 | - This release does not include much functional changes, but includes major internal | 
 |   code-base changes.  We now require C++11.  Support for gcc 4.8 and earlier has been | 
 |   dropped. | 
 | - New hb-config.hh facility for compiling smaller library for embedded and web usecases. | 
 | - New Unicode Character Databse implementation that is half the size of previously-used | 
 |   UCDN. | 
 | - Subsetter improvements. | 
 | - Improved documentation, thanks to Nathan Willis. | 
 | - Misc shaping fixes. | 
 |  | 
 |  | 
 | Overview of changes leading to 2.4.0 | 
 | Monday, March 25, 2019 | 
 | ==================================== | 
 | - Unicode 12. | 
 | - Misc fixes. | 
 | - Subsetter improvements. | 
 | - New API: | 
 | HB_BUFFER_FLAG_DO_NOT_INSERT_DOTTED_CIRCLE | 
 | hb_directwrite_face_create() | 
 |  | 
 |  | 
 | Overview of changes leading to 2.3.1 | 
 | Wednesday, January 30, 2019 | 
 | ==================================== | 
 | - AAT bug fixes. | 
 | - Misc internal housekeeping cleanup. | 
 |  | 
 |  | 
 | Overview of changes leading to 2.3.0 | 
 | Thursday, December 20, 2018 | 
 | ==================================== | 
 | - Fix regression on big-endian architectures.  Ouch! | 
 | - Misc bug and build fixes. | 
 | - Fix subsetting of simple GSUB/GDEF. | 
 | - Merge CFF / CFF2 support contributed by Adobe.  This mostly involves | 
 |   the subsetter, but also get_glyph_extents on CFF fonts. | 
 |  | 
 | New API in hb-aat.h: | 
 | +hb_aat_layout_has_substitution() | 
 | +hb_aat_layout_has_positioning() | 
 | +hb_aat_layout_has_tracking() | 
 |  | 
 |  | 
 | Overview of changes leading to 2.2.0 | 
 | Thursday, November 29, 2018 | 
 | ==================================== | 
 | - Misc shaping bug fixes. | 
 | - Add font variations named-instance API. | 
 | - Deprecate font variations axis enumeration API and add replacement. | 
 | - AAT shaping improvements: | 
 |   o Fixed 'kern' table Format 2 implementation. | 
 |   o Implement 'feat' table API for feature detection. | 
 |   o Blacklist 'GSUB' table of fonts from 'MUTF' foundry that also have 'morx'. | 
 |  | 
 | New API: | 
 | +hb_aat_layout_feature_type_t | 
 | +hb_aat_layout_feature_selector_t | 
 | +hb_aat_layout_get_feature_types() | 
 | +hb_aat_layout_feature_type_get_name_id | 
 | +hb_aat_layout_feature_selector_info_t | 
 | +HB_AAT_LAYOUT_NO_SELECTOR_INDEX | 
 | +hb_aat_layout_feature_type_get_selector_infos() | 
 | +hb_ot_var_axis_flags_t | 
 | +hb_ot_var_axis_info_t | 
 | +hb_ot_var_get_axis_infos() | 
 | +hb_ot_var_find_axis_info() | 
 | +hb_ot_var_get_named_instance_count() | 
 | +hb_ot_var_named_instance_get_subfamily_name_id() | 
 | +hb_ot_var_named_instance_get_postscript_name_id() | 
 | +hb_ot_var_named_instance_get_design_coords() | 
 |  | 
 | Deprecated API: | 
 | +HB_OT_VAR_NO_AXIS_INDEX | 
 | +hb_ot_var_axis_t | 
 | +hb_ot_var_get_axes() | 
 | +hb_ot_var_find_axis() | 
 |  | 
 |  | 
 | Overview of changes leading to 2.1.3 | 
 | Friday, November 16, 2018 | 
 | ==================================== | 
 | - Fix AAT 'mort' shaping, which was broken in 2.1.2 | 
 |  | 
 |  | 
 | Overview of changes leading to 2.1.2 | 
 | Friday, November 16, 2018 | 
 | ==================================== | 
 | - Various internal changes. | 
 | - AAT shaping improvements: | 
 |   o Implement kern table Format 1 state-machine-based kerning. | 
 |   o Implement cross-stream kerning (cursive positioning, etc). | 
 |   o Ignore emptyish GSUB tables (zero scripts) if morx present. | 
 |   o Don't apply GPOS if morx is being applied.  Matches Apple. | 
 |  | 
 |  | 
 | -Overview of changes leading to 2.1.1 | 
 | Monday, November 5, 2018 | 
 | ==================================== | 
 | - AAT improvements: | 
 |   o Implement 'mort' table. | 
 |   o Implement 'kern' subtables Format 1 and Format 3. | 
 |  | 
 |  | 
 | Overview of changes leading to 2.1.0 | 
 | Tuesday, October 30, 2018 | 
 | ==================================== | 
 | - AAT shaping improvements: | 
 |   o Allow user controlling AAT features, for whole buffer only currently. | 
 |   o Several 'morx' fixes. | 
 |   o Implement tuple-kerns in 'kerx'; Fixes kerning with Apple default | 
 |     San Francisco fonts. | 
 | - Support for color fonts: | 
 |   o COLR/CPAL API to fetch color layers. | 
 |   o SVG table to fetch SVG documents. | 
 |   o CBDT/sbix API to fetch PNG images. | 
 | - New 'name' table API. | 
 | - hb-ot-font now uses 'VORG' table to correctly position CFF glyphs | 
 |   in vertical layout. | 
 | - Various fuzzer-found bug fixes. | 
 |  | 
 | Changed API: | 
 |  | 
 | A type and a macro added in 2.0.0 were renamed: | 
 |  | 
 | hb_name_id_t -> hb_ot_name_id_t | 
 | HB_NAME_ID_INVALID -> HB_OT_NAME_ID_INVALID | 
 |  | 
 | New API: | 
 |  | 
 | +hb_color_t | 
 | +HB_COLOR | 
 | +hb_color_get_alpha() | 
 | +hb_color_get_red() | 
 | +hb_color_get_green() | 
 | +hb_color_get_blue() | 
 | +hb_ot_color_has_palettes() | 
 | +hb_ot_color_palette_get_count() | 
 | +hb_ot_color_palette_get_name_id() | 
 | +hb_ot_color_palette_color_get_name_id() | 
 | +hb_ot_color_palette_flags_t | 
 | +hb_ot_color_palette_get_flags() | 
 | +hb_ot_color_palette_get_colors() | 
 | +hb_ot_color_has_layers() | 
 | +hb_ot_color_layer_t | 
 | +hb_ot_color_glyph_get_layers() | 
 | +hb_ot_color_has_svg() | 
 | +hb_ot_color_glyph_reference_svg() | 
 | +hb_ot_color_has_png() | 
 | +hb_ot_color_glyph_reference_png() | 
 |  | 
 | +hb_ot_name_id_t | 
 | +HB_OT_NAME_ID_INVALID | 
 | +HB_OT_NAME_ID_COPYRIGHT | 
 | +HB_OT_NAME_ID_FONT_FAMILY | 
 | +HB_OT_NAME_ID_FONT_SUBFAMILY | 
 | +HB_OT_NAME_ID_UNIQUE_ID | 
 | +HB_OT_NAME_ID_FULL_NAME | 
 | +HB_OT_NAME_ID_VERSION_STRING | 
 | +HB_OT_NAME_ID_POSTSCRIPT_NAME | 
 | +HB_OT_NAME_ID_TRADEMARK | 
 | +HB_OT_NAME_ID_MANUFACTURER | 
 | +HB_OT_NAME_ID_DESIGNER | 
 | +HB_OT_NAME_ID_DESCRIPTION | 
 | +HB_OT_NAME_ID_VENDOR_URL | 
 | +HB_OT_NAME_ID_DESIGNER_URL | 
 | +HB_OT_NAME_ID_LICENSE | 
 | +HB_OT_NAME_ID_LICENSE_URL | 
 | +HB_OT_NAME_ID_TYPOGRAPHIC_FAMILY | 
 | +HB_OT_NAME_ID_TYPOGRAPHIC_SUBFAMILY | 
 | +HB_OT_NAME_ID_MAC_FULL_NAME | 
 | +HB_OT_NAME_ID_SAMPLE_TEXT | 
 | +HB_OT_NAME_ID_CID_FINDFONT_NAME | 
 | +HB_OT_NAME_ID_WWS_FAMILY | 
 | +HB_OT_NAME_ID_WWS_SUBFAMILY | 
 | +HB_OT_NAME_ID_LIGHT_BACKGROUND | 
 | +HB_OT_NAME_ID_DARK_BACKGROUND | 
 | +HB_OT_NAME_ID_VARIATIONS_PS_PREFIX | 
 | +hb_ot_name_entry_t | 
 | +hb_ot_name_list_names() | 
 | +hb_ot_name_get_utf8() | 
 | +hb_ot_name_get_utf16() | 
 | +hb_ot_name_get_utf32() | 
 |  | 
 |  | 
 | Overview of changes leading to 2.0.2 | 
 | Saturday, October 20, 2018 | 
 | ==================================== | 
 | - Fix two minor memory access issues in AAT tables. | 
 |  | 
 |  | 
 | Overview of changes leading to 2.0.1 | 
 | Friday, October 19, 2018 | 
 | ==================================== | 
 | - Fix hb-version.h reported release version that went wrong (1.8.0) | 
 |   with previous release. | 
 | - Fix extrapolation in 'trak' table. | 
 | - Fix hb-font infinite-recursion issue with some font funcs and | 
 |   subclassed fonts. | 
 | - Implement variation-kerning format in kerx table, although without | 
 |   variation. | 
 | - Fix return value of hb_map_is_empty(). | 
 |  | 
 |  | 
 | Overview of changes leading to 2.0.0 | 
 | Thursday, October 18, 2018 | 
 | ==================================== | 
 | - Added AAT shaping support (morx/kerx/trak). | 
 |   Automatically used if GSUB/GPOS are not available respectively. | 
 |   Set HB_OPTIONS=aat env var to have morx/kerx preferred over | 
 |   GSUB/GPOS. | 
 | - Apply TrueType kern table internally, instead of relying on | 
 |   hb_font_t callbacks. | 
 | - Khmer shaper significantly rewritten to better match Uniscribe. | 
 | - Indic3 tags ('dev3', etc) are passed to USE shaper. | 
 | - .dfont Mac font containers implemented. | 
 | - Script- and language-mapping revamped to better use BCP 47. | 
 | - Misc USE and Indic fixes. | 
 | - Misc everything fixes. | 
 | - Too many things to list.  Biggest release since 0.9.1, with | 
 |   over 500 commits in just over 5 weeks!  Didn't intend it to | 
 |   be a big release.  Just happened to become. | 
 | - hb-ft now locks underlying FT_Face during use. | 
 |  | 
 | API changes: | 
 |  | 
 | - Newly-created hb_font_t's now have our internal "hb-ot-font" | 
 |   callbacks set on them, so they should work out of the box | 
 |   without any callbacks set.  If callbacks are set, everything | 
 |   is back to what it was before, the fallback callbacks are | 
 |   null.  If you to get the internal implementation modified, | 
 |   sub_font it. | 
 |  | 
 | - New hb_font_funcs_set_nominal_glyphs_func() allows speeding | 
 |   up character to glyph mapping. | 
 |  | 
 | New API: | 
 | +HB_FEATURE_GLOBAL_START | 
 | +HB_FEATURE_GLOBAL_END | 
 | +hb_buffer_set_invisible_glyph() | 
 | +hb_buffer_get_invisible_glyph() | 
 | +hb_font_funcs_set_nominal_glyphs_func() | 
 | +hb_ot_layout_table_select_script() | 
 | +hb_ot_layout_script_select_language() | 
 | +hb_ot_layout_feature_get_name_ids() | 
 | +hb_ot_layout_feature_get_characters() | 
 | +hb_name_id_t | 
 | +HB_NAME_ID_INVALID | 
 | +HB_OT_MAX_TAGS_PER_SCRIPT | 
 | +hb_ot_tags_from_script_and_language() | 
 | +hb_ot_tags_to_script_and_language() | 
 |  | 
 | Deprecated API: | 
 | -hb_font_funcs_set_glyph_func() | 
 | -hb_unicode_eastasian_width_func_t | 
 | -hb_unicode_funcs_set_eastasian_width_func() | 
 | -hb_unicode_eastasian_width() | 
 | -hb_unicode_decompose_compatibility_func_t | 
 | -HB_UNICODE_MAX_DECOMPOSITION_LEN | 
 | -hb_unicode_funcs_set_decompose_compatibility_func() | 
 | -hb_unicode_decompose_compatibility() | 
 | -hb_font_funcs_set_glyph_h_kerning_func() | 
 | -hb_font_funcs_set_glyph_v_kerning_func() | 
 | -hb_font_get_glyph_h_kerning() | 
 | -hb_font_get_glyph_v_kerning() | 
 | -hb_font_get_glyph_kerning_for_direction() | 
 | -hb_ot_layout_table_choose_script() | 
 | -hb_ot_layout_script_find_language() | 
 | -hb_ot_tags_from_script() | 
 | -hb_ot_tag_from_language() | 
 |  | 
 |  | 
 | Overview of changes leading to 1.9.0 | 
 | Monday, September 10, 2018 | 
 | ==================================== | 
 | - Added 'cmap' API to hb_face_t. | 
 | - Face-builder API. | 
 | - hb-ot-font re-creation should be much leaner now, as the | 
 |   font tables it uses are cached on hb_face_t now. | 
 | - Internal source header file name changes: | 
 |   hb-*-private.hh is renamed to hb-*.hh. | 
 |  | 
 | New API: | 
 | +HB_UNICODE_MAX | 
 | +hb_face_collect_unicodes() | 
 | +hb_face_collect_variation_selectors() | 
 | +hb_face_collect_variation_unicodes() | 
 | +hb_face_builder_create() | 
 | +hb_face_builder_add_table() | 
 |  | 
 |  | 
 | Overview of changes leading to 1.8.8 | 
 | Tuesday, August 14, 2018 | 
 | ==================================== | 
 | - Fix hb-icu crash on architectures where compare_exchange_weak() can | 
 |   fail falsely.  This bug was introduced in 1.8.4. | 
 |   https://bugs.chromium.org/p/chromium/issues/detail?id=873568 | 
 | - More internal refactoring of atomic operations and singletons. | 
 | - API changes: | 
 |   The following functions do NOT reference their return value before | 
 |   returning: | 
 |   * hb_unicode_funcs_get_default() | 
 |   * hb_glib_get_unicode_funcs() | 
 |   * hb_icu_get_unicode_funcs() | 
 |   This is consistent with their naming ("get", instead of "reference") | 
 |   as well as how they are used in the wild (ie. no one calls destroy() | 
 |   on their return value.) | 
 |  | 
 |  | 
 | Overview of changes leading to 1.8.7 | 
 | Wednesday, August 8, 2018 | 
 | ==================================== | 
 | - Fix assertion failure with GDEF-blacklisted fonts. | 
 |  | 
 |  | 
 | Overview of changes leading to 1.8.6 | 
 | Tuesday, August 7, 2018 | 
 | ==================================== | 
 | - Internal code shuffling. | 
 | - New API to speed up getting advance widths for implementations | 
 |   that have heavy overhead in get_h_advance callback: | 
 | +hb_font_funcs_set_glyph_h_advances_func | 
 | +hb_font_funcs_set_glyph_v_advances_func | 
 | +hb_font_get_glyph_advances_for_direction | 
 | +hb_font_get_glyph_h_advances | 
 | +hb_font_get_glyph_h_advances_func_t | 
 | +hb_font_get_glyph_v_advances | 
 | +hb_font_get_glyph_v_advances_func_t | 
 |  | 
 |  | 
 | Overview of changes leading to 1.8.5 | 
 | Wednesday, August 1, 2018 | 
 | ==================================== | 
 | - Major Khmer shaper improvements to better match Microsoft. | 
 | - Indic bug fixes. | 
 | - Internal improvements to atomic operations. | 
 |  | 
 |  | 
 | Overview of changes leading to 1.8.4 | 
 | Tuesday, July 17, 2018 | 
 | ==================================== | 
 | - Fix build on non-C++11. | 
 | - Use C++-style GCC atomics and C++11 atomics. | 
 |  | 
 |  | 
 | Overview of changes leading to 1.8.3 | 
 | Wednesday, July 11, 2018 | 
 | ==================================== | 
 | - A couple of Indic / USE bug fixes. | 
 | - Disable vectorization, as it was causing unaligned access bus error on | 
 |   certain 32bit architectures. | 
 |  | 
 |  | 
 | Overview of changes leading to 1.8.2 | 
 | Tuesday, July 3, 2018 | 
 | ==================================== | 
 | - Fix infinite loop in Khmer shaper. | 
 | - Improve hb_blob_create_from_file() for streams. | 
 |  | 
 |  | 
 | Overview of changes leading to 1.8.1 | 
 | Tuesday, June 12, 2018 | 
 | ==================================== | 
 | - Fix hb-version.h file generation; last two releases went out with wrong ones. | 
 | - Add correctness bug in hb_set_t operations, introduced in 1.7.7. | 
 | - Remove HB_SUBSET_BUILTIN build option.  Not necessary. | 
 |  | 
 |  | 
 | Overview of changes leading to 1.8.0 | 
 | Tuesday, June 5, 2018 | 
 | ==================================== | 
 | - Update to Unicode 11.0.0. | 
 |  | 
 |  | 
 | Overview of changes leading to 1.7.7 | 
 | Tuesday, June 5, 2018 | 
 | ==================================== | 
 | - Lots of internal changes, but not yet exposed externally. | 
 | - All HarfBuzz objects are significantly smaller in size now. | 
 | - Sinhala: Position repha on top of post-consonant, not base. | 
 |   This better matches Windows 10 behavior, which was changed | 
 |   from previous Windows versions. | 
 | - New build options: | 
 |   o New cpp macro HB_NO_ATEXIT | 
 |   o New cpp macro HB_SUBSET_BUILTIN | 
 | - Significant libharfbuzz-subset changes. API subject to change. | 
 | - New API in libharfbuzz: | 
 |  | 
 | +hb_blob_create_from_file() | 
 | +hb_face_count() | 
 |  | 
 | A hashmap implementation: | 
 | +hb-map.h | 
 | +HB_MAP_VALUE_INVALID | 
 | +hb_map_t | 
 | +hb_map_create() | 
 | +hb_map_get_empty() | 
 | +hb_map_reference() | 
 | +hb_map_destroy() | 
 | +hb_map_set_user_data() | 
 | +hb_map_get_user_data() | 
 | +hb_map_allocation_successful() | 
 | +hb_map_clear() | 
 | +hb_map_is_empty() | 
 | +hb_map_get_population() | 
 | +hb_map_set() | 
 | +hb_map_get() | 
 | +hb_map_del() | 
 | +hb_map_has() | 
 |  | 
 |  | 
 | Overview of changes leading to 1.7.6 | 
 | Wednesday, March 7, 2018 | 
 | ==================================== | 
 |  | 
 | - Fix to hb_set_t binary operations. Ouch. | 
 | - New experimental harfbuzz-subset library. All of hb-subset.h | 
 |   is experimental right now and API WILL change. | 
 |  | 
 | - New API: | 
 | hb_blob_copy_writable_or_fail() | 
 | HB_OT_TAG_BASE | 
 | hb_set_previous() | 
 | hb_set_previous_range() | 
 |  | 
 |  | 
 | Overview of changes leading to 1.7.5 | 
 | Tuesday, January 30, 2018 | 
 | ==================================== | 
 |  | 
 | - Separate Khmer shaper from Indic. | 
 | - First stab at AAT morx. Not hooked up. | 
 | - Misc bug fixes. | 
 |  | 
 |  | 
 | Overview of changes leading to 1.7.4 | 
 | Wednesday, December 20, 2017 | 
 | ==================================== | 
 |  | 
 | - Fix collect_glyphs() regression caused by hb_set_t changes. | 
 |  | 
 |  | 
 | Overview of changes leading to 1.7.3 | 
 | Monday, December 18, 2017 | 
 | ==================================== | 
 |  | 
 | - hb_set_t performance tuning and optimizations. | 
 | - Speed up collect_glyphs() and reject garbage data. | 
 | - In hb_coretext_font_create() set font point-size (ptem). | 
 | - Misc fixes. | 
 |  | 
 |  | 
 | Overview of changes leading to 1.7.2 | 
 | Monday, December 4, 2017 | 
 | ==================================== | 
 |  | 
 | - Optimize hb_set_add_range(). | 
 | - Misc fixes. | 
 | - New API: | 
 | hb_coretext_font_create() | 
 |  | 
 |  | 
 | Overview of changes leading to 1.7.1 | 
 | Tuesday, November 14, 2017 | 
 | ==================================== | 
 |  | 
 | - Fix atexit object destruction regression. | 
 | - Fix minor integer-overflow. | 
 |  | 
 |  | 
 | Overview of changes leading to 1.7.0 | 
 | Monday, November 13, 2017 | 
 | ==================================== | 
 |  | 
 | - Minor Indic fixes. | 
 | - Implement kerning and glyph names in hb-ot-font. | 
 | - Various DSO optimization re .data and .bss sizes. | 
 | - Make C++11 optional; build fixes. | 
 | - Mark all other backends "unsafe-to-break". | 
 | - Graphite fix. | 
 |  | 
 |  | 
 | Overview of changes leading to 1.6.3 | 
 | Thursday, October 26th, 2017 | 
 | ==================================== | 
 |  | 
 | - Fix hb_set_t some more.  Should be solid now. | 
 | - Implement get_glyph_name() for hb-ot-font. | 
 | - Misc fixes. | 
 |  | 
 |  | 
 | Overview of changes leading to 1.6.2 | 
 | Monday, October 23nd, 2017 | 
 | ==================================== | 
 |  | 
 | - Yesterday's release had a bad crasher; don't use it.  That's what | 
 |   happens when one works on Sunday... | 
 |   https://github.com/harfbuzz/harfbuzz/issues/578 | 
 | - Build fixes for FreeBSD and Chrome Android. | 
 |  | 
 |  | 
 | Overview of changes leading to 1.6.1 | 
 | Sunday, October 22nd, 2017 | 
 | ==================================== | 
 |  | 
 | - Don't skip over COMBINING GRAPHEME JOINER when ligating, etc. | 
 |   To be refined: https://github.com/harfbuzz/harfbuzz/issues/554 | 
 | - Faster hb_set_t implementation. | 
 | - Don't use deprecated ICU API. | 
 | - Fix undefined-behavior in Myanmar shaper, introduced in 1.6.0 | 
 | - Deprecated API: | 
 |   hb_set_invert() | 
 |  | 
 |  | 
 | Overview of changes leading to 1.6.0 | 
 | Friday, October the 13th, 2017 | 
 | ==================================== | 
 |  | 
 | - Update to Unicode 10. | 
 |  | 
 | - Various Indic and Universal Shaping Engine fixes as a result of | 
 |   HarfBuzz Hackfest with Jonathan Kew at Web Engines Hackfest at | 
 |   the Igalia offices in A Coruña, Spain.  Thanks Igalia for having | 
 |   us! | 
 |  | 
 | - Implement Unicode Arabic Mark Ordering Algorithm UTR#53. | 
 |  | 
 | - Implement optical sizing / tracking in CoreText backend, using | 
 |   new API hb_font_set_ptem(). | 
 |  | 
 | - Allow notifying hb_font_t that underlying FT_Face changed sizing, | 
 |   using new API hb_ft_font_changed(). | 
 |  | 
 | - More Graphite backend RTL fixes. | 
 |  | 
 | - Fix caching of variable font shaping plans. | 
 |  | 
 | - hb-view / hb-shape now accept following new arguments: | 
 |  | 
 |   o --unicodes: takes a list of hex numbers that represent Unicode | 
 |     codepoints. | 
 |  | 
 | New API: | 
 | +hb_face_get_table_tags() | 
 | +hb_font_set_ptem() | 
 | +hb_font_get_ptem() | 
 | +hb_ft_font_changed() | 
 |  | 
 |  | 
 | Overview of changes leading to 1.5.1 | 
 | Tuesday, September 5, 2017 | 
 | ==================================== | 
 |  | 
 | - Fix "unsafe-to-break" in fallback shaping and other corner cases. | 
 |   All our tests pass with --verify now, meaning unsafe-to-break API | 
 |   works as expected. | 
 | - Add --unicodes to hb-view / hb-shape. | 
 | - [indic] Treat Consonant_With_Stacker as consonant.  This will need | 
 |   further tweaking. | 
 | - hb_buffer_diff() tweaks. | 
 |  | 
 |  | 
 | Overview of changes leading to 1.5.0 | 
 | Wednesday, August 23, 2017 | 
 | ==================================== | 
 |  | 
 | - Misc new API, for appending a buffer to another, and for comparing | 
 |   contents of two buffers for types of differences. | 
 |  | 
 | - New "unsafe-to-break" API.  Can be used to speed up reshaping | 
 |   in line-breaking situations.  Essentially, after shaping, it returns | 
 |   positions in the input string (some of the cluster boundaries) that | 
 |   are "safe to break" in that if the text is segmented at that position | 
 |   and two sides reshaped and concatenated, the shaping result is | 
 |   exactly the same as shaping the text in one piece. | 
 |  | 
 |   hb-view and hb-shape and hb-shape now take --verify, which verifies | 
 |   the above property. | 
 |  | 
 |   Some corner cases of the implementation are still not quite working. | 
 |   Those will be fixed in subsequent releases. | 
 |  | 
 | - New API: | 
 |  | 
 | hb_buffer_append() | 
 |  | 
 | hb_glyph_flags_t | 
 | HB_GLYPH_FLAG_UNSAFE_TO_BREAK | 
 | HB_GLYPH_FLAG_DEFINED | 
 | hb_glyph_info_get_glyph_flags() | 
 |  | 
 | HB_BUFFER_SERIALIZE_FLAG_GLYPH_FLAGS | 
 |  | 
 | hb_buffer_diff_flags_t | 
 | HB_BUFFER_DIFF_FLAG_EQUAL | 
 | HB_BUFFER_DIFF_FLAG_CONTENT_TYPE_MISMATCH | 
 | HB_BUFFER_DIFF_FLAG_LENGTH_MISMATCH | 
 | HB_BUFFER_DIFF_FLAG_NOTDEF_PRESENT | 
 | HB_BUFFER_DIFF_FLAG_DOTTED_CIRCLE_PRESENT | 
 | HB_BUFFER_DIFF_FLAG_CODEPOINT_MISMATCH | 
 | HB_BUFFER_DIFF_FLAG_CLUSTER_MISMATCH | 
 | HB_BUFFER_DIFF_FLAG_GLYPH_FLAGS_MISMATCH | 
 | HB_BUFFER_DIFF_FLAG_POSITION_MISMATCH | 
 | hb_buffer_diff | 
 |  | 
 |  | 
 | Overview of changes leading to 1.4.8 | 
 | Tuesday, August 8, 2017 | 
 | ==================================== | 
 |  | 
 | - Major fix to avar table handling. | 
 | - Rename hb-shape --show-message to --trace. | 
 | - Build fixes. | 
 |  | 
 |  | 
 | Overview of changes leading to 1.4.7 | 
 | Tuesday, July 18, 2017 | 
 | ==================================== | 
 |  | 
 | - Multiple Indic, Tibetan, and Cham fixes. | 
 | - CoreText: Allow disabling kerning. | 
 | - Adjust Arabic feature order again. | 
 | - Misc build fixes. | 
 |  | 
 |  | 
 | Overview of changes leading to 1.4.6 | 
 | Sunday, April 23, 2017 | 
 | ==================================== | 
 |  | 
 | - Graphite2: Fix RTL positioning issue. | 
 | - Backlist GDEF of more versions of Padauk and Tahoma. | 
 | - New, experimental, cmake alternative build system. | 
 |  | 
 |  | 
 | Overview of changes leading to 1.4.5 | 
 | Friday, March 10, 2017 | 
 | ==================================== | 
 |  | 
 | - Revert "Fix Context lookup application when moving back after a glyph..." | 
 |   This introduced memory access problems.  To be fixed properly soon. | 
 |  | 
 |  | 
 | Overview of changes leading to 1.4.4 | 
 | Sunday, March 5, 2017 | 
 | ==================================== | 
 |  | 
 | - Fix Context lookup application when moving back after a glyph deletion. | 
 | - Fix buffer-overrun in Bengali. | 
 |  | 
 |  | 
 | Overview of changes leading to 1.4.3 | 
 | Saturday, February 25, 2017 | 
 | ==================================== | 
 |  | 
 | - Route Adlam script to Arabic shaper. | 
 | - Misc fixes. | 
 | - New API: | 
 |   hb_font_set_face() | 
 | - Deprecate API: | 
 |   hb_graphite2_font_get_gr_font() | 
 |  | 
 |  | 
 | Overview of changes leading to 1.4.2 | 
 | Monday, January 23, 2017 | 
 | ==================================== | 
 |  | 
 | - Implement OpenType Font Variation tables avar/fvar/HVAR/VVAR. | 
 | - hb-shape and hb-view now accept --variations. | 
 | - New API: | 
 |  | 
 | hb_variation_t | 
 | hb_variation_from_string() | 
 | hb_variation_to_string() | 
 |  | 
 | hb_font_set_variations() | 
 | hb_font_set_var_coords_design() | 
 | hb_font_get_var_coords_normalized() | 
 |  | 
 | hb-ot-var.h: | 
 | hb_ot_var_axis_t | 
 | hb_ot_var_has_data() | 
 | hb_ot_var_get_axis_count() | 
 | hb_ot_var_get_axes() | 
 | hb_ot_var_find_axis() | 
 | hb_ot_var_normalize_variations() | 
 | hb_ot_var_normalize_coords() | 
 |  | 
 | - MVAR to be implemented later.  Access to named instances to be | 
 |   implemented later as well. | 
 |  | 
 | - Misc fixes. | 
 |  | 
 |  | 
 | Overview of changes leading to 1.4.1 | 
 | Thursday, January 5, 2017 | 
 | ==================================== | 
 |  | 
 | - Always build and use UCDN for Unicode data by default. | 
 |   Reduces dependence on version of Unicode data in glib, | 
 |   specially in the Windows bundles we are shipping, which | 
 |   have very old glib. | 
 |  | 
 |  | 
 | Overview of changes leading to 1.4.0 | 
 | Thursday, January 5, 2017 | 
 | ==================================== | 
 |  | 
 | - Merged "OpenType GX" branch which adds core of support for | 
 |   OpenType 1.8 Font Variations.  To that extent, the relevant | 
 |   new API is: | 
 |  | 
 | New API: | 
 | hb_font_set_var_coords_normalized() | 
 |  | 
 |   with supporting API: | 
 |  | 
 | New API: | 
 | HB_OT_LAYOUT_NO_VARIATIONS_INDEX | 
 | hb_ot_layout_table_find_feature_variations() | 
 | hb_ot_layout_feature_with_variations_get_lookups() | 
 | hb_shape_plan_create2() | 
 | hb_shape_plan_create_cached2() | 
 |  | 
 |   Currently variations in GSUB/GPOS/GDEF are fully supported, | 
 |   and no other tables are supported.  In particular, fvar/avar | 
 |   are NOT supported, hence the hb_font_set_var_coords_normalized() | 
 |   taking normalized coordinates.  API to take design coordinates | 
 |   will be added in the future. | 
 |  | 
 |   HVAR/VVAR/MVAR support will also be added to hb-ot-font in the | 
 |   future. | 
 |  | 
 | - Fix regression in GDEF glyph class processing. | 
 | - Add decompositions for Chakma, Limbu, and Balinese in USE shaper. | 
 | - Misc fixes. | 
 |  | 
 |  | 
 | Overview of changes leading to 1.3.4 | 
 | Monday, December 5, 2016 | 
 | ==================================== | 
 |  | 
 | - Fix vertical glyph origin in hb-ot-font. | 
 | - Implement CBDT/CBLC color font glyph extents in hb-ot-font. | 
 |  | 
 |  | 
 | Overview of changes leading to 1.3.3 | 
 | Wednesday, September 28, 2016 | 
 | ==================================== | 
 |  | 
 | - Implement parsing of OpenType MATH table. | 
 | New API: | 
 | HB_OT_TAG_MATH | 
 | HB_OT_MATH_SCRIPT | 
 | hb_ot_math_constant_t | 
 | hb_ot_math_kern_t | 
 | hb_ot_math_glyph_variant_t | 
 | hb_ot_math_glyph_part_flags_t | 
 | hb_ot_math_glyph_part_t | 
 | hb_ot_math_has_data | 
 | hb_ot_math_get_constant | 
 | hb_ot_math_get_glyph_italics_correction | 
 | hb_ot_math_get_glyph_top_accent_attachment | 
 | hb_ot_math_get_glyph_kerning | 
 | hb_ot_math_is_glyph_extended_shape | 
 | hb_ot_math_get_glyph_variants | 
 | hb_ot_math_get_min_connector_overlap | 
 | hb_ot_math_get_glyph_assembly | 
 |  | 
 |  | 
 | Overview of changes leading to 1.3.2 | 
 | Wednesday, September 27, 2016 | 
 | ==================================== | 
 |  | 
 | - Fix build of hb-coretext on older OS X versions. | 
 |  | 
 |  | 
 | Overview of changes leading to 1.3.1 | 
 | Wednesday, September 7, 2016 | 
 | ==================================== | 
 |  | 
 | - Blacklist bad GDEF of more fonts (Padauk). | 
 | - More CoreText backend crash fixes with OS X 10.9.5. | 
 | - Misc fixes. | 
 |  | 
 |  | 
 | Overview of changes leading to 1.3.0 | 
 | Thursday, July 21, 2016 | 
 | ==================================== | 
 |  | 
 | - Update to Unicode 9.0.0 | 
 | - Move Javanese from Indic shaper to Universal Shaping Engine. | 
 | - Allow MultipleSubst to delete a glyph (matching Windows engine). | 
 | - Update Universal Shaping Engine to latest draft from Microsoft. | 
 | - DirectWrite backend improvements.  Note: this backend is for testing ONLY. | 
 | - CoreText backend improvements with unreachable fonts. | 
 | - Implement symbol fonts (cmap 3.0.0) in hb-ft and hb-ot-font. | 
 | - Blacklist bad GDEF of more fonts (Tahoma & others). | 
 | - Misc fixes. | 
 |  | 
 |  | 
 | Overview of changes leading to 1.2.7 | 
 | Monday, May 2, 2016 | 
 | ==================================== | 
 |  | 
 | - Blacklist another version of Times New Roman (Bold) Italic from Windows 7. | 
 | - Fix Mongolian Free Variation Selectors shaping with certain fonts. | 
 | - Fix Tibetan shorthand contractions shaping. | 
 | - Improved list of language tag mappings. | 
 | - Unbreak build on Windows CE. | 
 | - Make 'glyf' table loading lazy in hb-ot-font. | 
 |  | 
 |  | 
 | Overview of changes leading to 1.2.6 | 
 | Friday, April 8, 2016 | 
 | ==================================== | 
 |  | 
 | - Blacklist GDEF table of another set of Times New Roman (Bold) Italic. | 
 | - DirectWrite backend improvements.  Note: DirectWrite backend is | 
 |   exclusively for our internal testing and should NOT be used in any | 
 |   production system whatsoever. | 
 |  | 
 |  | 
 | Overview of changes leading to 1.2.5 | 
 | Monday, April 4, 2016 | 
 | ==================================== | 
 |  | 
 | - Fix GDEF mark-filtering-set, which was broken in 1.2.3. | 
 |  | 
 |  | 
 | Overview of changes leading to 1.2.4 | 
 | Thursday, March 17, 2016 | 
 | ==================================== | 
 |  | 
 | - Synthesize GDEF glyph class for any glyph that does not have one in GDEF. | 
 |   I really hope we don't discover broken fonts that shape badly with this | 
 |   change. | 
 | - Misc build and other minor fixes. | 
 | - API changes: | 
 |   - Added HB_NDEBUG.  It's fine for production systems to define this to | 
 |     disable high-overhead debugging checks.  However, I also reduced the | 
 |     overhead of those checks, so it's a non-issue right now.  You can | 
 |     forget it.  Just not defining anything at all is fine. | 
 |  | 
 |  | 
 | Overview of changes leading to 1.2.3 | 
 | Thursday, February 25, 2016 | 
 | ==================================== | 
 |  | 
 | - Blacklist GDEF table of certain versions of Times New Roman (Bold) Italic, | 
 |   due to bug in glyph class of ASCII double-quote character.  This should | 
 |   address "regression" introduced in 1.2.0 when we switched mark zeroing | 
 |   in most shapers from BY_UNICODE_LATE to BY_GDEF_LATE. | 
 |   This fourth release in a week should finally stablize things... | 
 |  | 
 | - hb-ot-font's get_glyph() implementation saw some optimizations.  Though, | 
 |   might be really hard to measure in real-world situations. | 
 |  | 
 | - Also, two rather small API changes: | 
 |  | 
 | We now disable some time-consuming internal bookkeeping if built with NDEBUG | 
 | defined.  This is a first time that we use NDEBUG to disable debug code.  If | 
 | there exist production systems that do NOT want to enable NDEBUG, please let | 
 | me know and I'll add HB_NDEBUG. | 
 |  | 
 | Added get_nominal_glyph() and get_variation_glyph() instead of get_glyph() | 
 |  | 
 | New API: | 
 | - hb_font_get_nominal_glyph_func_t | 
 | - hb_font_get_variation_glyph_func_t | 
 | - hb_font_funcs_set_nominal_glyph_func() | 
 | - hb_font_funcs_set_variation_glyph_func() | 
 | - hb_font_get_nominal_glyph() | 
 | - hb_font_get_variation_glyph() | 
 |  | 
 | Deprecated API: | 
 | - hb_font_get_glyph_func_t | 
 | - hb_font_funcs_set_glyph_func() | 
 |  | 
 | Clients that implement their own font-funcs are encouraged to replace | 
 | their get_glyph() implementation with a get_nominal_glyph() and | 
 | get_variation_glyph() pair.  The variation version can assume that | 
 | variation_selector argument is not zero.  Old (deprecated) functions | 
 | will continue working indefinitely using internal gymnastics; it is | 
 | just more efficient to use the new functions. | 
 |  | 
 |  | 
 | Overview of changes leading to 1.2.2 | 
 | Wednesday, February 24, 2016 | 
 | ==================================== | 
 |  | 
 | - Fix regression with mark positioning with fonts that have | 
 |   non-zero mark advances.  This was introduced in 1.2.0 while | 
 |   trying to make mark and cursive attachments to work together. | 
 |   I have partially reverted that, so this version is much more | 
 |   like what we had before.  All clients who updated to 1.2.0 | 
 |   should update to this version. | 
 |  | 
 |  | 
 | Overview of changes leading to 1.2.1 | 
 | Tuesday, February 23, 2016 | 
 | ==================================== | 
 |  | 
 | - CoreText: Fix bug with wrong scale if font scale was changed later. | 
 |   https://github.com/libass/libass/issues/212 | 
 | - CoreText: Drastically speed up font initialization. | 
 | - CoreText: Fix tiny leak. | 
 | - Group ZWJ/ZWNJ with previous syllable under cluster-level=0. | 
 |   https://github.com/harfbuzz/harfbuzz/issues/217 | 
 | - Add test/shaping/README.md about how to add tests to the suite. | 
 |  | 
 |  | 
 | Overview of changes leading to 1.2.0 | 
 | Friday, February 19, 2016 | 
 | ==================================== | 
 |  | 
 | - Fix various issues (hangs mostly) in case of memory allocation failure. | 
 | - Change mark zeroing types of most shapers from BY_UNICODE_LATE to | 
 |   BY_GDEF_LATE.  This seems to be what Uniscribe does. | 
 | - Change mark zeroing of USE shaper from NONE to BY_GDEF_EARLY.  That's | 
 |   what Windows does. | 
 | - Allow GPOS cursive connection on marks, and fix the interaction with | 
 |   mark attachment.  This work resulted in some changes to how mark | 
 |   attachments work.  See: | 
 |   https://github.com/harfbuzz/harfbuzz/issues/211 | 
 |   https://github.com/harfbuzz/harfbuzz/commit/86c68c7a2c971efe8e35b1f1bd99401dc8b688d2 | 
 | - Graphite2 shaper: improved negative advance handling (eg. Nastaliq). | 
 | - Add nmake-based build system for Windows. | 
 | - Minor speedup. | 
 | - Misc. improvements. | 
 |  | 
 |  | 
 | Overview of changes leading to 1.1.3 | 
 | Monday, January 11, 2016 | 
 | ==================================== | 
 |  | 
 | - Ported Indic shaper to Unicode 8.0 data. | 
 | - Universal Shaping Engine fixes. | 
 | - Speed up CoreText shaper when font fallback happens in CoreText. | 
 | - Documentation improvements, thanks to Khaled Hosny. | 
 | - Very rough directwrite shaper for testing, thanks to Ebrahim Byagowi. | 
 | - Misc bug fixes. | 
 | - New API: | 
 |  | 
 |   * Font extents: | 
 |       hb_font_extents_t | 
 |       hb_font_get_font_extents_func_t | 
 |       hb_font_get_font_h_extents_func_t | 
 |       hb_font_get_font_v_extents_func_t | 
 |       hb_font_funcs_set_font_h_extents_func | 
 |       hb_font_funcs_set_font_v_extents_func | 
 |       hb_font_get_h_extents | 
 |       hb_font_get_v_extents | 
 |       hb_font_get_extents_for_direction | 
 |  | 
 |   * Buffer message (aka debug): | 
 |       hb_buffer_message_func_t | 
 |       hb_buffer_set_message_func() | 
 |     Actual message protocol to be fleshed out later. | 
 |  | 
 |  | 
 | Overview of changes leading to 1.1.2 | 
 | Wednesday, November 26, 2015 | 
 | ==================================== | 
 |  | 
 | - Fix badly-broken fallback shaper that affected terminology. | 
 |   https://github.com/harfbuzz/harfbuzz/issues/187 | 
 | - Fix y_scaling in Graphite shaper. | 
 | - API changes: | 
 |   * An unset glyph_h_origin() function in font-funcs now (sensibly) | 
 |     implies horizontal origin at 0,0.  Ie, the nil callback returns | 
 |     true instead of false.  As such, implementations that have a | 
 |     glyph_h_origin() that simply returns true, can remove that function | 
 |     with HarfBuzz >= 1.1.2.  This results in a tiny speedup. | 
 |  | 
 |  | 
 | Overview of changes leading to 1.1.1 | 
 | Wednesday, November 24, 2015 | 
 | ==================================== | 
 |  | 
 | - Build fixes, specially for hb-coretext. | 
 |  | 
 |  | 
 | Overview of changes leading to 1.1.0 | 
 | Wednesday, November 18, 2015 | 
 | ==================================== | 
 |  | 
 | - Implement 'stch' stretch feature for Syriac Abbreviation Mark. | 
 |   https://github.com/harfbuzz/harfbuzz/issues/141 | 
 | - Disable use of decompose_compatibility() callback. | 
 | - Implement "shaping" of various Unicode space characters, even | 
 |   if the font does not support them. | 
 |   https://github.com/harfbuzz/harfbuzz/issues/153 | 
 | - If font does not support U+2011 NO-BREAK HYPHEN, fallback to | 
 |   U+2010 HYPHEN. | 
 | - Changes resulting from libFuzzer continuous fuzzing: | 
 |   * Reject font tables that need more than 8 edits, | 
 |   * Bound buffer growth during shaping to 32x, | 
 |   * Fix assertions and other issues at OOM / buffer max-growth. | 
 | - Misc fixes and optimizations. | 
 | - API changes: | 
 |   * All fonts created with hb_font_create() now inherit from | 
 |     (ie. have parent) hb_font_get_empty(). | 
 |  | 
 |  | 
 | Overview of changes leading to 1.0.6 | 
 | Thursday, October 15, 2015 | 
 | ==================================== | 
 |  | 
 | - Reduce max nesting level in OT lookups from 8 to 6. | 
 |   Should not affect any real font as far as I know. | 
 | - Fix memory access issue in ot-font. | 
 | - Revert default load-flags of fonts created using hb_ft_font_create() | 
 |   back to FT_LOAD_DEFAULT|FT_LOAD_NO_HINTING.  This was changed in | 
 |   last release (1.0.5), but caused major issues, so revert. | 
 |   https://github.com/harfbuzz/harfbuzz/issues/143 | 
 |  | 
 |  | 
 | Overview of changes leading to 1.0.5 | 
 | Tuesday, October 13, 2015 | 
 | ==================================== | 
 |  | 
 | - Fix multiple memory access bugs discovered using libFuzzer. | 
 |   https://github.com/harfbuzz/harfbuzz/issues/139 | 
 |   Everyone should upgrade to this version as soon as possible. | 
 |   We now have continuous fuzzing set up, to avoid issues like | 
 |   these creeping in again. | 
 | - Misc fixes. | 
 |  | 
 | - New API: | 
 |   * hb_font_set_parent(). | 
 |   * hb_ft_font_[sg]et_load_flags() | 
 |     The default flags for fonts created using hb_ft_font_create() | 
 |     has changed to default to FT_LOAD_DEFAULT now.  Previously it | 
 |     was defaulting to FT_LOAD_DFEAULT|FT_LOAD_NO_HINTING. | 
 |  | 
 | - API changes: | 
 |   * Fonts now default to units-per-EM as their scale, instead of 0. | 
 |   * hb_font_create_sub_font() does NOT make parent font immutable | 
 |     anymore.  hb_font_make_immutable() does. | 
 |  | 
 |  | 
 | Overview of changes leading to 1.0.4 | 
 | Wednesday, September 30, 2015 | 
 | ==================================== | 
 |  | 
 | - Fix minor out-of-bounds read error. | 
 |  | 
 |  | 
 | Overview of changes leading to 1.0.3 | 
 | Tuesday, September 1, 2015 | 
 | ==================================== | 
 |  | 
 | - Start of user documentation, from Simon Cozens! | 
 | - Implement glyph_extents() for TrueType fonts in hb-ot-font. | 
 | - Improve GPOS cursive attachments with conflicting lookups. | 
 | - More fixes for cluster-level = 1. | 
 | - Uniscribe positioning fix. | 
 |  | 
 |  | 
 | Overview of changes leading to 1.0.2 | 
 | Wednesday, August 19, 2015 | 
 | ==================================== | 
 |  | 
 | - Fix shaping with cluster-level > 0. | 
 | - Fix Uniscribe backend font-size scaling. | 
 | - Declare dependencies in harfbuzz.pc. | 
 |   FreeType is not declared though, to avoid bugs in pkg-config | 
 |   0.26 with recursive dependencies. | 
 | - Slightly improved debug infrastructure.  More to come later. | 
 | - Misc build fixes. | 
 |  | 
 |  | 
 | Overview of changes leading to 1.0.1 | 
 | Monday, July 27, 2015 | 
 | ==================================== | 
 |  | 
 | - Fix out-of-bounds access in USE shaper. | 
 |  | 
 |  | 
 | Overview of changes leading to 1.0.0 | 
 | Sunday, July 26, 2015 | 
 | ==================================== | 
 |  | 
 | - Implement Universal Shaping Engine: | 
 |   https://www.microsoft.com/typography/OpenTypeDev/USE/intro.htm | 
 |   http://blogs.windows.com/bloggingwindows/2015/02/23/windows-shapes-the-worlds-languages/ | 
 | - Bump version to 1.0.0.  The soname was NOT bumped. | 
 |  | 
 |  | 
 | Overview of changes leading to 0.9.42 | 
 | Thursday, July 26, 2015 | 
 | ===================================== | 
 |  | 
 | - New API to allow for retrieving finer-grained cluster | 
 |   mappings if the client desires to handle them.  Default | 
 |   behavior is unchanged. | 
 | - Fix cluster merging when removing default-ignorables. | 
 | - Update to Unicode 8.0 | 
 | - hb-graphite2 fixes. | 
 | - Misc fixes. | 
 | - Removed HB_NO_MERGE_CLUSTERS hack. | 
 | - New API: | 
 |   hb_buffer_cluster_level_t enum | 
 |   hb_buffer_get_cluster_level() | 
 |   hb_buffer_set_cluster_level() | 
 |   hb-shape / hb-view --cluster-level | 
 |  | 
 |  | 
 | Overview of changes leading to 0.9.41 | 
 | Thursday, June 18, 2015 | 
 | ===================================== | 
 |  | 
 | - Fix hb-coretext with trailing whitespace in right-to-left. | 
 | - New API: hb_buffer_reverse_range(). | 
 | - Allow implementing atomic ops in config.h. | 
 | - Fix hb_language_t in language bindings. | 
 | - Misc fixes. | 
 |  | 
 |  | 
 | Overview of changes leading to 0.9.40 | 
 | Friday, March 20, 2015 | 
 | ===================================== | 
 |  | 
 | - Another hb-coretext crasher fix.  Ouch! | 
 | - Happy Norouz! | 
 |  | 
 |  | 
 | Overview of changes leading to 0.9.39 | 
 | Wednesday, March 4, 2015 | 
 | ===================================== | 
 |  | 
 | - Critical hb-coretext fixes. | 
 | - Optimizations and refactoring; no functional change | 
 |   expected. | 
 | - Misc build fixes. | 
 |  | 
 |  | 
 | Overview of changes leading to 0.9.38 | 
 | Friday, January 23, 2015 | 
 | ===================================== | 
 |  | 
 | - Fix minor out-of-bounds access in Indic shaper. | 
 | - Change New Tai Lue shaping engine from South-East Asian to default, | 
 |   reflecting change in Unicode encoding model. | 
 | - Add hb-shape --font-size.  Can take up to two numbers for separate | 
 |   x / y size. | 
 | - Fix CoreText and FreeType scale issues with negative scales. | 
 | - Reject blobs larger than 2GB.  This might break some icu-le-hb clients | 
 |   that need security fixes.  See: | 
 |   http://www.icu-project.org/trac/ticket/11450 | 
 | - Avoid accessing font tables during face destruction, in casce rogue | 
 |   clients released face data already. | 
 | - Fix up gobject-introspection a bit.  Python bindings kinda working. | 
 |   See README.python. | 
 | - Misc fixes. | 
 | - API additions: | 
 |   hb_ft_face_create_referenced() | 
 |   hb_ft_font_create_referenced() | 
 |  | 
 |  | 
 | Overview of changes leading to 0.9.37 | 
 | Wednesday, December 17, 2014 | 
 | ===================================== | 
 |  | 
 | - Fix out-of-bounds access in Context lookup format 3. | 
 | - Indic: Allow ZWJ/ZWNJ before syllable modifiers. | 
 |  | 
 |  | 
 | Overview of changes leading to 0.9.36 | 
 | Thursday, November 20, 2014 | 
 | ===================================== | 
 |  | 
 | - First time that three months went by without a release since | 
 |   0.9.2 was released on August 10, 2012! | 
 | - Fix performance bug in hb_ot_collect_glyphs(): | 
 |   https://bugzilla.mozilla.org/show_bug.cgi?id=1090869 | 
 | - Add basic vertical-text support to hb-ot-font. | 
 | - Misc build fixes. | 
 |  | 
 |  | 
 | Overview of changes leading to 0.9.35 | 
 | Saturday, August 13, 2014 | 
 | ===================================== | 
 |  | 
 | - Fix major shape-plan caching bug when more than one shaper were | 
 |   provided to hb_shape_full() (as exercised by XeTeX). | 
 |   http://www.mail-archive.com/debian-bugs-dist@lists.debian.org/msg1246370.html | 
 | - Fix Arabic fallback shaping regression.  This was broken in 0.9.32. | 
 | - Major hb-coretext fixes.  That backend is complete now, including | 
 |   respecing buffer direction and language, down to vertical writing. | 
 | - Build fixes for Windows CE.  Should build fine now. | 
 | - Misc fixes: | 
 |   Use atexit() only if it's safe to call from shared library | 
 |   https://bugs.freedesktop.org/show_bug.cgi?id=82246 | 
 |   Mandaic had errors in its Unicode Joining_Type | 
 |   https://bugs.freedesktop.org/show_bug.cgi?id=82306 | 
 | - API changes: | 
 |  | 
 |   * hb_buffer_clear_contents() does not reset buffer flags now. | 
 |  | 
 |     After 763e5466c0a03a7c27020e1e2598e488612529a7, one doesn't | 
 |     need to set flags for different pieces of text.  The flags now | 
 |     are something the client sets up once, depending on how it | 
 |     actually uses the buffer.  As such, don't clear it in | 
 |     clear_contents(). | 
 |  | 
 |     I don't expect any changes to be needed to any existing client. | 
 |  | 
 |  | 
 | Overview of changes leading to 0.9.34 | 
 | Saturday, August 2, 2014 | 
 | ===================================== | 
 |  | 
 | - hb_feature_from_string() now accepts CSS font-feature-settings format. | 
 | - As a result, hb-shape / hb-view --features also accept CSS-style strings. | 
 |   Eg, "'liga' off" is accepted now. | 
 | - Add old-spec Myanmar shaper: | 
 |   https://bugs.freedesktop.org/show_bug.cgi?id=81775 | 
 | - Don't apply 'calt' in Hangul shaper. | 
 | - Fix mark advance zeroing for Hebrew shaper: | 
 |   https://bugs.freedesktop.org/show_bug.cgi?id=76767 | 
 | - Implement Windows-1256 custom Arabic shaping.  Only built on Windows, | 
 |   and requires help from get_glyph().  Used by Firefox. | 
 |   https://bugzilla.mozilla.org/show_bug.cgi?id=1045139 | 
 | - Disable 'liga' in vertical text. | 
 | - Build fixes. | 
 | - API changes: | 
 |  | 
 |   * Make HB_BUFFER_FLAG_BOT/EOT easier to use. | 
 |  | 
 |     Previously, we expected users to provide BOT/EOT flags when the | 
 |     text *segment* was at paragraph boundaries.  This meant that for | 
 |     clients that provide full paragraph to HarfBuzz (eg. Pango), they | 
 |     had code like this: | 
 |  | 
 |       hb_buffer_set_flags (hb_buffer, | 
 |                            (item_offset == 0 ? HB_BUFFER_FLAG_BOT : 0) | | 
 |                            (item_offset + item_length == paragraph_length ? | 
 |                             HB_BUFFER_FLAG_EOT : 0)); | 
 |  | 
 |       hb_buffer_add_utf8 (hb_buffer, | 
 |                           paragraph_text, paragraph_length, | 
 |                           item_offset, item_length); | 
 |  | 
 |     After this change such clients can simply say: | 
 |  | 
 |       hb_buffer_set_flags (hb_buffer, | 
 |                            HB_BUFFER_FLAG_BOT | HB_BUFFER_FLAG_EOT); | 
 |  | 
 |       hb_buffer_add_utf8 (hb_buffer, | 
 |                           paragraph_text, paragraph_length, | 
 |                           item_offset, item_length); | 
 |  | 
 |     Ie, HarfBuzz itself checks whether the segment is at the beginning/end | 
 |     of the paragraph.  Clients that only pass item-at-a-time to HarfBuzz | 
 |     continue not setting any flags whatsoever. | 
 |  | 
 |     Another way to put it is: if there's pre-context text in the buffer, | 
 |     HarfBuzz ignores the BOT flag.  If there's post-context, it ignores | 
 |     EOT flag. | 
 |  | 
 |  | 
 | Overview of changes leading to 0.9.33 | 
 | Tuesday, July 22, 2014 | 
 | ===================================== | 
 |  | 
 | - Turn off ARabic 'cswh' feature that was accidentally turned on. | 
 | - Add HB_TAG_MAX_SIGNED. | 
 | - Make hb_face_make_immutable() really make face immutable! | 
 | - Windows build fixes. | 
 |  | 
 |  | 
 | Overview of changes leading to 0.9.32 | 
 | Thursday, July 17, 2014 | 
 | ===================================== | 
 |  | 
 | - Apply Arabic shaping features in spec order exactly. | 
 | - Another fix for Mongolian free variation selectors. | 
 | - For non-Arabic scripts in Arabic shaper apply 'rlig' and 'calt' | 
 |   together. | 
 | - Minor adjustment to U+FFFD logic. | 
 | - Fix hb-coretext build. | 
 |  | 
 |  | 
 | Overview of changes leading to 0.9.31 | 
 | Wednesday, July 16, 2014 | 
 | ===================================== | 
 |  | 
 | - Only accept valid UTF-8/16/32; we missed many cases before. | 
 | - Better shaping of invalid UTF-8/16/32.  Falls back to | 
 |   U+FFFD REPLACEMENT CHARACTER now. | 
 | - With all changes in this release, the buffer will contain fully | 
 |   valid Unicode after hb_buffer_add_utf8/16/32 no matter how | 
 |   broken the input is.  This can be overridden though.  See below. | 
 | - Fix Mongolian Variation Selectors for fonts without GDEF. | 
 | - Fix minor invalid buffer access. | 
 | - Accept zh-Hant and zh-Hans language tags.  hb_ot_tag_to_language() | 
 |   now uses these instead of private tags. | 
 | - Build fixes. | 
 | - New API: | 
 |   * hb_buffer_add_codepoints().  This does what hb_buffer_add_utf32() | 
 |     used to do, ie. no validity check on the input at all.  add_utf32 | 
 |     now replaces invalid Unicode codepoints with the replacement | 
 |     character (see below). | 
 |   * hb_buffer_set_replacement_codepoint() | 
 |   * hb_buffer_get_replacement_codepoint() | 
 |     Previously, in hb_buffer_add_utf8 and hb_buffer_add_utf16, when | 
 |     we detected broken input, we replaced that with (hb_codepoint_t)-1. | 
 |     This has changed to use U+FFFD now, but can be changed using these | 
 |     new API. | 
 |  | 
 |  | 
 | Overview of changes leading to 0.9.30 | 
 | Wednesday, July 9, 2014 | 
 | ===================================== | 
 |  | 
 | - Update to Unicode 7.0.0: | 
 |   * New scripts Manichaean and Psalter Pahlavi are shaped using | 
 |     Arabic shaper. | 
 |   * All the other new scripts to through the generic shaper for | 
 |     now. | 
 | - Minor Indic improvements. | 
 | - Fix graphite2 backend cluster mapping [crasher!] | 
 | - API changes: | 
 |   * New HB_SCRIPT_* values for Unicode 7.0 scripts. | 
 |   * New function hb_ot_layout_language_get_required_feature(). | 
 | - Build fixes. | 
 |  | 
 |  | 
 | Overview of changes leading to 0.9.29 | 
 | Thursday, May 29, 2014 | 
 | ===================================== | 
 |  | 
 | - Implement cmap in hb-ot-font.h.  No variation-selectors yet. | 
 | - Myanmar: Allow MedialYa+Asat. | 
 | - Various Indic fixes: | 
 |   * Support most characters in Extended Devanagary and Vedic | 
 |     Unicode blocks. | 
 |   * Allow digits and a some punctuation as consonant placeholders. | 
 | - Build fixes. | 
 |  | 
 |  | 
 | Overview of changes leading to 0.9.28 | 
 | Monday, April 28, 2014 | 
 | ===================================== | 
 |  | 
 | - Unbreak old-spec Indic shaping. (bug 76705) | 
 | - Fix shaping of U+17DD and U+0FC6. | 
 | - Add HB_NO_MERGE_CLUSTERS build option.  NOT to be enabled by default | 
 |   for shipping libraries.  It's an option for further experimentation | 
 |   right now.  When we are sure how to do it properly, we will add | 
 |   public run-time API for the functionality. | 
 | - Build fixes. | 
 |  | 
 |  | 
 | Overview of changes leading to 0.9.27 | 
 | Tuesday, March 18, 2014 | 
 | ===================================== | 
 |  | 
 | - Don't use "register" storage class specifier | 
 | - Wrap definition of free_langs() with HAVE_ATEXIT | 
 | - Add coretext_aat shaper and hb_coretext_face_create() constructor | 
 | - If HAVE_ICU_BUILTIN is defined, use hb-icu Unicode callbacks | 
 | - Add Myanmar test case from OpenType Myanmar spec | 
 | - Only do fallback Hebrew composition if no GPOS 'mark' available | 
 | - Allow bootstrapping without gtk-doc | 
 | - Use AM_MISSING_PROG for ragel and git | 
 | - Typo in ucdn's Makefile.am | 
 | - Improve MemoryBarrier() implementation | 
 |  | 
 |  | 
 | Overview of changes leading to 0.9.26 | 
 | Thursday, January 30, 2014 | 
 | ===================================== | 
 |  | 
 | - Misc fixes. | 
 | - Fix application of 'rtlm' feature. | 
 | - Automatically apply frac/numr/dnom around U+2044 FRACTION SLASH. | 
 | - New header: hb-ot-shape.h | 
 | - Uniscribe: fix scratch-buffer accounting. | 
 | - Reorder Tai Tham SAKOT to after tone-marks. | 
 | - Add Hangul shaper. | 
 | - New files: | 
 |   hb-ot-shape-complex-hangul.cc | 
 |   hb-ot-shape-complex-hebrew.cc | 
 |   hb-ot-shape-complex-tibetan.cc | 
 | - Disable 'cswh' feature in Arabic shaper. | 
 | - Coretext: better handle surrogate pairs. | 
 | - Add HB_TAG_MAX and _HB_SCRIPT_MAX_VALUE. | 
 |  | 
 |  | 
 | Overview of changes leading to 0.9.25 | 
 | Wednesday, December 4, 2013 | 
 | ===================================== | 
 |  | 
 | - Myanmar shaper improvements. | 
 | - Avoid font fallback in CoreText backend. | 
 | - Additional OpenType language tag mappiongs. | 
 | - More aggressive shape-plan caching. | 
 | - Build with / require automake 1.13. | 
 | - Build with libtool 2.4.2.418 alpha to support ppc64le. | 
 |  | 
 |  | 
 | Overview of changes leading to 0.9.24 | 
 | Tuesday, November 13, 2013 | 
 | ===================================== | 
 |  | 
 | - Misc compiler warning fixes with clang. | 
 | - No functional changes. | 
 |  | 
 |  | 
 | Overview of changes leading to 0.9.23 | 
 | Monday, October 28, 2013 | 
 | ===================================== | 
 |  | 
 | - "Udupi HarfBuzz Hackfest", Paris, October 14..18 2013. | 
 | - Fix (Chain)Context recursion with non-monotone lookup positions. | 
 | - Misc Indic bug fixes. | 
 | - New Javanese / Buginese shaping, similar to Windows 8.1. | 
 |  | 
 |  | 
 | Overview of changes leading to 0.9.22 | 
 | Thursday, October 3, 2013 | 
 | ===================================== | 
 |  | 
 | - Fix use-after-end-of-scope in hb_language_from_string(). | 
 | - Fix hiding of default_ignorables if font doesn't have space glyph. | 
 | - Protect against out-of-range lookup indices. | 
 |  | 
 | - API Changes: | 
 |  | 
 |   * Added hb_ot_layout_table_get_lookup_count() | 
 |  | 
 |  | 
 | Overview of changes leading to 0.9.21 | 
 | Monday, September 16, 2013 | 
 | ===================================== | 
 |  | 
 | - Rename gobject-introspection library name from harfbuzz to HarfBuzz. | 
 | - Remove (long disabled) hb-old and hb-icu-le test shapers. | 
 | - Misc gtk-doc and gobject-introspection annotations. | 
 | - Misc fixes. | 
 | - API changes: | 
 |  | 
 |   * Add HB_SET_VALUE_INVALID | 
 |  | 
 | Overview of changes leading to 0.9.20 | 
 | Thursday, August 29, 2013 | 
 | ===================================== | 
 |  | 
 | General: | 
 | - Misc substitute_closure() fixes. | 
 | - Build fixes. | 
 |  | 
 | Documentation: | 
 | - gtk-doc boilerplate integrated.  Docs are built now, but | 
 |   contain no contents.  By next release hopefully we have | 
 |   some content in.  Enable using --enable-gtk-doc. | 
 |  | 
 | GObject and Introspection: | 
 | - Added harfbuzz-gobject library (hb-gobject.h) that has type | 
 |   bindings for all HarfBuzz objects and enums.  Enable using | 
 |   --with-gobject. | 
 | - Added gobject-introspection boilerplate.  Nothing useful | 
 |   right now.  Work in progress.  Gets enabled automatically if | 
 |   --with-gobject is used.  Override with --disable-introspection. | 
 |  | 
 | OpenType shaper: | 
 | - Apply 'mark' in Myanmar shaper. | 
 | - Don't apply 'dlig' by default. | 
 |  | 
 | Uniscribe shaper: | 
 | - Support user features. | 
 | - Fix loading of fonts that are also installed on the system. | 
 | - Fix shaping of Arabic Presentation Forms. | 
 | - Fix build with wide chars. | 
 |  | 
 | CoreText shaper: | 
 | - Support user features. | 
 |  | 
 | Source changes: | 
 | - hb_face_t code moved to hb-face.h / hb-face.cc. | 
 | - Added hb-deprecated.h. | 
 |  | 
 | API changes: | 
 | - Added HB_DISABLE_DEPRECATED. | 
 | - Deprecated HB_SCRIPT_CANADIAN_ABORIGINAL; replaced by | 
 |   HB_SCRIPT_CANADIAN_SYLLABICS. | 
 | - Deprecated HB_BUFFER_FLAGS_DEFAULT; replaced by | 
 |   HB_BUFFER_FLAG_DEFAULT. | 
 | - Deprecated HB_BUFFER_SERIALIZE_FLAGS_DEFAULT; replaced by | 
 |   HB_BUFFER_SERIALIZE_FLAG_DEFAULT. | 
 |  | 
 |  | 
 | Overview of changes leading to 0.9.19 | 
 | Tuesday, July 16, 2013 | 
 | ===================================== | 
 |  | 
 | - Build fixes. | 
 | - Better handling of multiple variation selectors in a row. | 
 | - Pass on variation selector to GSUB if not consumed by cmap. | 
 | - Fix undefined memory access. | 
 | - Add Javanese config to Indic shaper. | 
 | - Misc bug fixes. | 
 |  | 
 | Overview of changes leading to 0.9.18 | 
 | Tuesday, May 28, 2013 | 
 | ===================================== | 
 |  | 
 | New build system: | 
 |  | 
 | - All unneeded code is all disabled by default, | 
 |  | 
 | - Uniscribe and CoreText shapers can be enabled with their --with options, | 
 |  | 
 | - icu_le and old shapers cannot be enabled for now, | 
 |  | 
 | - glib, freetype, and cairo will be detected automatically. | 
 |   They can be force on/off'ed with their --with options, | 
 |  | 
 | - icu and graphite2 are default off, can be enabled with their --with | 
 |   options, | 
 |  | 
 | Moreover, ICU support is now build into a separate library: | 
 | libharfbuzz-icu.so, and a new harfbuzz-icu.pc is shipped for it. | 
 | Distros can enable ICU now without every application on earth | 
 | getting linked to via libharfbuzz.so. | 
 |  | 
 | For distros I recommend that they make sure they are building --with-glib | 
 | --with-freetype --with-cairo, --with-icu, and optionally --with-graphite2; | 
 | And package harfbuzz and harfbuzz-icu separately. | 
 |  | 
 |  | 
 | Overview of changes leading to 0.9.17 | 
 | Monday, May 20, 2013 | 
 | ===================================== | 
 |  | 
 | - Build fixes. | 
 | - Fix bug in hb_set_get_min(). | 
 | - Fix regression with Arabic mark positioning / width-zeroing. | 
 |  | 
 | Overview of changes leading to 0.9.16 | 
 | Friday, April 19, 2013 | 
 | ===================================== | 
 |  | 
 | - Major speedup in OpenType lookup processing.  With the Amiri | 
 |   Arabic font, this release is over 3x faster than previous | 
 |   release.  All scripts / languages should see this speedup. | 
 |  | 
 | - New --num-iterations option for hb-shape / hb-view; useful for | 
 |   profiling. | 
 |  | 
 | Overview of changes leading to 0.9.15 | 
 | Friday, April 05, 2013 | 
 | ===================================== | 
 |  | 
 | - Build fixes. | 
 | - Fix crasher in graphite2 shaper. | 
 | - Fix Arabic mark width zeroing regression. | 
 | - Don't compose Hangul jamo into Unicode syllables. | 
 |  | 
 |  | 
 | Overview of changes leading to 0.9.14 | 
 | Thursday, March 21, 2013 | 
 | ===================================== | 
 |  | 
 | - Build fixes. | 
 | - Fix time-consuming sanitize with malicious fonts. | 
 | - Implement hb_buffer_deserialize_glyphs() for both json and text. | 
 | - Do not ignore Hangul filler characters. | 
 | - Indic fixes: | 
 |   * Fix Malayalam pre-base reordering interaction with post-forms. | 
 |   * Further adjust ZWJ handling.  Should fix known regressions from | 
 |     0.9.13. | 
 |  | 
 |  | 
 | Overview of changes leading to 0.9.13 | 
 | Thursday, February 25, 2013 | 
 | ===================================== | 
 |  | 
 | - Build fixes. | 
 | - Ngapi HarfBuzz Hackfest in London (February 2013): | 
 |   * Fixed all known Indic bugs, | 
 |   * New Win8-style Myanmar shaper, | 
 |   * New South-East Asian shaper for Tai Tham, Cham, and New Tai Lue, | 
 |   * Smartly ignore Default_Ignorable characters (joiners, etc) wheb | 
 |     matching GSUB/GPOS lookups, | 
 |   * Fix 'Phags-Pa U+A872 shaping, | 
 |   * Fix partial disabling of default-on features, | 
 |   * Allow disabling of TrueType kerning. | 
 | - Fix possible crasher with broken fonts with overlapping tables. | 
 | - Removed generated files from git again.  So, one needs ragel to | 
 |   bootstrap from the git tree. | 
 |  | 
 | API changes: | 
 | - hb_shape() and related APIs now abort if buffer direction is | 
 |   HB_DIRECTION_INVALID.  Previously, hb_shape() was calling | 
 |   hb_buffer_guess_segment_properties() on the buffer before | 
 |   shaping.  The heuristics in that function are fragile.  If the | 
 |   user really wants the old behvaior, they can call that function | 
 |   right before calling hb_shape() to get the old behavior. | 
 | - hb_blob_create_sub_blob() always creates sub-blob with | 
 |   HB_MEMORY_MODE_READONLY.  See comments for the reason. | 
 |  | 
 |  | 
 | Overview of changes leading to 0.9.12 | 
 | Thursday, January 18, 2013 | 
 | ===================================== | 
 |  | 
 | - Build fixes for Sun compiler. | 
 | - Minor bug fix. | 
 |  | 
 | Overview of changes leading to 0.9.11 | 
 | Thursday, January 10, 2013 | 
 | ===================================== | 
 |  | 
 | - Build fixes. | 
 | - Fix GPOS mark attachment with null Anchor offsets. | 
 | - [Indic] Fix old-spec reordering of viramas if sequence ends in one. | 
 | - Fix multi-threaded shaper data creation crash. | 
 | - Add atomic ops for Solaris. | 
 |  | 
 | API changes: | 
 | - Rename hb_buffer_clear() to hb_buffer_clear_contents(). | 
 |  | 
 |  | 
 | Overview of changes leading to 0.9.10 | 
 | Thursday, January 3, 2013 | 
 | ===================================== | 
 |  | 
 | - [Indic] Fixed rendering of Malayalam dot-reph | 
 | - Updated OT language tags. | 
 | - Updated graphite2 backend. | 
 | - Improved hb_ot_layout_get_size_params() logic. | 
 | - Improve hb-shape/hb-view help output. | 
 | - Fixed hb-set.h implementation to not crash. | 
 | - Fixed various issues with hb_ot_layout_collect_lookups(). | 
 | - Various build fixes. | 
 |  | 
 | New API: | 
 |  | 
 | hb_graphite2_face_get_gr_face() | 
 | hb_graphite2_font_get_gr_font() | 
 | hb_coretext_face_get_cg_font() | 
 |  | 
 | Modified API: | 
 |  | 
 | hb_ot_layout_get_size_params() | 
 |  | 
 |  | 
 | Overview of changes leading to 0.9.9 | 
 | Wednesday, December 5, 2012 | 
 | ==================================== | 
 |  | 
 | - Fix build on Windows. | 
 | - Minor improvements. | 
 |  | 
 |  | 
 | Overview of changes leading to 0.9.8 | 
 | Tuesday, December 4, 2012 | 
 | ==================================== | 
 |  | 
 |  | 
 | - Actually implement hb_shape_plan_get_shaper (). | 
 | - Make UCDB data tables const. | 
 | - Lots of internal refactoring in OTLayout tables. | 
 | - Flesh out hb_ot_layout_lookup_collect_glyphs(). | 
 |  | 
 | New API: | 
 |  | 
 | hb_ot_layout_collect_lookups() | 
 | hb_ot_layout_get_size_params() | 
 |  | 
 |  | 
 | Overview of changes leading to 0.9.7 | 
 | Sunday, November 21, 2012 | 
 | ==================================== | 
 |  | 
 |  | 
 | HarfBuzz "All-You-Can-Eat-Sushi" (aka Vancouver) Hackfest and follow-on fixes. | 
 |  | 
 | - Fix Arabic contextual joining using pre-context text. | 
 | - Fix Sinhala "split matra" mess. | 
 | - Fix Khmer shaping with broken fonts. | 
 | - Implement Thai "PUA" shaping for old fonts. | 
 | - Do NOT route Kharoshthi script through the Indic shaper. | 
 | - Disable fallback positioning for Indic and Thai shapers. | 
 | - Misc fixes. | 
 |  | 
 |  | 
 | hb-shape / hb-view changes: | 
 |  | 
 | - Add --text-before and --text-after | 
 | - Add --bot / --eot / --preserve-default-ignorables | 
 | - hb-shape --output-format=json | 
 |  | 
 |  | 
 | New API: | 
 |  | 
 | hb_buffer_clear() | 
 |  | 
 | hb_buffer_flags_t | 
 |  | 
 | HB_BUFFER_FLAGS_DEFAULT | 
 | HB_BUFFER_FLAG_BOT | 
 | HB_BUFFER_FLAG_EOT | 
 | HB_BUFFER_FLAG_PRESERVE_DEFAULT_IGNORABLES | 
 |  | 
 | hb_buffer_set_flags() | 
 | hb_buffer_get_flags() | 
 |  | 
 | HB_BUFFER_SERIALIZE_FLAGS | 
 | hb_buffer_serialize_glyphs() | 
 | hb_buffer_deserialize_glyphs() | 
 | hb_buffer_serialize_list_formats() | 
 |  | 
 | hb_set_add_range() | 
 | hb_set_del_range() | 
 | hb_set_get_population() | 
 | hb_set_next_range() | 
 |  | 
 | hb_face_[sg]et_glyph_count() | 
 |  | 
 | hb_segment_properties_t | 
 | HB_SEGMENT_PROPERTIES_DEFAULT | 
 | hb_segment_properties_equal() | 
 | hb_segment_properties_hash() | 
 |  | 
 | hb_buffer_set_segment_properties() | 
 | hb_buffer_get_segment_properties() | 
 |  | 
 | hb_ot_layout_glyph_class_t | 
 | hb_ot_layout_get_glyph_class() | 
 | hb_ot_layout_get_glyphs_in_class() | 
 |  | 
 | hb_shape_plan_t | 
 | hb_shape_plan_create() | 
 | hb_shape_plan_create_cached() | 
 | hb_shape_plan_get_empty() | 
 | hb_shape_plan_reference() | 
 | hb_shape_plan_destroy() | 
 | hb_shape_plan_set_user_data() | 
 | hb_shape_plan_get_user_data() | 
 | hb_shape_plan_execute() | 
 | hb_shape_plan_get_shaper() | 
 |  | 
 | hb_ot_shape_plan_collect_lookups() | 
 |  | 
 |  | 
 | API changes: | 
 |  | 
 | - Remove "mask" parameter from hb_buffer_add(). | 
 | - Rename hb_ot_layout_would_substitute_lookup() and hb_ot_layout_substitute_closure_lookup(). | 
 | - hb-set.h API const correction. | 
 | - Renamed hb_set_min/max() to hb_set_get_min/max(). | 
 | - Rename hb_ot_layout_feature_get_lookup_indexes() to hb_ot_layout_feature_get_lookups(). | 
 | - Rename hb_buffer_guess_properties() to hb_buffer_guess_segment_properties(). | 
 |  | 
 |  | 
 |  | 
 | Overview of changes leading to 0.9.6 | 
 | Sunday, November 13, 2012 | 
 | ==================================== | 
 |  | 
 | - Don't clear pre-context text if no new context is provided. | 
 | - Fix ReverseChainingSubstLookup, which was totally borked. | 
 | - Adjust output format of hb-shape a bit. | 
 | - Include config.h.in in-tree.  Makes it easier for alternate build systems. | 
 | - Fix hb_buffer_set_length(buffer, 0) invalid memory allocation. | 
 | - Use ICU LayoutEngine's C API instead of C++.  Avoids much headache. | 
 | - Drop glyphs for all of Unicode Default_Ignorable characters. | 
 | - Misc build fixes. | 
 |  | 
 | Arabic shaper: | 
 | - Enable 'dlig' and 'mset' features in Arabic shaper. | 
 | - Implement 'Phags-pa shaping, improve Mongolian. | 
 |  | 
 | Indic shaper: | 
 | - Decompose Sinhala split matras the way old HarfBuzz / Pango did. | 
 | - Initial support for Consonant Medials. | 
 | - Start adding new-style Myanmar shaping. | 
 | - Make reph and 'pref' logic introspect the font. | 
 | - Route Meetei-Mayek through the Indic shaper. | 
 | - Don't apply 'liga' in Indic shaper. | 
 | - Improve Malayalam pre-base reordering Ra interaction with Chillus. | 
 |  | 
 |  | 
 |  | 
 | Overview of changes leading to 0.9.5 | 
 | Sunday, October 14, 2012 | 
 | ==================================== | 
 |  | 
 | - Synthetic-GSUB Arabic fallback shaping. | 
 |  | 
 | - Misc Indic improvements. | 
 |  | 
 | - Add build system support for pthread. | 
 |  | 
 | - Imported UCDN for in-tree Unicode callbacks implementation. | 
 |  | 
 | - Context-aware Arabic joining. | 
 |  | 
 | - Misc other fixes. | 
 |  | 
 | - New API: | 
 |  | 
 |   hb_feature_to/from-string() | 
 |   hb_buffer_[sg]et_content_type() | 
 |  | 
 |  | 
 |  | 
 | Overview of changes leading to 0.9.4 | 
 | Tuesday, Sep 03, 2012 | 
 | ==================================== | 
 |  | 
 | - Indic improvements with old-spec Malayalam. | 
 |  | 
 | - Better fallback glyph positioning, specially with Thai / Lao marks. | 
 |  | 
 | - Implement dotted-circle insertion. | 
 |  | 
 | - Better Arabic fallback shaping / ligation. | 
 |  | 
 | - Added ICU LayoutEngine backend for testing.  Call it by the 'icu_le' name. | 
 |  | 
 | - Misc fixes. | 
 |  | 
 |  | 
 |  | 
 | Overview of changes leading to 0.9.3 | 
 | Friday, Aug 18, 2012 | 
 | ==================================== | 
 |  | 
 | - Fixed fallback mark positioning for left-to-right text. | 
 |  | 
 | - Improve mark positioning for the remaining combining classes. | 
 |  | 
 | - Unbreak Thai and fallback Arabic shaping. | 
 |  | 
 | - Port Arabic shaper to shape-plan caching. | 
 |  | 
 | - Use new ICU normalizer functions. | 
 |  | 
 |  | 
 |  | 
 | Overview of changes leading to 0.9.2 | 
 | Friday, Aug 10, 2012 | 
 | ==================================== | 
 |  | 
 | - Over a thousand commits!  This is the first major release of HarfBuzz. | 
 |  | 
 | - HarfBuzz is feature-complete now!  It should be in par, or better, than | 
 |   both Pango's shapers and old HarfBuzz / Qt shapers. | 
 |  | 
 | - New Indic shaper, supporting main Indic scripts, Sinhala, and Khmer. | 
 |  | 
 | - Improved Arabic shaper, with fallback Arabic shaping, supporting Arabic, | 
 |   Sinhala, N'ko, Mongolian, and Mandaic. | 
 |  | 
 | - New Thai / Lao shaper. | 
 |  | 
 | - Tibetan / Hangul support in the generic shaper. | 
 |  | 
 | - Synthetic GDEF support for fonts without a GDEF table. | 
 |  | 
 | - Fallback mark positioning for fonts without a GPOS table. | 
 |  | 
 | - Unicode normalization shaping heuristic during glyph mapping. | 
 |  | 
 | - New experimental Graphite2 backend. | 
 |  | 
 | - New Uniscribe backend (primarily for testing). | 
 |  | 
 | - New CoreText backend (primarily for testing). | 
 |  | 
 | - Major optimization and speedup. | 
 |  | 
 | - Test suites and testing infrastructure (work in progress). | 
 |  | 
 | - Greatly improved hb-view cmdline tool. | 
 |  | 
 | - hb-shape cmdline tool. | 
 |  | 
 | - Unicode 6.1 support. | 
 |  | 
 | Summary of API changes: | 
 |  | 
 | o Changed API: | 
 |  | 
 |   - Users are expected to only include main header files now (ie. hb.h, | 
 |     hb-glib.h, hb-ft.h, ...) | 
 |  | 
 |   - All struct tag names had their initial underscore removed. | 
 |     Ie. "struct _hb_buffer_t" is "struct hb_buffer_t" now. | 
 |  | 
 |   - All set_user_data() functions now take a "replace" boolean parameter. | 
 |  | 
 |   - hb_buffer_create() takes zero arguments now. | 
 |     Use hb_buffer_pre_allocate() to pre-allocate. | 
 |  | 
 |   - hb_buffer_add_utf*() now accept -1 for length parameteres, | 
 |     meaning "nul-terminated". | 
 |  | 
 |   - hb_direction_t enum values changed. | 
 |  | 
 |   - All *_from_string() APIs now take a length parameter to allow for | 
 |     non-nul-terminated strings. A -1 length means "nul-terminated". | 
 |  | 
 |   - Typedef for hb_language_t changed. | 
 |  | 
 |   - hb_get_table_func_t renamed to hb_reference_table_func_t. | 
 |  | 
 |   - hb_ot_layout_table_choose_script() | 
 |  | 
 |   - Various renames in hb-unicode.h. | 
 |  | 
 | o New API: | 
 |  | 
 |   - hb_buffer_guess_properties() | 
 |     Automatically called by hb_shape(). | 
 |  | 
 |   - hb_buffer_normalize_glyphs() | 
 |  | 
 |   - hb_tag_from_string() | 
 |  | 
 |   - hb-coretext.h | 
 |  | 
 |   - hb-uniscribe.h | 
 |  | 
 |   - hb_face_reference_blob() | 
 |   - hb_face_[sg]et_index() | 
 |   - hb_face_set_upem() | 
 |  | 
 |   - hb_font_get_glyph_name_func_t | 
 |     hb_font_get_glyph_from_name_func_t | 
 |     hb_font_funcs_set_glyph_name_func() | 
 |     hb_font_funcs_set_glyph_from_name_func() | 
 |     hb_font_get_glyph_name() | 
 |     hb_font_get_glyph_from_name() | 
 |     hb_font_glyph_to_string() | 
 |     hb_font_glyph_from_string() | 
 |  | 
 |   - hb_font_set_funcs_data() | 
 |  | 
 |   - hb_ft_font_set_funcs() | 
 |   - hb_ft_font_get_face() | 
 |  | 
 |   - hb-gobject.h (work in progress) | 
 |  | 
 |   - hb_ot_shape_glyphs_closure() | 
 |     hb_ot_layout_substitute_closure_lookup() | 
 |  | 
 |   - hb-set.h | 
 |  | 
 |   - hb_shape_full() | 
 |  | 
 |   - hb_unicode_combining_class_t | 
 |  | 
 |   - hb_unicode_compose_func_t | 
 |     hb_unicode_decompose_func_t | 
 |     hb_unicode_decompose_compatibility_func_t | 
 |     hb_unicode_funcs_set_compose_func() | 
 |     hb_unicode_funcs_set_decompose_func() | 
 |     hb_unicode_funcs_set_decompose_compatibility_func() | 
 |     hb_unicode_compose() | 
 |     hb_unicode_decompose() | 
 |     hb_unicode_decompose_compatibility() | 
 |  | 
 | o Removed API: | 
 |  | 
 |   - hb_ft_get_font_funcs() | 
 |  | 
 |   - hb_ot_layout_substitute_start() | 
 |     hb_ot_layout_substitute_lookup() | 
 |     hb_ot_layout_substitute_finish() | 
 |     hb_ot_layout_position_start() | 
 |     hb_ot_layout_position_lookup() | 
 |     hb_ot_layout_position_finish() | 
 |  | 
 |  | 
 |  | 
 | Overview of changes leading to 0.6.0 | 
 | Friday, May 27, 2011 | 
 | ==================================== | 
 |  | 
 | - Vertical text support in GPOS | 
 | - Almost all API entries have unit tests now, under test/ | 
 | - All thread-safety issues are fixed | 
 |  | 
 | Summary of API changes follows. | 
 |  | 
 |  | 
 | * Simple Types API: | 
 |  | 
 |   o New API: | 
 |     HB_LANGUAGE_INVALID | 
 |     hb_language_get_default() | 
 |     hb_direction_to_string() | 
 |     hb_direction_from_string() | 
 |     hb_script_get_horizontal_direction() | 
 |     HB_UNTAG() | 
 |  | 
 |   o Renamed API: | 
 |     hb_category_t renamed to hb_unicode_general_category_t | 
 |  | 
 |   o Changed API: | 
 |     hb_language_t is a typed pointers now | 
 |  | 
 |   o Removed API: | 
 |     HB_TAG_STR() | 
 |  | 
 |  | 
 | * Use ISO 15924 tags for hb_script_t: | 
 |  | 
 |   o New API: | 
 |     hb_script_from_iso15924_tag() | 
 |     hb_script_to_iso15924_tag() | 
 |     hb_script_from_string() | 
 |  | 
 |   o Changed API: | 
 |     HB_SCRIPT_* enum members changed value. | 
 |  | 
 |  | 
 | * Buffer API streamlined: | 
 |  | 
 |   o New API: | 
 |     hb_buffer_reset() | 
 |     hb_buffer_set_length() | 
 |     hb_buffer_allocation_successful() | 
 |  | 
 |   o Renamed API: | 
 |     hb_buffer_ensure() renamed to hb_buffer_pre_allocate() | 
 |     hb_buffer_add_glyph() renamed to hb_buffer_add() | 
 |  | 
 |   o Removed API: | 
 |     hb_buffer_clear() | 
 |     hb_buffer_clear_positions() | 
 |  | 
 |   o Changed API: | 
 |     hb_buffer_get_glyph_infos() takes an out length parameter now | 
 |     hb_buffer_get_glyph_positions() takes an out length parameter now | 
 |  | 
 |  | 
 | * Blob API streamlined: | 
 |  | 
 |   o New API: | 
 |     hb_blob_get_data() | 
 |     hb_blob_get_data_writable() | 
 |  | 
 |   o Renamed API: | 
 |     hb_blob_create_empty() renamed to hb_blob_get_empty() | 
 |  | 
 |   o Removed API: | 
 |     hb_blob_lock() | 
 |     hb_blob_unlock() | 
 |     hb_blob_is_writable() | 
 |     hb_blob_try_writable() | 
 |  | 
 |   o Changed API: | 
 |     hb_blob_create() takes user_data before destroy now | 
 |  | 
 |  | 
 | * Unicode functions API: | 
 |  | 
 |   o Unicode function vectors can subclass other unicode function vectors now. | 
 |     Unimplemented callbacks in the subclass automatically chainup to the parent. | 
 |  | 
 |   o All hb_unicode_funcs_t callbacks take a user_data now.  Their setters | 
 |     take a user_data and its respective destroy callback. | 
 |  | 
 |   o New API: | 
 |     hb_unicode_funcs_get_empty() | 
 |     hb_unicode_funcs_get_default() | 
 |     hb_unicode_funcs_get_parent() | 
 |  | 
 |   o Changed API: | 
 |     hb_unicode_funcs_create() now takes a parent_funcs. | 
 |  | 
 |   o Removed func getter functions: | 
 |     hb_unicode_funcs_get_mirroring_func() | 
 |     hb_unicode_funcs_get_general_category_func() | 
 |     hb_unicode_funcs_get_script_func() | 
 |     hb_unicode_funcs_get_combining_class_func() | 
 |     hb_unicode_funcs_get_eastasian_width_func() | 
 |  | 
 |  | 
 | * Face API: | 
 |  | 
 |   o Renamed API: | 
 |     hb_face_get_table() renamed to hb_face_reference_table() | 
 |     hb_face_create_for_data() renamed to hb_face_create() | 
 |  | 
 |   o Changed API: | 
 |     hb_face_create_for_tables() takes user_data before destroy now | 
 |     hb_face_reference_table() returns empty blob instead of NULL | 
 |     hb_get_table_func_t accepts the face as first parameter now | 
 |  | 
 | * Font API: | 
 |  | 
 |   o Fonts can subclass other fonts now.  Unimplemented callbacks in the | 
 |     subclass automatically chainup to the parent.  When chaining up, | 
 |     scale is adjusted if the parent font has a different scale. | 
 |  | 
 |   o All hb_font_funcs_t callbacks take a user_data now.  Their setters | 
 |     take a user_data and its respective destroy callback. | 
 |  | 
 |   o New API: | 
 |     hb_font_get_parent() | 
 |     hb_font_funcs_get_empty() | 
 |     hb_font_create_sub_font() | 
 |  | 
 |   o Removed API: | 
 |     hb_font_funcs_copy() | 
 |     hb_font_unset_funcs() | 
 |  | 
 |   o Removed func getter functions: | 
 |     hb_font_funcs_get_glyph_func() | 
 |     hb_font_funcs_get_glyph_advance_func() | 
 |     hb_font_funcs_get_glyph_extents_func() | 
 |     hb_font_funcs_get_contour_point_func() | 
 |     hb_font_funcs_get_kerning_func() | 
 |  | 
 |   o Changed API: | 
 |     hb_font_create() takes a face and references it now | 
 |     hb_font_set_funcs() takes user_data before destroy now | 
 |     hb_font_set_scale() accepts signed integers now | 
 |     hb_font_get_contour_point_func_t now takes glyph first, then point_index | 
 |     hb_font_get_glyph_func_t returns a success boolean now | 
 |  | 
 |  | 
 | * Changed object model: | 
 |  | 
 |   o All object types have a _get_empty() now: | 
 |     hb_blob_get_empty() | 
 |     hb_buffer_get_empty() | 
 |     hb_face_get_empty() | 
 |     hb_font_get_empty() | 
 |     hb_font_funcs_get_empty() | 
 |     hb_unicode_funcs_get_empty() | 
 |  | 
 |   o Added _set_user_data() and _get_user_data() for all object types: | 
 |     hb_blob_get_user_data() | 
 |     hb_blob_set_user_data() | 
 |     hb_buffer_get_user_data() | 
 |     hb_buffer_set_user_data() | 
 |     hb_face_get_user_data() | 
 |     hb_face_set_user_data() | 
 |     hb_font_funcs_get_user_data() | 
 |     hb_font_funcs_set_user_data() | 
 |     hb_font_get_user_data() | 
 |     hb_font_set_user_data() | 
 |     hb_unicode_funcs_get_user_data() | 
 |     hb_unicode_funcs_set_user_data() | 
 |  | 
 |   o Removed the _get_reference_count() from all object types: | 
 |     hb_blob_get_reference_count() | 
 |     hb_buffer_get_reference_count() | 
 |     hb_face_get_reference_count() | 
 |     hb_font_funcs_get_reference_count() | 
 |     hb_font_get_reference_count() | 
 |     hb_unicode_funcs_get_reference_count() | 
 |  | 
 |   o Added _make_immutable() and _is_immutable() for all object types except for buffer: | 
 |     hb_blob_make_immutable() | 
 |     hb_blob_is_immutable() | 
 |     hb_face_make_immutable() | 
 |     hb_face_is_immutable() | 
 |  | 
 |  | 
 | * Changed API for vertical text support | 
 |  | 
 |   o The following callbacks where removed: | 
 |     hb_font_get_glyph_advance_func_t | 
 |     hb_font_get_kerning_func_t | 
 |  | 
 |   o The following new callbacks added instead: | 
 |     hb_font_get_glyph_h_advance_func_t | 
 |     hb_font_get_glyph_v_advance_func_t | 
 |     hb_font_get_glyph_h_origin_func_t | 
 |     hb_font_get_glyph_v_origin_func_t | 
 |     hb_font_get_glyph_h_kerning_func_t | 
 |     hb_font_get_glyph_v_kerning_func_t | 
 |  | 
 |   o The following API removed as such: | 
 |     hb_font_funcs_set_glyph_advance_func() | 
 |     hb_font_funcs_set_kerning_func() | 
 |     hb_font_get_glyph_advance() | 
 |     hb_font_get_kerning() | 
 |  | 
 |   o New API added instead: | 
 |     hb_font_funcs_set_glyph_h_advance_func() | 
 |     hb_font_funcs_set_glyph_v_advance_func() | 
 |     hb_font_funcs_set_glyph_h_origin_func() | 
 |     hb_font_funcs_set_glyph_v_origin_func() | 
 |     hb_font_funcs_set_glyph_h_kerning_func() | 
 |     hb_font_funcs_set_glyph_v_kerning_func() | 
 |     hb_font_get_glyph_h_advance() | 
 |     hb_font_get_glyph_v_advance() | 
 |     hb_font_get_glyph_h_origin() | 
 |     hb_font_get_glyph_v_origin() | 
 |     hb_font_get_glyph_h_kerning() | 
 |     hb_font_get_glyph_v_kerning() | 
 |  | 
 |   o The following higher-leve API added for convenience: | 
 |     hb_font_get_glyph_advance_for_direction() | 
 |     hb_font_get_glyph_origin_for_direction() | 
 |     hb_font_add_glyph_origin_for_direction() | 
 |     hb_font_subtract_glyph_origin_for_direction() | 
 |     hb_font_get_glyph_kerning_for_direction() | 
 |     hb_font_get_glyph_extents_for_origin() | 
 |     hb_font_get_glyph_contour_point_for_origin() | 
 |  | 
 |  | 
 | * OpenType Layout API: | 
 |  | 
 |   o New API: | 
 |     hb_ot_layout_position_start() | 
 |     hb_ot_layout_substitute_start() | 
 |     hb_ot_layout_substitute_finish() | 
 |  | 
 |  | 
 | * Glue code: | 
 |  | 
 |   o New API: | 
 |     hb_glib_script_to_script() | 
 |     hb_glib_script_from_script() | 
 |     hb_icu_script_to_script() | 
 |     hb_icu_script_from_script() | 
 |  | 
 |  | 
 | * Version API added: | 
 |  | 
 |   o New API: | 
 |     HB_VERSION_MAJOR | 
 |     HB_VERSION_MINOR | 
 |     HB_VERSION_MICRO | 
 |     HB_VERSION_STRING | 
 |     HB_VERSION_CHECK() | 
 |     hb_version() | 
 |     hb_version_string() | 
 |     hb_version_check() | 
 |  | 
 |  |