Overview of changes leading to 11.4.1
Wednesday, August 13, 2025
====================================
- Fix clang compiler warnings.

Overview of changes leading to 11.4.0
Wednesday, August 13, 2025
====================================
- General shaping and subsetting speedups.
- Fix in Graphite shaping backend when glyph advances became negative.
- Subsetting improvements, pruning empty mark-attachment lookups.
- Don't use the macro name `_S`, which is reserved by system liberaries.
- Build fixes and speedup.
- Add a `kbts` shaping backend that calls into the `kb_text_shape`
  single-header shaping library. This is purely for testing and
  performance evaluation and we do NOT recommend using it for any
  other purposes.

Overview of changes leading to 11.3.3
Sunday, July 26, 2025
====================================
- Fix but in vertical shaping of fonts without the vmtx table.

Overview of changes leading to 11.3.2
Sunday, July 20, 2025
====================================
- Fix build with non-compliant C++11 compilers that don't recognize
  the "and" keyword.

Overview of changes leading to 11.3.1
Sunday, July 20, 2025
====================================
- Fix crasher in the glyph_v_origin function introduced in
  11.3.0.

Overview of changes leading to 11.3.0
Sunday, July 20, 2025
====================================
- Speed up handling fonts with very large number of variations:
  - Drawing by up to 40%.
  - Calculating glyph extents by up to 15%.
  - Getting horizontal glyph advances by up to 45%.
- Speed up getting horizontal and vertical glyph advances by up to 24%.
- Significantly speed up vertical text shaping.
- Various documentation improvements.
- Various build improvements.
- Various subsetting improvements.
- Various improvements to Rust font functions (fontations integration) and shaper (HarfRust integration).
- Rename harfruzz option and shaper to harfrust following upstream rename.
- Implement hb_face_reference_blob() for DirectWrite font functions.

- New API:
  +hb_font_get_glyph_origins_func_t
  +hb_font_get_glyph_h_origins_func_t
  +hb_font_get_glyph_v_origins_func_t
  +hb_font_funcs_set_glyph_h_origins_func()
  +hb_font_funcs_set_glyph_v_origins_func()
  +hb_font_get_glyph_h_origins()
  +hb_font_get_glyph_v_origins()


Overview of changes leading to 11.2.1
Monday, May 12, 2025
====================================
- Various build improvements.
- Fix build with HB_NO_DRAW and HB_NO_PAINT
- Add an optional “harfruzz” shaper that uses HarfRuzz; an ongoing Rust port of
  HarfBuzz shaping. This shaper is mainly used for testing the output of the
  Rust implementation.
- Fix regression that caused applying unsafe_to_break() to the whole buffer to
  be ignored.
- Update USE data files.
- Fix getting advances of out-of-rage glyph indices in DirectWrite font
  functions.


Overview of changes leading to 11.2.0
Monday, April 28, 2025
====================================
- Painting of COLRv1 fonts without clip boxes is now about 10 times faster.
- Synthetic bold/slant of a sub font is now respected, instead of using the parent’s.
- Glyph extents for fonts synthetic bold/slant are now accurately calculated.
- Various build fixes

- New API:
  +hb_font_is_synthetic()
  +hb_font_draw_glyph_or_fail_func_t
  +hb_font_paint_glyph_or_fail_func_t
  +hb_font_funcs_set_draw_glyph_or_fail_func()
  +hb_font_funcs_set_paint_glyph_or_fail_func()
  +hb_font_draw_glyph_or_fail()
  +hb_font_paint_glyph_or_fail()

- Deprecated API:
  -hb_font_draw_glyph_func_t
  -hb_font_paint_glyph_func_t
  -hb_font_funcs_set_draw_glyph_func()
  -hb_font_funcs_set_paint_glyph_func()


Overview of changes leading to 11.1.0
Wednesday, April 16, 2025
====================================
- Include bidi mirroring variants of the requested codepoints when subsetting.
  The new HB_SUBSET_FLAGS_NO_BIDI_CLOSURE can be used to disable this
  behaviour.
- Various bug fixes.
- Various build fixes and improvements.
- Various test suite improvements.

- New API:
  +HB_SUBSET_FLAGS_NO_BIDI_CLOSURE


Overview of changes leading to 11.0.1
Friday, April 4, 2025
====================================
- The change in version 10.3.0 to apply “trak” table tracking values to glyph
  advances directly has been reverted as it required every font functions
  implementation to handle it, which breaks existing custom font functions.
  Tracking is instead back to being applied during shaping.
- When `directwrite` integration is enabled, we now link to `dwrite.dll`
  instead of dynamically loading it.
- A new experimental APIs for getting raw “CFF” and “CFF2” CharStrings.
- We now provide manpages for the various command line utilities. Building
  manpages requires “help2man” and will be skipped if it is not present.
- The command line utilities now set different return value for different kinds
  of failures. Details are provided in the manpages.
- Various fixes and improvements to `fontations` font functions.
- All shaping operations using the `ot` shaper have become memory
  allocation-free.
- Glyph extents returned by `hb-ot` and `hb-ft` font functions are now rounded
  in stead of flooring/ceiling them, which also matches what other font
  libraries do.
- Fix “AAT” deleted glyph marks interfering with fallback mark positioning.
- Glyph outlines emboldening have been moved out of `hb-ot` and `hb-ft` font
  functions to the HarfBuzz font layer, so that it works with any font
  functions implementation.
- Fix our fallback C++11 atomics integration, which seems to not be widely
  used.
- Various testing fixes and improvements.
- Various subsetting fixes and improvements.
- Various other fixes and improvements.


Overview of changes leading to 11.0.0
Monday, March 24, 2025
====================================
- There are three new font-functions implementations (integrations) in this
  release:
  * `hb-coretext` has gained one, calling into the CoreText library,
  * `hb-directwrite` has gained one, calling into the DirectWrite library.
  * `hb-fontations` has gained one, calling into the Skrifa Rust library.
  All three are mostly useful for performance and correctness testing, but some
  clients might find them useful.
  An API is added to use them from a single API by providing a backend name
  string:
  * `hb_font_set_funcs_using()`
- Several new APIs are added, to load a font-face using different
  "face-loaders", and a single entry point to them all using a loader name
  string:
  * `hb_ft_face_create_from_file_or_fail()` and
    `hb_ft_face_create_from_blob_or_fail()`
  * `hb_coretext_face_create_from_file_or_fail()` and
    `hb_coretext_face_create_from_blob_or_fail()`
  * `hb_directwrite_face_create_from_file_or_fail()` and
    `hb_directwrite_face_create_from_blob_or_fail()`
  * `hb_face_create_from_file_or_fail_using()`
- All drawing and painting operations using the default, `hb-ot` functions have
  become memory allocation-free.
- Several performance optimizations have been implemented.
- Application of the `trak` table during shaping has been improved.
- The `directwrite` shaper now supports font variations, and correctly applies
  user features.
- The `hb-directwrite` API and shaper has graduated from experimental.
- Various bug fixes and other improvements.

- New API:
  +hb_malloc()
  +hb_calloc()
  +hb_realloc()
  +hb_free()
  +hb_face_list_loaders()
  +hb_face_create_or_fail_using()
  +hb_face_create_from_file_or_fail_using()
  +hb_font_list_funcs()
  +hb_font_set_funcs_using()
  +hb_coretext_face_create_from_blob_or_fail()
  +hb_directwrite_face_create_from_file_or_fail()
  +hb_directwrite_face_create_from_blob_or_fail()
  +hb_directwrite_font_create()
  +hb_directwrite_font_get_dw_font_face()
  +hb_directwrite_font_set_funcs()
  +hb_fontations_font_set_funcs()
  +hb_ft_face_create_from_blob_or_fail()
  +hb_paint_push_font_transform()
  +hb_paint_push_inverse_font_transform()
  +HB_BUFFER_CLUSTER_LEVEL_GRAPHEMES
  +HB_BUFFER_CLUSTER_LEVEL_IS_MONOTONE
  +HB_BUFFER_CLUSTER_LEVEL_IS_GRAPHEMES
  +HB_BUFFER_CLUSTER_LEVEL_IS_CHARACTERS

- Deprecated API:
  -hb_directwrite_font_get_dw_font()


Overview of changes leading to 10.4.0
Saturday, March 1, 2025
====================================
- Drawing glyphs using hb-draw API now avoids any “malloc” calls, which
  improves drawing performance by 10+%.
- Add support new “GVAR” table fonts with more than 65535 glyphs. Support is
  currently behind a compilation flag and is disabled by default.
- Some hb-directwrite and hb-ft APIs got renamed with more clear names and the
  old names are deprecated.
- Various build and fuzzing fixes.

- New API:
  +hb_directwrite_face_get_dw_font_face()
  +hb_ft_font_get_ft_face()

- Deprecated API:
  -hb_directwrite_face_get_font_face()
  -hb_ft_font_get_face()


Overview of changes leading to 10.3.0
Thursday, February 11, 2025
====================================
- Vastly improved “AAT” shaping performance. LucidaGrande benchmark-shape
  before: 14.6ms after: 5.9ms.
- Improved OpenType shaping performance (kerning / ligature), at the expense of
  ~1kb per face allocated cache memory. Roboto-Regular benchmark-shape before:
  10.3ms after: 9.4ms.
- Improved “COLRv1” benchmark-font paint performance. Before: 7.85ms after
  4.85ms.
- Don’t apply glyph substitutions in “morx” table of a font with known broken
  “morx” table (AALMAGHRIBI.ttf font).
- Update IANA and OT language registries.
- Various documentation updates.
- Various build improvements, and test speed-ups.
- The “hb_face_reference_blob()” API now works for faces created with
  “hb_face_create_for_tables()” if the face sets “get_table_tags” callback.
  This constructs a new face blob from individual table blobs.
- Various fixes to how “trak” table is handled to bring it closer to Core Text
  behaviour. Particularly, the tracking values for sizes not explicitly set in
  the table are now properly interpolated, and the tracking is applied to glyph
  advances when they are returned by ot-font functions, instead of applying
  them during shaping. The “trak” pseudo OpenType feature that could be used to
  disable “trak” table application have been dropped.
- Core Text font functions now support non-BMP code points.
- The drawing algorithm used by hb-draw for “glyf” table now match the
  algorithm used by FreeType and Core Text.
- The “hb_coretext_font_create()” API now copy font variations from Core Text
  font to the created HarfBuzz font.
- Add an API to get the feature tags enabled on a given shape-plan after
  executing it, which can be used to applications to show in the UI what
  features are applied by default (which can vary based on the font, the
  script, the language, and the direction set on the buffer).
- Add APIs to created HarfBuzz font from DirectWrite font, and copy the font
  variations.

- New API:
  +hb_directwrite_font_create()
  +hb_directwrite_font_get_dw_font()
  +hb_ot_shape_plan_get_feature_tags()


Overview of changes leading to 10.2.0
Saturday, January 11, 2025
====================================
- Consider Unicode Variation Selectors when subsetting “cmap” table.
- Guard hb_cairo_glyphs_from_buffer() against malformed UTF-8 strings.
- Fix incorrect “COLR” v1 glyph scaling in hb-cairo.
- Use locale-independent parsing of double numbers is “hb-subset” command line
  tool.
- Fix incorrect zeroing of advance width of base glyphs in various “Courier New”
  font versions due to incorrect “GDEF” glyph classes.
- Fix handling of long language codes with “HB_LEAN” configuration.
- Update OpenType language system registry.
- Allow all Myanmar tone marks (including visarga) in any order
- Don’t insert U+25CC DOTTED CIRCLE before superscript/subscript digits
- Handle Garay script as right to left script.
- New API for serializing font tables and potentially repacking them in optimal
  way. This was a previously experimental-only API.
- New API for converting font variation setting from and to strings.
- Various build fixes
- Various subsetter and instancer fixes.

- New API:
  +hb_subset_serialize_link_t
  +hb_subset_serialize_object_t
  +hb_subset_serialize_or_fail()
  +hb_subset_axis_range_from_string()
  +hb_subset_axis_range_to_string()


Overview of changes leading to 10.1.0
Tuesday, November 5, 2024
====================================
- Fix the sign of fallback vertical glyph advance (used when font has no
  vertical advance data).
- Increase maximum “CFF” operands limit 20 times to support more complex fonts.
- Add “--face-loader” option to command line utilities.
- Support “COLR” v0 table in hb_font_get_glyph_extents().
- Add support for font functions that use Core Text APIs, similar to FreeType
  font functions. This allows, for example, using drawing fonts that use the new
  (and undocumented) “hvgl” table.
- Update IANA and OT language registries, as well ase USE data files.
- Fix build with ICU 76.
- Various compiler warnings and build fixes.
- Various subsetter fixes.

- New API:
  +hb_face_create_or_fail()
  +hb_face_create_from_file_or_fail()
  +hb_coretext_face_create_from_file_or_fail()
  +hb_coretext_font_set_funcs()
  +hb_ft_face_create_from_file_or_fail()

Overview of changes leading to 10.0.1
Tuesday, September 24, 2024
====================================
- Relax sanitization checks for “morx” subtables to fix broken AAT shaping of
  macOS 15.0 version of GeezaPro.


Overview of changes leading to 10.0.0
Monday, September 23, 2024
====================================
- Unicode 16.0.0 support.
- Various documentation fixes.
- Various build fixes.
- Add API to allow HarfBuzz client to set what glyph to use when a Unicode
  Variation Selector is not supported by the font, which would allow the client
  to customize what happens in this case, by using a different font for example.
- Add a callback to for “hb_face_t” for getting the list of table tags. This is
  now used to make calling “hb_face_get_table_tags()” work on a faces created by
  “hb_face_create_for_tables()” (e.g. faces returned by “hb_subset_or_fail()”).
- CGJ and Mongolian Variation Selectors are now ignored during glyph
  positioning, previously they would block both glyph substitution and
  positioning across them.
- Support cairo script as an output format for “hb-view” command line tool.
- Drop an optimization that would cause HarfBuzz not apply pair positioning
  lookup subtables under certain circumstances, for compatibility with other
  implementations that do apply these subtables.
- Subsetting will now fail if source font has no glyphs, so feeding the subsetter
  invalid data will not silently return an empty face.
- If after partially instancing a font no variation data is left (the instance
  is fully static), don’t consider this a failure.
- Workaround a Firefox bug in displaying SVGs generated be “hb-view” command
  line tool under certain circumstances.
- Fix bug in macroman mapping for “cmap” table.
- Fix difference shaping output when HarfBuzz is built with with
  “HB_NO_OT_RULESETS_FAST_PATH” enabled.
- Various subsetting and instancing fixes.
- Various fuzzing fixes.
- Add “with_libstdcxx” meson build option.


- New API:
  +HB_SCRIPT_GARAY
  +HB_SCRIPT_GURUNG_KHEMA
  +HB_SCRIPT_KIRAT_RAI
  +HB_SCRIPT_OL_ONAL
  +HB_SCRIPT_SUNUWAR
  +HB_SCRIPT_TODHRI
  +HB_SCRIPT_TULU_TIGALARI
  +hb_buffer_set_not_found_variation_selector_glyph()
  +hb_buffer_get_not_found_variation_selector_glyph()
  +hb_get_table_tags_func_t
  +hb_face_set_get_table_tags_func()


Overview of changes leading to 9.0.0
Thursday, Jun 27, 2024
====================================
- HarfBuzz now the supports the proposed new OpenType “VARC” table. This
  replaces the previously supported “Variable Composites” experimental feature.
  “VARC” support is still experimental and it is not enabled unless HarfBuzz is
  built with experimental APIs enabled:
  https://github.com/harfbuzz/boring-expansion-spec/blob/main/VARC.md
- Autotools build system have been dropped. Meson is the only supported build
  system in HarfBuzz going forward.
- Speed up “AAT” shaping for short words by up to 4%.
- Ignore unknown “CFF” operators.
- “hb_subset_input_keep_everything()” now keeps also non-unicode “name” table
  records.
- Update the IANA and OpenType language tag registries.
- Support composite glyphs with very large number of points in hb-draw API.
- Various build fixes.


Overview of changes leading to 8.5.0
Monday, May 13, 2024
====================================
- API for partial instancing is now stable and have been promoted out of
  experimental APIs.
- Support instancing “BASE” table.
- Speedup AAT shaping by 13–30%.
- Various build fixes.
- Various subsetter and instancer fixes.

- New API:
  +HB_SUBSET_FLAGS_OPTIMIZE_IUP_DELTAS
  +hb_subset_input_get_axis_range()
  +hb_subset_input_pin_axis_location()

Overview of changes leading to 8.4.0
Saturday, March 29, 2024
====================================
- Add /bigobj to MSVC compiler flags in meson build, to fix building hb-subset.cc
- Specify minimum versions of various dependencies in meson and autotools build.
- When subsetting, place variation store at the end of “GDEF” table  to fix
  shaping issues with some versions of Adobe InDesign.
- Various build fixes.

- New API:
+hb_buffer_set_random_state()
+hb_buffer_get_random_state()

Overview of changes leading to 8.3.1
Saturday, March 16, 2024
====================================
- hb_blob_create_from_file_or_fail() on Windows will now try to interpret the
  file name as UTF-8 first, and as system code page if it is not valid UTF-8.
- Fix hb_style_get_value() in fonts with “STAT” table.
- Properly handle negative offsets in CFF table.
- Update IANA Language Subtag Registry to 2024-03-07.
- Subsetter now supports subsetting “BASE” table.
- Subsetter will update “hhea” font metrics in sync with “OS/2” ones.
- “--variations” option of “hb-subset” now supports leaving out values that
  should be unchanged, e.g. “wght=:500:” will change the default and keep max
  and min unchanged. It also supports “*=drop” to to pin all axes to default
  location.
- Fix hb_ot_math_get_glyph_kerning() to match updated “MATH” table spec.
- Support legacy MacRoman encoding in “cmap” table.
- Various build fixes.
- Various subsetting and instancing fixes.

- New API:
hb_subset_input_pin_all_axes_to_default()

Overview of changes leading to 8.3.0
Saturday, November 11, 2023
====================================
- Improve memory barrier to fix potential segfaults.
- Various build fixes.
- Various subsetting and instancing fixes.
- Rename “hb-subset” option “--instance” to “--variations” to match the other
  tools. Old option is kept as an alias.

- New API:
  +HB_AAT_LAYOUT_FEATURE_TYPE_CURSIVE_CONNECTION

- Deprecated API:
  -HB_AAT_LAYOUT_FEATURE_TYPE_CURISVE_CONNECTION

Overview of changes leading to 8.2.2
Wednesday, October 18, 2023
“From the river to the sea, Palestine will be free”
====================================
- Fix regression from 8.1.0 in shaping fonts with duplicate feature tags.
- Fix regression from 8.2.0 in parsing CSS-style feature strings.
- Variable fonts instanciation now handles more tables.
- Various CMake build improvements.
- various fixes to build without errors with gcc 4.9.2.


Overview of changes leading to 8.2.1
Monday, September 18, 2023
====================================
- Unicode 15.1 support.


Overview of changes leading to 8.2.0
Friday, September 8, 2023
====================================
- Various build and fuzzing fixes
- Improvements to COLRv1 painting.

- New API:
+hb_paint_color_glyph_func_t
+hb_paint_funcs_set_color_glyph_func
+hb_paint_color_glyph


Overview of changes leading to 8.1.1
Wednesday, August 2, 2023
====================================
- Fix shaping of contextual rules at the end of string, introduced in 8.1.0
- Fix stack-overflow in repacker with malicious fonts.
- 30% speed up loading Noto Duployan font.


Overview of changes leading to 8.1.0
Tuesday, August 1, 2023
====================================
- Fix long-standing build issue with the AIX compiler and older Apple clang.

- Revert optimization that could cause timeout during subsetting with malicious fonts.

- More optimization work:
  - 45% speed up in shaping Noto Duployan font.
  - 10% speed up in subsetting Noto Duployan font.
  - Another 8% speed up in shaping Gulzar.
  - 5% speed up in loading Roboto.

- New API:
  +hb_ot_layout_collect_features_map()


Overview of changes leading to 8.0.1
Wednesday, July 12, 2023
====================================
- Build fix on 32-bit ARM.

- More speed optimizations:
  - 60% speed up in retain-gid (used for IFT) subsetting of SourceHanSans-VF.
  - 16% speed up in retain-gid (used for IFT) subsetting of NotoSansCJKkr.
  - 38% speed up in subsetting (beyond-64k) mega-merged Noto.


Overview of changes leading to 8.0.0
Sunday, July 9, 2023
====================================
- New, experimental, WebAssembly (WASM) shaper, that provides greater
  flexibility over OpenType/AAT/Graphite shaping, using WebAssembly embedded
  inside the font file. Currently WASM shaper is disabled by default and needs
  to be enabled at build time. For details, see:

    https://github.com/harfbuzz/harfbuzz/blob/main/docs/wasm-shaper.md

  For example fonts making use of the WASM shaper, see:

    https://github.com/harfbuzz/harfbuzz-wasm-examples

- Improvements to Experimental features introduced in earlier releases:
  - Support for subsetting beyond-64k and VarComposites fonts.
  - Support for instancing variable fonts with cubic “glyf” table.

- Many big speed optimizations:
  - Up to 89% speedup loading variable fonts for shaping.
  - Up to 88% speedup in small subsets of large (eg. CJK) fonts (both TTF and
    OTF), essential for Incremental Font Transfer (IFT).
  - Over 50% speedup in loading Roboto font for shaping.
  - Up to 40% speed up in loading (sanitizing) complex fonts.
  - 30% speed up in shaping Gulzar font.
  - Over 25% speedup in glyph loading Roboto font.
  - 10% speed up loading glyph shapes in VarComposite Hangul font.
  - hb-hashmap optimizations & hashing improvements.

- New macro HB_ALWAYS_INLINE. HarfBuzz now inlines functions more aggressively,
  which results in some speedup at the expense of bigger code size. To disable
  this feature define the macro to just inline.

- New API:
  +HB_CODEPOINT_INVALID
  +hb_ot_layout_get_baseline2()
  +hb_ot_layout_get_baseline_with_fallback2()
  +hb_ot_layout_get_font_extents()
  +hb_ot_layout_get_font_extents2()
  +hb_subset_input_set_axis_range()


Overview of changes leading to 7.3.0
Tuesday, May 9, 2023
====================================
- Speedup applying glyph variation in VarComposites fonts (over 40% speedup).
  (Behdad Esfahbod)
- Speedup instancing some fonts (over 20% speedup in instancing RobotoFlex).
  (Behdad Esfahbod)
- Speedup shaping some fonts (over 30% speedup in shaping Roboto).
  (Behdad Esfahbod)
- Support subsetting VarComposites and beyond-64k fonts. (Behdad Esfahbod)
- New configuration macro HB_MINIMIZE_MEMORY_USAGE to favor optimizing memory
  usage over speed. (Behdad Esfahbod)
- Supporting setting the mapping between old and new glyph indices during
  subsetting. (Garret Rieger)
- Various fixes and improvements.
  (Behdad Esfahbod, Denis Rochette, Garret Rieger, Han Seung Min, Qunxin Liu)

- New API:
+hb_subset_input_old_to_new_glyph_mapping()


Overview of changes leading to 7.2.0
Thursday, April 27, 2023
====================================
- Add Tifinagh to the list of scripts that can natively be either right-to-left
  or left-to-right, to improve handling of its glyph positioning.
  (Simon Cozens)
- Return also single substitution from hb_ot_layout_lookup_get_glyph_alternates()
  (Behdad Esfahbod)
- Fix 4.2.0 regression in applying across syllables in syllabic scripts.
  (Behdad Esfahbod)
- Add flag to avoid glyph substitution closure during subsetting, and the
  corresponding “--no-layout-closure” option to “hb-subset” command line tool.
  (Garret Rieger)
- Support instancing COLRv1 table. (Qunxin Liu)
- Don’t drop used user-defined name table entries during subsetting.
  (Qunxin Liu)
- Optimize handling of “gvar” table. (Behdad Esfahbod)
- Various subsetter bug fixes and improvements. (Garret Rieger, Qunxin Liu)
- Various documentation improvements. (Behdad Esfahbod, Josef Friedrich)

- New API:
  +HB_SUBSET_FLAGS_NO_LAYOUT_CLOSURE
  +HB_UNICODE_COMBINING_CLASS_CCC132

- Deprecated API:
  -HB_UNICODE_COMBINING_CLASS_CCC133


Overview of changes leading to 7.1.0
Friday, March 3, 2023
====================================
- New experimental hb_shape_justify() API that uses font variations to expand
  or shrink the text to a given advance. (Behdad Esfahbod)
- Various build and bug fixes. (Behdad Esfahbod, Garret Rieger, Qunxin Liu)

- New API:
+hb_font_set_variation()


Overview of changes leading to 7.0.1
Monday, February 20, 2023
====================================
- Various build and bug fixes.


Overview of changes leading to 7.0.0
Saturday, February 11, 2023
====================================
- New hb-paint API that is designed mainly to paint “COLRv1” glyphs, but can be
  also used as a unified API to paint any of the glyph representations
  supported by HarfBuzz (B/W outlines, color layers, or color bitmaps).
  (Behdad Esfahbod, Matthias Clasen)
- New hb-cairo API for integrating with cairo graphics library. This is provided
  as a separate harfbuzz-cairo library. (Behdad Esfahbod, Matthias Clasen)
- Support for instancing “CFF2” table. (Behdad Esfahbod)
- Support font emboldening. (Behdad Esfahbod)
- Support feature ranges with AAT shaping. (Behdad Esfahbod)
- Experimental support to cubic curves in “glyf” table, see
  https://github.com/harfbuzz/boring-expansion-spec/blob/main/glyf1-cubicOutlines.md
  for spec. (Behdad Esfahbod)
- Various subsetter improvements. (Garret Rieger, Qunxin Liu, Behdad Esfahbod)
- Various documentation improvements.
  (Behdad Esfahbod, Matthias Clasen, Khaled Hosny)
- Significantly reduced memory use during shaping. (Behdad Esfahbod)
- Greatly reduced memory use during subsetting “CFF” table. (Behdad Esfahbod)
- New command line utility, hb-info, for querying various font information.
  (Behdad Esfahbod, Matthias Clasen)
- New hb-shape/hb-view options: --glyphs, --color-palette, --font-bold,
  --font-grade, and --named-instance. (Behdad Esfahbod)
- Miscellaneous fixes and improvements.
  (Amir Masoud Abdol, Andres Salomon, Behdad Esfahbod, Chun-wei Fan,
  Garret Rieger, Jens Kutilek, Khaled Hosny, Konstantin Käfer, Matthias Clasen,
  Nirbheek Chauhan, Pedro J. Estébanez, Qunxin Liu, Sergei Trofimovich)

- New API:
  +HB_FONT_NO_VAR_NAMED_INSTANCE
  +HB_PAINT_IMAGE_FORMAT_BGRA
  +HB_PAINT_IMAGE_FORMAT_PNG
  +HB_PAINT_IMAGE_FORMAT_SVG
  +hb_cairo_font_face_create_for_face
  +hb_cairo_font_face_create_for_font
  +hb_cairo_font_face_get_face
  +hb_cairo_font_face_get_font
  +hb_cairo_font_face_get_scale_factor
  +hb_cairo_font_face_set_font_init_func
  +hb_cairo_font_face_set_scale_factor
  +hb_cairo_font_init_func_t
  +hb_cairo_glyphs_from_buffer
  +hb_cairo_scaled_font_get_font
  +hb_color_line_get_color_stops
  +hb_color_line_get_color_stops_func_t
  +hb_color_line_get_extend
  +hb_color_line_get_extend_func_t
  +hb_color_line_t
  +hb_color_stop_t
  +hb_draw_funcs_get_empty
  +hb_draw_funcs_get_user_data
  +hb_draw_funcs_set_user_data
  +hb_face_collect_nominal_glyph_mapping
  +hb_font_draw_glyph
  +hb_font_draw_glyph_func_t
  +hb_font_funcs_set_draw_glyph_func
  +hb_font_funcs_set_paint_glyph_func
  +hb_font_get_synthetic_bold
  +hb_font_get_var_named_instance
  +hb_font_paint_glyph
  +hb_font_paint_glyph_func_t
  +hb_font_set_synthetic_bold
  +hb_map_keys
  +hb_map_next
  +hb_map_update
  +hb_map_values
  +hb_ot_color_glyph_has_paint
  +hb_ot_color_has_paint
  +hb_ot_layout_script_select_language2
  +hb_ot_name_id_predefined_t
  +hb_paint_color
  +hb_paint_color_func_t
  +hb_paint_composite_mode_t
  +hb_paint_custom_palette_color
  +hb_paint_custom_palette_color_func_t
  +hb_paint_extend_t
  +hb_paint_funcs_create
  +hb_paint_funcs_destroy
  +hb_paint_funcs_get_empty
  +hb_paint_funcs_get_user_data
  +hb_paint_funcs_is_immutable
  +hb_paint_funcs_make_immutable
  +hb_paint_funcs_reference
  +hb_paint_funcs_set_color_func
  +hb_paint_funcs_set_custom_palette_color_func
  +hb_paint_funcs_set_image_func
  +hb_paint_funcs_set_linear_gradient_func
  +hb_paint_funcs_set_pop_clip_func
  +hb_paint_funcs_set_pop_group_func
  +hb_paint_funcs_set_pop_transform_func
  +hb_paint_funcs_set_push_clip_glyph_func
  +hb_paint_funcs_set_push_clip_rectangle_func
  +hb_paint_funcs_set_push_group_func
  +hb_paint_funcs_set_push_transform_func
  +hb_paint_funcs_set_radial_gradient_func
  +hb_paint_funcs_set_sweep_gradient_func
  +hb_paint_funcs_set_user_data
  +hb_paint_funcs_t
  +hb_paint_image
  +hb_paint_image_func_t
  +hb_paint_linear_gradient
  +hb_paint_linear_gradient_func_t
  +hb_paint_pop_clip
  +hb_paint_pop_clip_func_t
  +hb_paint_pop_group
  +hb_paint_pop_group_func_t
  +hb_paint_pop_transform
  +hb_paint_pop_transform_func_t
  +hb_paint_push_clip_glyph
  +hb_paint_push_clip_glyph_func_t
  +hb_paint_push_clip_rectangle
  +hb_paint_push_clip_rectangle_func_t
  +hb_paint_push_group
  +hb_paint_push_group_func_t
  +hb_paint_push_transform
  +hb_paint_push_transform_func_t
  +hb_paint_radial_gradient
  +hb_paint_radial_gradient_func_t
  +hb_paint_sweep_gradient
  +hb_paint_sweep_gradient_func_t
  +hb_set_is_inverted
  +hb_subset_input_keep_everything

- Deprecated API:
  -hb_font_funcs_set_glyph_shape_func
  -hb_font_get_glyph_shape_func_t
  -hb_font_get_glyph_shape


Overview of changes leading to 6.0.0
Friday, December 16, 2022
====================================
- A new API have been added to pre-process the face and speed up future
  subsetting operations on that face. Provides up to a 95% reduction in
  subsetting times when the same face is subset more than once.

  For more details and benchmarks, see:
  https://github.com/harfbuzz/harfbuzz/blob/main/docs/subset-preprocessing.md

  (Garret Rieger, Behdad Esfahbod)

- Shaping have been speedup by skipping entire lookups when the buffer contents
  don't intersect with the lookup. Shows up to a 10% speedup in shaping some
  fonts. (Behdad Esfahbod)

- A new experimental feature, “Variable Composites” (enabled by passing
  -Dexperimental_api=true to meson), is also featured in this release.
  This technology enables drastic compression of fonts in the Chinese,
  Japanese, Korean, and other writing systems, by reusing the OpenType Font
  Variations technology for encoding “smart components” into the font.

  The specification for these  extensions to the font format can be found in:
  https://github.com/harfbuzz/boring-expansion-spec/blob/glyf1/glyf1.md

  A test variable-font with ~7160 Hangul syllables derived from the
  NotoSerifKR-VF font has been built, with existing OpenType technology, as
  well as with the new Variable Composites (VarComposites) technology. The
  VarComposites font is over 90% smaller than the OpenType version of the font!
  Both fonts can be obtained from the “smarties” repository:
  https://github.com/behdad/smarties/tree/3.0/fonts/hangul/serif

  When building HarfBuzz with experimental features enabled, you can test
  the “smarties” font with a sample character like this:

  $ hb-view butchered-hangul-serif-smarties-variable.ttf -u AE01 --variations=wght=700

  (Behdad Esfahbod)

- The HarfBuzz subsetter can now drop axes by pinning them to specific values
  (also referred to as instancing). There are a couple of restrictions
  currently:

  - Only works with TrueType (“glyf”) based fonts. “CFF2” fonts are not yet
    supported.
  - Only supports the case where all axes in a font are pinned.

  (Garret Rieger, Qunxin Liu)

- Miscellaneous fixes and improvements.

  (Behdad Esfahbod, Christoph Reiter, David Corbett, Eli Schwartz, Garret
   Rieger, Joel Auterson, Jordan Petridis, Khaled Hosny, Lorenz Wildberg,
   Marco Rebhan, Martin Storsjö, Matthias Clasen, Qunxin Liu, Satadru Pramanik)


- New API
  +hb_subset_input_pin_axis_location()
  +hb_subset_input_pin_axis_to_default()
  +hb_subset_preprocess()


Overview of changes leading to 5.3.1
Wednesday, October 19, 2022
====================================
- Subsetter repacker fixes. (Garret Rieger)
- Adjust Grapheme clusters for Katakana voiced sound marks. (Behdad Esfahbod)
- New “hb-subset” option “--preprocess-face”. (Garret Rieger)


Overview of changes leading to 5.3.0
Saturday, October 8, 2022
"Women, Life, Freedom" #MahsaAmini
====================================
- Don’t add glyphs from dropped MATH or COLR tables to the subset glyphs.
  (Khaled Hosny)
- Map “rlig” to appropriate AAT feature selectors. (Jonathan Kew)
- Update USE data files to latest version. (David Corbett)
- Check “CBDT” extents first before outline tables, to help with fonts that
  also include an empty “glyf” table. (Khaled Hosny)
- More work towards variable font instancing in the subsetter. (Qunxin Liu)
- Subsetter repacker improvements. (Garret Rieger)
- New API:
+hb_ot_layout_lookup_get_optical_bound()
+hb_face_builder_sort_tables()


Overview of changes leading to 5.2.0
Saturday, September 17, 2022
====================================
- Fix regressions in hb-ft font functions for FT_Face’s with transformation
  matrix. (Behdad Esfahbod)
- The experimental hb-repacker API now supports splitting several GPOS subtable
  types when needed. (Garret Rieger)
- The HarfBuzz extensions to OpenType font format are now opt-in behind
  build-time flags. (Behdad Esfahbod)
- The experimental hb-subset variable fonts instantiation API can now
  instantiate more font tables and arbitrary axis locations. (Qunxin Liu)
- Unicode 15 support. (David Corbett)
- Various documentation improvements. (Behdad Esfahbod, Matthias Clasen)
- The hb-view command line tool now detects WezTerm inline images support.
  (Wez Furlong)
- Fix FreeType and ICU dependency lookup with meson. (Xavier Claessens)

- New API:
  +HB_SCRIPT_KAWI
  +HB_SCRIPT_NAG_MUNDARI


Overview of changes leading to 5.1.0
Sunday, July 31, 2022
====================================
- More extensive buffer tracing messages. (Behdad Esfahbod)
- Fix hb-ft regression in bitmap fonts rendering. (Behdad Esfahbod)
- Support extension promotion of lookups in hb-subset-repacker. (Garret Rieger)
- A new HB_GLYPH_FLAG_SAFE_TO_INSERT_TATWEEL for scripts that use elongation
  (e.g. Arabic) to signify where it is safe to insert tatweel glyph without
  interrupting shaping. (Behdad Esfahbod)
- Add “--safe-to-insert-tatweel” to “hb-shape” tool. (Behdad Esfahbod)

- New API
  +HB_GLYPH_FLAG_SAFE_TO_INSERT_TATWEEL
  +HB_BUFFER_FLAG_PRODUCE_SAFE_TO_INSERT_TATWEEL


Overview of changes leading to 5.0.1
Saturday, July 23, 2022
====================================
- Fix version 2 “avar” table with hb-ft. (Behdad Esfahbod)


Overview of changes leading to 5.0.0
Saturday, July 23, 2022
====================================
- Support fonts with more than 65535 glyphs in “GDEF”, “GSUB”, and “GPOS”
  tables. This is part of https://github.com/be-fonts/boring-expansion-spec to
  extend OpenType in a backward-compatible way.
  (Behdad Esfahbod, Garret Rieger)
- Complete support for more than 65535 glyphs in “glyf” table that started in
  4.0.0 release. Part of boring-expansion-spec. (Behdad Esfahbod)
- Support version 2 of “avar” table. Part of boring-expansion-spec.
  (Behdad Esfahbod)
- Fix mark attachment on multiple substitutions in some cases.
  (Behdad Esfahbod)
- Fix application of “calt”, “rclt”, and “ccmp” features to better match
  Uniscribe behaviour with some Arabic fonts. (Behdad Esfahbod)
- Improvement to interaction between multiple cursive attachments.
  (Behdad Esfahbod)
- Improve multiple mark interactions in Hebrew. (Behdad Esfahbod)
- Implement language-specific forms in AAT shaping. (Behdad Esfahbod)
- Fix variation of “VORG” table. (Behdad Esfahbod)
- Support for specific script tags to be retained in the subsetter, and add
  “--layout-scripts” option to “hb-subset” tool. (Garret Rieger)
- Accept space as delimiter for --features/--variations in command line tools.
- Improve subsetting of “COLR” table. (Qunxin Liu)
- Improved fuzzing coverage for ot-math API. (Frédéric Wang)
- Fix “kern” table version 2 (AAT) sanitization on 32-bit systems.
  (Behdad Esfahbod)
- Allow negative glyph advances from “graphite2” shaper. (Stephan Bergmann)
- Implement loading (color) bitmap fonts with hb-ft. (Behdad Esfahbod)
- Fix regression in hb-ft when changing font size. (Behdad Esfahbod)
- Fix build on GCC < 7. (Kleis Auke Wolthuizen)
- Dynamically load dwrite.dll on windows if “directwrite” shaper is enabled.
  (Luca Bacci)
- Provide a single-file harfbuzz-subset.cc file for easier alternate building
  of hb-subset library, similar to harfbuzz.cc. (Khaled Hosny)

- New API
  +HB_SUBSET_SETS_LAYOUT_SCRIPT_TAG
  +hb_language_matches()


Overview of changes leading to 4.4.1
Wednesday, June 29, 2022
====================================
- Fix test failure with some compilers.
- Fix Telugu and Kannada kerning regression.


Overview of changes leading to 4.4.0
Monday, June 27, 2022
====================================
- Caching of variable fonts shaping, in particular when using HarfBuzz’s own
  font loading functions (ot). Bringing performance of variable shaping in par
  with non-variable fonts shaping. (Behdad Esfahbod)
- Caching of format 2 “Contextual Substitution” and “Chained Contexts
  Substitution” lookups. Resulting in up to 20% speedup of lookup-heavy fonts
  like Gulzar or Noto Nastaliq Urdu. (Behdad Esfahbod)
- Improved ANSI output from hb-view. (Behdad Esfahbod)
- Support for shaping legacy, pre-OpenType Windows 3.1-era, Arabic fonts that
  relied on a fixed PUA encoding. (Khaled Hosny, Behdad Esfahbod)
- Sinhala script is now shaped by the USE shaper instead of “indic” one.
  (Behdad Esfahbod, David Corbett)
- Thai shaper improvements. (David Corbett)
- hb-ot-name API supports approximate BCP-47 language matching, for example
  asking for “en_US” in a font that has only “en” names will return them.
  (Behdad Esfahbod)
- Optimized TrueType glyph shape loading. (Behdad Esfahbod)
- Fix subsetting of HarfBuzz faces created via hb_face_create_for_tables().
  (Garret Rieger)
- Add 32 bit var store support to the subsetter. (Garret Rieger)

- New API
  +HB_BUFFER_FLAG_DEFINED
  +HB_BUFFER_SERIALIZE_FLAG_DEFINED
  +hb_font_changed()
  +hb_font_get_serial()
  +hb_ft_hb_font_changed()
  +hb_set_hash()
  +hb_map_copy()
  +hb_map_hash()


Overview of changes leading to 4.3.0
Friday, May 20, 2022
====================================
- Major speed up in loading and subsetting fonts, especially in
  handling CFF table. Subsetting some fonts is now 3 times faster.
  (Behdad Esfahbod, Garret Rieger)
- Speed up blending CFF2 table. (Behdad Esfahbod)
- Speed up hb_ot_tags_from_language(). (Behdad Esfahbod, David Corbett)
- Fix USE classification of U+10A38 to fix multiple marks on single Kharoshthi
  base. (David Corbett)
- Fix parsing of empty CFF Index. (Behdad Esfahbod)
- Fix subsetting CPAL table with partial palette overlaps. (Garret Rieger)

- New API
  +hb_map_is_equal() (Behdad Esfahbod)


Overview of changes leading to 4.2.1
Sunday, April 24, 2022
====================================
- Make sure hb_blob_create_from_file_or_fail() always returns nullptr in case
  of failure and not empty blob sometimes. (Khaled Hosny)
- Add --passthrough-tables option to hb-subset. (Cosimo Lupo)
- Reinstate a pause after basic features in Khmer shaper, fixing a regression
  introduced in previous release. (Behdad Esfahbod)
- Better handling of Regional_Indicator when shaped with RTL-native scripts,
  reverting earlier fix that caused regressions in AAT shaping. (Behdad Esfahbod)


Overview of changes leading to 4.2.0
Wednesday, March 30, 2022
====================================
- Source code reorganization, splitting large hb-ot-layout files into smaller,
  per-subtable ones under OT/Layout/*. Code for more tables will follow suit in
  later releases. (Garret Rieger, Behdad Esfahbod)
- Revert Indic shaper change in previous release that broke some fonts and
  instead make per-syllable restriction of “GSUB” application limited to
  script-specific Indic features, while applying them and discretionary
  features in one go. (Behdad Esfahbod)
- Fix decoding of private in gvar table. (Behdad Esfahbod)
- Fix handling of contextual lookups that delete too many glyphs. (Behdad Esfahbod)
- Make “morx” deleted glyphs don’t block “GPOS” application. (Behdad Esfahbod)
- Various build fixes. (Chun-wei Fan, Khaled Hosny)

- New API
  +hb_set_next_many() (Andrew John)


Overview of changes leading to 4.1.0
Wednesday, March 23, 2022
====================================
- Various OSS-Fuzz fixes. (Behdad Esfahbod)
- Make fallback vertical-origin match FreeType’s. (Behdad Esfahbod)
- Treat visible viramas like dependent vowels in USE shaper. (David Corbett)
- Apply presentation forms features and discretionary features in one go in
  Indic shaper, which seems to match Uniscribe and CoreText behaviour.
  (Behdad Esfahbod, David Corbett)
- Various bug fixes.

- New API
  +hb_set_add_sorted_array() (Andrew John)


Overview of changes leading to 4.0.1
Friday, March 11, 2022
====================================
- Update OpenType to AAT mappings for “hist” and “vrtr” features.
  (Florian Pircher)
- Update IANA Language Subtag Registry to 2022-03-02. (David Corbett)
- Update USE shaper to allow any non-numeric tail in a symbol cluster, and
  remove obsolete data overrides. (David Corbett)
- Fix handling of baseline variations to return correctly scaled values.
  (Matthias Clasen)
- A new experimental hb_subset_repack_or_fail() to repack an array of objects,
  eliminating offset overflows. The API is not available unless HarfBuzz is
  built with experimental APIs enabled. (Qunxin Liu)

- New experimental API
  +hb_link_t
  +hb_object_t
  +hb_subset_repack_or_fail()


Overview of changes leading to 4.0.0
Tuesday, March 1, 2022
====================================
- New public API to create subset plan and gather information on things like
  glyph mappings in the final subset. The plan can then be passed on to perform
  the subsetting operation. (Garret Rieger)
- Draw API for extracting glyph shapes have been extended and finalized and is
  no longer an experimental API. The draw API supports glyf, CFF and CFF2
  glyph outlines tables, and applies variation settings set on the font as well
  as synthetic slant. The new public API is not backward compatible with the
  previous, non-public, experimental API. (Behdad Esfahbod)
- The hb-view tool will use HarfBuzz draw API to render the glyphs instead of
  cairo-ft when compiled with Cairo 1.17.5 or newer, setting HB_DRAW
  environment variable to 1 or 0 will force using or not use the draw API,
  respectively. (Behdad Esfahbod)
- The hb-shape and hb-view tools now default to using HarfBuzz’s own font
  loading functions (ot) instead of FreeType ones (ft). They also have a new
  option, --font-slant, to apply synthetic slant to the font. (Behdad Esfahbod)
- HarfBuzz now supports more than 65535 (the OpenType limit) glyph shapes and
  metrics. See https://github.com/be-fonts/boring-expansion-spec/issues/6 and
  https://github.com/be-fonts/boring-expansion-spec/issues/7 for details.
  (Behdad Esfahbod)
- New API to get the dominant horizontal baseline tag for a given script.
  (Behdad Esfahbod)
- New API to get the baseline positions from the font, and synthesize missing
  ones. As well as new API to get font metrics and synthesize missing ones.
  (Matthias Clasen)
- Improvements to finding dependencies on Windows when building with Visual
  Studio. (Chun-wei Fan)
- New buffer flag, HB_BUFFER_FLAG_PRODUCE_UNSAFE_TO_CONCAT, that must be set
  during shaping for HB_GLYPH_FLAG_UNSAFE_TO_CONCAT flag to be reliably
  produced. This is to limit the performance hit of producing this flag to when
  it is actually needed. (Behdad Esfahbod)
- Documentation improvements. (Matthias Clasen)

- New API
 - General:
   +HB_BUFFER_FLAG_PRODUCE_UNSAFE_TO_CONCAT
   +hb_var_num_t

 - Draw:
   +hb_draw_funcs_t
   +hb_draw_funcs_create()
   +hb_draw_funcs_reference()
   +hb_draw_funcs_destroy()
   +hb_draw_funcs_is_immutable()
   +hb_draw_funcs_make_immutable()
   +hb_draw_move_to_func_t
   +hb_draw_funcs_set_move_to_func()
   +hb_draw_line_to_func_t
   +hb_draw_funcs_set_line_to_func()
   +hb_draw_quadratic_to_func_t
   +hb_draw_funcs_set_quadratic_to_func()
   +hb_draw_cubic_to_func_t
   +hb_draw_funcs_set_cubic_to_func()
   +hb_draw_close_path_func_t
   +hb_draw_funcs_set_close_path_func()
   +hb_draw_state_t
   +HB_DRAW_STATE_DEFAULT
   +hb_draw_move_to()
   +hb_draw_line_to()
   +hb_draw_quadratic_to()
   +hb_draw_cubic_to()
   +hb_draw_close_path()
   +hb_font_get_glyph_shape_func_t
   +hb_font_funcs_set_glyph_shape_func()
   +hb_font_get_glyph_shape()

 - OpenType layout
   +HB_OT_LAYOUT_BASELINE_TAG_IDEO_FACE_CENTRAL
   +HB_OT_LAYOUT_BASELINE_TAG_IDEO_EMBOX_CENTRAL
   +hb_ot_layout_get_horizontal_baseline_tag_for_script()
   +hb_ot_layout_get_baseline_with_fallback()

 - Metrics:
   +hb_ot_metrics_get_position_with_fallback()

 - Subset:
   +hb_subset_plan_t
   +hb_subset_plan_create_or_fail()
   +hb_subset_plan_reference()
   +hb_subset_plan_destroy()
   +hb_subset_plan_set_user_data()
   +hb_subset_plan_get_user_data()
   +hb_subset_plan_execute_or_fail()
   +hb_subset_plan_unicode_to_old_glyph_mapping()
   +hb_subset_plan_new_to_old_glyph_mapping()
   +hb_subset_plan_old_to_new_glyph_mapping()


Overview of changes leading to 3.4.0
Sunday, February 13, 2022
====================================
- Perform sanity checks on shaping results is now part of “harfbuzz” library
  and can be enabled by setting the buffer flag HB_BUFFER_FLAG_VERIFY.
  (Behdad Esfahbod)
- Arabic Mark Transient Reordering Algorithm have been updated to revision 6.
  (Khaled Hosny)
- ISO 15924 code for mathematical notation, ‘Zmth’, now maps to the OpenType
  ‘math’ tag. (Alexis King)
- It is now possible to get at once all math kerning values for a given glyph
  at a given corner. (Alexis King)
- Fix locale_t portability issues on systems the typedef’s it to a void
  pointer. (Behdad Esfahbod)

- New API:
  +HB_BUFFER_FLAG_VERIFY
  +HB_OT_TAG_MATH_SCRIPT
  +HB_SCRIPT_MATH
  +hb_ot_math_kern_entry_t
  +hb_ot_math_get_glyph_kernings()

- Deprecated API
  -HB_OT_MATH_SCRIPT


Overview of changes leading to 3.3.2
Sunday, February 6, 2022
====================================
- Revert splitting of pair positioning values introduced in 3.3.0 as it proved
  problematic. (Behdad Esfahbod)


Overview of changes leading to 3.3.1
Monday, January 31, 2022
====================================
- Fix heap-use-after-free in harfbuzz-subset introduced in previous release.
  (Garret Rieger)


Overview of changes leading to 3.3.0
Monday, January 31, 2022
====================================
- Improved documentation. (Matthias Clasen)
- Internal code cleanup, using C++ standard library more. (Behdad Esfahbod)
- The low 16-bits of face index will be used by hb_face_create() to select a
  face inside a font collection file format, while the high 16-bits will be
  used by hb_font_create() to load the named instance. (Behdad Esfahbod)
- Glyph positions and other font metrics now apply synthetic slant set by
  hb_font_set_synthetic_slant(), for improved positioning for synthetically
  slanted fonts. (Behdad Esfahbod)
- Fixed unintentional locale dependency in hb_variation_to_string() for decimal
  point representation. (Matthias Clasen)
- When applying pair positioning (kerning) the positioning value is split
  between the two sides of the pair for improved cursor positioning between
  such pairs. (Behdad Esfahbod)
- Introduced new HB_GLYPH_FLAG_UNSAFE_TO_CONCAT, to be used in conjunction
  with HB_GLYPH_FLAG_UNSAFE_TO_BREAK for optimizing re-shaping during line
  breaking. Check the documentation for further details. (Behdad Esfahbod)
- Improved handling of macrolanguages when mapping BCP 47 codes to OpenType
  tags. (David Corbett)

- New API:
  +HB_GLYPH_FLAG_UNSAFE_TO_CONCAT
  +hb_segment_properties_overlay()
  +hb_buffer_create_similar()
  +hb_font_set_synthetic_slant()
  +hb_font_get_synthetic_slant()
  +hb_font_get_var_coords_design()


Overview of changes leading to 3.2.0
Friday, November 26, 2021
====================================
“harfbuzz” library improvements:
- Fixed shaping of Apple Color Emoji flags in right-to-left context. (Behdad Esfahbod)
- Fixed positioning of CFF fonts in HB_TINY profile. (Behdad Esfahbod)
- OpenType 1.9 language tags update. (David Corbett)
- Add HB_NO_VERTICAL config option.
- Add HB_CONFIG_OVERRIDE_H for easier configuration. (Behdad Esfahbod)

“harfbuzz-subset” library improvements:
- Improved packing of cmap, loca, and Ligature tables. (Garret Rieger)
- Significantly improved overflow-resolution strategy in the repacker. (Garret Rieger)


Overview of changes leading to 3.1.2
Friday, November 26, 2021
====================================
- hb-shape / hb-view: revert treating text on the commandline as single
  paragraph (was introduced in 3.0.0); add new --single-par to do that.
  (Behdad Esfahbod)
- Subsetter bug fixes. (Garret Rieger, Qunxin Liu, Behdad Esfahbod)


Overview of changes leading to 3.1.1
Wednesday, November 8, 2021
====================================
- Work around GCC cast-align error/warning on some platforms. (Behdad Esfahbod)
- Documentation improvements. (Matthias Clasen)


Overview of changes leading to 3.1.0
Wednesday, November 3, 2021
====================================
- Better offset-overflow handling in the subsetter library. (Garret Rieger)
- Improved Unicode 14 properties in the USE shaper, and various other USE
  shaper fixes. (David Corbett)
- MATH and COLR v1 tables subsetting support, and various other subsetter fixes.
  (Qunxin Liu)
- Support for Pwo Karen / Ason Chin medial la. (Simon Cozens)
- Apply GPOS positioning when substituting with morx table, if kerx is missing.
  (Behdad Esfahbod)
- Apply calt and clig features across syllable boundaries in Indic shaper.
  (Behdad Esfahbod)
- meson option for enabling Graphite 2 has been renamed to graphite2.
- Build and documentation fixes.

- New API:
  +hb_buffer_set_not_found_glyph()
  +hb_buffer_get_not_found_glyph()


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 Database 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 stabilize 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 parameters,
    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()


