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


