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