Overview of changes leading to 2.6.1
Thursday, August 22, 2019
====================================
- Fix regression with hb_font_create_sub_font scaling introduced in 2.6.0.
- Change interpretation of font PTEM size / CoreText font size handling.
  See https://github.com/harfbuzz/harfbuzz/pull/1484
- hb-ot-font: Prefer symbol cmap subtable if present.
- Apply 'dist'/'abvm'/'blwm' features to all scripts.
- Drop experimental DirectWrite API.


Overview of changes leading to 2.6.0
Tuesday, August 13, 2019
====================================
- New OpenType metrics, baseline, and metadata table access APIs.
- New API to set font variations to a named-instance.
- New hb-gdi.h header and API for creating hb_face_t from HFONT.
- Amalgam: Provide a single-file harfbuzz.cc file for easier alternate building.
- More size-reduction configurable options, enabled by HB_TINY.
- New API:
+hb_font_set_var_named_instance()
+hb_gdi_face_create()
+hb_ot_layout_baseline_tag_t
+hb_ot_layout_get_baseline()
+hb_ot_meta_tag_t
+hb_ot_meta_get_entry_tags()
+hb_ot_meta_reference_entry()
+hb_ot_metrics_tag_t
+hb_ot_metrics_get_position()
+hb_ot_metrics_get_variation()
+hb_ot_metrics_get_x_variation()
+hb_ot_metrics_get_y_variation()


Overview of changes leading to 2.5.3
Wednesday, June 26, 2019
====================================
- Fix UCD script data for Unicode 10+ scripts.  This was broken since 2.5.0.
- More optimizations for HB_TINY.


Overview of changes leading to 2.5.2
Thursday, June 20, 2019
====================================
- More hb-config.hh facilities to shrink library size, namely when built as
  HB_TINY.
- New documentation of custom configurations in CONFIG.md.
- Fix build on gcc 4.8.  That's supported again.
- Universal Shaping Engine improvements thanks to David Corbett.
- API Changes: Undeprecate some horizontal-kerning API and re-enable in hb-ft,
  such that Type1 fonts will continue kerning.


Overview of changes leading to 2.5.1
Friday, May 31, 2019
====================================
- Fix build with various versions of Visual Studio.
- Improved documentation, thanks to Nathan Willis.
- Bugfix in subsetting glyf table.
- Improved scripts for cross-compiling for Windows using mingw.
- Rename HB_MATH_GLYPH_PART_FLAG_EXTENDER to HB_OT_MATH_GLYPH_PART_FLAG_EXTENDER.
  A deprecated macro is added for backwards-compatibility.


Overview of changes leading to 2.5.0
Friday, May 24, 2019
====================================
- This release does not include much functional changes, but includes major internal
  code-base changes.  We now require C++11.  Support for gcc 4.8 and earlier has been
  dropped.
- New hb-config.hh facility for compiling smaller library for embedded and web usecases.
- New Unicode Character Databse implementation that is half the size of previously-used
  UCDN.
- Subsetter improvements.
- Improved documentation, thanks to Nathan Willis.
- Misc shaping fixes.


Overview of changes leading to 2.4.0
Monday, March 25, 2019
====================================
- Unicode 12.
- Misc fixes.
- Subsetter improvements.
- New API:
HB_BUFFER_FLAG_DO_NOT_INSERT_DOTTED_CIRCLE
hb_directwrite_face_create()


Overview of changes leading to 2.3.1
Wednesday, January 30, 2019
====================================
- AAT bug fixes.
- Misc internal housekeeping cleanup.


Overview of changes leading to 2.3.0
Thursday, December 20, 2018
====================================
- Fix regression on big-endian architectures.  Ouch!
- Misc bug and build fixes.
- Fix subsetting of simple GSUB/GDEF.
- Merge CFF / CFF2 support contributed by Adobe.  This mostly involves
  the subsetter, but also get_glyph_extents on CFF fonts.

New API in hb-aat.h:
+hb_aat_layout_has_substitution()
+hb_aat_layout_has_positioning()
+hb_aat_layout_has_tracking()


Overview of changes leading to 2.2.0
Thursday, November 29, 2018
====================================
- Misc shaping bug fixes.
- Add font variations named-instance API.
- Deprecate font variations axis enumeration API and add replacement.
- AAT shaping improvements:
  o Fixed 'kern' table Format 2 implementation.
  o Implement 'feat' table API for feature detection.
  o Blacklist 'GSUB' table of fonts from 'MUTF' foundry that also have 'morx'.

New API:
+hb_aat_layout_feature_type_t
+hb_aat_layout_feature_selector_t
+hb_aat_layout_get_feature_types()
+hb_aat_layout_feature_type_get_name_id
+hb_aat_layout_feature_selector_info_t
+HB_AAT_LAYOUT_NO_SELECTOR_INDEX
+hb_aat_layout_feature_type_get_selector_infos()
+hb_ot_var_axis_flags_t
+hb_ot_var_axis_info_t
+hb_ot_var_get_axis_infos()
+hb_ot_var_find_axis_info()
+hb_ot_var_get_named_instance_count()
+hb_ot_var_named_instance_get_subfamily_name_id()
+hb_ot_var_named_instance_get_postscript_name_id()
+hb_ot_var_named_instance_get_design_coords()

Deprecated API:
+HB_OT_VAR_NO_AXIS_INDEX
+hb_ot_var_axis_t
+hb_ot_var_get_axes()
+hb_ot_var_find_axis()


Overview of changes leading to 2.1.3
Friday, November 16, 2018
====================================
- Fix AAT 'mort' shaping, which was broken in 2.1.2


Overview of changes leading to 2.1.2
Friday, November 16, 2018
====================================
- Various internal changes.
- AAT shaping improvements:
  o Implement kern table Format 1 state-machine-based kerning.
  o Implement cross-stream kerning (cursive positioning, etc).
  o Ignore emptyish GSUB tables (zero scripts) if morx present.
  o Don't apply GPOS if morx is being applied.  Matches Apple.


-Overview of changes leading to 2.1.1
Monday, November 5, 2018
====================================
- AAT improvements:
  o Implement 'mort' table.
  o Implement 'kern' subtables Format 1 and Format 3.


Overview of changes leading to 2.1.0
Tuesday, October 30, 2018
====================================
- AAT shaping improvements:
  o Allow user controlling AAT features, for whole buffer only currently.
  o Several 'morx' fixes.
  o Implement tuple-kerns in 'kerx'; Fixes kerning with Apple default
    San Francisco fonts.
- Support for color fonts:
  o COLR/CPAL API to fetch color layers.
  o SVG table to fetch SVG documents.
  o CBDT/sbix API to fetch PNG images.
- New 'name' table API.
- hb-ot-font now uses 'VORG' table to correctly position CFF glyphs
  in vertical layout.
- Various fuzzer-found bug fixes.

Changed API:

A type and a macro added in 2.0.0 were renamed:

hb_name_id_t -> hb_ot_name_id_t
HB_NAME_ID_INVALID -> HB_OT_NAME_ID_INVALID

New API:

+hb_color_t
+HB_COLOR
+hb_color_get_alpha()
+hb_color_get_red()
+hb_color_get_green()
+hb_color_get_blue()
+hb_ot_color_has_palettes()
+hb_ot_color_palette_get_count()
+hb_ot_color_palette_get_name_id()
+hb_ot_color_palette_color_get_name_id()
+hb_ot_color_palette_flags_t
+hb_ot_color_palette_get_flags()
+hb_ot_color_palette_get_colors()
+hb_ot_color_has_layers()
+hb_ot_color_layer_t
+hb_ot_color_glyph_get_layers()
+hb_ot_color_has_svg()
+hb_ot_color_glyph_reference_svg()
+hb_ot_color_has_png()
+hb_ot_color_glyph_reference_png()

+hb_ot_name_id_t
+HB_OT_NAME_ID_INVALID
+HB_OT_NAME_ID_COPYRIGHT
+HB_OT_NAME_ID_FONT_FAMILY
+HB_OT_NAME_ID_FONT_SUBFAMILY
+HB_OT_NAME_ID_UNIQUE_ID
+HB_OT_NAME_ID_FULL_NAME
+HB_OT_NAME_ID_VERSION_STRING
+HB_OT_NAME_ID_POSTSCRIPT_NAME
+HB_OT_NAME_ID_TRADEMARK
+HB_OT_NAME_ID_MANUFACTURER
+HB_OT_NAME_ID_DESIGNER
+HB_OT_NAME_ID_DESCRIPTION
+HB_OT_NAME_ID_VENDOR_URL
+HB_OT_NAME_ID_DESIGNER_URL
+HB_OT_NAME_ID_LICENSE
+HB_OT_NAME_ID_LICENSE_URL
+HB_OT_NAME_ID_TYPOGRAPHIC_FAMILY
+HB_OT_NAME_ID_TYPOGRAPHIC_SUBFAMILY
+HB_OT_NAME_ID_MAC_FULL_NAME
+HB_OT_NAME_ID_SAMPLE_TEXT
+HB_OT_NAME_ID_CID_FINDFONT_NAME
+HB_OT_NAME_ID_WWS_FAMILY
+HB_OT_NAME_ID_WWS_SUBFAMILY
+HB_OT_NAME_ID_LIGHT_BACKGROUND
+HB_OT_NAME_ID_DARK_BACKGROUND
+HB_OT_NAME_ID_VARIATIONS_PS_PREFIX
+hb_ot_name_entry_t
+hb_ot_name_list_names()
+hb_ot_name_get_utf8()
+hb_ot_name_get_utf16()
+hb_ot_name_get_utf32()


Overview of changes leading to 2.0.2
Saturday, October 20, 2018
====================================
- Fix two minor memory access issues in AAT tables.


Overview of changes leading to 2.0.1
Friday, October 19, 2018
====================================
- Fix hb-version.h reported release version that went wrong (1.8.0)
  with previous release.
- Fix extrapolation in 'trak' table.
- Fix hb-font infinite-recursion issue with some font funcs and
  subclassed fonts.
- Implement variation-kerning format in kerx table, although without
  variation.
- Fix return value of hb_map_is_empty().


Overview of changes leading to 2.0.0
Thursday, October 18, 2018
====================================
- Added AAT shaping support (morx/kerx/trak).
  Automatically used if GSUB/GPOS are not available respectively.
  Set HB_OPTIONS=aat env var to have morx/kerx preferred over
  GSUB/GPOS.
- Apply TrueType kern table internally, instead of relying on
  hb_font_t callbacks.
- Khmer shaper significantly rewritten to better match Uniscribe.
- Indic3 tags ('dev3', etc) are passed to USE shaper.
- .dfont Mac font containers implemented.
- Script- and language-mapping revamped to better use BCP 47.
- Misc USE and Indic fixes.
- Misc everything fixes.
- Too many things to list.  Biggest release since 0.9.1, with
  over 500 commits in just over 5 weeks!  Didn't intend it to
  be a big release.  Just happened to become.
- hb-ft now locks underlying FT_Face during use.

API changes:

- Newly-created hb_font_t's now have our internal "hb-ot-font"
  callbacks set on them, so they should work out of the box
  without any callbacks set.  If callbacks are set, everything
  is back to what it was before, the fallback callbacks are
  null.  If you to get the internal implementation modified,
  sub_font it.

- New hb_font_funcs_set_nominal_glyphs_func() allows speeding
  up character to glyph mapping.

New API:
+HB_FEATURE_GLOBAL_START
+HB_FEATURE_GLOBAL_END
+hb_buffer_set_invisible_glyph()
+hb_buffer_get_invisible_glyph()
+hb_font_funcs_set_nominal_glyphs_func()
+hb_ot_layout_table_select_script()
+hb_ot_layout_script_select_language()
+hb_ot_layout_feature_get_name_ids()
+hb_ot_layout_feature_get_characters()
+hb_name_id_t
+HB_NAME_ID_INVALID
+HB_OT_MAX_TAGS_PER_SCRIPT
+hb_ot_tags_from_script_and_language()
+hb_ot_tags_to_script_and_language()

Deprecated API:
-hb_font_funcs_set_glyph_func()
-hb_unicode_eastasian_width_func_t
-hb_unicode_funcs_set_eastasian_width_func()
-hb_unicode_eastasian_width()
-hb_unicode_decompose_compatibility_func_t
-HB_UNICODE_MAX_DECOMPOSITION_LEN
-hb_unicode_funcs_set_decompose_compatibility_func()
-hb_unicode_decompose_compatibility()
-hb_font_funcs_set_glyph_h_kerning_func()
-hb_font_funcs_set_glyph_v_kerning_func()
-hb_font_get_glyph_h_kerning()
-hb_font_get_glyph_v_kerning()
-hb_font_get_glyph_kerning_for_direction()
-hb_ot_layout_table_choose_script()
-hb_ot_layout_script_find_language()
-hb_ot_tags_from_script()
-hb_ot_tag_from_language()


Overview of changes leading to 1.9.0
Monday, September 10, 2018
====================================
- Added 'cmap' API to hb_face_t.
- Face-builder API.
- hb-ot-font re-creation should be much leaner now, as the
  font tables it uses are cached on hb_face_t now.
- Internal source header file name changes:
  hb-*-private.hh is renamed to hb-*.hh.

New API:
+HB_UNICODE_MAX
+hb_face_collect_unicodes()
+hb_face_collect_variation_selectors()
+hb_face_collect_variation_unicodes()
+hb_face_builder_create()
+hb_face_builder_add_table()


Overview of changes leading to 1.8.8
Tuesday, August 14, 2018
====================================
- Fix hb-icu crash on architectures where compare_exchange_weak() can
  fail falsely.  This bug was introduced in 1.8.4.
  https://bugs.chromium.org/p/chromium/issues/detail?id=873568
- More internal refactoring of atomic operations and singletons.
- API changes:
  The following functions do NOT reference their return value before
  returning:
  * hb_unicode_funcs_get_default()
  * hb_glib_get_unicode_funcs()
  * hb_icu_get_unicode_funcs()
  This is consistent with their naming ("get", instead of "reference")
  as well as how they are used in the wild (ie. no one calls destroy()
  on their return value.)


Overview of changes leading to 1.8.7
Wednesday, August 8, 2018
====================================
- Fix assertion failure with GDEF-blacklisted fonts.


Overview of changes leading to 1.8.6
Tuesday, August 7, 2018
====================================
- Internal code shuffling.
- New API to speed up getting advance widths for implementations
  that have heavy overhead in get_h_advance callback:
+hb_font_funcs_set_glyph_h_advances_func
+hb_font_funcs_set_glyph_v_advances_func
+hb_font_get_glyph_advances_for_direction
+hb_font_get_glyph_h_advances
+hb_font_get_glyph_h_advances_func_t
+hb_font_get_glyph_v_advances
+hb_font_get_glyph_v_advances_func_t


Overview of changes leading to 1.8.5
Wednesday, August 1, 2018
====================================
- Major Khmer shaper improvements to better match Microsoft.
- Indic bug fixes.
- Internal improvements to atomic operations.


Overview of changes leading to 1.8.4
Tuesday, July 17, 2018
====================================
- Fix build on non-C++11.
- Use C++-style GCC atomics and C++11 atomics.


Overview of changes leading to 1.8.3
Wednesday, July 11, 2018
====================================
- A couple of Indic / USE bug fixes.
- Disable vectorization, as it was causing unaligned access bus error on
  certain 32bit architectures.


Overview of changes leading to 1.8.2
Tuesday, July 3, 2018
====================================
- Fix infinite loop in Khmer shaper.
- Improve hb_blob_create_from_file() for streams.


Overview of changes leading to 1.8.1
Tuesday, June 12, 2018
====================================
- Fix hb-version.h file generation; last two releases went out with wrong ones.
- Add correctness bug in hb_set_t operations, introduced in 1.7.7.
- Remove HB_SUBSET_BUILTIN build option.  Not necessary.


Overview of changes leading to 1.8.0
Tuesday, June 5, 2018
====================================
- Update to Unicode 11.0.0.


Overview of changes leading to 1.7.7
Tuesday, June 5, 2018
====================================
- Lots of internal changes, but not yet exposed externally.
- All HarfBuzz objects are significantly smaller in size now.
- Sinhala: Position repha on top of post-consonant, not base.
  This better matches Windows 10 behavior, which was changed
  from previous Windows versions.
- New build options:
  o New cpp macro HB_NO_ATEXIT
  o New cpp macro HB_SUBSET_BUILTIN
- Significant libharfbuzz-subset changes. API subject to change.
- New API in libharfbuzz:

+hb_blob_create_from_file()
+hb_face_count()

A hashmap implementation:
+hb-map.h
+HB_MAP_VALUE_INVALID
+hb_map_t
+hb_map_create()
+hb_map_get_empty()
+hb_map_reference()
+hb_map_destroy()
+hb_map_set_user_data()
+hb_map_get_user_data()
+hb_map_allocation_successful()
+hb_map_clear()
+hb_map_is_empty()
+hb_map_get_population()
+hb_map_set()
+hb_map_get()
+hb_map_del()
+hb_map_has()


Overview of changes leading to 1.7.6
Wednesday, March 7, 2018
====================================

- Fix to hb_set_t binary operations. Ouch.
- New experimental harfbuzz-subset library. All of hb-subset.h
  is experimental right now and API WILL change.

- New API:
hb_blob_copy_writable_or_fail()
HB_OT_TAG_BASE
hb_set_previous()
hb_set_previous_range()


Overview of changes leading to 1.7.5
Tuesday, January 30, 2018
====================================

- Separate Khmer shaper from Indic.
- First stab at AAT morx. Not hooked up.
- Misc bug fixes.


Overview of changes leading to 1.7.4
Wednesday, December 20, 2017
====================================

- Fix collect_glyphs() regression caused by hb_set_t changes.


Overview of changes leading to 1.7.3
Monday, December 18, 2017
====================================

- hb_set_t performance tuning and optimizations.
- Speed up collect_glyphs() and reject garbage data.
- In hb_coretext_font_create() set font point-size (ptem).
- Misc fixes.


Overview of changes leading to 1.7.2
Monday, December 4, 2017
====================================

- Optimize hb_set_add_range().
- Misc fixes.
- New API:
hb_coretext_font_create()


Overview of changes leading to 1.7.1
Tuesday, November 14, 2017
====================================

- Fix atexit object destruction regression.
- Fix minor integer-overflow.


Overview of changes leading to 1.7.0
Monday, November 13, 2017
====================================

- Minor Indic fixes.
- Implement kerning and glyph names in hb-ot-font.
- Various DSO optimization re .data and .bss sizes.
- Make C++11 optional; build fixes.
- Mark all other backends "unsafe-to-break".
- Graphite fix.


Overview of changes leading to 1.6.3
Thursday, October 26th, 2017
====================================

- Fix hb_set_t some more.  Should be solid now.
- Implement get_glyph_name() for hb-ot-font.
- Misc fixes.


Overview of changes leading to 1.6.2
Monday, October 23nd, 2017
====================================

- Yesterday's release had a bad crasher; don't use it.  That's what
  happens when one works on Sunday...
  https://github.com/harfbuzz/harfbuzz/issues/578
- Build fixes for FreeBSD and Chrome Android.


Overview of changes leading to 1.6.1
Sunday, October 22nd, 2017
====================================

- Don't skip over COMBINING GRAPHEME JOINER when ligating, etc.
  To be refined: https://github.com/harfbuzz/harfbuzz/issues/554
- Faster hb_set_t implementation.
- Don't use deprecated ICU API.
- Fix undefined-behavior in Myanmar shaper, introduced in 1.6.0
- Deprecated API:
  hb_set_invert()


Overview of changes leading to 1.6.0
Friday, October the 13th, 2017
====================================

- Update to Unicode 10.

- Various Indic and Universal Shaping Engine fixes as a result of
  HarfBuzz Hackfest with Jonathan Kew at Web Engines Hackfest at
  the Igalia offices in A Coruña, Spain.  Thanks Igalia for having
  us!

- Implement Unicode Arabic Mark Ordering Algorithm UTR#53.

- Implement optical sizing / tracking in CoreText backend, using
  new API hb_font_set_ptem().

- Allow notifying hb_font_t that underlying FT_Face changed sizing,
  using new API hb_ft_font_changed().

- More Graphite backend RTL fixes.

- Fix caching of variable font shaping plans.

- hb-view / hb-shape now accept following new arguments:

  o --unicodes: takes a list of hex numbers that represent Unicode
    codepoints.

New API:
+hb_face_get_table_tags()
+hb_font_set_ptem()
+hb_font_get_ptem()
+hb_ft_font_changed()


Overview of changes leading to 1.5.1
Tuesday, September 5, 2017
====================================

- Fix "unsafe-to-break" in fallback shaping and other corner cases.
  All our tests pass with --verify now, meaning unsafe-to-break API
  works as expected.
- Add --unicodes to hb-view / hb-shape.
- [indic] Treat Consonant_With_Stacker as consonant.  This will need
  further tweaking.
- hb_buffer_diff() tweaks.


Overview of changes leading to 1.5.0
Wednesday, August 23, 2017
====================================

- Misc new API, for appending a buffer to another, and for comparing
  contents of two buffers for types of differences.

- New "unsafe-to-break" API.  Can be used to speed up reshaping
  in line-breaking situations.  Essentially, after shaping, it returns
  positions in the input string (some of the cluster boundaries) that
  are "safe to break" in that if the text is segmented at that position
  and two sides reshaped and concatenated, the shaping result is
  exactly the same as shaping the text in one piece.

  hb-view and hb-shape and hb-shape now take --verify, which verifies
  the above property.

  Some corner cases of the implementation are still not quite working.
  Those will be fixed in subsequent releases.

- New API:

hb_buffer_append()

hb_glyph_flags_t
HB_GLYPH_FLAG_UNSAFE_TO_BREAK
HB_GLYPH_FLAG_DEFINED
hb_glyph_info_get_glyph_flags()

HB_BUFFER_SERIALIZE_FLAG_GLYPH_FLAGS

hb_buffer_diff_flags_t
HB_BUFFER_DIFF_FLAG_EQUAL
HB_BUFFER_DIFF_FLAG_CONTENT_TYPE_MISMATCH
HB_BUFFER_DIFF_FLAG_LENGTH_MISMATCH
HB_BUFFER_DIFF_FLAG_NOTDEF_PRESENT
HB_BUFFER_DIFF_FLAG_DOTTED_CIRCLE_PRESENT
HB_BUFFER_DIFF_FLAG_CODEPOINT_MISMATCH
HB_BUFFER_DIFF_FLAG_CLUSTER_MISMATCH
HB_BUFFER_DIFF_FLAG_GLYPH_FLAGS_MISMATCH
HB_BUFFER_DIFF_FLAG_POSITION_MISMATCH
hb_buffer_diff


Overview of changes leading to 1.4.8
Tuesday, August 8, 2017
====================================

- Major fix to avar table handling.
- Rename hb-shape --show-message to --trace.
- Build fixes.


Overview of changes leading to 1.4.7
Tuesday, July 18, 2017
====================================

- Multiple Indic, Tibetan, and Cham fixes.
- CoreText: Allow disabling kerning.
- Adjust Arabic feature order again.
- Misc build fixes.


Overview of changes leading to 1.4.6
Sunday, April 23, 2017
====================================

- Graphite2: Fix RTL positioning issue.
- Backlist GDEF of more versions of Padauk and Tahoma.
- New, experimental, cmake alternative build system.


Overview of changes leading to 1.4.5
Friday, March 10, 2017
====================================

- Revert "Fix Context lookup application when moving back after a glyph..."
  This introduced memory access problems.  To be fixed properly soon.


Overview of changes leading to 1.4.4
Sunday, March 5, 2017
====================================

- Fix Context lookup application when moving back after a glyph deletion.
- Fix buffer-overrun in Bengali.


Overview of changes leading to 1.4.3
Saturday, February 25, 2017
====================================

- Route Adlam script to Arabic shaper.
- Misc fixes.
- New API:
  hb_font_set_face()
- Deprecate API:
  hb_graphite2_font_get_gr_font()


Overview of changes leading to 1.4.2
Monday, January 23, 2017
====================================

- Implement OpenType Font Variation tables avar/fvar/HVAR/VVAR.
- hb-shape and hb-view now accept --variations.
- New API:

hb_variation_t
hb_variation_from_string()
hb_variation_to_string()

hb_font_set_variations()
hb_font_set_var_coords_design()
hb_font_get_var_coords_normalized()

hb-ot-var.h:
hb_ot_var_axis_t
hb_ot_var_has_data()
hb_ot_var_get_axis_count()
hb_ot_var_get_axes()
hb_ot_var_find_axis()
hb_ot_var_normalize_variations()
hb_ot_var_normalize_coords()

- MVAR to be implemented later.  Access to named instances to be
  implemented later as well.

- Misc fixes.


Overview of changes leading to 1.4.1
Thursday, January 5, 2017
====================================

- Always build and use UCDN for Unicode data by default.
  Reduces dependence on version of Unicode data in glib,
  specially in the Windows bundles we are shipping, which
  have very old glib.


Overview of changes leading to 1.4.0
Thursday, January 5, 2017
====================================

- Merged "OpenType GX" branch which adds core of support for
  OpenType 1.8 Font Variations.  To that extent, the relevant
  new API is:

New API:
hb_font_set_var_coords_normalized()

  with supporting API:

New API:
HB_OT_LAYOUT_NO_VARIATIONS_INDEX
hb_ot_layout_table_find_feature_variations()
hb_ot_layout_feature_with_variations_get_lookups()
hb_shape_plan_create2()
hb_shape_plan_create_cached2()

  Currently variations in GSUB/GPOS/GDEF are fully supported,
  and no other tables are supported.  In particular, fvar/avar
  are NOT supported, hence the hb_font_set_var_coords_normalized()
  taking normalized coordinates.  API to take design coordinates
  will be added in the future.

  HVAR/VVAR/MVAR support will also be added to hb-ot-font in the
  future.

- Fix regression in GDEF glyph class processing.
- Add decompositions for Chakma, Limbu, and Balinese in USE shaper.
- Misc fixes.


Overview of changes leading to 1.3.4
Monday, December 5, 2016
====================================

- Fix vertical glyph origin in hb-ot-font.
- Implement CBDT/CBLC color font glyph extents in hb-ot-font.


Overview of changes leading to 1.3.3
Wednesday, September 28, 2016
====================================

- Implement parsing of OpenType MATH table.
New API:
HB_OT_TAG_MATH
HB_OT_MATH_SCRIPT
hb_ot_math_constant_t
hb_ot_math_kern_t
hb_ot_math_glyph_variant_t
hb_ot_math_glyph_part_flags_t
hb_ot_math_glyph_part_t
hb_ot_math_has_data
hb_ot_math_get_constant
hb_ot_math_get_glyph_italics_correction
hb_ot_math_get_glyph_top_accent_attachment
hb_ot_math_get_glyph_kerning
hb_ot_math_is_glyph_extended_shape
hb_ot_math_get_glyph_variants
hb_ot_math_get_min_connector_overlap
hb_ot_math_get_glyph_assembly


Overview of changes leading to 1.3.2
Wednesday, September 27, 2016
====================================

- Fix build of hb-coretext on older OS X versions.


Overview of changes leading to 1.3.1
Wednesday, September 7, 2016
====================================

- Blacklist bad GDEF of more fonts (Padauk).
- More CoreText backend crash fixes with OS X 10.9.5.
- Misc fixes.


Overview of changes leading to 1.3.0
Thursday, July 21, 2016
====================================

- Update to Unicode 9.0.0
- Move Javanese from Indic shaper to Universal Shaping Engine.
- Allow MultipleSubst to delete a glyph (matching Windows engine).
- Update Universal Shaping Engine to latest draft from Microsoft.
- DirectWrite backend improvements.  Note: this backend is for testing ONLY.
- CoreText backend improvements with unreachable fonts.
- Implement symbol fonts (cmap 3.0.0) in hb-ft and hb-ot-font.
- Blacklist bad GDEF of more fonts (Tahoma & others).
- Misc fixes.


Overview of changes leading to 1.2.7
Monday, May 2, 2016
====================================

- Blacklist another version of Times New Roman (Bold) Italic from Windows 7.
- Fix Mongolian Free Variation Selectors shaping with certain fonts.
- Fix Tibetan shorthand contractions shaping.
- Improved list of language tag mappings.
- Unbreak build on Windows CE.
- Make 'glyf' table loading lazy in hb-ot-font.


Overview of changes leading to 1.2.6
Friday, April 8, 2016
====================================

- Blacklist GDEF table of another set of Times New Roman (Bold) Italic.
- DirectWrite backend improvements.  Note: DirectWrite backend is
  exclusively for our internal testing and should NOT be used in any
  production system whatsoever.


Overview of changes leading to 1.2.5
Monday, April 4, 2016
====================================

- Fix GDEF mark-filtering-set, which was broken in 1.2.3.


Overview of changes leading to 1.2.4
Thursday, March 17, 2016
====================================

- Synthesize GDEF glyph class for any glyph that does not have one in GDEF.
  I really hope we don't discover broken fonts that shape badly with this
  change.
- Misc build and other minor fixes.
- API changes:
  - Added HB_NDEBUG.  It's fine for production systems to define this to
    disable high-overhead debugging checks.  However, I also reduced the
    overhead of those checks, so it's a non-issue right now.  You can
    forget it.  Just not defining anything at all is fine.


Overview of changes leading to 1.2.3
Thursday, February 25, 2016
====================================

- Blacklist GDEF table of certain versions of Times New Roman (Bold) Italic,
  due to bug in glyph class of ASCII double-quote character.  This should
  address "regression" introduced in 1.2.0 when we switched mark zeroing
  in most shapers from BY_UNICODE_LATE to BY_GDEF_LATE.
  This fourth release in a week should finally stablize things...

- hb-ot-font's get_glyph() implementation saw some optimizations.  Though,
  might be really hard to measure in real-world situations.

- Also, two rather small API changes:

We now disable some time-consuming internal bookkeeping if built with NDEBUG
defined.  This is a first time that we use NDEBUG to disable debug code.  If
there exist production systems that do NOT want to enable NDEBUG, please let
me know and I'll add HB_NDEBUG.

Added get_nominal_glyph() and get_variation_glyph() instead of get_glyph()

New API:
- hb_font_get_nominal_glyph_func_t
- hb_font_get_variation_glyph_func_t
- hb_font_funcs_set_nominal_glyph_func()
- hb_font_funcs_set_variation_glyph_func()
- hb_font_get_nominal_glyph()
- hb_font_get_variation_glyph()

Deprecated API:
- hb_font_get_glyph_func_t
- hb_font_funcs_set_glyph_func()

Clients that implement their own font-funcs are encouraged to replace
their get_glyph() implementation with a get_nominal_glyph() and
get_variation_glyph() pair.  The variation version can assume that
variation_selector argument is not zero.  Old (deprecated) functions
will continue working indefinitely using internal gymnastics; it is
just more efficient to use the new functions.


Overview of changes leading to 1.2.2
Wednesday, February 24, 2016
====================================

- Fix regression with mark positioning with fonts that have
  non-zero mark advances.  This was introduced in 1.2.0 while
  trying to make mark and cursive attachments to work together.
  I have partially reverted that, so this version is much more
  like what we had before.  All clients who updated to 1.2.0
  should update to this version.


Overview of changes leading to 1.2.1
Tuesday, February 23, 2016
====================================

- CoreText: Fix bug with wrong scale if font scale was changed later.
  https://github.com/libass/libass/issues/212
- CoreText: Drastically speed up font initialization.
- CoreText: Fix tiny leak.
- Group ZWJ/ZWNJ with previous syllable under cluster-level=0.
  https://github.com/harfbuzz/harfbuzz/issues/217
- Add test/shaping/README.md about how to add tests to the suite.


Overview of changes leading to 1.2.0
Friday, February 19, 2016
====================================

- Fix various issues (hangs mostly) in case of memory allocation failure.
- Change mark zeroing types of most shapers from BY_UNICODE_LATE to
  BY_GDEF_LATE.  This seems to be what Uniscribe does.
- Change mark zeroing of USE shaper from NONE to BY_GDEF_EARLY.  That's
  what Windows does.
- Allow GPOS cursive connection on marks, and fix the interaction with
  mark attachment.  This work resulted in some changes to how mark
  attachments work.  See:
  https://github.com/harfbuzz/harfbuzz/issues/211
  https://github.com/harfbuzz/harfbuzz/commit/86c68c7a2c971efe8e35b1f1bd99401dc8b688d2
- Graphite2 shaper: improved negative advance handling (eg. Nastaliq).
- Add nmake-based build system for Windows.
- Minor speedup.
- Misc. improvements.


Overview of changes leading to 1.1.3
Monday, January 11, 2016
====================================

- Ported Indic shaper to Unicode 8.0 data.
- Universal Shaping Engine fixes.
- Speed up CoreText shaper when font fallback happens in CoreText.
- Documentation improvements, thanks to Khaled Hosny.
- Very rough directwrite shaper for testing, thanks to Ebrahim Byagowi.
- Misc bug fixes.
- New API:

  * Font extents:
      hb_font_extents_t
      hb_font_get_font_extents_func_t
      hb_font_get_font_h_extents_func_t
      hb_font_get_font_v_extents_func_t
      hb_font_funcs_set_font_h_extents_func
      hb_font_funcs_set_font_v_extents_func
      hb_font_get_h_extents
      hb_font_get_v_extents
      hb_font_get_extents_for_direction

  * Buffer message (aka debug):
      hb_buffer_message_func_t
      hb_buffer_set_message_func()
    Actual message protocol to be fleshed out later.


Overview of changes leading to 1.1.2
Wednesday, November 26, 2015
====================================

- Fix badly-broken fallback shaper that affected terminology.
  https://github.com/harfbuzz/harfbuzz/issues/187
- Fix y_scaling in Graphite shaper.
- API changes:
  * An unset glyph_h_origin() function in font-funcs now (sensibly)
    implies horizontal origin at 0,0.  Ie, the nil callback returns
    true instead of false.  As such, implementations that have a
    glyph_h_origin() that simply returns true, can remove that function
    with HarfBuzz >= 1.1.2.  This results in a tiny speedup.


Overview of changes leading to 1.1.1
Wednesday, November 24, 2015
====================================

- Build fixes, specially for hb-coretext.


Overview of changes leading to 1.1.0
Wednesday, November 18, 2015
====================================

- Implement 'stch' stretch feature for Syriac Abbreviation Mark.
  https://github.com/harfbuzz/harfbuzz/issues/141
- Disable use of decompose_compatibility() callback.
- Implement "shaping" of various Unicode space characters, even
  if the font does not support them.
  https://github.com/harfbuzz/harfbuzz/issues/153
- If font does not support U+2011 NO-BREAK HYPHEN, fallback to
  U+2010 HYPHEN.
- Changes resulting from libFuzzer continuous fuzzing:
  * Reject font tables that need more than 8 edits,
  * Bound buffer growth during shaping to 32x,
  * Fix assertions and other issues at OOM / buffer max-growth.
- Misc fixes and optimizations.
- API changes:
  * All fonts created with hb_font_create() now inherit from
    (ie. have parent) hb_font_get_empty().


Overview of changes leading to 1.0.6
Thursday, October 15, 2015
====================================

- Reduce max nesting level in OT lookups from 8 to 6.
  Should not affect any real font as far as I know.
- Fix memory access issue in ot-font.
- Revert default load-flags of fonts created using hb_ft_font_create()
  back to FT_LOAD_DEFAULT|FT_LOAD_NO_HINTING.  This was changed in
  last release (1.0.5), but caused major issues, so revert.
  https://github.com/harfbuzz/harfbuzz/issues/143


Overview of changes leading to 1.0.5
Tuesday, October 13, 2015
====================================

- Fix multiple memory access bugs discovered using libFuzzer.
  https://github.com/harfbuzz/harfbuzz/issues/139
  Everyone should upgrade to this version as soon as possible.
  We now have continuous fuzzing set up, to avoid issues like
  these creeping in again.
- Misc fixes.

- New API:
  * hb_font_set_parent().
  * hb_ft_font_[sg]et_load_flags()
    The default flags for fonts created using hb_ft_font_create()
    has changed to default to FT_LOAD_DEFAULT now.  Previously it
    was defaulting to FT_LOAD_DFEAULT|FT_LOAD_NO_HINTING.

- API changes:
  * Fonts now default to units-per-EM as their scale, instead of 0.
  * hb_font_create_sub_font() does NOT make parent font immutable
    anymore.  hb_font_make_immutable() does.


Overview of changes leading to 1.0.4
Wednesday, September 30, 2015
====================================

- Fix minor out-of-bounds read error.


Overview of changes leading to 1.0.3
Tuesday, September 1, 2015
====================================

- Start of user documentation, from Simon Cozens!
- Implement glyph_extents() for TrueType fonts in hb-ot-font.
- Improve GPOS cursive attachments with conflicting lookups.
- More fixes for cluster-level = 1.
- Uniscribe positioning fix.


Overview of changes leading to 1.0.2
Wednesday, August 19, 2015
====================================

- Fix shaping with cluster-level > 0.
- Fix Uniscribe backend font-size scaling.
- Declare dependencies in harfbuzz.pc.
  FreeType is not declared though, to avoid bugs in pkg-config
  0.26 with recursive dependencies.
- Slightly improved debug infrastructure.  More to come later.
- Misc build fixes.


Overview of changes leading to 1.0.1
Monday, July 27, 2015
====================================

- Fix out-of-bounds access in USE shaper.


Overview of changes leading to 1.0.0
Sunday, July 26, 2015
====================================

- Implement Universal Shaping Engine:
  https://www.microsoft.com/typography/OpenTypeDev/USE/intro.htm
  http://blogs.windows.com/bloggingwindows/2015/02/23/windows-shapes-the-worlds-languages/
- Bump version to 1.0.0.  The soname was NOT bumped.


Overview of changes leading to 0.9.42
Thursday, July 26, 2015
=====================================

- New API to allow for retrieving finer-grained cluster
  mappings if the client desires to handle them.  Default
  behavior is unchanged.
- Fix cluster merging when removing default-ignorables.
- Update to Unicode 8.0
- hb-graphite2 fixes.
- Misc fixes.
- Removed HB_NO_MERGE_CLUSTERS hack.
- New API:
  hb_buffer_cluster_level_t enum
  hb_buffer_get_cluster_level()
  hb_buffer_set_cluster_level()
  hb-shape / hb-view --cluster-level


Overview of changes leading to 0.9.41
Thursday, June 18, 2015
=====================================

- Fix hb-coretext with trailing whitespace in right-to-left.
- New API: hb_buffer_reverse_range().
- Allow implementing atomic ops in config.h.
- Fix hb_language_t in language bindings.
- Misc fixes.


Overview of changes leading to 0.9.40
Friday, March 20, 2015
=====================================

- Another hb-coretext crasher fix.  Ouch!
- Happy Norouz!


Overview of changes leading to 0.9.39
Wednesday, March 4, 2015
=====================================

- Critical hb-coretext fixes.
- Optimizations and refactoring; no functional change
  expected.
- Misc build fixes.


Overview of changes leading to 0.9.38
Friday, January 23, 2015
=====================================

- Fix minor out-of-bounds access in Indic shaper.
- Change New Tai Lue shaping engine from South-East Asian to default,
  reflecting change in Unicode encoding model.
- Add hb-shape --font-size.  Can take up to two numbers for separate
  x / y size.
- Fix CoreText and FreeType scale issues with negative scales.
- Reject blobs larger than 2GB.  This might break some icu-le-hb clients
  that need security fixes.  See:
  http://www.icu-project.org/trac/ticket/11450
- Avoid accessing font tables during face destruction, in casce rogue
  clients released face data already.
- Fix up gobject-introspection a bit.  Python bindings kinda working.
  See README.python.
- Misc fixes.
- API additions:
  hb_ft_face_create_referenced()
  hb_ft_font_create_referenced()


Overview of changes leading to 0.9.37
Wednesday, December 17, 2014
=====================================

- Fix out-of-bounds access in Context lookup format 3.
- Indic: Allow ZWJ/ZWNJ before syllable modifiers.


Overview of changes leading to 0.9.36
Thursday, November 20, 2014
=====================================

- First time that three months went by without a release since
  0.9.2 was released on August 10, 2012!
- Fix performance bug in hb_ot_collect_glyphs():
  https://bugzilla.mozilla.org/show_bug.cgi?id=1090869
- Add basic vertical-text support to hb-ot-font.
- Misc build fixes.


Overview of changes leading to 0.9.35
Saturday, August 13, 2014
=====================================

- Fix major shape-plan caching bug when more than one shaper were
  provided to hb_shape_full() (as exercised by XeTeX).
  http://www.mail-archive.com/debian-bugs-dist@lists.debian.org/msg1246370.html
- Fix Arabic fallback shaping regression.  This was broken in 0.9.32.
- Major hb-coretext fixes.  That backend is complete now, including
  respecing buffer direction and language, down to vertical writing.
- Build fixes for Windows CE.  Should build fine now.
- Misc fixes:
  Use atexit() only if it's safe to call from shared library
  https://bugs.freedesktop.org/show_bug.cgi?id=82246
  Mandaic had errors in its Unicode Joining_Type
  https://bugs.freedesktop.org/show_bug.cgi?id=82306
- API changes:

  * hb_buffer_clear_contents() does not reset buffer flags now.

    After 763e5466c0a03a7c27020e1e2598e488612529a7, one doesn't
    need to set flags for different pieces of text.  The flags now
    are something the client sets up once, depending on how it
    actually uses the buffer.  As such, don't clear it in
    clear_contents().

    I don't expect any changes to be needed to any existing client.


Overview of changes leading to 0.9.34
Saturday, August 2, 2014
=====================================

- hb_feature_from_string() now accepts CSS font-feature-settings format.
- As a result, hb-shape / hb-view --features also accept CSS-style strings.
  Eg, "'liga' off" is accepted now.
- Add old-spec Myanmar shaper:
  https://bugs.freedesktop.org/show_bug.cgi?id=81775
- Don't apply 'calt' in Hangul shaper.
- Fix mark advance zeroing for Hebrew shaper:
  https://bugs.freedesktop.org/show_bug.cgi?id=76767
- Implement Windows-1256 custom Arabic shaping.  Only built on Windows,
  and requires help from get_glyph().  Used by Firefox.
  https://bugzilla.mozilla.org/show_bug.cgi?id=1045139
- Disable 'liga' in vertical text.
- Build fixes.
- API changes:

  * Make HB_BUFFER_FLAG_BOT/EOT easier to use.

    Previously, we expected users to provide BOT/EOT flags when the
    text *segment* was at paragraph boundaries.  This meant that for
    clients that provide full paragraph to HarfBuzz (eg. Pango), they
    had code like this:

      hb_buffer_set_flags (hb_buffer,
                           (item_offset == 0 ? HB_BUFFER_FLAG_BOT : 0) |
                           (item_offset + item_length == paragraph_length ?
                            HB_BUFFER_FLAG_EOT : 0));

      hb_buffer_add_utf8 (hb_buffer,
                          paragraph_text, paragraph_length,
                          item_offset, item_length);

    After this change such clients can simply say:

      hb_buffer_set_flags (hb_buffer,
                           HB_BUFFER_FLAG_BOT | HB_BUFFER_FLAG_EOT);

      hb_buffer_add_utf8 (hb_buffer,
                          paragraph_text, paragraph_length,
                          item_offset, item_length);

    Ie, HarfBuzz itself checks whether the segment is at the beginning/end
    of the paragraph.  Clients that only pass item-at-a-time to HarfBuzz
    continue not setting any flags whatsoever.

    Another way to put it is: if there's pre-context text in the buffer,
    HarfBuzz ignores the BOT flag.  If there's post-context, it ignores
    EOT flag.


Overview of changes leading to 0.9.33
Tuesday, July 22, 2014
=====================================

- Turn off ARabic 'cswh' feature that was accidentally turned on.
- Add HB_TAG_MAX_SIGNED.
- Make hb_face_make_immutable() really make face immutable!
- Windows build fixes.


Overview of changes leading to 0.9.32
Thursday, July 17, 2014
=====================================

- Apply Arabic shaping features in spec order exactly.
- Another fix for Mongolian free variation selectors.
- For non-Arabic scripts in Arabic shaper apply 'rlig' and 'calt'
  together.
- Minor adjustment to U+FFFD logic.
- Fix hb-coretext build.


Overview of changes leading to 0.9.31
Wednesday, July 16, 2014
=====================================

- Only accept valid UTF-8/16/32; we missed many cases before.
- Better shaping of invalid UTF-8/16/32.  Falls back to
  U+FFFD REPLACEMENT CHARACTER now.
- With all changes in this release, the buffer will contain fully
  valid Unicode after hb_buffer_add_utf8/16/32 no matter how
  broken the input is.  This can be overridden though.  See below.
- Fix Mongolian Variation Selectors for fonts without GDEF.
- Fix minor invalid buffer access.
- Accept zh-Hant and zh-Hans language tags.  hb_ot_tag_to_language()
  now uses these instead of private tags.
- Build fixes.
- New API:
  * hb_buffer_add_codepoints().  This does what hb_buffer_add_utf32()
    used to do, ie. no validity check on the input at all.  add_utf32
    now replaces invalid Unicode codepoints with the replacement
    character (see below).
  * hb_buffer_set_replacement_codepoint()
  * hb_buffer_get_replacement_codepoint()
    Previously, in hb_buffer_add_utf8 and hb_buffer_add_utf16, when
    we detected broken input, we replaced that with (hb_codepoint_t)-1.
    This has changed to use U+FFFD now, but can be changed using these
    new API.


Overview of changes leading to 0.9.30
Wednesday, July 9, 2014
=====================================

- Update to Unicode 7.0.0:
  * New scripts Manichaean and Psalter Pahlavi are shaped using
    Arabic shaper.
  * All the other new scripts to through the generic shaper for
    now.
- Minor Indic improvements.
- Fix graphite2 backend cluster mapping [crasher!]
- API changes:
  * New HB_SCRIPT_* values for Unicode 7.0 scripts.
  * New function hb_ot_layout_language_get_required_feature().
- Build fixes.


Overview of changes leading to 0.9.29
Thursday, May 29, 2014
=====================================

- Implement cmap in hb-ot-font.h.  No variation-selectors yet.
- Myanmar: Allow MedialYa+Asat.
- Various Indic fixes:
  * Support most characters in Extended Devanagary and Vedic
    Unicode blocks.
  * Allow digits and a some punctuation as consonant placeholders.
- Build fixes.


Overview of changes leading to 0.9.28
Monday, April 28, 2014
=====================================

- Unbreak old-spec Indic shaping. (bug 76705)
- Fix shaping of U+17DD and U+0FC6.
- Add HB_NO_MERGE_CLUSTERS build option.  NOT to be enabled by default
  for shipping libraries.  It's an option for further experimentation
  right now.  When we are sure how to do it properly, we will add
  public run-time API for the functionality.
- Build fixes.


Overview of changes leading to 0.9.27
Tuesday, March 18, 2014
=====================================

- Don't use "register" storage class specifier
- Wrap definition of free_langs() with HAVE_ATEXIT
- Add coretext_aat shaper and hb_coretext_face_create() constructor
- If HAVE_ICU_BUILTIN is defined, use hb-icu Unicode callbacks
- Add Myanmar test case from OpenType Myanmar spec
- Only do fallback Hebrew composition if no GPOS 'mark' available
- Allow bootstrapping without gtk-doc
- Use AM_MISSING_PROG for ragel and git
- Typo in ucdn's Makefile.am
- Improve MemoryBarrier() implementation


Overview of changes leading to 0.9.26
Thursday, January 30, 2014
=====================================

- Misc fixes.
- Fix application of 'rtlm' feature.
- Automatically apply frac/numr/dnom around U+2044 FRACTION SLASH.
- New header: hb-ot-shape.h
- Uniscribe: fix scratch-buffer accounting.
- Reorder Tai Tham SAKOT to after tone-marks.
- Add Hangul shaper.
- New files:
  hb-ot-shape-complex-hangul.cc
  hb-ot-shape-complex-hebrew.cc
  hb-ot-shape-complex-tibetan.cc
- Disable 'cswh' feature in Arabic shaper.
- Coretext: better handle surrogate pairs.
- Add HB_TAG_MAX and _HB_SCRIPT_MAX_VALUE.


Overview of changes leading to 0.9.25
Wednesday, December 4, 2013
=====================================

- Myanmar shaper improvements.
- Avoid font fallback in CoreText backend.
- Additional OpenType language tag mappiongs.
- More aggressive shape-plan caching.
- Build with / require automake 1.13.
- Build with libtool 2.4.2.418 alpha to support ppc64le.


Overview of changes leading to 0.9.24
Tuesday, November 13, 2013
=====================================

- Misc compiler warning fixes with clang.
- No functional changes.


Overview of changes leading to 0.9.23
Monday, October 28, 2013
=====================================

- "Udupi HarfBuzz Hackfest", Paris, October 14..18 2013.
- Fix (Chain)Context recursion with non-monotone lookup positions.
- Misc Indic bug fixes.
- New Javanese / Buginese shaping, similar to Windows 8.1.


Overview of changes leading to 0.9.22
Thursday, October 3, 2013
=====================================

- Fix use-after-end-of-scope in hb_language_from_string().
- Fix hiding of default_ignorables if font doesn't have space glyph.
- Protect against out-of-range lookup indices.

- API Changes:

  * Added hb_ot_layout_table_get_lookup_count()


Overview of changes leading to 0.9.21
Monday, September 16, 2013
=====================================

- Rename gobject-introspection library name from harfbuzz to HarfBuzz.
- Remove (long disabled) hb-old and hb-icu-le test shapers.
- Misc gtk-doc and gobject-introspection annotations.
- Misc fixes.
- API changes:

  * Add HB_SET_VALUE_INVALID

Overview of changes leading to 0.9.20
Thursday, August 29, 2013
=====================================

General:
- Misc substitute_closure() fixes.
- Build fixes.

Documentation:
- gtk-doc boilerplate integrated.  Docs are built now, but
  contain no contents.  By next release hopefully we have
  some content in.  Enable using --enable-gtk-doc.

GObject and Introspection:
- Added harfbuzz-gobject library (hb-gobject.h) that has type
  bindings for all HarfBuzz objects and enums.  Enable using
  --with-gobject.
- Added gobject-introspection boilerplate.  Nothing useful
  right now.  Work in progress.  Gets enabled automatically if
  --with-gobject is used.  Override with --disable-introspection.

OpenType shaper:
- Apply 'mark' in Myanmar shaper.
- Don't apply 'dlig' by default.

Uniscribe shaper:
- Support user features.
- Fix loading of fonts that are also installed on the system.
- Fix shaping of Arabic Presentation Forms.
- Fix build with wide chars.

CoreText shaper:
- Support user features.

Source changes:
- hb_face_t code moved to hb-face.h / hb-face.cc.
- Added hb-deprecated.h.

API changes:
- Added HB_DISABLE_DEPRECATED.
- Deprecated HB_SCRIPT_CANADIAN_ABORIGINAL; replaced by
  HB_SCRIPT_CANADIAN_SYLLABICS.
- Deprecated HB_BUFFER_FLAGS_DEFAULT; replaced by
  HB_BUFFER_FLAG_DEFAULT.
- Deprecated HB_BUFFER_SERIALIZE_FLAGS_DEFAULT; replaced by
  HB_BUFFER_SERIALIZE_FLAG_DEFAULT.


Overview of changes leading to 0.9.19
Tuesday, July 16, 2013
=====================================

- Build fixes.
- Better handling of multiple variation selectors in a row.
- Pass on variation selector to GSUB if not consumed by cmap.
- Fix undefined memory access.
- Add Javanese config to Indic shaper.
- Misc bug fixes.

Overview of changes leading to 0.9.18
Tuesday, May 28, 2013
=====================================

New build system:

- All unneeded code is all disabled by default,

- Uniscribe and CoreText shapers can be enabled with their --with options,

- icu_le and old shapers cannot be enabled for now,

- glib, freetype, and cairo will be detected automatically.
  They can be force on/off'ed with their --with options,

- icu and graphite2 are default off, can be enabled with their --with
  options,

Moreover, ICU support is now build into a separate library:
libharfbuzz-icu.so, and a new harfbuzz-icu.pc is shipped for it.
Distros can enable ICU now without every application on earth
getting linked to via libharfbuzz.so.

For distros I recommend that they make sure they are building --with-glib
--with-freetype --with-cairo, --with-icu, and optionally --with-graphite2;
And package harfbuzz and harfbuzz-icu separately.


Overview of changes leading to 0.9.17
Monday, May 20, 2013
=====================================

- Build fixes.
- Fix bug in hb_set_get_min().
- Fix regression with Arabic mark positioning / width-zeroing.

Overview of changes leading to 0.9.16
Friday, April 19, 2013
=====================================

- Major speedup in OpenType lookup processing.  With the Amiri
  Arabic font, this release is over 3x faster than previous
  release.  All scripts / languages should see this speedup.

- New --num-iterations option for hb-shape / hb-view; useful for
  profiling.

Overview of changes leading to 0.9.15
Friday, April 05, 2013
=====================================

- Build fixes.
- Fix crasher in graphite2 shaper.
- Fix Arabic mark width zeroing regression.
- Don't compose Hangul jamo into Unicode syllables.


Overview of changes leading to 0.9.14
Thursday, March 21, 2013
=====================================

- Build fixes.
- Fix time-consuming sanitize with malicious fonts.
- Implement hb_buffer_deserialize_glyphs() for both json and text.
- Do not ignore Hangul filler characters.
- Indic fixes:
  * Fix Malayalam pre-base reordering interaction with post-forms.
  * Further adjust ZWJ handling.  Should fix known regressions from
    0.9.13.


Overview of changes leading to 0.9.13
Thursday, February 25, 2013
=====================================

- Build fixes.
- Ngapi HarfBuzz Hackfest in London (February 2013):
  * Fixed all known Indic bugs,
  * New Win8-style Myanmar shaper,
  * New South-East Asian shaper for Tai Tham, Cham, and New Tai Lue,
  * Smartly ignore Default_Ignorable characters (joiners, etc) wheb
    matching GSUB/GPOS lookups,
  * Fix 'Phags-Pa U+A872 shaping,
  * Fix partial disabling of default-on features,
  * Allow disabling of TrueType kerning.
- Fix possible crasher with broken fonts with overlapping tables.
- Removed generated files from git again.  So, one needs ragel to
  bootstrap from the git tree.

API changes:
- hb_shape() and related APIs now abort if buffer direction is
  HB_DIRECTION_INVALID.  Previously, hb_shape() was calling
  hb_buffer_guess_segment_properties() on the buffer before
  shaping.  The heuristics in that function are fragile.  If the
  user really wants the old behvaior, they can call that function
  right before calling hb_shape() to get the old behavior.
- hb_blob_create_sub_blob() always creates sub-blob with
  HB_MEMORY_MODE_READONLY.  See comments for the reason.


Overview of changes leading to 0.9.12
Thursday, January 18, 2013
=====================================

- Build fixes for Sun compiler.
- Minor bug fix.

Overview of changes leading to 0.9.11
Thursday, January 10, 2013
=====================================

- Build fixes.
- Fix GPOS mark attachment with null Anchor offsets.
- [Indic] Fix old-spec reordering of viramas if sequence ends in one.
- Fix multi-threaded shaper data creation crash.
- Add atomic ops for Solaris.

API changes:
- Rename hb_buffer_clear() to hb_buffer_clear_contents().


Overview of changes leading to 0.9.10
Thursday, January 3, 2013
=====================================

- [Indic] Fixed rendering of Malayalam dot-reph
- Updated OT language tags.
- Updated graphite2 backend.
- Improved hb_ot_layout_get_size_params() logic.
- Improve hb-shape/hb-view help output.
- Fixed hb-set.h implementation to not crash.
- Fixed various issues with hb_ot_layout_collect_lookups().
- Various build fixes.

New API:

hb_graphite2_face_get_gr_face()
hb_graphite2_font_get_gr_font()
hb_coretext_face_get_cg_font()

Modified API:

hb_ot_layout_get_size_params()


Overview of changes leading to 0.9.9
Wednesday, December 5, 2012
====================================

- Fix build on Windows.
- Minor improvements.


Overview of changes leading to 0.9.8
Tuesday, December 4, 2012
====================================


- Actually implement hb_shape_plan_get_shaper ().
- Make UCDB data tables const.
- Lots of internal refactoring in OTLayout tables.
- Flesh out hb_ot_layout_lookup_collect_glyphs().

New API:

hb_ot_layout_collect_lookups()
hb_ot_layout_get_size_params()


Overview of changes leading to 0.9.7
Sunday, November 21, 2012
====================================


HarfBuzz "All-You-Can-Eat-Sushi" (aka Vancouver) Hackfest and follow-on fixes.

- Fix Arabic contextual joining using pre-context text.
- Fix Sinhala "split matra" mess.
- Fix Khmer shaping with broken fonts.
- Implement Thai "PUA" shaping for old fonts.
- Do NOT route Kharoshthi script through the Indic shaper.
- Disable fallback positioning for Indic and Thai shapers.
- Misc fixes.


hb-shape / hb-view changes:

- Add --text-before and --text-after
- Add --bot / --eot / --preserve-default-ignorables
- hb-shape --output-format=json


New API:

hb_buffer_clear()

hb_buffer_flags_t

HB_BUFFER_FLAGS_DEFAULT
HB_BUFFER_FLAG_BOT
HB_BUFFER_FLAG_EOT
HB_BUFFER_FLAG_PRESERVE_DEFAULT_IGNORABLES

hb_buffer_set_flags()
hb_buffer_get_flags()

HB_BUFFER_SERIALIZE_FLAGS
hb_buffer_serialize_glyphs()
hb_buffer_deserialize_glyphs()
hb_buffer_serialize_list_formats()

hb_set_add_range()
hb_set_del_range()
hb_set_get_population()
hb_set_next_range()

hb_face_[sg]et_glyph_count()

hb_segment_properties_t
HB_SEGMENT_PROPERTIES_DEFAULT
hb_segment_properties_equal()
hb_segment_properties_hash()

hb_buffer_set_segment_properties()
hb_buffer_get_segment_properties()

hb_ot_layout_glyph_class_t
hb_ot_layout_get_glyph_class()
hb_ot_layout_get_glyphs_in_class()

hb_shape_plan_t
hb_shape_plan_create()
hb_shape_plan_create_cached()
hb_shape_plan_get_empty()
hb_shape_plan_reference()
hb_shape_plan_destroy()
hb_shape_plan_set_user_data()
hb_shape_plan_get_user_data()
hb_shape_plan_execute()
hb_shape_plan_get_shaper()

hb_ot_shape_plan_collect_lookups()


API changes:

- Remove "mask" parameter from hb_buffer_add().
- Rename hb_ot_layout_would_substitute_lookup() and hb_ot_layout_substitute_closure_lookup().
- hb-set.h API const correction.
- Renamed hb_set_min/max() to hb_set_get_min/max().
- Rename hb_ot_layout_feature_get_lookup_indexes() to hb_ot_layout_feature_get_lookups().
- Rename hb_buffer_guess_properties() to hb_buffer_guess_segment_properties().



Overview of changes leading to 0.9.6
Sunday, November 13, 2012
====================================

- Don't clear pre-context text if no new context is provided.
- Fix ReverseChainingSubstLookup, which was totally borked.
- Adjust output format of hb-shape a bit.
- Include config.h.in in-tree.  Makes it easier for alternate build systems.
- Fix hb_buffer_set_length(buffer, 0) invalid memory allocation.
- Use ICU LayoutEngine's C API instead of C++.  Avoids much headache.
- Drop glyphs for all of Unicode Default_Ignorable characters.
- Misc build fixes.

Arabic shaper:
- Enable 'dlig' and 'mset' features in Arabic shaper.
- Implement 'Phags-pa shaping, improve Mongolian.

Indic shaper:
- Decompose Sinhala split matras the way old HarfBuzz / Pango did.
- Initial support for Consonant Medials.
- Start adding new-style Myanmar shaping.
- Make reph and 'pref' logic introspect the font.
- Route Meetei-Mayek through the Indic shaper.
- Don't apply 'liga' in Indic shaper.
- Improve Malayalam pre-base reordering Ra interaction with Chillus.



Overview of changes leading to 0.9.5
Sunday, October 14, 2012
====================================

- Synthetic-GSUB Arabic fallback shaping.

- Misc Indic improvements.

- Add build system support for pthread.

- Imported UCDN for in-tree Unicode callbacks implementation.

- Context-aware Arabic joining.

- Misc other fixes.

- New API:

  hb_feature_to/from-string()
  hb_buffer_[sg]et_content_type()



Overview of changes leading to 0.9.4
Tuesday, Sep 03, 2012
====================================

- Indic improvements with old-spec Malayalam.

- Better fallback glyph positioning, specially with Thai / Lao marks.

- Implement dotted-circle insertion.

- Better Arabic fallback shaping / ligation.

- Added ICU LayoutEngine backend for testing.  Call it by the 'icu_le' name.

- Misc fixes.



Overview of changes leading to 0.9.3
Friday, Aug 18, 2012
====================================

- Fixed fallback mark positioning for left-to-right text.

- Improve mark positioning for the remaining combining classes.

- Unbreak Thai and fallback Arabic shaping.

- Port Arabic shaper to shape-plan caching.

- Use new ICU normalizer functions.



Overview of changes leading to 0.9.2
Friday, Aug 10, 2012
====================================

- Over a thousand commits!  This is the first major release of HarfBuzz.

- HarfBuzz is feature-complete now!  It should be in par, or better, than
  both Pango's shapers and old HarfBuzz / Qt shapers.

- New Indic shaper, supporting main Indic scripts, Sinhala, and Khmer.

- Improved Arabic shaper, with fallback Arabic shaping, supporting Arabic,
  Sinhala, N'ko, Mongolian, and Mandaic.

- New Thai / Lao shaper.

- Tibetan / Hangul support in the generic shaper.

- Synthetic GDEF support for fonts without a GDEF table.

- Fallback mark positioning for fonts without a GPOS table.

- Unicode normalization shaping heuristic during glyph mapping.

- New experimental Graphite2 backend.

- New Uniscribe backend (primarily for testing).

- New CoreText backend (primarily for testing).

- Major optimization and speedup.

- Test suites and testing infrastructure (work in progress).

- Greatly improved hb-view cmdline tool.

- hb-shape cmdline tool.

- Unicode 6.1 support.

Summary of API changes:

o Changed API:

  - Users are expected to only include main header files now (ie. hb.h,
    hb-glib.h, hb-ft.h, ...)

  - All struct tag names had their initial underscore removed.
    Ie. "struct _hb_buffer_t" is "struct hb_buffer_t" now.

  - All set_user_data() functions now take a "replace" boolean parameter.

  - hb_buffer_create() takes zero arguments now.
    Use hb_buffer_pre_allocate() to pre-allocate.

  - hb_buffer_add_utf*() now accept -1 for length parameteres,
    meaning "nul-terminated".

  - hb_direction_t enum values changed.

  - All *_from_string() APIs now take a length parameter to allow for
    non-nul-terminated strings. A -1 length means "nul-terminated".

  - Typedef for hb_language_t changed.

  - hb_get_table_func_t renamed to hb_reference_table_func_t.

  - hb_ot_layout_table_choose_script()

  - Various renames in hb-unicode.h.

o New API:

  - hb_buffer_guess_properties()
    Automatically called by hb_shape().

  - hb_buffer_normalize_glyphs()

  - hb_tag_from_string()

  - hb-coretext.h

  - hb-uniscribe.h

  - hb_face_reference_blob()
  - hb_face_[sg]et_index()
  - hb_face_set_upem()

  - hb_font_get_glyph_name_func_t
    hb_font_get_glyph_from_name_func_t
    hb_font_funcs_set_glyph_name_func()
    hb_font_funcs_set_glyph_from_name_func()
    hb_font_get_glyph_name()
    hb_font_get_glyph_from_name()
    hb_font_glyph_to_string()
    hb_font_glyph_from_string()

  - hb_font_set_funcs_data()

  - hb_ft_font_set_funcs()
  - hb_ft_font_get_face()

  - hb-gobject.h (work in progress)

  - hb_ot_shape_glyphs_closure()
    hb_ot_layout_substitute_closure_lookup()

  - hb-set.h

  - hb_shape_full()

  - hb_unicode_combining_class_t

  - hb_unicode_compose_func_t
    hb_unicode_decompose_func_t
    hb_unicode_decompose_compatibility_func_t
    hb_unicode_funcs_set_compose_func()
    hb_unicode_funcs_set_decompose_func()
    hb_unicode_funcs_set_decompose_compatibility_func()
    hb_unicode_compose()
    hb_unicode_decompose()
    hb_unicode_decompose_compatibility()

o Removed API:

  - hb_ft_get_font_funcs()

  - hb_ot_layout_substitute_start()
    hb_ot_layout_substitute_lookup()
    hb_ot_layout_substitute_finish()
    hb_ot_layout_position_start()
    hb_ot_layout_position_lookup()
    hb_ot_layout_position_finish()



Overview of changes leading to 0.6.0
Friday, May 27, 2011
====================================

- Vertical text support in GPOS
- Almost all API entries have unit tests now, under test/
- All thread-safety issues are fixed

Summary of API changes follows.


* Simple Types API:

  o New API:
    HB_LANGUAGE_INVALID
    hb_language_get_default()
    hb_direction_to_string()
    hb_direction_from_string()
    hb_script_get_horizontal_direction()
    HB_UNTAG()

  o Renamed API:
    hb_category_t renamed to hb_unicode_general_category_t

  o Changed API:
    hb_language_t is a typed pointers now

  o Removed API:
    HB_TAG_STR()


* Use ISO 15924 tags for hb_script_t:

  o New API:
    hb_script_from_iso15924_tag()
    hb_script_to_iso15924_tag()
    hb_script_from_string()

  o Changed API:
    HB_SCRIPT_* enum members changed value.


* Buffer API streamlined:

  o New API:
    hb_buffer_reset()
    hb_buffer_set_length()
    hb_buffer_allocation_successful()

  o Renamed API:
    hb_buffer_ensure() renamed to hb_buffer_pre_allocate()
    hb_buffer_add_glyph() renamed to hb_buffer_add()

  o Removed API:
    hb_buffer_clear()
    hb_buffer_clear_positions()

  o Changed API:
    hb_buffer_get_glyph_infos() takes an out length parameter now
    hb_buffer_get_glyph_positions() takes an out length parameter now


* Blob API streamlined:

  o New API:
    hb_blob_get_data()
    hb_blob_get_data_writable()

  o Renamed API:
    hb_blob_create_empty() renamed to hb_blob_get_empty()

  o Removed API:
    hb_blob_lock()
    hb_blob_unlock()
    hb_blob_is_writable()
    hb_blob_try_writable()

  o Changed API:
    hb_blob_create() takes user_data before destroy now


* Unicode functions API:

  o Unicode function vectors can subclass other unicode function vectors now.
    Unimplemented callbacks in the subclass automatically chainup to the parent.

  o All hb_unicode_funcs_t callbacks take a user_data now.  Their setters
    take a user_data and its respective destroy callback.

  o New API:
    hb_unicode_funcs_get_empty()
    hb_unicode_funcs_get_default()
    hb_unicode_funcs_get_parent()

  o Changed API:
    hb_unicode_funcs_create() now takes a parent_funcs.

  o Removed func getter functions:
    hb_unicode_funcs_get_mirroring_func()
    hb_unicode_funcs_get_general_category_func()
    hb_unicode_funcs_get_script_func()
    hb_unicode_funcs_get_combining_class_func()
    hb_unicode_funcs_get_eastasian_width_func()


* Face API:

  o Renamed API:
    hb_face_get_table() renamed to hb_face_reference_table()
    hb_face_create_for_data() renamed to hb_face_create()

  o Changed API:
    hb_face_create_for_tables() takes user_data before destroy now
    hb_face_reference_table() returns empty blob instead of NULL
    hb_get_table_func_t accepts the face as first parameter now

* Font API:

  o Fonts can subclass other fonts now.  Unimplemented callbacks in the
    subclass automatically chainup to the parent.  When chaining up,
    scale is adjusted if the parent font has a different scale.

  o All hb_font_funcs_t callbacks take a user_data now.  Their setters
    take a user_data and its respective destroy callback.

  o New API:
    hb_font_get_parent()
    hb_font_funcs_get_empty()
    hb_font_create_sub_font()

  o Removed API:
    hb_font_funcs_copy()
    hb_font_unset_funcs()

  o Removed func getter functions:
    hb_font_funcs_get_glyph_func()
    hb_font_funcs_get_glyph_advance_func()
    hb_font_funcs_get_glyph_extents_func()
    hb_font_funcs_get_contour_point_func()
    hb_font_funcs_get_kerning_func()

  o Changed API:
    hb_font_create() takes a face and references it now
    hb_font_set_funcs() takes user_data before destroy now
    hb_font_set_scale() accepts signed integers now
    hb_font_get_contour_point_func_t now takes glyph first, then point_index
    hb_font_get_glyph_func_t returns a success boolean now


* Changed object model:

  o All object types have a _get_empty() now:
    hb_blob_get_empty()
    hb_buffer_get_empty()
    hb_face_get_empty()
    hb_font_get_empty()
    hb_font_funcs_get_empty()
    hb_unicode_funcs_get_empty()

  o Added _set_user_data() and _get_user_data() for all object types:
    hb_blob_get_user_data()
    hb_blob_set_user_data()
    hb_buffer_get_user_data()
    hb_buffer_set_user_data()
    hb_face_get_user_data()
    hb_face_set_user_data()
    hb_font_funcs_get_user_data()
    hb_font_funcs_set_user_data()
    hb_font_get_user_data()
    hb_font_set_user_data()
    hb_unicode_funcs_get_user_data()
    hb_unicode_funcs_set_user_data()

  o Removed the _get_reference_count() from all object types:
    hb_blob_get_reference_count()
    hb_buffer_get_reference_count()
    hb_face_get_reference_count()
    hb_font_funcs_get_reference_count()
    hb_font_get_reference_count()
    hb_unicode_funcs_get_reference_count()

  o Added _make_immutable() and _is_immutable() for all object types except for buffer:
    hb_blob_make_immutable()
    hb_blob_is_immutable()
    hb_face_make_immutable()
    hb_face_is_immutable()


* Changed API for vertical text support

  o The following callbacks where removed:
    hb_font_get_glyph_advance_func_t
    hb_font_get_kerning_func_t

  o The following new callbacks added instead:
    hb_font_get_glyph_h_advance_func_t
    hb_font_get_glyph_v_advance_func_t
    hb_font_get_glyph_h_origin_func_t
    hb_font_get_glyph_v_origin_func_t
    hb_font_get_glyph_h_kerning_func_t
    hb_font_get_glyph_v_kerning_func_t

  o The following API removed as such:
    hb_font_funcs_set_glyph_advance_func()
    hb_font_funcs_set_kerning_func()
    hb_font_get_glyph_advance()
    hb_font_get_kerning()

  o New API added instead:
    hb_font_funcs_set_glyph_h_advance_func()
    hb_font_funcs_set_glyph_v_advance_func()
    hb_font_funcs_set_glyph_h_origin_func()
    hb_font_funcs_set_glyph_v_origin_func()
    hb_font_funcs_set_glyph_h_kerning_func()
    hb_font_funcs_set_glyph_v_kerning_func()
    hb_font_get_glyph_h_advance()
    hb_font_get_glyph_v_advance()
    hb_font_get_glyph_h_origin()
    hb_font_get_glyph_v_origin()
    hb_font_get_glyph_h_kerning()
    hb_font_get_glyph_v_kerning()

  o The following higher-leve API added for convenience:
    hb_font_get_glyph_advance_for_direction()
    hb_font_get_glyph_origin_for_direction()
    hb_font_add_glyph_origin_for_direction()
    hb_font_subtract_glyph_origin_for_direction()
    hb_font_get_glyph_kerning_for_direction()
    hb_font_get_glyph_extents_for_origin()
    hb_font_get_glyph_contour_point_for_origin()


* OpenType Layout API:

  o New API:
    hb_ot_layout_position_start()
    hb_ot_layout_substitute_start()
    hb_ot_layout_substitute_finish()


* Glue code:

  o New API:
    hb_glib_script_to_script()
    hb_glib_script_from_script()
    hb_icu_script_to_script()
    hb_icu_script_from_script()


* Version API added:

  o New API:
    HB_VERSION_MAJOR
    HB_VERSION_MINOR
    HB_VERSION_MICRO
    HB_VERSION_STRING
    HB_VERSION_CHECK()
    hb_version()
    hb_version_string()
    hb_version_check()


