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