1Overview of changes leading to 8.2.2 2Wednesday, October 18, 2023 3“From the river to the sea, Palestine will be free” 4==================================== 5- Fix regression from 8.1.0 in shaping fonts with duplicate feature tags. 6- Fix regression from 8.2.0 in parsing CSS-style feature strings. 7- Variable fonts instanciation now handles more tables. 8- Various CMake build improvements. 9- various fixes to build without errors with gcc 4.9.2. 10 11 12Overview of changes leading to 8.2.1 13Monday, September 18, 2023 14==================================== 15- Unicode 15.1 support. 16 17 18Overview of changes leading to 8.2.0 19Friday, September 8, 2023 20==================================== 21- Various build and fuzzing fixes 22- Improvements to COLRv1 painting. 23 24- New API: 25+hb_paint_color_glyph_func_t 26+hb_paint_funcs_set_color_glyph_func 27+hb_paint_color_glyph 28 29 30Overview of changes leading to 8.1.1 31Wednesday, August 2, 2023 32==================================== 33- Fix shaping of contextual rules at the end of string, introduced in 8.1.0 34- Fix stack-overflow in repacker with malicious fonts. 35- 30% speed up loading Noto Duployan font. 36 37 38Overview of changes leading to 8.1.0 39Tuesday, August 1, 2023 40==================================== 41- Fix long-standing build issue with the AIX compiler and older Apple clang. 42 43- Revert optimization that could cause timeout during subsetting with malicious fonts. 44 45- More optimization work: 46 - 45% speed up in shaping Noto Duployan font. 47 - 10% speed up in subsetting Noto Duployan font. 48 - Another 8% speed up in shaping Gulzar. 49 - 5% speed up in loading Roboto. 50 51- New API: 52+hb_ot_layout_collect_features_map() 53 54 55Overview of changes leading to 8.0.1 56Wednesday, July 12, 2023 57==================================== 58- Build fix on 32-bit ARM. 59 60- More speed optimizations: 61 - 60% speed up in retain-gid (used for IFT) subsetting of SourceHanSans-VF. 62 - 16% speed up in retain-gid (used for IFT) subsetting of NotoSansCJKkr. 63 - 38% speed up in subsetting (beyond-64k) mega-merged Noto. 64 65 66Overview of changes leading to 8.0.0 67Sunday, July 9, 2023 68==================================== 69- New, experimental, WebAssembly (WASM) shaper, that provides greater 70 flexibility over OpenType/AAT/Graphite shaping, using WebAssembly embedded 71 inside the font file. Currently WASM shaper is disabled by default and needs 72 to be enabled at build time. For details, see: 73 74 https://github.com/harfbuzz/harfbuzz/blob/main/docs/wasm-shaper.md 75 76 For example fonts making use of the WASM shaper, see: 77 78 https://github.com/harfbuzz/harfbuzz-wasm-examples 79 80- Improvements to Experimental features introduced in earlier releases: 81 - Support for subsetting beyond-64k and VarComposites fonts. 82 - Support for instancing variable fonts with cubic “glyf” table. 83 84- Many big speed optimizations: 85 - Up to 89% speedup loading variable fonts for shaping. 86 - Up to 88% speedup in small subsets of large (eg. CJK) fonts (both TTF and 87 OTF), essential for Incremental Font Transfer (IFT). 88 - Over 50% speedup in loading Roboto font for shaping. 89 - Up to 40% speed up in loading (sanitizing) complex fonts. 90 - 30% speed up in shaping Gulzar font. 91 - Over 25% speedup in glyph loading Roboto font. 92 - 10% speed up loading glyph shapes in VarComposite Hangul font. 93 - hb-hashmap optimizations & hashing improvements. 94 95- New macro HB_ALWAYS_INLINE. HarfBuzz now inlines functions more aggressively, 96 which results in some speedup at the expense of bigger code size. To disable 97 this feature define the macro to just inline. 98 99- New API: 100+HB_CODEPOINT_INVALID 101+hb_ot_layout_get_baseline2() 102+hb_ot_layout_get_baseline_with_fallback2() 103+hb_ot_layout_get_font_extents() 104+hb_ot_layout_get_font_extents2() 105+hb_subset_input_set_axis_range() 106 107 108Overview of changes leading to 7.3.0 109Tuesday, May 9, 2023 110==================================== 111- Speedup applying glyph variation in VarComposites fonts (over 40% speedup). 112 (Behdad Esfahbod) 113- Speedup instancing some fonts (over 20% speedup in instancing RobotoFlex). 114 (Behdad Esfahbod) 115- Speedup shaping some fonts (over 30% speedup in shaping Roboto). 116 (Behdad Esfahbod) 117- Support subsetting VarComposites and beyond-64k fonts. (Behdad Esfahbod) 118- New configuration macro HB_MINIMIZE_MEMORY_USAGE to favor optimizing memory 119 usage over speed. (Behdad Esfahbod) 120- Supporting setting the mapping between old and new glyph indices during 121 subsetting. (Garret Rieger) 122- Various fixes and improvements. 123 (Behdad Esfahbod, Denis Rochette, Garret Rieger, Han Seung Min, Qunxin Liu) 124 125- New API: 126+hb_subset_input_old_to_new_glyph_mapping() 127 128 129Overview of changes leading to 7.2.0 130Thursday, April 27, 2023 131==================================== 132- Add Tifinagh to the list of scripts that can natively be either right-to-left 133 or left-to-right, to improve handling of its glyph positioning. 134 (Simon Cozens) 135- Return also single substitution from hb_ot_layout_lookup_get_glyph_alternates() 136 (Behdad Esfahbod) 137- Fix 4.2.0 regression in applying across syllables in syllabic scripts. 138 (Behdad Esfahbod) 139- Add flag to avoid glyph substitution closure during subsetting, and the 140 corresponding “--no-layout-closure” option to “hb-subset” command line tool. 141 (Garret Rieger) 142- Support instancing COLRv1 table. (Qunxin Liu) 143- Don’t drop used user-defined name table entries during subsetting. 144 (Qunxin Liu) 145- Optimize handling of “gvar” table. (Behdad Esfahbod) 146- Various subsetter bug fixes and improvements. (Garret Rieger, Qunxin Liu) 147- Various documentation improvements. (Behdad Esfahbod, Josef Friedrich) 148 149- New API: 150+HB_SUBSET_FLAGS_NO_LAYOUT_CLOSURE 151+HB_UNICODE_COMBINING_CLASS_CCC132 152 153- Deprecated API: 154+HB_UNICODE_COMBINING_CLASS_CCC133 155 156 157Overview of changes leading to 7.1.0 158Friday, March 3, 2023 159==================================== 160- New experimental hb_shape_justify() API that uses font variations to expand 161 or shrink the text to a given advance. (Behdad Esfahbod) 162- Various build and bug fixes. (Behdad Esfahbod, Garret Rieger, Qunxin Liu) 163 164- New API: 165+hb_font_set_variation() 166 167 168Overview of changes leading to 7.0.1 169Monday, February 20, 2023 170==================================== 171- Various build and bug fixes. 172 173 174Overview of changes leading to 7.0.0 175Saturday, February 11, 2023 176==================================== 177- New hb-paint API that is designed mainly to paint “COLRv1” glyphs, but can be 178 also used as a unified API to paint any of the glyph representations 179 supported by HarfBuzz (B/W outlines, color layers, or color bitmaps). 180 (Behdad Esfahbod, Matthias Clasen) 181- New hb-cairo API for integrating with cairo graphics library. This is provided 182 as a separate harfbuzz-cairo library. (Behdad Esfahbod, Matthias Clasen) 183- Support for instancing “CFF2” table. (Behdad Esfahbod) 184- Support font emboldening. (Behdad Esfahbod) 185- Support feature ranges with AAT shaping. (Behdad Esfahbod) 186- Experimental support to cubic curves in “glyf” table, see 187 https://github.com/harfbuzz/boring-expansion-spec/blob/main/glyf1-cubicOutlines.md 188 for spec. (Behdad Esfahbod) 189- Various subsetter improvements. (Garret Rieger, Qunxin Liu, Behdad Esfahbod) 190- Various documentation improvements. 191 (Behdad Esfahbod, Matthias Clasen, Khaled Hosny) 192- Significantly reduced memory use during shaping. (Behdad Esfahbod) 193- Greatly reduced memory use during subsetting “CFF” table. (Behdad Esfahbod) 194- New command line utility, hb-info, for querying various font information. 195 (Behdad Esfahbod, Matthias Clasen) 196- New hb-shape/hb-view options: --glyphs, --color-palette, --font-bold, 197 --font-grade, and --named-instance. (Behdad Esfahbod) 198- Miscellaneous fixes and improvements. 199 (Amir Masoud Abdol, Andres Salomon, Behdad Esfahbod, Chun-wei Fan, 200 Garret Rieger, Jens Kutilek, Khaled Hosny, Konstantin Käfer, Matthias Clasen, 201 Nirbheek Chauhan, Pedro J. Estébanez, Qunxin Liu, Sergei Trofimovich) 202 203- New API: 204+HB_FONT_NO_VAR_NAMED_INSTANCE 205+HB_PAINT_IMAGE_FORMAT_BGRA 206+HB_PAINT_IMAGE_FORMAT_PNG 207+HB_PAINT_IMAGE_FORMAT_SVG 208+hb_cairo_font_face_create_for_face 209+hb_cairo_font_face_create_for_font 210+hb_cairo_font_face_get_face 211+hb_cairo_font_face_get_font 212+hb_cairo_font_face_get_scale_factor 213+hb_cairo_font_face_set_font_init_func 214+hb_cairo_font_face_set_scale_factor 215+hb_cairo_font_init_func_t 216+hb_cairo_glyphs_from_buffer 217+hb_cairo_scaled_font_get_font 218+hb_color_line_get_color_stops 219+hb_color_line_get_color_stops_func_t 220+hb_color_line_get_extend 221+hb_color_line_get_extend_func_t 222+hb_color_line_t 223+hb_color_stop_t 224+hb_draw_funcs_get_empty 225+hb_draw_funcs_get_user_data 226+hb_draw_funcs_set_user_data 227+hb_face_collect_nominal_glyph_mapping 228+hb_font_draw_glyph 229+hb_font_draw_glyph_func_t 230+hb_font_funcs_set_draw_glyph_func 231+hb_font_funcs_set_paint_glyph_func 232+hb_font_get_synthetic_bold 233+hb_font_get_var_named_instance 234+hb_font_paint_glyph 235+hb_font_paint_glyph_func_t 236+hb_font_set_synthetic_bold 237+hb_map_keys 238+hb_map_next 239+hb_map_update 240+hb_map_values 241+hb_ot_color_glyph_has_paint 242+hb_ot_color_has_paint 243+hb_ot_layout_script_select_language2 244+hb_ot_name_id_predefined_t 245+hb_paint_color 246+hb_paint_color_func_t 247+hb_paint_composite_mode_t 248+hb_paint_custom_palette_color 249+hb_paint_custom_palette_color_func_t 250+hb_paint_extend_t 251+hb_paint_funcs_create 252+hb_paint_funcs_destroy 253+hb_paint_funcs_get_empty 254+hb_paint_funcs_get_user_data 255+hb_paint_funcs_is_immutable 256+hb_paint_funcs_make_immutable 257+hb_paint_funcs_reference 258+hb_paint_funcs_set_color_func 259+hb_paint_funcs_set_custom_palette_color_func 260+hb_paint_funcs_set_image_func 261+hb_paint_funcs_set_linear_gradient_func 262+hb_paint_funcs_set_pop_clip_func 263+hb_paint_funcs_set_pop_group_func 264+hb_paint_funcs_set_pop_transform_func 265+hb_paint_funcs_set_push_clip_glyph_func 266+hb_paint_funcs_set_push_clip_rectangle_func 267+hb_paint_funcs_set_push_group_func 268+hb_paint_funcs_set_push_transform_func 269+hb_paint_funcs_set_radial_gradient_func 270+hb_paint_funcs_set_sweep_gradient_func 271+hb_paint_funcs_set_user_data 272+hb_paint_funcs_t 273+hb_paint_image 274+hb_paint_image_func_t 275+hb_paint_linear_gradient 276+hb_paint_linear_gradient_func_t 277+hb_paint_pop_clip 278+hb_paint_pop_clip_func_t 279+hb_paint_pop_group 280+hb_paint_pop_group_func_t 281+hb_paint_pop_transform 282+hb_paint_pop_transform_func_t 283+hb_paint_push_clip_glyph 284+hb_paint_push_clip_glyph_func_t 285+hb_paint_push_clip_rectangle 286+hb_paint_push_clip_rectangle_func_t 287+hb_paint_push_group 288+hb_paint_push_group_func_t 289+hb_paint_push_transform 290+hb_paint_push_transform_func_t 291+hb_paint_radial_gradient 292+hb_paint_radial_gradient_func_t 293+hb_paint_sweep_gradient 294+hb_paint_sweep_gradient_func_t 295+hb_set_is_inverted 296+hb_subset_input_keep_everything 297 298- Deprecated API: 299+hb_font_funcs_set_glyph_shape_func 300+hb_font_get_glyph_shape_func_t 301+hb_font_get_glyph_shape 302 303 304Overview of changes leading to 6.0.0 305Friday, December 16, 2022 306==================================== 307- A new API have been added to pre-process the face and speed up future 308 subsetting operations on that face. Provides up to a 95% reduction in 309 subsetting times when the same face is subset more than once. 310 311 For more details and benchmarks, see: 312 https://github.com/harfbuzz/harfbuzz/blob/main/docs/subset-preprocessing.md 313 314 (Garret Rieger, Behdad Esfahbod) 315 316- Shaping have been speedup by skipping entire lookups when the buffer contents 317 don't intersect with the lookup. Shows up to a 10% speedup in shaping some 318 fonts. (Behdad Esfahbod) 319 320- A new experimental feature, “Variable Composites” (enabled by passing 321 -Dexperimental_api=true to meson), is also featured in this release. 322 This technology enables drastic compression of fonts in the Chinese, 323 Japanese, Korean, and other writing systems, by reusing the OpenType Font 324 Variations technology for encoding “smart components” into the font. 325 326 The specification for these extensions to the font format can be found in: 327 https://github.com/harfbuzz/boring-expansion-spec/blob/glyf1/glyf1.md 328 329 A test variable-font with ~7160 Hangul syllables derived from the 330 NotoSerifKR-VF font has been built, with existing OpenType technology, as 331 well as with the new Variable Composites (VarComposites) technology. The 332 VarComposites font is over 90% smaller than the OpenType version of the font! 333 Both fonts can be obtained from the “smarties” repository: 334 https://github.com/behdad/smarties/tree/3.0/fonts/hangul/serif 335 336 When building HarfBuzz with experimental features enabled, you can test 337 the “smarties” font with a sample character like this: 338 339 $ hb-view butchered-hangul-serif-smarties-variable.ttf -u AE01 --variations=wght=700 340 341 (Behdad Esfahbod) 342 343- The HarfBuzz subsetter can now drop axes by pinning them to specific values 344 (also referred to as instancing). There are a couple of restrictions 345 currently: 346 347 - Only works with TrueType (“glyf”) based fonts. “CFF2” fonts are not yet 348 supported. 349 - Only supports the case where all axes in a font are pinned. 350 351 (Garret Rieger, Qunxin Liu) 352 353- Miscellaneous fixes and improvements. 354 355 (Behdad Esfahbod, Christoph Reiter, David Corbett, Eli Schwartz, Garret 356 Rieger, Joel Auterson, Jordan Petridis, Khaled Hosny, Lorenz Wildberg, 357 Marco Rebhan, Martin Storsjö, Matthias Clasen, Qunxin Liu, Satadru Pramanik) 358 359 360- New API 361+hb_subset_input_pin_axis_location() 362+hb_subset_input_pin_axis_to_default() 363+hb_subset_preprocess() 364 365 366Overview of changes leading to 5.3.1 367Wednesday, October 19, 2022 368==================================== 369- Subsetter repacker fixes. (Garret Rieger) 370- Adjust Grapheme clusters for Katakana voiced sound marks. (Behdad Esfahbod) 371- New “hb-subset” option “--preprocess-face”. (Garret Rieger) 372 373 374Overview of changes leading to 5.3.0 375Saturday, October 8, 2022 376"Women, Life, Freedom" #MahsaAmini 377==================================== 378- Don’t add glyphs from dropped MATH or COLR tables to the subset glyphs. 379 (Khaled Hosny) 380- Map “rlig” to appropriate AAT feature selectors. (Jonathan Kew) 381- Update USE data files to latest version. (David Corbett) 382- Check “CBDT” extents first before outline tables, to help with fonts that 383 also include an empty “glyf” table. (Khaled Hosny) 384- More work towards variable font instancing in the subsetter. (Qunxin Liu) 385- Subsetter repacker improvements. (Garret Rieger) 386- New API: 387+hb_ot_layout_lookup_get_optical_bound() 388+hb_face_builder_sort_tables() 389 390 391Overview of changes leading to 5.2.0 392Saturday, September 17, 2022 393==================================== 394- Fix regressions in hb-ft font functions for FT_Face’s with transformation 395 matrix. (Behdad Esfahbod) 396- The experimental hb-repacker API now supports splitting several GPOS subtable 397 types when needed. (Garret Rieger) 398- The HarfBuzz extensions to OpenType font format are now opt-in behind 399 build-time flags. (Behdad Esfahbod) 400- The experimental hb-subset variable fonts instantiation API can now 401 instantiate more font tables and arbitrary axis locations. (Qunxin Liu) 402- Unicode 15 support. (David Corbett) 403- Various documentation improvements. (Behdad Esfahbod, Matthias Clasen) 404- The hb-view command line tool now detects WezTerm inline images support. 405 (Wez Furlong) 406- Fix FreeType and ICU dependency lookup with meson. (Xavier Claessens) 407 408- New API: 409+HB_SCRIPT_KAWI 410+HB_SCRIPT_NAG_MUNDARI 411 412 413Overview of changes leading to 5.1.0 414Sunday, July 31, 2022 415==================================== 416- More extensive buffer tracing messages. (Behdad Esfahbod) 417- Fix hb-ft regression in bitmap fonts rendering. (Behdad Esfahbod) 418- Support extension promotion of lookups in hb-subset-repacker. (Garret Rieger) 419- A new HB_GLYPH_FLAG_SAFE_TO_INSERT_TATWEEL for scripts that use elongation 420 (e.g. Arabic) to signify where it is safe to insert tatweel glyph without 421 interrupting shaping. (Behdad Esfahbod) 422- Add “--safe-to-insert-tatweel” to “hb-shape” tool. (Behdad Esfahbod) 423 424- New API 425+HB_GLYPH_FLAG_SAFE_TO_INSERT_TATWEEL 426+HB_BUFFER_FLAG_PRODUCE_SAFE_TO_INSERT_TATWEEL 427 428 429Overview of changes leading to 5.0.1 430Saturday, July 23, 2022 431==================================== 432- Fix version 2 “avar” table with hb-ft. (Behdad Esfahbod) 433 434 435Overview of changes leading to 5.0.0 436Saturday, July 23, 2022 437==================================== 438- Support fonts with more than 65535 glyphs in “GDEF”, “GSUB”, and “GPOS” 439 tables. This is part of https://github.com/be-fonts/boring-expansion-spec to 440 extend OpenType in a backward-compatible way. 441 (Behdad Esfahbod, Garret Rieger) 442- Complete support for more than 65535 glyphs in “glyf” table that started in 443 4.0.0 release. Part of boring-expansion-spec. (Behdad Esfahbod) 444- Support version 2 of “avar” table. Part of boring-expansion-spec. 445 (Behdad Esfahbod) 446- Fix mark attachment on multiple substitutions in some cases. 447 (Behdad Esfahbod) 448- Fix application of “calt”, “rclt”, and “ccmp” features to better match 449 Uniscribe behaviour with some Arabic fonts. (Behdad Esfahbod) 450- Improvement to interaction between multiple cursive attachments. 451 (Behdad Esfahbod) 452- Improve multiple mark interactions in Hebrew. (Behdad Esfahbod) 453- Implement language-specific forms in AAT shaping. (Behdad Esfahbod) 454- Fix variation of “VORG” table. (Behdad Esfahbod) 455- Support for specific script tags to be retained in the subsetter, and add 456 “--layout-scripts” option to “hb-subset” tool. (Garret Rieger) 457- Accept space as delimiter for --features/--variations in command line tools. 458- Improve subsetting of “COLR” table. (Qunxin Liu) 459- Improved fuzzing coverage for ot-math API. (Frédéric Wang) 460- Fix “kern” table version 2 (AAT) sanitization on 32-bit systems. 461 (Behdad Esfahbod) 462- Allow negative glyph advances from “graphite2” shaper. (Stephan Bergmann) 463- Implement loading (color) bitmap fonts with hb-ft. (Behdad Esfahbod) 464- Fix regression in hb-ft when changing font size. (Behdad Esfahbod) 465- Fix build on GCC < 7. (Kleis Auke Wolthuizen) 466- Dynamically load dwrite.dll on windows if “directwrite” shaper is enabled. 467 (Luca Bacci) 468- Provide a single-file harfbuzz-subset.cc file for easier alternate building 469 of hb-subset library, similar to harfbuzz.cc. (Khaled Hosny) 470 471- New API 472+HB_SUBSET_SETS_LAYOUT_SCRIPT_TAG 473+hb_language_matches() 474 475 476Overview of changes leading to 4.4.1 477Wednesday, June 29, 2022 478==================================== 479- Fix test failure with some compilers. 480- Fix Telugu and Kannada kerning regression. 481 482 483Overview of changes leading to 4.4.0 484Monday, June 27, 2022 485==================================== 486- Caching of variable fonts shaping, in particular when using HarfBuzz’s own 487 font loading functions (ot). Bringing performance of variable shaping in par 488 with non-variable fonts shaping. (Behdad Esfahbod) 489- Caching of format 2 “Contextual Substitution” and “Chained Contexts 490 Substitution” lookups. Resulting in up to 20% speedup of lookup-heavy fonts 491 like Gulzar or Noto Nastaliq Urdu. (Behdad Esfahbod) 492- Improved ANSI output from hb-view. (Behdad Esfahbod) 493- Support for shaping legacy, pre-OpenType Windows 3.1-era, Arabic fonts that 494 relied on a fixed PUA encoding. (Khaled Hosny, Behdad Esfahbod) 495- Sinhala script is now shaped by the USE shaper instead of “indic” one. 496 (Behdad Esfahbod, David Corbett) 497- Thai shaper improvements. (David Corbett) 498- hb-ot-name API supports approximate BCP-47 language matching, for example 499 asking for “en_US” in a font that has only “en” names will return them. 500 (Behdad Esfahbod) 501- Optimized TrueType glyph shape loading. (Behdad Esfahbod) 502- Fix subsetting of HarfBuzz faces created via hb_face_create_for_tables(). 503 (Garret Rieger) 504- Add 32 bit var store support to the subsetter. (Garret Rieger) 505 506- New API 507+HB_BUFFER_FLAG_DEFINED 508+HB_BUFFER_SERIALIZE_FLAG_DEFINED 509+hb_font_changed() 510+hb_font_get_serial() 511+hb_ft_hb_font_changed() 512+hb_set_hash() 513+hb_map_copy() 514+hb_map_hash() 515 516 517Overview of changes leading to 4.3.0 518Friday, May 20, 2022 519==================================== 520- Major speed up in loading and subsetting fonts, especially in 521 handling CFF table. Subsetting some fonts is now 3 times faster. 522 (Behdad Esfahbod, Garret Rieger) 523- Speed up blending CFF2 table. (Behdad Esfahbod) 524- Speed up hb_ot_tags_from_language(). (Behdad Esfahbod, David Corbett) 525- Fix USE classification of U+10A38 to fix multiple marks on single Kharoshthi 526 base. (David Corbett) 527- Fix parsing of empty CFF Index. (Behdad Esfahbod) 528- Fix subsetting CPAL table with partial palette overlaps. (Garret Rieger) 529 530- New API 531+hb_map_is_equal() (Behdad Esfahbod) 532 533 534Overview of changes leading to 4.2.1 535Sunday, April 24, 2022 536==================================== 537- Make sure hb_blob_create_from_file_or_fail() always returns nullptr in case 538 of failure and not empty blob sometimes. (Khaled Hosny) 539- Add --passthrough-tables option to hb-subset. (Cosimo Lupo) 540- Reinstate a pause after basic features in Khmer shaper, fixing a regression 541 introduced in previous release. (Behdad Esfahbod) 542- Better handling of Regional_Indicator when shaped with RTL-native scripts, 543 reverting earlier fix that caused regressions in AAT shaping. (Behdad Esfahbod) 544 545 546Overview of changes leading to 4.2.0 547Wednesday, March 30, 2022 548==================================== 549- Source code reorganization, splitting large hb-ot-layout files into smaller, 550 per-subtable ones under OT/Layout/*. Code for more tables will follow suit in 551 later releases. (Garret Rieger, Behdad Esfahbod) 552- Revert Indic shaper change in previous release that broke some fonts and 553 instead make per-syllable restriction of “GSUB” application limited to 554 script-specific Indic features, while applying them and discretionary 555 features in one go. (Behdad Esfahbod) 556- Fix decoding of private in gvar table. (Behdad Esfahbod) 557- Fix handling of contextual lookups that delete too many glyphs. (Behdad Esfahbod) 558- Make “morx” deleted glyphs don’t block “GPOS” application. (Behdad Esfahbod) 559- Various build fixes. (Chun-wei Fan, Khaled Hosny) 560 561- New API 562+hb_set_next_many() (Andrew John) 563 564 565Overview of changes leading to 4.1.0 566Wednesday, March 23, 2022 567==================================== 568- Various OSS-Fuzz fixes. (Behdad Esfahbod) 569- Make fallback vertical-origin match FreeType’s. (Behdad Esfahbod) 570- Treat visible viramas like dependent vowels in USE shaper. (David Corbett) 571- Apply presentation forms features and discretionary features in one go in 572 Indic shaper, which seems to match Uniscribe and CoreText behaviour. 573 (Behdad Esfahbod, David Corbett) 574- Various bug fixes. 575 576- New API 577+hb_set_add_sorted_array() (Andrew John) 578 579 580Overview of changes leading to 4.0.1 581Friday, March 11, 2022 582==================================== 583- Update OpenType to AAT mappings for “hist” and “vrtr” features. 584 (Florian Pircher) 585- Update IANA Language Subtag Registry to 2022-03-02. (David Corbett) 586- Update USE shaper to allow any non-numeric tail in a symbol cluster, and 587 remove obsolete data overrides. (David Corbett) 588- Fix handling of baseline variations to return correctly scaled values. 589 (Matthias Clasen) 590- A new experimental hb_subset_repack_or_fail() to repack an array of objects, 591 eliminating offset overflows. The API is not available unless HarfBuzz is 592 built with experimental APIs enabled. (Qunxin Liu) 593 594- New experimental API 595+hb_link_t 596+hb_object_t 597+hb_subset_repack_or_fail() 598 599 600Overview of changes leading to 4.0.0 601Tuesday, March 1, 2022 602==================================== 603- New public API to create subset plan and gather information on things like 604 glyph mappings in the final subset. The plan can then be passed on to perform 605 the subsetting operation. (Garret Rieger) 606- Draw API for extracting glyph shapes have been extended and finalized and is 607 no longer an experimental API. The draw API supports glyf, CFF and CFF2 608 glyph outlines tables, and applies variation settings set on the font as well 609 as synthetic slant. The new public API is not backward compatible with the 610 previous, non-public, experimental API. (Behdad Esfahbod) 611- The hb-view tool will use HarfBuzz draw API to render the glyphs instead of 612 cairo-ft when compiled with Cairo 1.17.5 or newer, setting HB_DRAW 613 environment variable to 1 or 0 will force using or not use the draw API, 614 respectively. (Behdad Esfahbod) 615- The hb-shape and hb-view tools now default to using HarfBuzz’s own font 616 loading functions (ot) instead of FreeType ones (ft). They also have a new 617 option, --font-slant, to apply synthetic slant to the font. (Behdad Esfahbod) 618- HarfBuzz now supports more than 65535 (the OpenType limit) glyph shapes and 619 metrics. See https://github.com/be-fonts/boring-expansion-spec/issues/6 and 620 https://github.com/be-fonts/boring-expansion-spec/issues/7 for details. 621 (Behdad Esfahbod) 622- New API to get the dominant horizontal baseline tag for a given script. 623 (Behdad Esfahbod) 624- New API to get the baseline positions from the font, and synthesize missing 625 ones. As well as new API to get font metrics and synthesize missing ones. 626 (Matthias Clasen) 627- Improvements to finding dependencies on Windows when building with Visual 628 Studio. (Chun-wei Fan) 629- New buffer flag, HB_BUFFER_FLAG_PRODUCE_UNSAFE_TO_CONCAT, that must be set 630 during shaping for HB_GLYPH_FLAG_UNSAFE_TO_CONCAT flag to be reliably 631 produced. This is to limit the performance hit of producing this flag to when 632 it is actually needed. (Behdad Esfahbod) 633- Documentation improvements. (Matthias Clasen) 634 635- New API 636 - General: 637 +HB_BUFFER_FLAG_PRODUCE_UNSAFE_TO_CONCAT 638 +hb_var_num_t 639 640 - Draw: 641 +hb_draw_funcs_t 642 +hb_draw_funcs_create() 643 +hb_draw_funcs_reference() 644 +hb_draw_funcs_destroy() 645 +hb_draw_funcs_is_immutable() 646 +hb_draw_funcs_make_immutable() 647 +hb_draw_move_to_func_t 648 +hb_draw_funcs_set_move_to_func() 649 +hb_draw_line_to_func_t 650 +hb_draw_funcs_set_line_to_func() 651 +hb_draw_quadratic_to_func_t 652 +hb_draw_funcs_set_quadratic_to_func() 653 +hb_draw_cubic_to_func_t 654 +hb_draw_funcs_set_cubic_to_func() 655 +hb_draw_close_path_func_t 656 +hb_draw_funcs_set_close_path_func() 657 +hb_draw_state_t 658 +HB_DRAW_STATE_DEFAULT 659 +hb_draw_move_to() 660 +hb_draw_line_to() 661 +hb_draw_quadratic_to() 662 +hb_draw_cubic_to() 663 +hb_draw_close_path() 664 +hb_font_get_glyph_shape_func_t 665 +hb_font_funcs_set_glyph_shape_func() 666 +hb_font_get_glyph_shape() 667 668 - OpenType layout 669 +HB_OT_LAYOUT_BASELINE_TAG_IDEO_FACE_CENTRAL 670 +HB_OT_LAYOUT_BASELINE_TAG_IDEO_EMBOX_CENTRAL 671 +hb_ot_layout_get_horizontal_baseline_tag_for_script() 672 +hb_ot_layout_get_baseline_with_fallback() 673 674 - Metrics: 675 +hb_ot_metrics_get_position_with_fallback() 676 677 - Subset: 678 +hb_subset_plan_t 679 +hb_subset_plan_create_or_fail() 680 +hb_subset_plan_reference() 681 +hb_subset_plan_destroy() 682 +hb_subset_plan_set_user_data() 683 +hb_subset_plan_get_user_data() 684 +hb_subset_plan_execute_or_fail() 685 +hb_subset_plan_unicode_to_old_glyph_mapping() 686 +hb_subset_plan_new_to_old_glyph_mapping() 687 +hb_subset_plan_old_to_new_glyph_mapping() 688 689 690Overview of changes leading to 3.4.0 691Sunday, February 13, 2022 692==================================== 693- Perform sanity checks on shaping results is now part of “harfbuzz” library 694 and can be enabled by setting the buffer flag HB_BUFFER_FLAG_VERIFY. 695 (Behdad Esfahbod) 696- Arabic Mark Transient Reordering Algorithm have been updated to revision 6. 697 (Khaled Hosny) 698- ISO 15924 code for mathematical notation, ‘Zmth’, now maps to the OpenType 699 ‘math’ tag. (Alexis King) 700- It is now possible to get at once all math kerning values for a given glyph 701 at a given corner. (Alexis King) 702- Fix locale_t portability issues on systems the typedef’s it to a void 703 pointer. (Behdad Esfahbod) 704 705- New API: 706+HB_BUFFER_FLAG_VERIFY 707+HB_OT_TAG_MATH_SCRIPT 708+HB_SCRIPT_MATH 709+hb_ot_math_kern_entry_t 710+hb_ot_math_get_glyph_kernings() 711 712- Deprecated API 713+HB_OT_MATH_SCRIPT 714 715 716Overview of changes leading to 3.3.2 717Sunday, February 6, 2022 718==================================== 719- Revert splitting of pair positioning values introduced in 3.3.0 as it proved 720 problematic. (Behdad Esfahbod) 721 722 723Overview of changes leading to 3.3.1 724Monday, January 31, 2022 725==================================== 726- Fix heap-use-after-free in harfbuzz-subset introduced in previous release. 727 (Garret Rieger) 728 729 730Overview of changes leading to 3.3.0 731Monday, January 31, 2022 732==================================== 733- Improved documentation. (Matthias Clasen) 734- Internal code cleanup, using C++ standard library more. (Behdad Esfahbod) 735- The low 16-bits of face index will be used by hb_face_create() to select a 736 face inside a font collection file format, while the high 16-bits will be 737 used by hb_font_create() to load the named instance. (Behdad Esfahbod) 738- Glyph positions and other font metrics now apply synthetic slant set by 739 hb_font_set_synthetic_slant(), for improved positioning for synthetically 740 slanted fonts. (Behdad Esfahbod) 741- Fixed unintentional locale dependency in hb_variation_to_string() for decimal 742 point representation. (Matthias Clasen) 743- When applying pair positioning (kerning) the positioning value is split 744 between the two sides of the pair for improved cursor positioning between 745 such pairs. (Behdad Esfahbod) 746- Introduced new HB_GLYPH_FLAG_UNSAFE_TO_CONCAT, to be used in conjunction 747 with HB_GLYPH_FLAG_UNSAFE_TO_BREAK for optimizing re-shaping during line 748 breaking. Check the documentation for further details. (Behdad Esfahbod) 749- Improved handling of macrolanguages when mapping BCP 47 codes to OpenType 750 tags. (David Corbett) 751 752- New API: 753+HB_GLYPH_FLAG_UNSAFE_TO_CONCAT 754+hb_segment_properties_overlay() 755+hb_buffer_create_similar() 756+hb_font_set_synthetic_slant() 757+hb_font_get_synthetic_slant() 758+hb_font_get_var_coords_design() 759 760 761Overview of changes leading to 3.2.0 762Friday, November 26, 2021 763==================================== 764“harfbuzz” library improvements: 765- Fixed shaping of Apple Color Emoji flags in right-to-left context. (Behdad Esfahbod) 766- Fixed positioning of CFF fonts in HB_TINY profile. (Behdad Esfahbod) 767- OpenType 1.9 language tags update. (David Corbett) 768- Add HB_NO_VERTICAL config option. 769- Add HB_CONFIG_OVERRIDE_H for easier configuration. (Behdad Esfahbod) 770 771“harfbuzz-subset” library improvements: 772- Improved packing of cmap, loca, and Ligature tables. (Garret Rieger) 773- Significantly improved overflow-resolution strategy in the repacker. (Garret Rieger) 774 775 776Overview of changes leading to 3.1.2 777Friday, November 26, 2021 778==================================== 779- hb-shape / hb-view: revert treating text on the commandline as single 780 paragraph (was introduced in 3.0.0); add new --single-par to do that. 781 (Behdad Esfahbod) 782- Subsetter bug fixes. (Garret Rieger, Qunxin Liu, Behdad Esfahbod) 783 784 785Overview of changes leading to 3.1.1 786Wednesday, November 8, 2021 787==================================== 788- Work around GCC cast-align error/warning on some platforms. (Behdad Esfahbod) 789- Documentation improvements. (Matthias Clasen) 790 791 792Overview of changes leading to 3.1.0 793Wednesday, November 3, 2021 794==================================== 795- Better offset-overflow handling in the subsetter library. (Garret Rieger) 796- Improved Unicode 14 properties in the USE shaper, and various other USE 797 shaper fixes. (David Corbett) 798- MATH and COLR v1 tables subsetting support, and various other subsetter fixes. 799 (Qunxin Liu) 800- Support for Pwo Karen / Ason Chin medial la. (Simon Cozens) 801- Apply GPOS positioning when substituting with morx table, if kerx is missing. 802 (Behdad Esfahbod) 803- Apply calt and clig features across syllable boundaries in Indic shaper. 804 (Behdad Esfahbod) 805- meson option for enabling Graphite 2 has been renamed to graphite2. 806- Build and documentation fixes. 807 808- New API: 809+hb_buffer_set_not_found_glyph() 810+hb_buffer_get_not_found_glyph() 811 812 813Overview of changes leading to 3.0.0 814Friday, September 17, 2021 815==================================== 816- Unicode 14.0 support (David Corbett). 817- The hb-subset API and the harfbuzz-subset library's ABI are now declared 818 stable. The harfbuzz-subset library would not have been possible without the 819 work of Garret Rieger and Qunxin Liu from Google Fonts, and the earlier work 820 of Michiharu Ariza from Adobe. 821- The hb-style API is now stable and no longer experimental. 822 823- New API: 824+hb_style_tag_t 825+hb_style_get_value() 826+hb_subset_input_t 827+hb_subset_flags_t 828+hb_subset_sets_t 829+hb_subset_input_create_or_fail() 830+hb_subset_input_reference() 831+hb_subset_input_destroy() 832+hb_subset_input_set_user_data() 833+hb_subset_input_get_user_data() 834+hb_subset_input_unicode_set() 835+hb_subset_input_glyph_set() 836+hb_subset_input_set() 837+hb_subset_input_get_flags() 838+hb_subset_input_set_flags() 839+hb_subset_or_fail() 840 841- Removed old unstable harfbuzz-subset API: 842-hb_subset_input_nameid_set() 843-hb_subset_input_namelangid_set() 844-hb_subset_input_layout_features_set() 845-hb_subset_input_no_subset_tables_set() 846-hb_subset_input_drop_tables_set() 847-hb_subset_input_set_drop_hints() 848-hb_subset_input_get_drop_hints() 849-hb_subset_input_set_desubroutinize() 850-hb_subset_input_get_desubroutinize() 851-hb_subset_input_set_retain_gids() 852-hb_subset_input_get_retain_gids() 853-hb_subset_input_set_name_legacy() 854-hb_subset_input_get_name_legacy() 855-hb_subset_input_set_overlaps_flag() 856-hb_subset_input_get_overlaps_flag() 857-hb_subset_input_set_notdef_outline() 858-hb_subset_input_get_notdef_outline() 859-hb_subset_input_set_no_prune_unicode_ranges() 860-hb_subset_input_get_no_prune_unicode_ranges() 861-hb_subset() 862 863 864Overview of changes leading to 2.9.1 865Tuesday, September 7, 2021 866==================================== 867- Final subset API is in place and if no issues are discovered, it will be the 868 stable subset API of HarfBuzz 3.0.0. Old API is kept to ease transition, but 869 will be removed in 3.0.0. 870- Various fuzzer-found bug fixes. 871- hb_buffer_append() now handles the pre- and post-context which previously 872 were left unchanged in the destination buffer. 873- hb-view / hb-shape now accept following new arguments: 874 o --unicodes-before/after: takes a list of hex numbers that represent Unicode 875 codepoints. 876- Undeprecated API: 877 hb_set_invert() 878 879 880Overview of changes leading to 2.9.0 881Wednesday, August 18, 2021 882History Repeats Itself (Afghanistan) 883==================================== 884- Subsetter API is being stabilized, with the first stable API to happen in 885 3.0.0 release (https://github.com/harfbuzz/harfbuzz/issues/3078). 886- Support multiple variation axes with same tag, aka HOI. 887- The “coretext” testing shaper now passes font variations to CoreText. 888- hb-shape/hb-view does not break line at new lines unless text is read from 889 file. 890- hb-view and hb-subset has a --batch now, similar to hb-shape. 891- The --batch mode now uses ; as argument separator instead of : used previously. 892- The --batch in hb-shape does not expect 0th argument anymore. That is, the 893 lines read are interpreted as argv[1:], instead of argv[0:]. 894- The --batch option has been undocumented. We are ready to document it; send 895 feedback if you find it useful. 896- hb-subset got arguments revamps. Added much-requested --gids-file, --glyphs, 897 --glyphs-file, --unicodes-file, supporting ranges in --unicodes. 898- Various bug fixes. 899 900 901Overview of changes leading to 2.8.2 902Tuesday, July 8, 2021 903==================================== 904- Shaping LTR digits for RTL scripts now makes the native direction of the 905 digits LTR, applying shaping and positioning rules on the same glyph order as 906 Uniscribe. (Jonathan Kew, Khaled Hosny). 907- Subsetting COLR v1 and CPAL tables is now supported. (Garret Rieger, Qunxin Liu) 908- Various fixes and improvements to the subsetter. (Garret Rieger, Qunxin Liu, Behdad) 909- When applying morx table, mark glyph widths should not be zeroed. (Jonathan Kew) 910- GPOS is preferred over kerx, if GSUB was applied. (Behdad) 911- Regional_Indicator pairs are grouped together when clustering. (Behdad) 912- New API: 913+hb_blob_create_or_fail() 914+hb_blob_create_from_file_or_fail() 915+hb_set_copy() 916 917 918Overview of changes leading to 2.8.1 919Tuesday, May 4, 2021 920==================================== 921- Subsetter now fully supports GSUB/GPOS/GDEF tables (including variations); as 922 such, layout tables are retained by subsetter by default. (Garret Rieger, Qunxin Liu) 923- Build scripts no longer check for FontConfig as HarfBuzz does not use it. 924- hb-view supports iTerm2 and kitty inline image protocols (Khaled Hosny), 925 it can also use Chafa for terminal graphics if available (Hans Petter Jansson). 926 927Overview of changes leading to 2.8.0 928Tuesday, March 16, 2021 929==================================== 930- Shape joining scripts other than Arabic/Syriac using the Universal Shaping Engine. 931 Previously these were shaped using the generalized Arabic shaper. (David Corbett) 932- Fix regression in shaping of U+0B55 ORIYA SIGN OVERLINE. (David Corbett) 933- Update language tags. (David Corbett) 934- Variations: reduce error: do not round each interpolated delta. (Just van Rossum) 935- Documentation improvements. (Khaled Hosny, Nathan Willis) 936- Subsetter improvements: subsets most, if not all, lookup types now. (Garret Rieger, Qunxin Liu) 937- Fuzzer-found fixes and other improvements when memory failures happen. (Behdad) 938- Removed most atomic implementations now that we have C++11 atomic impl. (Behdad) 939- General codebase upkeep; using more C++11 features: constexpr constructors, etc. (Behdad) 940 941 942Overview of changes leading to 2.7.4 943Sunday, December 27, 2020 944==================================== 945- Fix missing --enable-introspection configure option from previous release 946 tarball. 947- Documentation updates. 948 949 950Overview of changes leading to 2.7.3 951Wednesday, December 23, 2020 952==================================== 953- Update USE shaper to 2020-08-13 specification, and other improvements. 954- Don’t disable liga feature in myanmar shaper, to match Uniscribe. 955- Improvements to language and script tags handling. 956- Update language system tag registry to OpenType 1.8.4 957- Support for serializing and deserializing Unicode buffers. Serialized buffers 958 are now delimited with `<>` or `[]` based on whether it is a Unicode or 959 glyphs buffer. 960- Increase buffer work limits to handle fonts with many complex lookups. 961- Handle more shaping operations in trace output. 962- Memory access fixes. 963- More OOM fixes. 964- Improved documentation. 965- Build system improvements. 966- New API: 967+hb_buffer_has_positions() 968+hb_buffer_serialize() 969+hb_buffer_serialize_unicode() 970+hb_buffer_deserialize_unicode() 971 972 973Overview of changes leading to 2.7.2 974Saturday, August 29, 2020 975==================================== 976- Fix a regression in the previous release that caused a crash with Kaithi. 977- More OOM fixes. 978 979 980Overview of changes leading to 2.7.1 981Thursday, August 13, 2020 982==================================== 983- ot-funcs now handles variable empty glyphs better when hvar/vvar isn't present. 984- Reverted a GDEF processing regression. 985- A couple of fixes to handle OOM better. 986 987 988Overview of changes leading to 2.7.0 989Saturday, July 25, 2020 990==================================== 991- Use an implementation for round that always rounds up, some minor fluctuations 992 are expected on var font specially when hb-ot callback is used. 993- Fix an AAT's `kerx` issue on broken rendering of Devanagari Sangam MN. 994- Remove AAT's `lcar` table support from _get_ligature_carets API, not even much 995 use on macOS installed fonts (only two files). GDEF support is the recommended 996 one and expected to work properly after issues fixed two releases ago. 997- Minor memory fixes to handle OOM better specially in hb-ft. 998- Minor .so files versioning scheme change and remove stable/unstable scheme 999 differences, was never used in practice (always default to stable scheme). 1000- We are now suggesting careful packaging of the library using meson, 1001 https://github.com/harfbuzz/harfbuzz/wiki/Notes-on-migration-to-meson 1002 for more information. 1003- Distribution package URL is changed, either use GitHub generated tarballs, 1004 `https://github.com/harfbuzz/harfbuzz/archive/$pkgver.tar.gz` 1005 or, even more preferably use commit hash of the release and git checkouts like, 1006 `git+https://github.com/harfbuzz/harfbuzz#commit=$commit` 1007 1008 1009Overview of changes leading to 2.6.8 1010Monday, June 22, 2020 1011==================================== 1012- New API to fetch glyph alternates from GSUB table. 1013- hb-coretext build fix for macOS < 10.10. 1014- Meson build fixes, cmake port removal is postponed but please prepare for 1015 it and give us feedback. 1016 Autotools is still our main build system however please consider 1017 experimenting with meson also for packaging the library. 1018- New API: 1019+hb_ot_layout_lookup_get_glyph_alternates() 1020 1021 1022Overview of changes leading to 2.6.7 1023Wednesday, June 3, 2020 1024==================================== 1025- Update to Unicode 13.0.0. 1026- Fix hb_ot_layout_get_ligature_carets for fonts without lcar table, it was 1027 completely broken for all the other fonts since 2.1.2. 1028- As a part of our migration to meson, this release will be the last one 1029 to provide cmake port files but autotools still is our main build system. 1030 There is a possibility that the next version or the after be released 1031 using meson. 1032 1033 1034Overview of changes leading to 2.6.6 1035Tuesday, May 12, 2020 1036==================================== 1037- A fix in AAT kerning for Geeza Pro. 1038- Better support for resource fork fonts on macOS. 1039 1040 1041Overview of changes leading to 2.6.5 1042Friday, April 17, 2020 1043==================================== 1044- Add experimental meson build system. Autotools is still the primary 1045 and supported build system. 1046- AAT is now always preferred for horizontal scripts when both AAT and OT 1047 layout tables exist at the same time. 1048- Subsetter improvements. 1049- New API: 1050+hb_ft_font_lock_face() 1051+hb_ft_font_unlock_face() 1052 1053 1054Overview of changes leading to 2.6.4 1055Monday, October 29, 2019 1056==================================== 1057- Small bug fix. 1058- Build fixes. 1059 1060 1061Overview of changes leading to 2.6.3 1062Monday, October 28, 2019 1063==================================== 1064- Misc small fixes, mostly to build-related issues. 1065- New API: 1066+hb_font_get_nominal_glyphs() 1067 1068 1069Overview of changes leading to 2.6.2 1070Monday, September 30, 2019 1071==================================== 1072- Misc small fixes, mostly to build-related issues. 1073 1074 1075Overview of changes leading to 2.6.1 1076Thursday, August 22, 2019 1077==================================== 1078- Fix regression with hb_font_create_sub_font scaling introduced in 2.6.0. 1079- Change interpretation of font PTEM size / CoreText font size handling. 1080 See https://github.com/harfbuzz/harfbuzz/pull/1484 1081- hb-ot-font: Prefer symbol cmap subtable if present. 1082- Apply 'dist'/'abvm'/'blwm' features to all scripts. 1083- Drop experimental DirectWrite API. 1084 1085 1086Overview of changes leading to 2.6.0 1087Tuesday, August 13, 2019 1088==================================== 1089- New OpenType metrics, baseline, and metadata table access APIs. 1090- New API to set font variations to a named-instance. 1091- New hb-gdi.h header and API for creating hb_face_t from HFONT. 1092- Amalgam: Provide a single-file harfbuzz.cc file for easier alternate building. 1093- More size-reduction configurable options, enabled by HB_TINY. 1094- New API: 1095+hb_font_set_var_named_instance() 1096+hb_gdi_face_create() 1097+hb_ot_layout_baseline_tag_t 1098+hb_ot_layout_get_baseline() 1099+hb_ot_meta_tag_t 1100+hb_ot_meta_get_entry_tags() 1101+hb_ot_meta_reference_entry() 1102+hb_ot_metrics_tag_t 1103+hb_ot_metrics_get_position() 1104+hb_ot_metrics_get_variation() 1105+hb_ot_metrics_get_x_variation() 1106+hb_ot_metrics_get_y_variation() 1107 1108 1109Overview of changes leading to 2.5.3 1110Wednesday, June 26, 2019 1111==================================== 1112- Fix UCD script data for Unicode 10+ scripts. This was broken since 2.5.0. 1113- More optimizations for HB_TINY. 1114 1115 1116Overview of changes leading to 2.5.2 1117Thursday, June 20, 2019 1118==================================== 1119- More hb-config.hh facilities to shrink library size, namely when built as 1120 HB_TINY. 1121- New documentation of custom configurations in CONFIG.md. 1122- Fix build on gcc 4.8. That's supported again. 1123- Universal Shaping Engine improvements thanks to David Corbett. 1124- API Changes: Undeprecate some horizontal-kerning API and re-enable in hb-ft, 1125 such that Type1 fonts will continue kerning. 1126 1127 1128Overview of changes leading to 2.5.1 1129Friday, May 31, 2019 1130==================================== 1131- Fix build with various versions of Visual Studio. 1132- Improved documentation, thanks to Nathan Willis. 1133- Bugfix in subsetting glyf table. 1134- Improved scripts for cross-compiling for Windows using mingw. 1135- Rename HB_MATH_GLYPH_PART_FLAG_EXTENDER to HB_OT_MATH_GLYPH_PART_FLAG_EXTENDER. 1136 A deprecated macro is added for backwards-compatibility. 1137 1138 1139Overview of changes leading to 2.5.0 1140Friday, May 24, 2019 1141==================================== 1142- This release does not include much functional changes, but includes major internal 1143 code-base changes. We now require C++11. Support for gcc 4.8 and earlier has been 1144 dropped. 1145- New hb-config.hh facility for compiling smaller library for embedded and web usecases. 1146- New Unicode Character Database implementation that is half the size of previously-used 1147 UCDN. 1148- Subsetter improvements. 1149- Improved documentation, thanks to Nathan Willis. 1150- Misc shaping fixes. 1151 1152 1153Overview of changes leading to 2.4.0 1154Monday, March 25, 2019 1155==================================== 1156- Unicode 12. 1157- Misc fixes. 1158- Subsetter improvements. 1159- New API: 1160HB_BUFFER_FLAG_DO_NOT_INSERT_DOTTED_CIRCLE 1161hb_directwrite_face_create() 1162 1163 1164Overview of changes leading to 2.3.1 1165Wednesday, January 30, 2019 1166==================================== 1167- AAT bug fixes. 1168- Misc internal housekeeping cleanup. 1169 1170 1171Overview of changes leading to 2.3.0 1172Thursday, December 20, 2018 1173==================================== 1174- Fix regression on big-endian architectures. Ouch! 1175- Misc bug and build fixes. 1176- Fix subsetting of simple GSUB/GDEF. 1177- Merge CFF / CFF2 support contributed by Adobe. This mostly involves 1178 the subsetter, but also get_glyph_extents on CFF fonts. 1179 1180New API in hb-aat.h: 1181+hb_aat_layout_has_substitution() 1182+hb_aat_layout_has_positioning() 1183+hb_aat_layout_has_tracking() 1184 1185 1186Overview of changes leading to 2.2.0 1187Thursday, November 29, 2018 1188==================================== 1189- Misc shaping bug fixes. 1190- Add font variations named-instance API. 1191- Deprecate font variations axis enumeration API and add replacement. 1192- AAT shaping improvements: 1193 o Fixed 'kern' table Format 2 implementation. 1194 o Implement 'feat' table API for feature detection. 1195 o Blacklist 'GSUB' table of fonts from 'MUTF' foundry that also have 'morx'. 1196 1197New API: 1198+hb_aat_layout_feature_type_t 1199+hb_aat_layout_feature_selector_t 1200+hb_aat_layout_get_feature_types() 1201+hb_aat_layout_feature_type_get_name_id 1202+hb_aat_layout_feature_selector_info_t 1203+HB_AAT_LAYOUT_NO_SELECTOR_INDEX 1204+hb_aat_layout_feature_type_get_selector_infos() 1205+hb_ot_var_axis_flags_t 1206+hb_ot_var_axis_info_t 1207+hb_ot_var_get_axis_infos() 1208+hb_ot_var_find_axis_info() 1209+hb_ot_var_get_named_instance_count() 1210+hb_ot_var_named_instance_get_subfamily_name_id() 1211+hb_ot_var_named_instance_get_postscript_name_id() 1212+hb_ot_var_named_instance_get_design_coords() 1213 1214Deprecated API: 1215+HB_OT_VAR_NO_AXIS_INDEX 1216+hb_ot_var_axis_t 1217+hb_ot_var_get_axes() 1218+hb_ot_var_find_axis() 1219 1220 1221Overview of changes leading to 2.1.3 1222Friday, November 16, 2018 1223==================================== 1224- Fix AAT 'mort' shaping, which was broken in 2.1.2 1225 1226 1227Overview of changes leading to 2.1.2 1228Friday, November 16, 2018 1229==================================== 1230- Various internal changes. 1231- AAT shaping improvements: 1232 o Implement kern table Format 1 state-machine-based kerning. 1233 o Implement cross-stream kerning (cursive positioning, etc). 1234 o Ignore emptyish GSUB tables (zero scripts) if morx present. 1235 o Don't apply GPOS if morx is being applied. Matches Apple. 1236 1237 1238-Overview of changes leading to 2.1.1 1239Monday, November 5, 2018 1240==================================== 1241- AAT improvements: 1242 o Implement 'mort' table. 1243 o Implement 'kern' subtables Format 1 and Format 3. 1244 1245 1246Overview of changes leading to 2.1.0 1247Tuesday, October 30, 2018 1248==================================== 1249- AAT shaping improvements: 1250 o Allow user controlling AAT features, for whole buffer only currently. 1251 o Several 'morx' fixes. 1252 o Implement tuple-kerns in 'kerx'; Fixes kerning with Apple default 1253 San Francisco fonts. 1254- Support for color fonts: 1255 o COLR/CPAL API to fetch color layers. 1256 o SVG table to fetch SVG documents. 1257 o CBDT/sbix API to fetch PNG images. 1258- New 'name' table API. 1259- hb-ot-font now uses 'VORG' table to correctly position CFF glyphs 1260 in vertical layout. 1261- Various fuzzer-found bug fixes. 1262 1263Changed API: 1264 1265A type and a macro added in 2.0.0 were renamed: 1266 1267hb_name_id_t -> hb_ot_name_id_t 1268HB_NAME_ID_INVALID -> HB_OT_NAME_ID_INVALID 1269 1270New API: 1271 1272+hb_color_t 1273+HB_COLOR 1274+hb_color_get_alpha() 1275+hb_color_get_red() 1276+hb_color_get_green() 1277+hb_color_get_blue() 1278+hb_ot_color_has_palettes() 1279+hb_ot_color_palette_get_count() 1280+hb_ot_color_palette_get_name_id() 1281+hb_ot_color_palette_color_get_name_id() 1282+hb_ot_color_palette_flags_t 1283+hb_ot_color_palette_get_flags() 1284+hb_ot_color_palette_get_colors() 1285+hb_ot_color_has_layers() 1286+hb_ot_color_layer_t 1287+hb_ot_color_glyph_get_layers() 1288+hb_ot_color_has_svg() 1289+hb_ot_color_glyph_reference_svg() 1290+hb_ot_color_has_png() 1291+hb_ot_color_glyph_reference_png() 1292 1293+hb_ot_name_id_t 1294+HB_OT_NAME_ID_INVALID 1295+HB_OT_NAME_ID_COPYRIGHT 1296+HB_OT_NAME_ID_FONT_FAMILY 1297+HB_OT_NAME_ID_FONT_SUBFAMILY 1298+HB_OT_NAME_ID_UNIQUE_ID 1299+HB_OT_NAME_ID_FULL_NAME 1300+HB_OT_NAME_ID_VERSION_STRING 1301+HB_OT_NAME_ID_POSTSCRIPT_NAME 1302+HB_OT_NAME_ID_TRADEMARK 1303+HB_OT_NAME_ID_MANUFACTURER 1304+HB_OT_NAME_ID_DESIGNER 1305+HB_OT_NAME_ID_DESCRIPTION 1306+HB_OT_NAME_ID_VENDOR_URL 1307+HB_OT_NAME_ID_DESIGNER_URL 1308+HB_OT_NAME_ID_LICENSE 1309+HB_OT_NAME_ID_LICENSE_URL 1310+HB_OT_NAME_ID_TYPOGRAPHIC_FAMILY 1311+HB_OT_NAME_ID_TYPOGRAPHIC_SUBFAMILY 1312+HB_OT_NAME_ID_MAC_FULL_NAME 1313+HB_OT_NAME_ID_SAMPLE_TEXT 1314+HB_OT_NAME_ID_CID_FINDFONT_NAME 1315+HB_OT_NAME_ID_WWS_FAMILY 1316+HB_OT_NAME_ID_WWS_SUBFAMILY 1317+HB_OT_NAME_ID_LIGHT_BACKGROUND 1318+HB_OT_NAME_ID_DARK_BACKGROUND 1319+HB_OT_NAME_ID_VARIATIONS_PS_PREFIX 1320+hb_ot_name_entry_t 1321+hb_ot_name_list_names() 1322+hb_ot_name_get_utf8() 1323+hb_ot_name_get_utf16() 1324+hb_ot_name_get_utf32() 1325 1326 1327Overview of changes leading to 2.0.2 1328Saturday, October 20, 2018 1329==================================== 1330- Fix two minor memory access issues in AAT tables. 1331 1332 1333Overview of changes leading to 2.0.1 1334Friday, October 19, 2018 1335==================================== 1336- Fix hb-version.h reported release version that went wrong (1.8.0) 1337 with previous release. 1338- Fix extrapolation in 'trak' table. 1339- Fix hb-font infinite-recursion issue with some font funcs and 1340 subclassed fonts. 1341- Implement variation-kerning format in kerx table, although without 1342 variation. 1343- Fix return value of hb_map_is_empty(). 1344 1345 1346Overview of changes leading to 2.0.0 1347Thursday, October 18, 2018 1348==================================== 1349- Added AAT shaping support (morx/kerx/trak). 1350 Automatically used if GSUB/GPOS are not available respectively. 1351 Set HB_OPTIONS=aat env var to have morx/kerx preferred over 1352 GSUB/GPOS. 1353- Apply TrueType kern table internally, instead of relying on 1354 hb_font_t callbacks. 1355- Khmer shaper significantly rewritten to better match Uniscribe. 1356- Indic3 tags ('dev3', etc) are passed to USE shaper. 1357- .dfont Mac font containers implemented. 1358- Script- and language-mapping revamped to better use BCP 47. 1359- Misc USE and Indic fixes. 1360- Misc everything fixes. 1361- Too many things to list. Biggest release since 0.9.1, with 1362 over 500 commits in just over 5 weeks! Didn't intend it to 1363 be a big release. Just happened to become. 1364- hb-ft now locks underlying FT_Face during use. 1365 1366API changes: 1367 1368- Newly-created hb_font_t's now have our internal "hb-ot-font" 1369 callbacks set on them, so they should work out of the box 1370 without any callbacks set. If callbacks are set, everything 1371 is back to what it was before, the fallback callbacks are 1372 null. If you to get the internal implementation modified, 1373 sub_font it. 1374 1375- New hb_font_funcs_set_nominal_glyphs_func() allows speeding 1376 up character to glyph mapping. 1377 1378New API: 1379+HB_FEATURE_GLOBAL_START 1380+HB_FEATURE_GLOBAL_END 1381+hb_buffer_set_invisible_glyph() 1382+hb_buffer_get_invisible_glyph() 1383+hb_font_funcs_set_nominal_glyphs_func() 1384+hb_ot_layout_table_select_script() 1385+hb_ot_layout_script_select_language() 1386+hb_ot_layout_feature_get_name_ids() 1387+hb_ot_layout_feature_get_characters() 1388+hb_name_id_t 1389+HB_NAME_ID_INVALID 1390+HB_OT_MAX_TAGS_PER_SCRIPT 1391+hb_ot_tags_from_script_and_language() 1392+hb_ot_tags_to_script_and_language() 1393 1394Deprecated API: 1395-hb_font_funcs_set_glyph_func() 1396-hb_unicode_eastasian_width_func_t 1397-hb_unicode_funcs_set_eastasian_width_func() 1398-hb_unicode_eastasian_width() 1399-hb_unicode_decompose_compatibility_func_t 1400-HB_UNICODE_MAX_DECOMPOSITION_LEN 1401-hb_unicode_funcs_set_decompose_compatibility_func() 1402-hb_unicode_decompose_compatibility() 1403-hb_font_funcs_set_glyph_h_kerning_func() 1404-hb_font_funcs_set_glyph_v_kerning_func() 1405-hb_font_get_glyph_h_kerning() 1406-hb_font_get_glyph_v_kerning() 1407-hb_font_get_glyph_kerning_for_direction() 1408-hb_ot_layout_table_choose_script() 1409-hb_ot_layout_script_find_language() 1410-hb_ot_tags_from_script() 1411-hb_ot_tag_from_language() 1412 1413 1414Overview of changes leading to 1.9.0 1415Monday, September 10, 2018 1416==================================== 1417- Added 'cmap' API to hb_face_t. 1418- Face-builder API. 1419- hb-ot-font re-creation should be much leaner now, as the 1420 font tables it uses are cached on hb_face_t now. 1421- Internal source header file name changes: 1422 hb-*-private.hh is renamed to hb-*.hh. 1423 1424New API: 1425+HB_UNICODE_MAX 1426+hb_face_collect_unicodes() 1427+hb_face_collect_variation_selectors() 1428+hb_face_collect_variation_unicodes() 1429+hb_face_builder_create() 1430+hb_face_builder_add_table() 1431 1432 1433Overview of changes leading to 1.8.8 1434Tuesday, August 14, 2018 1435==================================== 1436- Fix hb-icu crash on architectures where compare_exchange_weak() can 1437 fail falsely. This bug was introduced in 1.8.4. 1438 https://bugs.chromium.org/p/chromium/issues/detail?id=873568 1439- More internal refactoring of atomic operations and singletons. 1440- API changes: 1441 The following functions do NOT reference their return value before 1442 returning: 1443 * hb_unicode_funcs_get_default() 1444 * hb_glib_get_unicode_funcs() 1445 * hb_icu_get_unicode_funcs() 1446 This is consistent with their naming ("get", instead of "reference") 1447 as well as how they are used in the wild (ie. no one calls destroy() 1448 on their return value.) 1449 1450 1451Overview of changes leading to 1.8.7 1452Wednesday, August 8, 2018 1453==================================== 1454- Fix assertion failure with GDEF-blacklisted fonts. 1455 1456 1457Overview of changes leading to 1.8.6 1458Tuesday, August 7, 2018 1459==================================== 1460- Internal code shuffling. 1461- New API to speed up getting advance widths for implementations 1462 that have heavy overhead in get_h_advance callback: 1463+hb_font_funcs_set_glyph_h_advances_func 1464+hb_font_funcs_set_glyph_v_advances_func 1465+hb_font_get_glyph_advances_for_direction 1466+hb_font_get_glyph_h_advances 1467+hb_font_get_glyph_h_advances_func_t 1468+hb_font_get_glyph_v_advances 1469+hb_font_get_glyph_v_advances_func_t 1470 1471 1472Overview of changes leading to 1.8.5 1473Wednesday, August 1, 2018 1474==================================== 1475- Major Khmer shaper improvements to better match Microsoft. 1476- Indic bug fixes. 1477- Internal improvements to atomic operations. 1478 1479 1480Overview of changes leading to 1.8.4 1481Tuesday, July 17, 2018 1482==================================== 1483- Fix build on non-C++11. 1484- Use C++-style GCC atomics and C++11 atomics. 1485 1486 1487Overview of changes leading to 1.8.3 1488Wednesday, July 11, 2018 1489==================================== 1490- A couple of Indic / USE bug fixes. 1491- Disable vectorization, as it was causing unaligned access bus error on 1492 certain 32bit architectures. 1493 1494 1495Overview of changes leading to 1.8.2 1496Tuesday, July 3, 2018 1497==================================== 1498- Fix infinite loop in Khmer shaper. 1499- Improve hb_blob_create_from_file() for streams. 1500 1501 1502Overview of changes leading to 1.8.1 1503Tuesday, June 12, 2018 1504==================================== 1505- Fix hb-version.h file generation; last two releases went out with wrong ones. 1506- Add correctness bug in hb_set_t operations, introduced in 1.7.7. 1507- Remove HB_SUBSET_BUILTIN build option. Not necessary. 1508 1509 1510Overview of changes leading to 1.8.0 1511Tuesday, June 5, 2018 1512==================================== 1513- Update to Unicode 11.0.0. 1514 1515 1516Overview of changes leading to 1.7.7 1517Tuesday, June 5, 2018 1518==================================== 1519- Lots of internal changes, but not yet exposed externally. 1520- All HarfBuzz objects are significantly smaller in size now. 1521- Sinhala: Position repha on top of post-consonant, not base. 1522 This better matches Windows 10 behavior, which was changed 1523 from previous Windows versions. 1524- New build options: 1525 o New cpp macro HB_NO_ATEXIT 1526 o New cpp macro HB_SUBSET_BUILTIN 1527- Significant libharfbuzz-subset changes. API subject to change. 1528- New API in libharfbuzz: 1529 1530+hb_blob_create_from_file() 1531+hb_face_count() 1532 1533A hashmap implementation: 1534+hb-map.h 1535+HB_MAP_VALUE_INVALID 1536+hb_map_t 1537+hb_map_create() 1538+hb_map_get_empty() 1539+hb_map_reference() 1540+hb_map_destroy() 1541+hb_map_set_user_data() 1542+hb_map_get_user_data() 1543+hb_map_allocation_successful() 1544+hb_map_clear() 1545+hb_map_is_empty() 1546+hb_map_get_population() 1547+hb_map_set() 1548+hb_map_get() 1549+hb_map_del() 1550+hb_map_has() 1551 1552 1553Overview of changes leading to 1.7.6 1554Wednesday, March 7, 2018 1555==================================== 1556 1557- Fix to hb_set_t binary operations. Ouch. 1558- New experimental harfbuzz-subset library. All of hb-subset.h 1559 is experimental right now and API WILL change. 1560 1561- New API: 1562hb_blob_copy_writable_or_fail() 1563HB_OT_TAG_BASE 1564hb_set_previous() 1565hb_set_previous_range() 1566 1567 1568Overview of changes leading to 1.7.5 1569Tuesday, January 30, 2018 1570==================================== 1571 1572- Separate Khmer shaper from Indic. 1573- First stab at AAT morx. Not hooked up. 1574- Misc bug fixes. 1575 1576 1577Overview of changes leading to 1.7.4 1578Wednesday, December 20, 2017 1579==================================== 1580 1581- Fix collect_glyphs() regression caused by hb_set_t changes. 1582 1583 1584Overview of changes leading to 1.7.3 1585Monday, December 18, 2017 1586==================================== 1587 1588- hb_set_t performance tuning and optimizations. 1589- Speed up collect_glyphs() and reject garbage data. 1590- In hb_coretext_font_create() set font point-size (ptem). 1591- Misc fixes. 1592 1593 1594Overview of changes leading to 1.7.2 1595Monday, December 4, 2017 1596==================================== 1597 1598- Optimize hb_set_add_range(). 1599- Misc fixes. 1600- New API: 1601hb_coretext_font_create() 1602 1603 1604Overview of changes leading to 1.7.1 1605Tuesday, November 14, 2017 1606==================================== 1607 1608- Fix atexit object destruction regression. 1609- Fix minor integer-overflow. 1610 1611 1612Overview of changes leading to 1.7.0 1613Monday, November 13, 2017 1614==================================== 1615 1616- Minor Indic fixes. 1617- Implement kerning and glyph names in hb-ot-font. 1618- Various DSO optimization re .data and .bss sizes. 1619- Make C++11 optional; build fixes. 1620- Mark all other backends "unsafe-to-break". 1621- Graphite fix. 1622 1623 1624Overview of changes leading to 1.6.3 1625Thursday, October 26th, 2017 1626==================================== 1627 1628- Fix hb_set_t some more. Should be solid now. 1629- Implement get_glyph_name() for hb-ot-font. 1630- Misc fixes. 1631 1632 1633Overview of changes leading to 1.6.2 1634Monday, October 23nd, 2017 1635==================================== 1636 1637- Yesterday's release had a bad crasher; don't use it. That's what 1638 happens when one works on Sunday... 1639 https://github.com/harfbuzz/harfbuzz/issues/578 1640- Build fixes for FreeBSD and Chrome Android. 1641 1642 1643Overview of changes leading to 1.6.1 1644Sunday, October 22nd, 2017 1645==================================== 1646 1647- Don't skip over COMBINING GRAPHEME JOINER when ligating, etc. 1648 To be refined: https://github.com/harfbuzz/harfbuzz/issues/554 1649- Faster hb_set_t implementation. 1650- Don't use deprecated ICU API. 1651- Fix undefined-behavior in Myanmar shaper, introduced in 1.6.0 1652- Deprecated API: 1653 hb_set_invert() 1654 1655 1656Overview of changes leading to 1.6.0 1657Friday, October the 13th, 2017 1658==================================== 1659 1660- Update to Unicode 10. 1661 1662- Various Indic and Universal Shaping Engine fixes as a result of 1663 HarfBuzz Hackfest with Jonathan Kew at Web Engines Hackfest at 1664 the Igalia offices in A Coruña, Spain. Thanks Igalia for having 1665 us! 1666 1667- Implement Unicode Arabic Mark Ordering Algorithm UTR#53. 1668 1669- Implement optical sizing / tracking in CoreText backend, using 1670 new API hb_font_set_ptem(). 1671 1672- Allow notifying hb_font_t that underlying FT_Face changed sizing, 1673 using new API hb_ft_font_changed(). 1674 1675- More Graphite backend RTL fixes. 1676 1677- Fix caching of variable font shaping plans. 1678 1679- hb-view / hb-shape now accept following new arguments: 1680 1681 o --unicodes: takes a list of hex numbers that represent Unicode 1682 codepoints. 1683 1684New API: 1685+hb_face_get_table_tags() 1686+hb_font_set_ptem() 1687+hb_font_get_ptem() 1688+hb_ft_font_changed() 1689 1690 1691Overview of changes leading to 1.5.1 1692Tuesday, September 5, 2017 1693==================================== 1694 1695- Fix "unsafe-to-break" in fallback shaping and other corner cases. 1696 All our tests pass with --verify now, meaning unsafe-to-break API 1697 works as expected. 1698- Add --unicodes to hb-view / hb-shape. 1699- [indic] Treat Consonant_With_Stacker as consonant. This will need 1700 further tweaking. 1701- hb_buffer_diff() tweaks. 1702 1703 1704Overview of changes leading to 1.5.0 1705Wednesday, August 23, 2017 1706==================================== 1707 1708- Misc new API, for appending a buffer to another, and for comparing 1709 contents of two buffers for types of differences. 1710 1711- New "unsafe-to-break" API. Can be used to speed up reshaping 1712 in line-breaking situations. Essentially, after shaping, it returns 1713 positions in the input string (some of the cluster boundaries) that 1714 are "safe to break" in that if the text is segmented at that position 1715 and two sides reshaped and concatenated, the shaping result is 1716 exactly the same as shaping the text in one piece. 1717 1718 hb-view and hb-shape and hb-shape now take --verify, which verifies 1719 the above property. 1720 1721 Some corner cases of the implementation are still not quite working. 1722 Those will be fixed in subsequent releases. 1723 1724- New API: 1725 1726hb_buffer_append() 1727 1728hb_glyph_flags_t 1729HB_GLYPH_FLAG_UNSAFE_TO_BREAK 1730HB_GLYPH_FLAG_DEFINED 1731hb_glyph_info_get_glyph_flags() 1732 1733HB_BUFFER_SERIALIZE_FLAG_GLYPH_FLAGS 1734 1735hb_buffer_diff_flags_t 1736HB_BUFFER_DIFF_FLAG_EQUAL 1737HB_BUFFER_DIFF_FLAG_CONTENT_TYPE_MISMATCH 1738HB_BUFFER_DIFF_FLAG_LENGTH_MISMATCH 1739HB_BUFFER_DIFF_FLAG_NOTDEF_PRESENT 1740HB_BUFFER_DIFF_FLAG_DOTTED_CIRCLE_PRESENT 1741HB_BUFFER_DIFF_FLAG_CODEPOINT_MISMATCH 1742HB_BUFFER_DIFF_FLAG_CLUSTER_MISMATCH 1743HB_BUFFER_DIFF_FLAG_GLYPH_FLAGS_MISMATCH 1744HB_BUFFER_DIFF_FLAG_POSITION_MISMATCH 1745hb_buffer_diff 1746 1747 1748Overview of changes leading to 1.4.8 1749Tuesday, August 8, 2017 1750==================================== 1751 1752- Major fix to avar table handling. 1753- Rename hb-shape --show-message to --trace. 1754- Build fixes. 1755 1756 1757Overview of changes leading to 1.4.7 1758Tuesday, July 18, 2017 1759==================================== 1760 1761- Multiple Indic, Tibetan, and Cham fixes. 1762- CoreText: Allow disabling kerning. 1763- Adjust Arabic feature order again. 1764- Misc build fixes. 1765 1766 1767Overview of changes leading to 1.4.6 1768Sunday, April 23, 2017 1769==================================== 1770 1771- Graphite2: Fix RTL positioning issue. 1772- Backlist GDEF of more versions of Padauk and Tahoma. 1773- New, experimental, cmake alternative build system. 1774 1775 1776Overview of changes leading to 1.4.5 1777Friday, March 10, 2017 1778==================================== 1779 1780- Revert "Fix Context lookup application when moving back after a glyph..." 1781 This introduced memory access problems. To be fixed properly soon. 1782 1783 1784Overview of changes leading to 1.4.4 1785Sunday, March 5, 2017 1786==================================== 1787 1788- Fix Context lookup application when moving back after a glyph deletion. 1789- Fix buffer-overrun in Bengali. 1790 1791 1792Overview of changes leading to 1.4.3 1793Saturday, February 25, 2017 1794==================================== 1795 1796- Route Adlam script to Arabic shaper. 1797- Misc fixes. 1798- New API: 1799 hb_font_set_face() 1800- Deprecate API: 1801 hb_graphite2_font_get_gr_font() 1802 1803 1804Overview of changes leading to 1.4.2 1805Monday, January 23, 2017 1806==================================== 1807 1808- Implement OpenType Font Variation tables avar/fvar/HVAR/VVAR. 1809- hb-shape and hb-view now accept --variations. 1810- New API: 1811 1812hb_variation_t 1813hb_variation_from_string() 1814hb_variation_to_string() 1815 1816hb_font_set_variations() 1817hb_font_set_var_coords_design() 1818hb_font_get_var_coords_normalized() 1819 1820hb-ot-var.h: 1821hb_ot_var_axis_t 1822hb_ot_var_has_data() 1823hb_ot_var_get_axis_count() 1824hb_ot_var_get_axes() 1825hb_ot_var_find_axis() 1826hb_ot_var_normalize_variations() 1827hb_ot_var_normalize_coords() 1828 1829- MVAR to be implemented later. Access to named instances to be 1830 implemented later as well. 1831 1832- Misc fixes. 1833 1834 1835Overview of changes leading to 1.4.1 1836Thursday, January 5, 2017 1837==================================== 1838 1839- Always build and use UCDN for Unicode data by default. 1840 Reduces dependence on version of Unicode data in glib, 1841 specially in the Windows bundles we are shipping, which 1842 have very old glib. 1843 1844 1845Overview of changes leading to 1.4.0 1846Thursday, January 5, 2017 1847==================================== 1848 1849- Merged "OpenType GX" branch which adds core of support for 1850 OpenType 1.8 Font Variations. To that extent, the relevant 1851 new API is: 1852 1853New API: 1854hb_font_set_var_coords_normalized() 1855 1856 with supporting API: 1857 1858New API: 1859HB_OT_LAYOUT_NO_VARIATIONS_INDEX 1860hb_ot_layout_table_find_feature_variations() 1861hb_ot_layout_feature_with_variations_get_lookups() 1862hb_shape_plan_create2() 1863hb_shape_plan_create_cached2() 1864 1865 Currently variations in GSUB/GPOS/GDEF are fully supported, 1866 and no other tables are supported. In particular, fvar/avar 1867 are NOT supported, hence the hb_font_set_var_coords_normalized() 1868 taking normalized coordinates. API to take design coordinates 1869 will be added in the future. 1870 1871 HVAR/VVAR/MVAR support will also be added to hb-ot-font in the 1872 future. 1873 1874- Fix regression in GDEF glyph class processing. 1875- Add decompositions for Chakma, Limbu, and Balinese in USE shaper. 1876- Misc fixes. 1877 1878 1879Overview of changes leading to 1.3.4 1880Monday, December 5, 2016 1881==================================== 1882 1883- Fix vertical glyph origin in hb-ot-font. 1884- Implement CBDT/CBLC color font glyph extents in hb-ot-font. 1885 1886 1887Overview of changes leading to 1.3.3 1888Wednesday, September 28, 2016 1889==================================== 1890 1891- Implement parsing of OpenType MATH table. 1892New API: 1893HB_OT_TAG_MATH 1894HB_OT_MATH_SCRIPT 1895hb_ot_math_constant_t 1896hb_ot_math_kern_t 1897hb_ot_math_glyph_variant_t 1898hb_ot_math_glyph_part_flags_t 1899hb_ot_math_glyph_part_t 1900hb_ot_math_has_data 1901hb_ot_math_get_constant 1902hb_ot_math_get_glyph_italics_correction 1903hb_ot_math_get_glyph_top_accent_attachment 1904hb_ot_math_get_glyph_kerning 1905hb_ot_math_is_glyph_extended_shape 1906hb_ot_math_get_glyph_variants 1907hb_ot_math_get_min_connector_overlap 1908hb_ot_math_get_glyph_assembly 1909 1910 1911Overview of changes leading to 1.3.2 1912Wednesday, September 27, 2016 1913==================================== 1914 1915- Fix build of hb-coretext on older OS X versions. 1916 1917 1918Overview of changes leading to 1.3.1 1919Wednesday, September 7, 2016 1920==================================== 1921 1922- Blacklist bad GDEF of more fonts (Padauk). 1923- More CoreText backend crash fixes with OS X 10.9.5. 1924- Misc fixes. 1925 1926 1927Overview of changes leading to 1.3.0 1928Thursday, July 21, 2016 1929==================================== 1930 1931- Update to Unicode 9.0.0 1932- Move Javanese from Indic shaper to Universal Shaping Engine. 1933- Allow MultipleSubst to delete a glyph (matching Windows engine). 1934- Update Universal Shaping Engine to latest draft from Microsoft. 1935- DirectWrite backend improvements. Note: this backend is for testing ONLY. 1936- CoreText backend improvements with unreachable fonts. 1937- Implement symbol fonts (cmap 3.0.0) in hb-ft and hb-ot-font. 1938- Blacklist bad GDEF of more fonts (Tahoma & others). 1939- Misc fixes. 1940 1941 1942Overview of changes leading to 1.2.7 1943Monday, May 2, 2016 1944==================================== 1945 1946- Blacklist another version of Times New Roman (Bold) Italic from Windows 7. 1947- Fix Mongolian Free Variation Selectors shaping with certain fonts. 1948- Fix Tibetan shorthand contractions shaping. 1949- Improved list of language tag mappings. 1950- Unbreak build on Windows CE. 1951- Make 'glyf' table loading lazy in hb-ot-font. 1952 1953 1954Overview of changes leading to 1.2.6 1955Friday, April 8, 2016 1956==================================== 1957 1958- Blacklist GDEF table of another set of Times New Roman (Bold) Italic. 1959- DirectWrite backend improvements. Note: DirectWrite backend is 1960 exclusively for our internal testing and should NOT be used in any 1961 production system whatsoever. 1962 1963 1964Overview of changes leading to 1.2.5 1965Monday, April 4, 2016 1966==================================== 1967 1968- Fix GDEF mark-filtering-set, which was broken in 1.2.3. 1969 1970 1971Overview of changes leading to 1.2.4 1972Thursday, March 17, 2016 1973==================================== 1974 1975- Synthesize GDEF glyph class for any glyph that does not have one in GDEF. 1976 I really hope we don't discover broken fonts that shape badly with this 1977 change. 1978- Misc build and other minor fixes. 1979- API changes: 1980 - Added HB_NDEBUG. It's fine for production systems to define this to 1981 disable high-overhead debugging checks. However, I also reduced the 1982 overhead of those checks, so it's a non-issue right now. You can 1983 forget it. Just not defining anything at all is fine. 1984 1985 1986Overview of changes leading to 1.2.3 1987Thursday, February 25, 2016 1988==================================== 1989 1990- Blacklist GDEF table of certain versions of Times New Roman (Bold) Italic, 1991 due to bug in glyph class of ASCII double-quote character. This should 1992 address "regression" introduced in 1.2.0 when we switched mark zeroing 1993 in most shapers from BY_UNICODE_LATE to BY_GDEF_LATE. 1994 This fourth release in a week should finally stabilize things... 1995 1996- hb-ot-font's get_glyph() implementation saw some optimizations. Though, 1997 might be really hard to measure in real-world situations. 1998 1999- Also, two rather small API changes: 2000 2001We now disable some time-consuming internal bookkeeping if built with NDEBUG 2002defined. This is a first time that we use NDEBUG to disable debug code. If 2003there exist production systems that do NOT want to enable NDEBUG, please let 2004me know and I'll add HB_NDEBUG. 2005 2006Added get_nominal_glyph() and get_variation_glyph() instead of get_glyph() 2007 2008New API: 2009- hb_font_get_nominal_glyph_func_t 2010- hb_font_get_variation_glyph_func_t 2011- hb_font_funcs_set_nominal_glyph_func() 2012- hb_font_funcs_set_variation_glyph_func() 2013- hb_font_get_nominal_glyph() 2014- hb_font_get_variation_glyph() 2015 2016Deprecated API: 2017- hb_font_get_glyph_func_t 2018- hb_font_funcs_set_glyph_func() 2019 2020Clients that implement their own font-funcs are encouraged to replace 2021their get_glyph() implementation with a get_nominal_glyph() and 2022get_variation_glyph() pair. The variation version can assume that 2023variation_selector argument is not zero. Old (deprecated) functions 2024will continue working indefinitely using internal gymnastics; it is 2025just more efficient to use the new functions. 2026 2027 2028Overview of changes leading to 1.2.2 2029Wednesday, February 24, 2016 2030==================================== 2031 2032- Fix regression with mark positioning with fonts that have 2033 non-zero mark advances. This was introduced in 1.2.0 while 2034 trying to make mark and cursive attachments to work together. 2035 I have partially reverted that, so this version is much more 2036 like what we had before. All clients who updated to 1.2.0 2037 should update to this version. 2038 2039 2040Overview of changes leading to 1.2.1 2041Tuesday, February 23, 2016 2042==================================== 2043 2044- CoreText: Fix bug with wrong scale if font scale was changed later. 2045 https://github.com/libass/libass/issues/212 2046- CoreText: Drastically speed up font initialization. 2047- CoreText: Fix tiny leak. 2048- Group ZWJ/ZWNJ with previous syllable under cluster-level=0. 2049 https://github.com/harfbuzz/harfbuzz/issues/217 2050- Add test/shaping/README.md about how to add tests to the suite. 2051 2052 2053Overview of changes leading to 1.2.0 2054Friday, February 19, 2016 2055==================================== 2056 2057- Fix various issues (hangs mostly) in case of memory allocation failure. 2058- Change mark zeroing types of most shapers from BY_UNICODE_LATE to 2059 BY_GDEF_LATE. This seems to be what Uniscribe does. 2060- Change mark zeroing of USE shaper from NONE to BY_GDEF_EARLY. That's 2061 what Windows does. 2062- Allow GPOS cursive connection on marks, and fix the interaction with 2063 mark attachment. This work resulted in some changes to how mark 2064 attachments work. See: 2065 https://github.com/harfbuzz/harfbuzz/issues/211 2066 https://github.com/harfbuzz/harfbuzz/commit/86c68c7a2c971efe8e35b1f1bd99401dc8b688d2 2067- Graphite2 shaper: improved negative advance handling (eg. Nastaliq). 2068- Add nmake-based build system for Windows. 2069- Minor speedup. 2070- Misc. improvements. 2071 2072 2073Overview of changes leading to 1.1.3 2074Monday, January 11, 2016 2075==================================== 2076 2077- Ported Indic shaper to Unicode 8.0 data. 2078- Universal Shaping Engine fixes. 2079- Speed up CoreText shaper when font fallback happens in CoreText. 2080- Documentation improvements, thanks to Khaled Hosny. 2081- Very rough directwrite shaper for testing, thanks to Ebrahim Byagowi. 2082- Misc bug fixes. 2083- New API: 2084 2085 * Font extents: 2086 hb_font_extents_t 2087 hb_font_get_font_extents_func_t 2088 hb_font_get_font_h_extents_func_t 2089 hb_font_get_font_v_extents_func_t 2090 hb_font_funcs_set_font_h_extents_func 2091 hb_font_funcs_set_font_v_extents_func 2092 hb_font_get_h_extents 2093 hb_font_get_v_extents 2094 hb_font_get_extents_for_direction 2095 2096 * Buffer message (aka debug): 2097 hb_buffer_message_func_t 2098 hb_buffer_set_message_func() 2099 Actual message protocol to be fleshed out later. 2100 2101 2102Overview of changes leading to 1.1.2 2103Wednesday, November 26, 2015 2104==================================== 2105 2106- Fix badly-broken fallback shaper that affected terminology. 2107 https://github.com/harfbuzz/harfbuzz/issues/187 2108- Fix y_scaling in Graphite shaper. 2109- API changes: 2110 * An unset glyph_h_origin() function in font-funcs now (sensibly) 2111 implies horizontal origin at 0,0. Ie, the nil callback returns 2112 true instead of false. As such, implementations that have a 2113 glyph_h_origin() that simply returns true, can remove that function 2114 with HarfBuzz >= 1.1.2. This results in a tiny speedup. 2115 2116 2117Overview of changes leading to 1.1.1 2118Wednesday, November 24, 2015 2119==================================== 2120 2121- Build fixes, specially for hb-coretext. 2122 2123 2124Overview of changes leading to 1.1.0 2125Wednesday, November 18, 2015 2126==================================== 2127 2128- Implement 'stch' stretch feature for Syriac Abbreviation Mark. 2129 https://github.com/harfbuzz/harfbuzz/issues/141 2130- Disable use of decompose_compatibility() callback. 2131- Implement "shaping" of various Unicode space characters, even 2132 if the font does not support them. 2133 https://github.com/harfbuzz/harfbuzz/issues/153 2134- If font does not support U+2011 NO-BREAK HYPHEN, fallback to 2135 U+2010 HYPHEN. 2136- Changes resulting from libFuzzer continuous fuzzing: 2137 * Reject font tables that need more than 8 edits, 2138 * Bound buffer growth during shaping to 32x, 2139 * Fix assertions and other issues at OOM / buffer max-growth. 2140- Misc fixes and optimizations. 2141- API changes: 2142 * All fonts created with hb_font_create() now inherit from 2143 (ie. have parent) hb_font_get_empty(). 2144 2145 2146Overview of changes leading to 1.0.6 2147Thursday, October 15, 2015 2148==================================== 2149 2150- Reduce max nesting level in OT lookups from 8 to 6. 2151 Should not affect any real font as far as I know. 2152- Fix memory access issue in ot-font. 2153- Revert default load-flags of fonts created using hb_ft_font_create() 2154 back to FT_LOAD_DEFAULT|FT_LOAD_NO_HINTING. This was changed in 2155 last release (1.0.5), but caused major issues, so revert. 2156 https://github.com/harfbuzz/harfbuzz/issues/143 2157 2158 2159Overview of changes leading to 1.0.5 2160Tuesday, October 13, 2015 2161==================================== 2162 2163- Fix multiple memory access bugs discovered using libFuzzer. 2164 https://github.com/harfbuzz/harfbuzz/issues/139 2165 Everyone should upgrade to this version as soon as possible. 2166 We now have continuous fuzzing set up, to avoid issues like 2167 these creeping in again. 2168- Misc fixes. 2169 2170- New API: 2171 * hb_font_set_parent(). 2172 * hb_ft_font_[sg]et_load_flags() 2173 The default flags for fonts created using hb_ft_font_create() 2174 has changed to default to FT_LOAD_DEFAULT now. Previously it 2175 was defaulting to FT_LOAD_DFEAULT|FT_LOAD_NO_HINTING. 2176 2177- API changes: 2178 * Fonts now default to units-per-EM as their scale, instead of 0. 2179 * hb_font_create_sub_font() does NOT make parent font immutable 2180 anymore. hb_font_make_immutable() does. 2181 2182 2183Overview of changes leading to 1.0.4 2184Wednesday, September 30, 2015 2185==================================== 2186 2187- Fix minor out-of-bounds read error. 2188 2189 2190Overview of changes leading to 1.0.3 2191Tuesday, September 1, 2015 2192==================================== 2193 2194- Start of user documentation, from Simon Cozens! 2195- Implement glyph_extents() for TrueType fonts in hb-ot-font. 2196- Improve GPOS cursive attachments with conflicting lookups. 2197- More fixes for cluster-level = 1. 2198- Uniscribe positioning fix. 2199 2200 2201Overview of changes leading to 1.0.2 2202Wednesday, August 19, 2015 2203==================================== 2204 2205- Fix shaping with cluster-level > 0. 2206- Fix Uniscribe backend font-size scaling. 2207- Declare dependencies in harfbuzz.pc. 2208 FreeType is not declared though, to avoid bugs in pkg-config 2209 0.26 with recursive dependencies. 2210- Slightly improved debug infrastructure. More to come later. 2211- Misc build fixes. 2212 2213 2214Overview of changes leading to 1.0.1 2215Monday, July 27, 2015 2216==================================== 2217 2218- Fix out-of-bounds access in USE shaper. 2219 2220 2221Overview of changes leading to 1.0.0 2222Sunday, July 26, 2015 2223==================================== 2224 2225- Implement Universal Shaping Engine: 2226 https://www.microsoft.com/typography/OpenTypeDev/USE/intro.htm 2227 http://blogs.windows.com/bloggingwindows/2015/02/23/windows-shapes-the-worlds-languages/ 2228- Bump version to 1.0.0. The soname was NOT bumped. 2229 2230 2231Overview of changes leading to 0.9.42 2232Thursday, July 26, 2015 2233===================================== 2234 2235- New API to allow for retrieving finer-grained cluster 2236 mappings if the client desires to handle them. Default 2237 behavior is unchanged. 2238- Fix cluster merging when removing default-ignorables. 2239- Update to Unicode 8.0 2240- hb-graphite2 fixes. 2241- Misc fixes. 2242- Removed HB_NO_MERGE_CLUSTERS hack. 2243- New API: 2244 hb_buffer_cluster_level_t enum 2245 hb_buffer_get_cluster_level() 2246 hb_buffer_set_cluster_level() 2247 hb-shape / hb-view --cluster-level 2248 2249 2250Overview of changes leading to 0.9.41 2251Thursday, June 18, 2015 2252===================================== 2253 2254- Fix hb-coretext with trailing whitespace in right-to-left. 2255- New API: hb_buffer_reverse_range(). 2256- Allow implementing atomic ops in config.h. 2257- Fix hb_language_t in language bindings. 2258- Misc fixes. 2259 2260 2261Overview of changes leading to 0.9.40 2262Friday, March 20, 2015 2263===================================== 2264 2265- Another hb-coretext crasher fix. Ouch! 2266- Happy Norouz! 2267 2268 2269Overview of changes leading to 0.9.39 2270Wednesday, March 4, 2015 2271===================================== 2272 2273- Critical hb-coretext fixes. 2274- Optimizations and refactoring; no functional change 2275 expected. 2276- Misc build fixes. 2277 2278 2279Overview of changes leading to 0.9.38 2280Friday, January 23, 2015 2281===================================== 2282 2283- Fix minor out-of-bounds access in Indic shaper. 2284- Change New Tai Lue shaping engine from South-East Asian to default, 2285 reflecting change in Unicode encoding model. 2286- Add hb-shape --font-size. Can take up to two numbers for separate 2287 x / y size. 2288- Fix CoreText and FreeType scale issues with negative scales. 2289- Reject blobs larger than 2GB. This might break some icu-le-hb clients 2290 that need security fixes. See: 2291 http://www.icu-project.org/trac/ticket/11450 2292- Avoid accessing font tables during face destruction, in casce rogue 2293 clients released face data already. 2294- Fix up gobject-introspection a bit. Python bindings kinda working. 2295 See README.python. 2296- Misc fixes. 2297- API additions: 2298 hb_ft_face_create_referenced() 2299 hb_ft_font_create_referenced() 2300 2301 2302Overview of changes leading to 0.9.37 2303Wednesday, December 17, 2014 2304===================================== 2305 2306- Fix out-of-bounds access in Context lookup format 3. 2307- Indic: Allow ZWJ/ZWNJ before syllable modifiers. 2308 2309 2310Overview of changes leading to 0.9.36 2311Thursday, November 20, 2014 2312===================================== 2313 2314- First time that three months went by without a release since 2315 0.9.2 was released on August 10, 2012! 2316- Fix performance bug in hb_ot_collect_glyphs(): 2317 https://bugzilla.mozilla.org/show_bug.cgi?id=1090869 2318- Add basic vertical-text support to hb-ot-font. 2319- Misc build fixes. 2320 2321 2322Overview of changes leading to 0.9.35 2323Saturday, August 13, 2014 2324===================================== 2325 2326- Fix major shape-plan caching bug when more than one shaper were 2327 provided to hb_shape_full() (as exercised by XeTeX). 2328 http://www.mail-archive.com/debian-bugs-dist@lists.debian.org/msg1246370.html 2329- Fix Arabic fallback shaping regression. This was broken in 0.9.32. 2330- Major hb-coretext fixes. That backend is complete now, including 2331 respecing buffer direction and language, down to vertical writing. 2332- Build fixes for Windows CE. Should build fine now. 2333- Misc fixes: 2334 Use atexit() only if it's safe to call from shared library 2335 https://bugs.freedesktop.org/show_bug.cgi?id=82246 2336 Mandaic had errors in its Unicode Joining_Type 2337 https://bugs.freedesktop.org/show_bug.cgi?id=82306 2338- API changes: 2339 2340 * hb_buffer_clear_contents() does not reset buffer flags now. 2341 2342 After 763e5466c0a03a7c27020e1e2598e488612529a7, one doesn't 2343 need to set flags for different pieces of text. The flags now 2344 are something the client sets up once, depending on how it 2345 actually uses the buffer. As such, don't clear it in 2346 clear_contents(). 2347 2348 I don't expect any changes to be needed to any existing client. 2349 2350 2351Overview of changes leading to 0.9.34 2352Saturday, August 2, 2014 2353===================================== 2354 2355- hb_feature_from_string() now accepts CSS font-feature-settings format. 2356- As a result, hb-shape / hb-view --features also accept CSS-style strings. 2357 Eg, "'liga' off" is accepted now. 2358- Add old-spec Myanmar shaper: 2359 https://bugs.freedesktop.org/show_bug.cgi?id=81775 2360- Don't apply 'calt' in Hangul shaper. 2361- Fix mark advance zeroing for Hebrew shaper: 2362 https://bugs.freedesktop.org/show_bug.cgi?id=76767 2363- Implement Windows-1256 custom Arabic shaping. Only built on Windows, 2364 and requires help from get_glyph(). Used by Firefox. 2365 https://bugzilla.mozilla.org/show_bug.cgi?id=1045139 2366- Disable 'liga' in vertical text. 2367- Build fixes. 2368- API changes: 2369 2370 * Make HB_BUFFER_FLAG_BOT/EOT easier to use. 2371 2372 Previously, we expected users to provide BOT/EOT flags when the 2373 text *segment* was at paragraph boundaries. This meant that for 2374 clients that provide full paragraph to HarfBuzz (eg. Pango), they 2375 had code like this: 2376 2377 hb_buffer_set_flags (hb_buffer, 2378 (item_offset == 0 ? HB_BUFFER_FLAG_BOT : 0) | 2379 (item_offset + item_length == paragraph_length ? 2380 HB_BUFFER_FLAG_EOT : 0)); 2381 2382 hb_buffer_add_utf8 (hb_buffer, 2383 paragraph_text, paragraph_length, 2384 item_offset, item_length); 2385 2386 After this change such clients can simply say: 2387 2388 hb_buffer_set_flags (hb_buffer, 2389 HB_BUFFER_FLAG_BOT | HB_BUFFER_FLAG_EOT); 2390 2391 hb_buffer_add_utf8 (hb_buffer, 2392 paragraph_text, paragraph_length, 2393 item_offset, item_length); 2394 2395 Ie, HarfBuzz itself checks whether the segment is at the beginning/end 2396 of the paragraph. Clients that only pass item-at-a-time to HarfBuzz 2397 continue not setting any flags whatsoever. 2398 2399 Another way to put it is: if there's pre-context text in the buffer, 2400 HarfBuzz ignores the BOT flag. If there's post-context, it ignores 2401 EOT flag. 2402 2403 2404Overview of changes leading to 0.9.33 2405Tuesday, July 22, 2014 2406===================================== 2407 2408- Turn off ARabic 'cswh' feature that was accidentally turned on. 2409- Add HB_TAG_MAX_SIGNED. 2410- Make hb_face_make_immutable() really make face immutable! 2411- Windows build fixes. 2412 2413 2414Overview of changes leading to 0.9.32 2415Thursday, July 17, 2014 2416===================================== 2417 2418- Apply Arabic shaping features in spec order exactly. 2419- Another fix for Mongolian free variation selectors. 2420- For non-Arabic scripts in Arabic shaper apply 'rlig' and 'calt' 2421 together. 2422- Minor adjustment to U+FFFD logic. 2423- Fix hb-coretext build. 2424 2425 2426Overview of changes leading to 0.9.31 2427Wednesday, July 16, 2014 2428===================================== 2429 2430- Only accept valid UTF-8/16/32; we missed many cases before. 2431- Better shaping of invalid UTF-8/16/32. Falls back to 2432 U+FFFD REPLACEMENT CHARACTER now. 2433- With all changes in this release, the buffer will contain fully 2434 valid Unicode after hb_buffer_add_utf8/16/32 no matter how 2435 broken the input is. This can be overridden though. See below. 2436- Fix Mongolian Variation Selectors for fonts without GDEF. 2437- Fix minor invalid buffer access. 2438- Accept zh-Hant and zh-Hans language tags. hb_ot_tag_to_language() 2439 now uses these instead of private tags. 2440- Build fixes. 2441- New API: 2442 * hb_buffer_add_codepoints(). This does what hb_buffer_add_utf32() 2443 used to do, ie. no validity check on the input at all. add_utf32 2444 now replaces invalid Unicode codepoints with the replacement 2445 character (see below). 2446 * hb_buffer_set_replacement_codepoint() 2447 * hb_buffer_get_replacement_codepoint() 2448 Previously, in hb_buffer_add_utf8 and hb_buffer_add_utf16, when 2449 we detected broken input, we replaced that with (hb_codepoint_t)-1. 2450 This has changed to use U+FFFD now, but can be changed using these 2451 new API. 2452 2453 2454Overview of changes leading to 0.9.30 2455Wednesday, July 9, 2014 2456===================================== 2457 2458- Update to Unicode 7.0.0: 2459 * New scripts Manichaean and Psalter Pahlavi are shaped using 2460 Arabic shaper. 2461 * All the other new scripts to through the generic shaper for 2462 now. 2463- Minor Indic improvements. 2464- Fix graphite2 backend cluster mapping [crasher!] 2465- API changes: 2466 * New HB_SCRIPT_* values for Unicode 7.0 scripts. 2467 * New function hb_ot_layout_language_get_required_feature(). 2468- Build fixes. 2469 2470 2471Overview of changes leading to 0.9.29 2472Thursday, May 29, 2014 2473===================================== 2474 2475- Implement cmap in hb-ot-font.h. No variation-selectors yet. 2476- Myanmar: Allow MedialYa+Asat. 2477- Various Indic fixes: 2478 * Support most characters in Extended Devanagary and Vedic 2479 Unicode blocks. 2480 * Allow digits and a some punctuation as consonant placeholders. 2481- Build fixes. 2482 2483 2484Overview of changes leading to 0.9.28 2485Monday, April 28, 2014 2486===================================== 2487 2488- Unbreak old-spec Indic shaping. (bug 76705) 2489- Fix shaping of U+17DD and U+0FC6. 2490- Add HB_NO_MERGE_CLUSTERS build option. NOT to be enabled by default 2491 for shipping libraries. It's an option for further experimentation 2492 right now. When we are sure how to do it properly, we will add 2493 public run-time API for the functionality. 2494- Build fixes. 2495 2496 2497Overview of changes leading to 0.9.27 2498Tuesday, March 18, 2014 2499===================================== 2500 2501- Don't use "register" storage class specifier 2502- Wrap definition of free_langs() with HAVE_ATEXIT 2503- Add coretext_aat shaper and hb_coretext_face_create() constructor 2504- If HAVE_ICU_BUILTIN is defined, use hb-icu Unicode callbacks 2505- Add Myanmar test case from OpenType Myanmar spec 2506- Only do fallback Hebrew composition if no GPOS 'mark' available 2507- Allow bootstrapping without gtk-doc 2508- Use AM_MISSING_PROG for ragel and git 2509- Typo in ucdn's Makefile.am 2510- Improve MemoryBarrier() implementation 2511 2512 2513Overview of changes leading to 0.9.26 2514Thursday, January 30, 2014 2515===================================== 2516 2517- Misc fixes. 2518- Fix application of 'rtlm' feature. 2519- Automatically apply frac/numr/dnom around U+2044 FRACTION SLASH. 2520- New header: hb-ot-shape.h 2521- Uniscribe: fix scratch-buffer accounting. 2522- Reorder Tai Tham SAKOT to after tone-marks. 2523- Add Hangul shaper. 2524- New files: 2525 hb-ot-shape-complex-hangul.cc 2526 hb-ot-shape-complex-hebrew.cc 2527 hb-ot-shape-complex-tibetan.cc 2528- Disable 'cswh' feature in Arabic shaper. 2529- Coretext: better handle surrogate pairs. 2530- Add HB_TAG_MAX and _HB_SCRIPT_MAX_VALUE. 2531 2532 2533Overview of changes leading to 0.9.25 2534Wednesday, December 4, 2013 2535===================================== 2536 2537- Myanmar shaper improvements. 2538- Avoid font fallback in CoreText backend. 2539- Additional OpenType language tag mappiongs. 2540- More aggressive shape-plan caching. 2541- Build with / require automake 1.13. 2542- Build with libtool 2.4.2.418 alpha to support ppc64le. 2543 2544 2545Overview of changes leading to 0.9.24 2546Tuesday, November 13, 2013 2547===================================== 2548 2549- Misc compiler warning fixes with clang. 2550- No functional changes. 2551 2552 2553Overview of changes leading to 0.9.23 2554Monday, October 28, 2013 2555===================================== 2556 2557- "Udupi HarfBuzz Hackfest", Paris, October 14..18 2013. 2558- Fix (Chain)Context recursion with non-monotone lookup positions. 2559- Misc Indic bug fixes. 2560- New Javanese / Buginese shaping, similar to Windows 8.1. 2561 2562 2563Overview of changes leading to 0.9.22 2564Thursday, October 3, 2013 2565===================================== 2566 2567- Fix use-after-end-of-scope in hb_language_from_string(). 2568- Fix hiding of default_ignorables if font doesn't have space glyph. 2569- Protect against out-of-range lookup indices. 2570 2571- API Changes: 2572 2573 * Added hb_ot_layout_table_get_lookup_count() 2574 2575 2576Overview of changes leading to 0.9.21 2577Monday, September 16, 2013 2578===================================== 2579 2580- Rename gobject-introspection library name from harfbuzz to HarfBuzz. 2581- Remove (long disabled) hb-old and hb-icu-le test shapers. 2582- Misc gtk-doc and gobject-introspection annotations. 2583- Misc fixes. 2584- API changes: 2585 2586 * Add HB_SET_VALUE_INVALID 2587 2588Overview of changes leading to 0.9.20 2589Thursday, August 29, 2013 2590===================================== 2591 2592General: 2593- Misc substitute_closure() fixes. 2594- Build fixes. 2595 2596Documentation: 2597- gtk-doc boilerplate integrated. Docs are built now, but 2598 contain no contents. By next release hopefully we have 2599 some content in. Enable using --enable-gtk-doc. 2600 2601GObject and Introspection: 2602- Added harfbuzz-gobject library (hb-gobject.h) that has type 2603 bindings for all HarfBuzz objects and enums. Enable using 2604 --with-gobject. 2605- Added gobject-introspection boilerplate. Nothing useful 2606 right now. Work in progress. Gets enabled automatically if 2607 --with-gobject is used. Override with --disable-introspection. 2608 2609OpenType shaper: 2610- Apply 'mark' in Myanmar shaper. 2611- Don't apply 'dlig' by default. 2612 2613Uniscribe shaper: 2614- Support user features. 2615- Fix loading of fonts that are also installed on the system. 2616- Fix shaping of Arabic Presentation Forms. 2617- Fix build with wide chars. 2618 2619CoreText shaper: 2620- Support user features. 2621 2622Source changes: 2623- hb_face_t code moved to hb-face.h / hb-face.cc. 2624- Added hb-deprecated.h. 2625 2626API changes: 2627- Added HB_DISABLE_DEPRECATED. 2628- Deprecated HB_SCRIPT_CANADIAN_ABORIGINAL; replaced by 2629 HB_SCRIPT_CANADIAN_SYLLABICS. 2630- Deprecated HB_BUFFER_FLAGS_DEFAULT; replaced by 2631 HB_BUFFER_FLAG_DEFAULT. 2632- Deprecated HB_BUFFER_SERIALIZE_FLAGS_DEFAULT; replaced by 2633 HB_BUFFER_SERIALIZE_FLAG_DEFAULT. 2634 2635 2636Overview of changes leading to 0.9.19 2637Tuesday, July 16, 2013 2638===================================== 2639 2640- Build fixes. 2641- Better handling of multiple variation selectors in a row. 2642- Pass on variation selector to GSUB if not consumed by cmap. 2643- Fix undefined memory access. 2644- Add Javanese config to Indic shaper. 2645- Misc bug fixes. 2646 2647Overview of changes leading to 0.9.18 2648Tuesday, May 28, 2013 2649===================================== 2650 2651New build system: 2652 2653- All unneeded code is all disabled by default, 2654 2655- Uniscribe and CoreText shapers can be enabled with their --with options, 2656 2657- icu_le and old shapers cannot be enabled for now, 2658 2659- glib, freetype, and cairo will be detected automatically. 2660 They can be force on/off'ed with their --with options, 2661 2662- icu and graphite2 are default off, can be enabled with their --with 2663 options, 2664 2665Moreover, ICU support is now build into a separate library: 2666libharfbuzz-icu.so, and a new harfbuzz-icu.pc is shipped for it. 2667Distros can enable ICU now without every application on earth 2668getting linked to via libharfbuzz.so. 2669 2670For distros I recommend that they make sure they are building --with-glib 2671--with-freetype --with-cairo, --with-icu, and optionally --with-graphite2; 2672And package harfbuzz and harfbuzz-icu separately. 2673 2674 2675Overview of changes leading to 0.9.17 2676Monday, May 20, 2013 2677===================================== 2678 2679- Build fixes. 2680- Fix bug in hb_set_get_min(). 2681- Fix regression with Arabic mark positioning / width-zeroing. 2682 2683Overview of changes leading to 0.9.16 2684Friday, April 19, 2013 2685===================================== 2686 2687- Major speedup in OpenType lookup processing. With the Amiri 2688 Arabic font, this release is over 3x faster than previous 2689 release. All scripts / languages should see this speedup. 2690 2691- New --num-iterations option for hb-shape / hb-view; useful for 2692 profiling. 2693 2694Overview of changes leading to 0.9.15 2695Friday, April 05, 2013 2696===================================== 2697 2698- Build fixes. 2699- Fix crasher in graphite2 shaper. 2700- Fix Arabic mark width zeroing regression. 2701- Don't compose Hangul jamo into Unicode syllables. 2702 2703 2704Overview of changes leading to 0.9.14 2705Thursday, March 21, 2013 2706===================================== 2707 2708- Build fixes. 2709- Fix time-consuming sanitize with malicious fonts. 2710- Implement hb_buffer_deserialize_glyphs() for both json and text. 2711- Do not ignore Hangul filler characters. 2712- Indic fixes: 2713 * Fix Malayalam pre-base reordering interaction with post-forms. 2714 * Further adjust ZWJ handling. Should fix known regressions from 2715 0.9.13. 2716 2717 2718Overview of changes leading to 0.9.13 2719Thursday, February 25, 2013 2720===================================== 2721 2722- Build fixes. 2723- Ngapi HarfBuzz Hackfest in London (February 2013): 2724 * Fixed all known Indic bugs, 2725 * New Win8-style Myanmar shaper, 2726 * New South-East Asian shaper for Tai Tham, Cham, and New Tai Lue, 2727 * Smartly ignore Default_Ignorable characters (joiners, etc) wheb 2728 matching GSUB/GPOS lookups, 2729 * Fix 'Phags-Pa U+A872 shaping, 2730 * Fix partial disabling of default-on features, 2731 * Allow disabling of TrueType kerning. 2732- Fix possible crasher with broken fonts with overlapping tables. 2733- Removed generated files from git again. So, one needs ragel to 2734 bootstrap from the git tree. 2735 2736API changes: 2737- hb_shape() and related APIs now abort if buffer direction is 2738 HB_DIRECTION_INVALID. Previously, hb_shape() was calling 2739 hb_buffer_guess_segment_properties() on the buffer before 2740 shaping. The heuristics in that function are fragile. If the 2741 user really wants the old behvaior, they can call that function 2742 right before calling hb_shape() to get the old behavior. 2743- hb_blob_create_sub_blob() always creates sub-blob with 2744 HB_MEMORY_MODE_READONLY. See comments for the reason. 2745 2746 2747Overview of changes leading to 0.9.12 2748Thursday, January 18, 2013 2749===================================== 2750 2751- Build fixes for Sun compiler. 2752- Minor bug fix. 2753 2754Overview of changes leading to 0.9.11 2755Thursday, January 10, 2013 2756===================================== 2757 2758- Build fixes. 2759- Fix GPOS mark attachment with null Anchor offsets. 2760- [Indic] Fix old-spec reordering of viramas if sequence ends in one. 2761- Fix multi-threaded shaper data creation crash. 2762- Add atomic ops for Solaris. 2763 2764API changes: 2765- Rename hb_buffer_clear() to hb_buffer_clear_contents(). 2766 2767 2768Overview of changes leading to 0.9.10 2769Thursday, January 3, 2013 2770===================================== 2771 2772- [Indic] Fixed rendering of Malayalam dot-reph 2773- Updated OT language tags. 2774- Updated graphite2 backend. 2775- Improved hb_ot_layout_get_size_params() logic. 2776- Improve hb-shape/hb-view help output. 2777- Fixed hb-set.h implementation to not crash. 2778- Fixed various issues with hb_ot_layout_collect_lookups(). 2779- Various build fixes. 2780 2781New API: 2782 2783hb_graphite2_face_get_gr_face() 2784hb_graphite2_font_get_gr_font() 2785hb_coretext_face_get_cg_font() 2786 2787Modified API: 2788 2789hb_ot_layout_get_size_params() 2790 2791 2792Overview of changes leading to 0.9.9 2793Wednesday, December 5, 2012 2794==================================== 2795 2796- Fix build on Windows. 2797- Minor improvements. 2798 2799 2800Overview of changes leading to 0.9.8 2801Tuesday, December 4, 2012 2802==================================== 2803 2804 2805- Actually implement hb_shape_plan_get_shaper (). 2806- Make UCDB data tables const. 2807- Lots of internal refactoring in OTLayout tables. 2808- Flesh out hb_ot_layout_lookup_collect_glyphs(). 2809 2810New API: 2811 2812hb_ot_layout_collect_lookups() 2813hb_ot_layout_get_size_params() 2814 2815 2816Overview of changes leading to 0.9.7 2817Sunday, November 21, 2012 2818==================================== 2819 2820 2821HarfBuzz "All-You-Can-Eat-Sushi" (aka Vancouver) Hackfest and follow-on fixes. 2822 2823- Fix Arabic contextual joining using pre-context text. 2824- Fix Sinhala "split matra" mess. 2825- Fix Khmer shaping with broken fonts. 2826- Implement Thai "PUA" shaping for old fonts. 2827- Do NOT route Kharoshthi script through the Indic shaper. 2828- Disable fallback positioning for Indic and Thai shapers. 2829- Misc fixes. 2830 2831 2832hb-shape / hb-view changes: 2833 2834- Add --text-before and --text-after 2835- Add --bot / --eot / --preserve-default-ignorables 2836- hb-shape --output-format=json 2837 2838 2839New API: 2840 2841hb_buffer_clear() 2842 2843hb_buffer_flags_t 2844 2845HB_BUFFER_FLAGS_DEFAULT 2846HB_BUFFER_FLAG_BOT 2847HB_BUFFER_FLAG_EOT 2848HB_BUFFER_FLAG_PRESERVE_DEFAULT_IGNORABLES 2849 2850hb_buffer_set_flags() 2851hb_buffer_get_flags() 2852 2853HB_BUFFER_SERIALIZE_FLAGS 2854hb_buffer_serialize_glyphs() 2855hb_buffer_deserialize_glyphs() 2856hb_buffer_serialize_list_formats() 2857 2858hb_set_add_range() 2859hb_set_del_range() 2860hb_set_get_population() 2861hb_set_next_range() 2862 2863hb_face_[sg]et_glyph_count() 2864 2865hb_segment_properties_t 2866HB_SEGMENT_PROPERTIES_DEFAULT 2867hb_segment_properties_equal() 2868hb_segment_properties_hash() 2869 2870hb_buffer_set_segment_properties() 2871hb_buffer_get_segment_properties() 2872 2873hb_ot_layout_glyph_class_t 2874hb_ot_layout_get_glyph_class() 2875hb_ot_layout_get_glyphs_in_class() 2876 2877hb_shape_plan_t 2878hb_shape_plan_create() 2879hb_shape_plan_create_cached() 2880hb_shape_plan_get_empty() 2881hb_shape_plan_reference() 2882hb_shape_plan_destroy() 2883hb_shape_plan_set_user_data() 2884hb_shape_plan_get_user_data() 2885hb_shape_plan_execute() 2886hb_shape_plan_get_shaper() 2887 2888hb_ot_shape_plan_collect_lookups() 2889 2890 2891API changes: 2892 2893- Remove "mask" parameter from hb_buffer_add(). 2894- Rename hb_ot_layout_would_substitute_lookup() and hb_ot_layout_substitute_closure_lookup(). 2895- hb-set.h API const correction. 2896- Renamed hb_set_min/max() to hb_set_get_min/max(). 2897- Rename hb_ot_layout_feature_get_lookup_indexes() to hb_ot_layout_feature_get_lookups(). 2898- Rename hb_buffer_guess_properties() to hb_buffer_guess_segment_properties(). 2899 2900 2901 2902Overview of changes leading to 0.9.6 2903Sunday, November 13, 2012 2904==================================== 2905 2906- Don't clear pre-context text if no new context is provided. 2907- Fix ReverseChainingSubstLookup, which was totally borked. 2908- Adjust output format of hb-shape a bit. 2909- Include config.h.in in-tree. Makes it easier for alternate build systems. 2910- Fix hb_buffer_set_length(buffer, 0) invalid memory allocation. 2911- Use ICU LayoutEngine's C API instead of C++. Avoids much headache. 2912- Drop glyphs for all of Unicode Default_Ignorable characters. 2913- Misc build fixes. 2914 2915Arabic shaper: 2916- Enable 'dlig' and 'mset' features in Arabic shaper. 2917- Implement 'Phags-pa shaping, improve Mongolian. 2918 2919Indic shaper: 2920- Decompose Sinhala split matras the way old HarfBuzz / Pango did. 2921- Initial support for Consonant Medials. 2922- Start adding new-style Myanmar shaping. 2923- Make reph and 'pref' logic introspect the font. 2924- Route Meetei-Mayek through the Indic shaper. 2925- Don't apply 'liga' in Indic shaper. 2926- Improve Malayalam pre-base reordering Ra interaction with Chillus. 2927 2928 2929 2930Overview of changes leading to 0.9.5 2931Sunday, October 14, 2012 2932==================================== 2933 2934- Synthetic-GSUB Arabic fallback shaping. 2935 2936- Misc Indic improvements. 2937 2938- Add build system support for pthread. 2939 2940- Imported UCDN for in-tree Unicode callbacks implementation. 2941 2942- Context-aware Arabic joining. 2943 2944- Misc other fixes. 2945 2946- New API: 2947 2948 hb_feature_to/from-string() 2949 hb_buffer_[sg]et_content_type() 2950 2951 2952 2953Overview of changes leading to 0.9.4 2954Tuesday, Sep 03, 2012 2955==================================== 2956 2957- Indic improvements with old-spec Malayalam. 2958 2959- Better fallback glyph positioning, specially with Thai / Lao marks. 2960 2961- Implement dotted-circle insertion. 2962 2963- Better Arabic fallback shaping / ligation. 2964 2965- Added ICU LayoutEngine backend for testing. Call it by the 'icu_le' name. 2966 2967- Misc fixes. 2968 2969 2970 2971Overview of changes leading to 0.9.3 2972Friday, Aug 18, 2012 2973==================================== 2974 2975- Fixed fallback mark positioning for left-to-right text. 2976 2977- Improve mark positioning for the remaining combining classes. 2978 2979- Unbreak Thai and fallback Arabic shaping. 2980 2981- Port Arabic shaper to shape-plan caching. 2982 2983- Use new ICU normalizer functions. 2984 2985 2986 2987Overview of changes leading to 0.9.2 2988Friday, Aug 10, 2012 2989==================================== 2990 2991- Over a thousand commits! This is the first major release of HarfBuzz. 2992 2993- HarfBuzz is feature-complete now! It should be in par, or better, than 2994 both Pango's shapers and old HarfBuzz / Qt shapers. 2995 2996- New Indic shaper, supporting main Indic scripts, Sinhala, and Khmer. 2997 2998- Improved Arabic shaper, with fallback Arabic shaping, supporting Arabic, 2999 Sinhala, N'ko, Mongolian, and Mandaic. 3000 3001- New Thai / Lao shaper. 3002 3003- Tibetan / Hangul support in the generic shaper. 3004 3005- Synthetic GDEF support for fonts without a GDEF table. 3006 3007- Fallback mark positioning for fonts without a GPOS table. 3008 3009- Unicode normalization shaping heuristic during glyph mapping. 3010 3011- New experimental Graphite2 backend. 3012 3013- New Uniscribe backend (primarily for testing). 3014 3015- New CoreText backend (primarily for testing). 3016 3017- Major optimization and speedup. 3018 3019- Test suites and testing infrastructure (work in progress). 3020 3021- Greatly improved hb-view cmdline tool. 3022 3023- hb-shape cmdline tool. 3024 3025- Unicode 6.1 support. 3026 3027Summary of API changes: 3028 3029o Changed API: 3030 3031 - Users are expected to only include main header files now (ie. hb.h, 3032 hb-glib.h, hb-ft.h, ...) 3033 3034 - All struct tag names had their initial underscore removed. 3035 Ie. "struct _hb_buffer_t" is "struct hb_buffer_t" now. 3036 3037 - All set_user_data() functions now take a "replace" boolean parameter. 3038 3039 - hb_buffer_create() takes zero arguments now. 3040 Use hb_buffer_pre_allocate() to pre-allocate. 3041 3042 - hb_buffer_add_utf*() now accept -1 for length parameters, 3043 meaning "nul-terminated". 3044 3045 - hb_direction_t enum values changed. 3046 3047 - All *_from_string() APIs now take a length parameter to allow for 3048 non-nul-terminated strings. A -1 length means "nul-terminated". 3049 3050 - Typedef for hb_language_t changed. 3051 3052 - hb_get_table_func_t renamed to hb_reference_table_func_t. 3053 3054 - hb_ot_layout_table_choose_script() 3055 3056 - Various renames in hb-unicode.h. 3057 3058o New API: 3059 3060 - hb_buffer_guess_properties() 3061 Automatically called by hb_shape(). 3062 3063 - hb_buffer_normalize_glyphs() 3064 3065 - hb_tag_from_string() 3066 3067 - hb-coretext.h 3068 3069 - hb-uniscribe.h 3070 3071 - hb_face_reference_blob() 3072 - hb_face_[sg]et_index() 3073 - hb_face_set_upem() 3074 3075 - hb_font_get_glyph_name_func_t 3076 hb_font_get_glyph_from_name_func_t 3077 hb_font_funcs_set_glyph_name_func() 3078 hb_font_funcs_set_glyph_from_name_func() 3079 hb_font_get_glyph_name() 3080 hb_font_get_glyph_from_name() 3081 hb_font_glyph_to_string() 3082 hb_font_glyph_from_string() 3083 3084 - hb_font_set_funcs_data() 3085 3086 - hb_ft_font_set_funcs() 3087 - hb_ft_font_get_face() 3088 3089 - hb-gobject.h (work in progress) 3090 3091 - hb_ot_shape_glyphs_closure() 3092 hb_ot_layout_substitute_closure_lookup() 3093 3094 - hb-set.h 3095 3096 - hb_shape_full() 3097 3098 - hb_unicode_combining_class_t 3099 3100 - hb_unicode_compose_func_t 3101 hb_unicode_decompose_func_t 3102 hb_unicode_decompose_compatibility_func_t 3103 hb_unicode_funcs_set_compose_func() 3104 hb_unicode_funcs_set_decompose_func() 3105 hb_unicode_funcs_set_decompose_compatibility_func() 3106 hb_unicode_compose() 3107 hb_unicode_decompose() 3108 hb_unicode_decompose_compatibility() 3109 3110o Removed API: 3111 3112 - hb_ft_get_font_funcs() 3113 3114 - hb_ot_layout_substitute_start() 3115 hb_ot_layout_substitute_lookup() 3116 hb_ot_layout_substitute_finish() 3117 hb_ot_layout_position_start() 3118 hb_ot_layout_position_lookup() 3119 hb_ot_layout_position_finish() 3120 3121 3122 3123Overview of changes leading to 0.6.0 3124Friday, May 27, 2011 3125==================================== 3126 3127- Vertical text support in GPOS 3128- Almost all API entries have unit tests now, under test/ 3129- All thread-safety issues are fixed 3130 3131Summary of API changes follows. 3132 3133 3134* Simple Types API: 3135 3136 o New API: 3137 HB_LANGUAGE_INVALID 3138 hb_language_get_default() 3139 hb_direction_to_string() 3140 hb_direction_from_string() 3141 hb_script_get_horizontal_direction() 3142 HB_UNTAG() 3143 3144 o Renamed API: 3145 hb_category_t renamed to hb_unicode_general_category_t 3146 3147 o Changed API: 3148 hb_language_t is a typed pointers now 3149 3150 o Removed API: 3151 HB_TAG_STR() 3152 3153 3154* Use ISO 15924 tags for hb_script_t: 3155 3156 o New API: 3157 hb_script_from_iso15924_tag() 3158 hb_script_to_iso15924_tag() 3159 hb_script_from_string() 3160 3161 o Changed API: 3162 HB_SCRIPT_* enum members changed value. 3163 3164 3165* Buffer API streamlined: 3166 3167 o New API: 3168 hb_buffer_reset() 3169 hb_buffer_set_length() 3170 hb_buffer_allocation_successful() 3171 3172 o Renamed API: 3173 hb_buffer_ensure() renamed to hb_buffer_pre_allocate() 3174 hb_buffer_add_glyph() renamed to hb_buffer_add() 3175 3176 o Removed API: 3177 hb_buffer_clear() 3178 hb_buffer_clear_positions() 3179 3180 o Changed API: 3181 hb_buffer_get_glyph_infos() takes an out length parameter now 3182 hb_buffer_get_glyph_positions() takes an out length parameter now 3183 3184 3185* Blob API streamlined: 3186 3187 o New API: 3188 hb_blob_get_data() 3189 hb_blob_get_data_writable() 3190 3191 o Renamed API: 3192 hb_blob_create_empty() renamed to hb_blob_get_empty() 3193 3194 o Removed API: 3195 hb_blob_lock() 3196 hb_blob_unlock() 3197 hb_blob_is_writable() 3198 hb_blob_try_writable() 3199 3200 o Changed API: 3201 hb_blob_create() takes user_data before destroy now 3202 3203 3204* Unicode functions API: 3205 3206 o Unicode function vectors can subclass other unicode function vectors now. 3207 Unimplemented callbacks in the subclass automatically chainup to the parent. 3208 3209 o All hb_unicode_funcs_t callbacks take a user_data now. Their setters 3210 take a user_data and its respective destroy callback. 3211 3212 o New API: 3213 hb_unicode_funcs_get_empty() 3214 hb_unicode_funcs_get_default() 3215 hb_unicode_funcs_get_parent() 3216 3217 o Changed API: 3218 hb_unicode_funcs_create() now takes a parent_funcs. 3219 3220 o Removed func getter functions: 3221 hb_unicode_funcs_get_mirroring_func() 3222 hb_unicode_funcs_get_general_category_func() 3223 hb_unicode_funcs_get_script_func() 3224 hb_unicode_funcs_get_combining_class_func() 3225 hb_unicode_funcs_get_eastasian_width_func() 3226 3227 3228* Face API: 3229 3230 o Renamed API: 3231 hb_face_get_table() renamed to hb_face_reference_table() 3232 hb_face_create_for_data() renamed to hb_face_create() 3233 3234 o Changed API: 3235 hb_face_create_for_tables() takes user_data before destroy now 3236 hb_face_reference_table() returns empty blob instead of NULL 3237 hb_get_table_func_t accepts the face as first parameter now 3238 3239* Font API: 3240 3241 o Fonts can subclass other fonts now. Unimplemented callbacks in the 3242 subclass automatically chainup to the parent. When chaining up, 3243 scale is adjusted if the parent font has a different scale. 3244 3245 o All hb_font_funcs_t callbacks take a user_data now. Their setters 3246 take a user_data and its respective destroy callback. 3247 3248 o New API: 3249 hb_font_get_parent() 3250 hb_font_funcs_get_empty() 3251 hb_font_create_sub_font() 3252 3253 o Removed API: 3254 hb_font_funcs_copy() 3255 hb_font_unset_funcs() 3256 3257 o Removed func getter functions: 3258 hb_font_funcs_get_glyph_func() 3259 hb_font_funcs_get_glyph_advance_func() 3260 hb_font_funcs_get_glyph_extents_func() 3261 hb_font_funcs_get_contour_point_func() 3262 hb_font_funcs_get_kerning_func() 3263 3264 o Changed API: 3265 hb_font_create() takes a face and references it now 3266 hb_font_set_funcs() takes user_data before destroy now 3267 hb_font_set_scale() accepts signed integers now 3268 hb_font_get_contour_point_func_t now takes glyph first, then point_index 3269 hb_font_get_glyph_func_t returns a success boolean now 3270 3271 3272* Changed object model: 3273 3274 o All object types have a _get_empty() now: 3275 hb_blob_get_empty() 3276 hb_buffer_get_empty() 3277 hb_face_get_empty() 3278 hb_font_get_empty() 3279 hb_font_funcs_get_empty() 3280 hb_unicode_funcs_get_empty() 3281 3282 o Added _set_user_data() and _get_user_data() for all object types: 3283 hb_blob_get_user_data() 3284 hb_blob_set_user_data() 3285 hb_buffer_get_user_data() 3286 hb_buffer_set_user_data() 3287 hb_face_get_user_data() 3288 hb_face_set_user_data() 3289 hb_font_funcs_get_user_data() 3290 hb_font_funcs_set_user_data() 3291 hb_font_get_user_data() 3292 hb_font_set_user_data() 3293 hb_unicode_funcs_get_user_data() 3294 hb_unicode_funcs_set_user_data() 3295 3296 o Removed the _get_reference_count() from all object types: 3297 hb_blob_get_reference_count() 3298 hb_buffer_get_reference_count() 3299 hb_face_get_reference_count() 3300 hb_font_funcs_get_reference_count() 3301 hb_font_get_reference_count() 3302 hb_unicode_funcs_get_reference_count() 3303 3304 o Added _make_immutable() and _is_immutable() for all object types except for buffer: 3305 hb_blob_make_immutable() 3306 hb_blob_is_immutable() 3307 hb_face_make_immutable() 3308 hb_face_is_immutable() 3309 3310 3311* Changed API for vertical text support 3312 3313 o The following callbacks where removed: 3314 hb_font_get_glyph_advance_func_t 3315 hb_font_get_kerning_func_t 3316 3317 o The following new callbacks added instead: 3318 hb_font_get_glyph_h_advance_func_t 3319 hb_font_get_glyph_v_advance_func_t 3320 hb_font_get_glyph_h_origin_func_t 3321 hb_font_get_glyph_v_origin_func_t 3322 hb_font_get_glyph_h_kerning_func_t 3323 hb_font_get_glyph_v_kerning_func_t 3324 3325 o The following API removed as such: 3326 hb_font_funcs_set_glyph_advance_func() 3327 hb_font_funcs_set_kerning_func() 3328 hb_font_get_glyph_advance() 3329 hb_font_get_kerning() 3330 3331 o New API added instead: 3332 hb_font_funcs_set_glyph_h_advance_func() 3333 hb_font_funcs_set_glyph_v_advance_func() 3334 hb_font_funcs_set_glyph_h_origin_func() 3335 hb_font_funcs_set_glyph_v_origin_func() 3336 hb_font_funcs_set_glyph_h_kerning_func() 3337 hb_font_funcs_set_glyph_v_kerning_func() 3338 hb_font_get_glyph_h_advance() 3339 hb_font_get_glyph_v_advance() 3340 hb_font_get_glyph_h_origin() 3341 hb_font_get_glyph_v_origin() 3342 hb_font_get_glyph_h_kerning() 3343 hb_font_get_glyph_v_kerning() 3344 3345 o The following higher-leve API added for convenience: 3346 hb_font_get_glyph_advance_for_direction() 3347 hb_font_get_glyph_origin_for_direction() 3348 hb_font_add_glyph_origin_for_direction() 3349 hb_font_subtract_glyph_origin_for_direction() 3350 hb_font_get_glyph_kerning_for_direction() 3351 hb_font_get_glyph_extents_for_origin() 3352 hb_font_get_glyph_contour_point_for_origin() 3353 3354 3355* OpenType Layout API: 3356 3357 o New API: 3358 hb_ot_layout_position_start() 3359 hb_ot_layout_substitute_start() 3360 hb_ot_layout_substitute_finish() 3361 3362 3363* Glue code: 3364 3365 o New API: 3366 hb_glib_script_to_script() 3367 hb_glib_script_from_script() 3368 hb_icu_script_to_script() 3369 hb_icu_script_from_script() 3370 3371 3372* Version API added: 3373 3374 o New API: 3375 HB_VERSION_MAJOR 3376 HB_VERSION_MINOR 3377 HB_VERSION_MICRO 3378 HB_VERSION_STRING 3379 HB_VERSION_CHECK() 3380 hb_version() 3381 hb_version_string() 3382 hb_version_check() 3383 3384 3385