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