Overview of changes leading to 12.3.2
Tuesday, January 24, 2026
=====================================
- Fix padding `gvar` table during subsetting when the original font uses long
  format and subset font uses short format.
- Various fuzzing fixes.
- Fix NULL pointer deference when malloc fails.

Overview of changes leading to 12.3.1
Tuesday, January 20, 2026
=====================================
- Various speed optimizations.
- Build fixes for GCC 4.9.
- Fix NULL pointer deference when malloc fails.


Overview of changes leading to 12.3.0
Saturday, December 27, 2025
=====================================
- Invalid font tables (eg. GSUB/GPOS) are outright rejected, instead of
  partially validated and used. This behavior is different from DirectWrite
  and HarfRust, and is in line with CoreText. For context and reasoning see:
  https://github.com/harfbuzz/harfbuzz/issues/5535#issuecomment-3573738217
- Various speed optimizations:
  * AAT shaping: speed up state machine on Apple silicon using a fast-path.
    12% faster in LucidaGrande benchmark.
  * OpenType shaping: speed up (Chain)Context lookup shaping using a fast-path
    and Coverage caching. 20% speedup in NotoNastaliqUrdu benchmark.
  * Drawing mega variable-fonts: 30% speedup on GoogleSansFlex benchmark.
  * Drawing `VARC` fonts: 5% speedup on varc-hanzi benchmark.
- Always apply synthetic slant around horizontal glyph origin in hb-draw API.
- Fix undefined C++ behavior in some uses of union.
- Remove the disabled by default uniscribe-bug-compatible mode from Indic and
  Khmer shapers, that used to be used when testing against Uniscribe shaping
  behaviour.
- Support full instancing fonts with v2 `avar` table.
- Various subsetting, build, fuzzing, and documentation fixes.


Overview of changes leading to 12.2.0
Wednesday, November 5, 2025
=====================================
- While Windows platform contain the matching of the ChainContext rules to
  within the syllable for those features that are applied per syllable (in
  Indic-like and USE shapers), in 2015 we decided that in HarfBuzz we would
  allow the backtrack / lookahead parts of the rule to match across syllables.
  However, our implementation had a latent bug, causing the backtrack sequence
  to be matched within syllable most of the time, and inconsistently so. As
  such, and after empirical testing, we have decided to match the Windows
  implementation for this, so now both backtrack and lookahead sequences are
  contained to within the syllable, just like DirectWrite does.
- Disable legacy `kern` table for most shapers, enabling it only for default,
  Arabic, Hangul, and Hebrew shapers.
- When dropping `STAT` table during subsetting, drop also named IDs that are
  referenced only by it.
- Don’t apply synthetic slant to glyph origin, fixing horizontal shift in
  slanted glyphs.
- Various build and fuzzing fixes.
- Documentation fixes.


Overview of changes leading to 12.1.0
Wednesday, October 1, 2025
=====================================
- Build fixes with GCC 15 on some 32 bit platforms.
- Fix misaligned pointer use.
- New API, `hb_ot_layout_lookup_collect_glyph_alternates()`, to collect glyph
  substitutions from single and alternate substitution lookups in one call,
  instead of getting substitutions one by one using
  `hb_ot_layout_lookup_get_glyph_alternates()`.

- New API
+hb_ot_layout_lookup_collect_glyph_alternates()


Overview of changes leading to 12.0.0
Sunday, September 28, 2025
=====================================
- The major feature of this release is that the Variable Composites /
  Components (`VARC` table) addition to the ISO OpenFontFormat has graduated
  from experimental, and is now enabled by default. It can be disabled at
  compile time by defining the `HB_NO_VAR_COMPOSITES`z macro.

  `VARC` table is a new way to store glyph outlines, that allows for better
  shape reuse, and can reduce font file size for Chinese, Japanese, Korean, and
  some other scripts drastically. Some font design tools provide a similar
  feature to designers, known as "smart components". This technology brings the
  same idea to the compiled font file. For the format specification, see:
  https://github.com/harfbuzz/boring-expansion-spec/blob/main/VARC.md

  Test fonts can be found at:
  https://github.com/notofonts/noto-cjk-varco/releases/tag/v0.003

  The Fontra font editor already supports this technology.

  Note that this new format involves just the HarfBuzz draw API and does not
  affect shaping.

- Correctly handle `markFilteringSet` lookup field during subsetting.
- Deduplicate features during subsetting.
- Disable “more” buffer messages that give more verbose output when using
  buffer messages callbacks, as it has a performance overhead. Users/tools that
  need the more verbose messages should define `HB_BUFFER_MESSAGE_MORE` to 1
  when building HarfBuzz.
- Shaping and instancing optimizations.
- Fix subsetting issues when building with GCC 12.


Overview of changes leading to 11.5.1
Monday, September 22, 2025
=====================================
- Optimized partial-instancing of fonts with a large number of axes. Now over two times faster.
- Fix C++ STL atomics implementation.


Overview of changes leading to 11.5.0
Saturday, September 12, 2025
=====================================
- Update to Unicode 17.0.0.
- Subsetter optimizations.


Overview of changes leading to 11.4.5
Saturday, August 30, 2025
=====================================
- Bug fixes for “AAT” shaping, and other shaping micro optimizations.


Overview of changes leading to 11.4.4
Tuesday, August 26, 2025
=====================================
- Fix a shaping regression affecting mark glyphs in certain fonts.
- Fix pruning of mark filtering sets when subsetting fonts, which caused changes in shaping behaviour.


Overview of changes leading to 11.4.3
Saturday, August 23, 2025
====================================
- Make shaping fail much faster for certain malformed fonts (e.g., those that
  trigger infinite recursion).
- Fix undefined behaviour introduced in 11.4.2.
- Fix detection of the “Cambria Math” font when fonts are scaled, so the
  workaround for the bad `MATH` table constant is applied.


Overview of changes leading to 11.4.2
Thursday, August 21, 2025
====================================
- Various performance and memory usage improvements.
- The `hb-shape` command line tool can now be built with the amalgamated
  `harfbuzz.cc` source.
- Fix regression in handling version 2 of `avar` table.
- Increase various buffer length limits for better handling of fonts that
  generate huge number of glyphs per codepoint (e.g. Noto Sans Duployan)
- Improvements to the harfrust shaper for more accurate testing.


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()


