1Overview of changes leading to 2.5.1 2Friday, May 31, 2019 3==================================== 4- Fix build with various versions of Visual Studio. 5- Improved documentation, thanks to Nathan Willis. 6- Bugfix in subsetting glyf table. 7- Improved scripts for cross-compiling for Windows using mingw. 8- Rename HB_MATH_GLYPH_PART_FLAG_EXTENDER to HB_OT_MATH_GLYPH_PART_FLAG_EXTENDER. 9 A deprecated macro is added for backwards-compatibility. 10 11 12Overview of changes leading to 2.5.0 13Friday, May 24, 2019 14==================================== 15- This release does not include much functional changes, but includes major internal 16 code-base changes. We now require C++11. Support for gcc 4.8 and earlier has been 17 dropped. 18- New hb-config.hh facility for compiling smaller library for embedded and web usecases. 19- New Unicode Character Databse implementation that is half the size of previously-used 20 UCDN. 21- Subsetter improvements. 22- Improved documentation, thanks to Nathan Willis. 23- Misc shaping fixes. 24 25 26Overview of changes leading to 2.4.0 27Monday, March 25, 2019 28==================================== 29- Unicode 12. 30- Misc fixes. 31- Subsetter improvements. 32- New API: 33HB_BUFFER_FLAG_DO_NOT_INSERT_DOTTED_CIRCLE 34hb_directwrite_face_create() 35 36 37Overview of changes leading to 2.3.1 38Wednesday, January 30, 2019 39==================================== 40- AAT bug fixes. 41- Misc internal housekeeping cleanup. 42 43 44Overview of changes leading to 2.3.0 45Thursday, December 20, 2018 46==================================== 47- Fix regression on big-endian architectures. Ouch! 48- Misc bug and build fixes. 49- Fix subsetting of simple GSUB/GDEF. 50- Merge CFF / CFF2 support contributed by Adobe. This mostly involves 51 the subsetter, but also get_glyph_extents on CFF fonts. 52 53New API in hb-aat.h: 54+hb_aat_layout_has_substitution() 55+hb_aat_layout_has_positioning() 56+hb_aat_layout_has_tracking() 57 58 59Overview of changes leading to 2.2.0 60Thursday, November 29, 2018 61==================================== 62- Misc shaping bug fixes. 63- Add font variations named-instance API. 64- Deprecate font variations axis enumeration API and add replacement. 65- AAT shaping improvements: 66 o Fixed 'kern' table Format 2 implementation. 67 o Implement 'feat' table API for feature detection. 68 o Blacklist 'GSUB' table of fonts from 'MUTF' foundry that also have 'morx'. 69 70New API: 71+hb_aat_layout_feature_type_t 72+hb_aat_layout_feature_selector_t 73+hb_aat_layout_get_feature_types() 74+hb_aat_layout_feature_type_get_name_id 75+hb_aat_layout_feature_selector_info_t 76+HB_AAT_LAYOUT_NO_SELECTOR_INDEX 77+hb_aat_layout_feature_type_get_selector_infos() 78+hb_ot_var_axis_flags_t 79+hb_ot_var_axis_info_t 80+hb_ot_var_get_axis_infos() 81+hb_ot_var_find_axis_info() 82+hb_ot_var_get_named_instance_count() 83+hb_ot_var_named_instance_get_subfamily_name_id() 84+hb_ot_var_named_instance_get_postscript_name_id() 85+hb_ot_var_named_instance_get_design_coords() 86 87Deprecated API: 88+HB_OT_VAR_NO_AXIS_INDEX 89+hb_ot_var_axis_t 90+hb_ot_var_get_axes() 91+hb_ot_var_find_axis() 92 93 94Overview of changes leading to 2.1.3 95Friday, November 16, 2018 96==================================== 97- Fix AAT 'mort' shaping, which was broken in 2.1.2 98 99 100Overview of changes leading to 2.1.2 101Friday, November 16, 2018 102==================================== 103- Various internal changes. 104- AAT shaping improvements: 105 o Implement kern table Format 1 state-machine-based kerning. 106 o Implement cross-stream kerning (cursive positioning, etc). 107 o Ignore emptyish GSUB tables (zero scripts) if morx present. 108 o Don't apply GPOS if morx is being applied. Matches Apple. 109 110 111-Overview of changes leading to 2.1.1 112Monday, November 5, 2018 113==================================== 114- AAT improvements: 115 o Implement 'mort' table. 116 o Implement 'kern' subtables Format 1 and Format 3. 117 118 119Overview of changes leading to 2.1.0 120Tuesday, October 30, 2018 121==================================== 122- AAT shaping improvements: 123 o Allow user controlling AAT features, for whole buffer only currently. 124 o Several 'morx' fixes. 125 o Implement tuple-kerns in 'kerx'; Fixes kerning with Apple default 126 San Francisco fonts. 127- Support for color fonts: 128 o COLR/CPAL API to fetch color layers. 129 o SVG table to fetch SVG documents. 130 o CBDT/sbix API to fetch PNG images. 131- New 'name' table API. 132- hb-ot-font now uses 'VORG' table to correctly position CFF glyphs 133 in vertical layout. 134- Various fuzzer-found bug fixes. 135 136Changed API: 137 138A type and a macro added in 2.0.0 were renamed: 139 140hb_name_id_t -> hb_ot_name_id_t 141HB_NAME_ID_INVALID -> HB_OT_NAME_ID_INVALID 142 143New API: 144 145+hb_color_t 146+HB_COLOR 147+hb_color_get_alpha() 148+hb_color_get_red() 149+hb_color_get_green() 150+hb_color_get_blue() 151+hb_ot_color_has_palettes() 152+hb_ot_color_palette_get_count() 153+hb_ot_color_palette_get_name_id() 154+hb_ot_color_palette_color_get_name_id() 155+hb_ot_color_palette_flags_t 156+hb_ot_color_palette_get_flags() 157+hb_ot_color_palette_get_colors() 158+hb_ot_color_has_layers() 159+hb_ot_color_layer_t 160+hb_ot_color_glyph_get_layers() 161+hb_ot_color_has_svg() 162+hb_ot_color_glyph_reference_svg() 163+hb_ot_color_has_png() 164+hb_ot_color_glyph_reference_png() 165 166+hb_ot_name_id_t 167+HB_OT_NAME_ID_INVALID 168+HB_OT_NAME_ID_COPYRIGHT 169+HB_OT_NAME_ID_FONT_FAMILY 170+HB_OT_NAME_ID_FONT_SUBFAMILY 171+HB_OT_NAME_ID_UNIQUE_ID 172+HB_OT_NAME_ID_FULL_NAME 173+HB_OT_NAME_ID_VERSION_STRING 174+HB_OT_NAME_ID_POSTSCRIPT_NAME 175+HB_OT_NAME_ID_TRADEMARK 176+HB_OT_NAME_ID_MANUFACTURER 177+HB_OT_NAME_ID_DESIGNER 178+HB_OT_NAME_ID_DESCRIPTION 179+HB_OT_NAME_ID_VENDOR_URL 180+HB_OT_NAME_ID_DESIGNER_URL 181+HB_OT_NAME_ID_LICENSE 182+HB_OT_NAME_ID_LICENSE_URL 183+HB_OT_NAME_ID_TYPOGRAPHIC_FAMILY 184+HB_OT_NAME_ID_TYPOGRAPHIC_SUBFAMILY 185+HB_OT_NAME_ID_MAC_FULL_NAME 186+HB_OT_NAME_ID_SAMPLE_TEXT 187+HB_OT_NAME_ID_CID_FINDFONT_NAME 188+HB_OT_NAME_ID_WWS_FAMILY 189+HB_OT_NAME_ID_WWS_SUBFAMILY 190+HB_OT_NAME_ID_LIGHT_BACKGROUND 191+HB_OT_NAME_ID_DARK_BACKGROUND 192+HB_OT_NAME_ID_VARIATIONS_PS_PREFIX 193+hb_ot_name_entry_t 194+hb_ot_name_list_names() 195+hb_ot_name_get_utf8() 196+hb_ot_name_get_utf16() 197+hb_ot_name_get_utf32() 198 199 200Overview of changes leading to 2.0.2 201Saturday, October 20, 2018 202==================================== 203- Fix two minor memory access issues in AAT tables. 204 205 206Overview of changes leading to 2.0.1 207Friday, October 19, 2018 208==================================== 209- Fix hb-version.h reported release version that went wrong (1.8.0) 210 with previous release. 211- Fix extrapolation in 'trak' table. 212- Fix hb-font infinite-recursion issue with some font funcs and 213 subclassed fonts. 214- Implement variation-kerning format in kerx table, although without 215 variation. 216- Fix return value of hb_map_is_empty(). 217 218 219Overview of changes leading to 2.0.0 220Thursday, October 18, 2018 221==================================== 222- Added AAT shaping support (morx/kerx/trak). 223 Automatically used if GSUB/GPOS are not available respectively. 224 Set HB_OPTIONS=aat env var to have morx/kerx preferred over 225 GSUB/GPOS. 226- Apply TrueType kern table internally, instead of relying on 227 hb_font_t callbacks. 228- Khmer shaper significantly rewritten to better match Uniscribe. 229- Indic3 tags ('dev3', etc) are passed to USE shaper. 230- .dfont Mac font containers implemented. 231- Script- and language-mapping revamped to better use BCP 47. 232- Misc USE and Indic fixes. 233- Misc everything fixes. 234- Too many things to list. Biggest release since 0.9.1, with 235 over 500 commits in just over 5 weeks! Didn't intend it to 236 be a big release. Just happened to become. 237- hb-ft now locks underlying FT_Face during use. 238 239API changes: 240 241- Newly-created hb_font_t's now have our internal "hb-ot-font" 242 callbacks set on them, so they should work out of the box 243 without any callbacks set. If callbacks are set, everything 244 is back to what it was before, the fallback callbacks are 245 null. If you to get the internal implementation modified, 246 sub_font it. 247 248- New hb_font_funcs_set_nominal_glyphs_func() allows speeding 249 up character to glyph mapping. 250 251New API: 252+HB_FEATURE_GLOBAL_START 253+HB_FEATURE_GLOBAL_END 254+hb_buffer_set_invisible_glyph() 255+hb_buffer_get_invisible_glyph() 256+hb_font_funcs_set_nominal_glyphs_func() 257+hb_ot_layout_table_select_script() 258+hb_ot_layout_script_select_language() 259+hb_ot_layout_feature_get_name_ids() 260+hb_ot_layout_feature_get_characters() 261+hb_name_id_t 262+HB_NAME_ID_INVALID 263+HB_OT_MAX_TAGS_PER_SCRIPT 264+hb_ot_tags_from_script_and_language() 265+hb_ot_tags_to_script_and_language() 266 267Deprecated API: 268-hb_font_funcs_set_glyph_func() 269-hb_unicode_eastasian_width_func_t 270-hb_unicode_funcs_set_eastasian_width_func() 271-hb_unicode_eastasian_width() 272-hb_unicode_decompose_compatibility_func_t 273-HB_UNICODE_MAX_DECOMPOSITION_LEN 274-hb_unicode_funcs_set_decompose_compatibility_func() 275-hb_unicode_decompose_compatibility() 276-hb_font_funcs_set_glyph_h_kerning_func() 277-hb_font_funcs_set_glyph_v_kerning_func() 278-hb_font_get_glyph_h_kerning() 279-hb_font_get_glyph_v_kerning() 280-hb_font_get_glyph_kerning_for_direction() 281-hb_ot_layout_table_choose_script() 282-hb_ot_layout_script_find_language() 283-hb_ot_tags_from_script() 284-hb_ot_tag_from_language() 285 286 287Overview of changes leading to 1.9.0 288Monday, September 10, 2018 289==================================== 290- Added 'cmap' API to hb_face_t. 291- Face-builder API. 292- hb-ot-font re-creation should be much leaner now, as the 293 font tables it uses are cached on hb_face_t now. 294- Internal source header file name changes: 295 hb-*-private.hh is renamed to hb-*.hh. 296 297New API: 298+HB_UNICODE_MAX 299+hb_face_collect_unicodes() 300+hb_face_collect_variation_selectors() 301+hb_face_collect_variation_unicodes() 302+hb_face_builder_create() 303+hb_face_builder_add_table() 304 305 306Overview of changes leading to 1.8.8 307Tuesday, August 14, 2018 308==================================== 309- Fix hb-icu crash on architectures where compare_exchange_weak() can 310 fail falsely. This bug was introduced in 1.8.4. 311 https://bugs.chromium.org/p/chromium/issues/detail?id=873568 312- More internal refactoring of atomic operations and singletons. 313- API changes: 314 The following functions do NOT reference their return value before 315 returning: 316 * hb_unicode_funcs_get_default() 317 * hb_glib_get_unicode_funcs() 318 * hb_icu_get_unicode_funcs() 319 This is consistent with their naming ("get", instead of "reference") 320 as well as how they are used in the wild (ie. no one calls destroy() 321 on their return value.) 322 323 324Overview of changes leading to 1.8.7 325Wednesday, August 8, 2018 326==================================== 327- Fix assertion failure with GDEF-blacklisted fonts. 328 329 330Overview of changes leading to 1.8.6 331Tuesday, August 7, 2018 332==================================== 333- Internal code shuffling. 334- New API to speed up getting advance widths for implementations 335 that have heavy overhead in get_h_advance callback: 336+hb_font_funcs_set_glyph_h_advances_func 337+hb_font_funcs_set_glyph_v_advances_func 338+hb_font_get_glyph_advances_for_direction 339+hb_font_get_glyph_h_advances 340+hb_font_get_glyph_h_advances_func_t 341+hb_font_get_glyph_v_advances 342+hb_font_get_glyph_v_advances_func_t 343 344 345Overview of changes leading to 1.8.5 346Wednesday, August 1, 2018 347==================================== 348- Major Khmer shaper improvements to better match Microsoft. 349- Indic bug fixes. 350- Internal improvements to atomic operations. 351 352 353Overview of changes leading to 1.8.4 354Tuesday, July 17, 2018 355==================================== 356- Fix build on non-C++11. 357- Use C++-style GCC atomics and C++11 atomics. 358 359 360Overview of changes leading to 1.8.3 361Wednesday, July 11, 2018 362==================================== 363- A couple of Indic / USE bug fixes. 364- Disable vectorization, as it was causing unaligned access bus error on 365 certain 32bit architectures. 366 367 368Overview of changes leading to 1.8.2 369Tuesday, July 3, 2018 370==================================== 371- Fix infinite loop in Khmer shaper. 372- Improve hb_blob_create_from_file() for streams. 373 374 375Overview of changes leading to 1.8.1 376Tuesday, June 12, 2018 377==================================== 378- Fix hb-version.h file generation; last two releases went out with wrong ones. 379- Add correctness bug in hb_set_t operations, introduced in 1.7.7. 380- Remove HB_SUBSET_BUILTIN build option. Not necessary. 381 382 383Overview of changes leading to 1.8.0 384Tuesday, June 5, 2018 385==================================== 386- Update to Unicode 11.0.0. 387 388 389Overview of changes leading to 1.7.7 390Tuesday, June 5, 2018 391==================================== 392- Lots of internal changes, but not yet exposed externally. 393- All HarfBuzz objects are significantly smaller in size now. 394- Sinhala: Position repha on top of post-consonant, not base. 395 This better matches Windows 10 behavior, which was changed 396 from previous Windows versions. 397- New build options: 398 o New cpp macro HB_NO_ATEXIT 399 o New cpp macro HB_SUBSET_BUILTIN 400- Significant libharfbuzz-subset changes. API subject to change. 401- New API in libharfbuzz: 402 403+hb_blob_create_from_file() 404+hb_face_count() 405 406A hashmap implementation: 407+hb-map.h 408+HB_MAP_VALUE_INVALID 409+hb_map_t 410+hb_map_create() 411+hb_map_get_empty() 412+hb_map_reference() 413+hb_map_destroy() 414+hb_map_set_user_data() 415+hb_map_get_user_data() 416+hb_map_allocation_successful() 417+hb_map_clear() 418+hb_map_is_empty() 419+hb_map_get_population() 420+hb_map_set() 421+hb_map_get() 422+hb_map_del() 423+hb_map_has() 424 425 426Overview of changes leading to 1.7.6 427Wednesday, March 7, 2018 428==================================== 429 430- Fix to hb_set_t binary operations. Ouch. 431- New experimental harfbuzz-subset library. All of hb-subset.h 432 is experimental right now and API WILL change. 433 434- New API: 435hb_blob_copy_writable_or_fail() 436HB_OT_TAG_BASE 437hb_set_previous() 438hb_set_previous_range() 439 440 441Overview of changes leading to 1.7.5 442Tuesday, January 30, 2018 443==================================== 444 445- Separate Khmer shaper from Indic. 446- First stab at AAT morx. Not hooked up. 447- Misc bug fixes. 448 449 450Overview of changes leading to 1.7.4 451Wednesday, December 20, 2017 452==================================== 453 454- Fix collect_glyphs() regression caused by hb_set_t changes. 455 456 457Overview of changes leading to 1.7.3 458Monday, December 18, 2017 459==================================== 460 461- hb_set_t performance tuning and optimizations. 462- Speed up collect_glyphs() and reject garbage data. 463- In hb_coretext_font_create() set font point-size (ptem). 464- Misc fixes. 465 466 467Overview of changes leading to 1.7.2 468Monday, December 4, 2017 469==================================== 470 471- Optimize hb_set_add_range(). 472- Misc fixes. 473- New API: 474hb_coretext_font_create() 475 476 477Overview of changes leading to 1.7.1 478Tuesday, November 14, 2017 479==================================== 480 481- Fix atexit object destruction regression. 482- Fix minor integer-overflow. 483 484 485Overview of changes leading to 1.7.0 486Monday, November 13, 2017 487==================================== 488 489- Minor Indic fixes. 490- Implement kerning and glyph names in hb-ot-font. 491- Various DSO optimization re .data and .bss sizes. 492- Make C++11 optional; build fixes. 493- Mark all other backends "unsafe-to-break". 494- Graphite fix. 495 496 497Overview of changes leading to 1.6.3 498Thursday, October 26th, 2017 499==================================== 500 501- Fix hb_set_t some more. Should be solid now. 502- Implement get_glyph_name() for hb-ot-font. 503- Misc fixes. 504 505 506Overview of changes leading to 1.6.2 507Monday, October 23nd, 2017 508==================================== 509 510- Yesterday's release had a bad crasher; don't use it. That's what 511 happens when one works on Sunday... 512 https://github.com/harfbuzz/harfbuzz/issues/578 513- Build fixes for FreeBSD and Chrome Android. 514 515 516Overview of changes leading to 1.6.1 517Sunday, October 22nd, 2017 518==================================== 519 520- Don't skip over COMBINING GRAPHEME JOINER when ligating, etc. 521 To be refined: https://github.com/harfbuzz/harfbuzz/issues/554 522- Faster hb_set_t implementation. 523- Don't use deprecated ICU API. 524- Fix undefined-behavior in Myanmar shaper, introduced in 1.6.0 525- Deprecated API: 526 hb_set_invert() 527 528 529Overview of changes leading to 1.6.0 530Friday, October the 13th, 2017 531==================================== 532 533- Update to Unicode 10. 534 535- Various Indic and Universal Shaping Engine fixes as a result of 536 HarfBuzz Hackfest with Jonathan Kew at Web Engines Hackfest at 537 the Igalia offices in A Coruña, Spain. Thanks Igalia for having 538 us! 539 540- Implement Unicode Arabic Mark Ordering Algorithm UTR#53. 541 542- Implement optical sizing / tracking in CoreText backend, using 543 new API hb_font_set_ptem(). 544 545- Allow notifying hb_font_t that underlying FT_Face changed sizing, 546 using new API hb_ft_font_changed(). 547 548- More Graphite backend RTL fixes. 549 550- Fix caching of variable font shaping plans. 551 552- hb-view / hb-shape now accept following new arguments: 553 554 o --unicodes: takes a list of hex numbers that represent Unicode 555 codepoints. 556 557New API: 558+hb_face_get_table_tags() 559+hb_font_set_ptem() 560+hb_font_get_ptem() 561+hb_ft_font_changed() 562 563 564Overview of changes leading to 1.5.1 565Tuesday, September 5, 2017 566==================================== 567 568- Fix "unsafe-to-break" in fallback shaping and other corner cases. 569 All our tests pass with --verify now, meaning unsafe-to-break API 570 works as expected. 571- Add --unicodes to hb-view / hb-shape. 572- [indic] Treat Consonant_With_Stacker as consonant. This will need 573 further tweaking. 574- hb_buffer_diff() tweaks. 575 576 577Overview of changes leading to 1.5.0 578Wednesday, August 23, 2017 579==================================== 580 581- Misc new API, for appending a buffer to another, and for comparing 582 contents of two buffers for types of differences. 583 584- New "unsafe-to-break" API. Can be used to speed up reshaping 585 in line-breaking situations. Essentially, after shaping, it returns 586 positions in the input string (some of the cluster boundaries) that 587 are "safe to break" in that if the text is segmented at that position 588 and two sides reshaped and concatenated, the shaping result is 589 exactly the same as shaping the text in one piece. 590 591 hb-view and hb-shape and hb-shape now take --verify, which verifies 592 the above property. 593 594 Some corner cases of the implementation are still not quite working. 595 Those will be fixed in subsequent releases. 596 597- New API: 598 599hb_buffer_append() 600 601hb_glyph_flags_t 602HB_GLYPH_FLAG_UNSAFE_TO_BREAK 603HB_GLYPH_FLAG_DEFINED 604hb_glyph_info_get_glyph_flags() 605 606HB_BUFFER_SERIALIZE_FLAG_GLYPH_FLAGS 607 608hb_buffer_diff_flags_t 609HB_BUFFER_DIFF_FLAG_EQUAL 610HB_BUFFER_DIFF_FLAG_CONTENT_TYPE_MISMATCH 611HB_BUFFER_DIFF_FLAG_LENGTH_MISMATCH 612HB_BUFFER_DIFF_FLAG_NOTDEF_PRESENT 613HB_BUFFER_DIFF_FLAG_DOTTED_CIRCLE_PRESENT 614HB_BUFFER_DIFF_FLAG_CODEPOINT_MISMATCH 615HB_BUFFER_DIFF_FLAG_CLUSTER_MISMATCH 616HB_BUFFER_DIFF_FLAG_GLYPH_FLAGS_MISMATCH 617HB_BUFFER_DIFF_FLAG_POSITION_MISMATCH 618hb_buffer_diff 619 620 621Overview of changes leading to 1.4.8 622Tuesday, August 8, 2017 623==================================== 624 625- Major fix to avar table handling. 626- Rename hb-shape --show-message to --trace. 627- Build fixes. 628 629 630Overview of changes leading to 1.4.7 631Tuesday, July 18, 2017 632==================================== 633 634- Multiple Indic, Tibetan, and Cham fixes. 635- CoreText: Allow disabling kerning. 636- Adjust Arabic feature order again. 637- Misc build fixes. 638 639 640Overview of changes leading to 1.4.6 641Sunday, April 23, 2017 642==================================== 643 644- Graphite2: Fix RTL positioning issue. 645- Backlist GDEF of more versions of Padauk and Tahoma. 646- New, experimental, cmake alternative build system. 647 648 649Overview of changes leading to 1.4.5 650Friday, March 10, 2017 651==================================== 652 653- Revert "Fix Context lookup application when moving back after a glyph..." 654 This introduced memory access problems. To be fixed properly soon. 655 656 657Overview of changes leading to 1.4.4 658Sunday, March 5, 2017 659==================================== 660 661- Fix Context lookup application when moving back after a glyph deletion. 662- Fix buffer-overrun in Bengali. 663 664 665Overview of changes leading to 1.4.3 666Saturday, February 25, 2017 667==================================== 668 669- Route Adlam script to Arabic shaper. 670- Misc fixes. 671- New API: 672 hb_font_set_face() 673- Deprecate API: 674 hb_graphite2_font_get_gr_font() 675 676 677Overview of changes leading to 1.4.2 678Monday, January 23, 2017 679==================================== 680 681- Implement OpenType Font Variation tables avar/fvar/HVAR/VVAR. 682- hb-shape and hb-view now accept --variations. 683- New API: 684 685hb_variation_t 686hb_variation_from_string() 687hb_variation_to_string() 688 689hb_font_set_variations() 690hb_font_set_var_coords_design() 691hb_font_get_var_coords_normalized() 692 693hb-ot-var.h: 694hb_ot_var_axis_t 695hb_ot_var_has_data() 696hb_ot_var_get_axis_count() 697hb_ot_var_get_axes() 698hb_ot_var_find_axis() 699hb_ot_var_normalize_variations() 700hb_ot_var_normalize_coords() 701 702- MVAR to be implemented later. Access to named instances to be 703 implemented later as well. 704 705- Misc fixes. 706 707 708Overview of changes leading to 1.4.1 709Thursday, January 5, 2017 710==================================== 711 712- Always build and use UCDN for Unicode data by default. 713 Reduces dependence on version of Unicode data in glib, 714 specially in the Windows bundles we are shipping, which 715 have very old glib. 716 717 718Overview of changes leading to 1.4.0 719Thursday, January 5, 2017 720==================================== 721 722- Merged "OpenType GX" branch which adds core of support for 723 OpenType 1.8 Font Variations. To that extent, the relevant 724 new API is: 725 726New API: 727hb_font_set_var_coords_normalized() 728 729 with supporting API: 730 731New API: 732HB_OT_LAYOUT_NO_VARIATIONS_INDEX 733hb_ot_layout_table_find_feature_variations() 734hb_ot_layout_feature_with_variations_get_lookups() 735hb_shape_plan_create2() 736hb_shape_plan_create_cached2() 737 738 Currently variations in GSUB/GPOS/GDEF are fully supported, 739 and no other tables are supported. In particular, fvar/avar 740 are NOT supported, hence the hb_font_set_var_coords_normalized() 741 taking normalized coordinates. API to take design coordinates 742 will be added in the future. 743 744 HVAR/VVAR/MVAR support will also be added to hb-ot-font in the 745 future. 746 747- Fix regression in GDEF glyph class processing. 748- Add decompositions for Chakma, Limbu, and Balinese in USE shaper. 749- Misc fixes. 750 751 752Overview of changes leading to 1.3.4 753Monday, December 5, 2016 754==================================== 755 756- Fix vertical glyph origin in hb-ot-font. 757- Implement CBDT/CBLC color font glyph extents in hb-ot-font. 758 759 760Overview of changes leading to 1.3.3 761Wednesday, September 28, 2016 762==================================== 763 764- Implement parsing of OpenType MATH table. 765New API: 766HB_OT_TAG_MATH 767HB_OT_MATH_SCRIPT 768hb_ot_math_constant_t 769hb_ot_math_kern_t 770hb_ot_math_glyph_variant_t 771hb_ot_math_glyph_part_flags_t 772hb_ot_math_glyph_part_t 773hb_ot_math_has_data 774hb_ot_math_get_constant 775hb_ot_math_get_glyph_italics_correction 776hb_ot_math_get_glyph_top_accent_attachment 777hb_ot_math_get_glyph_kerning 778hb_ot_math_is_glyph_extended_shape 779hb_ot_math_get_glyph_variants 780hb_ot_math_get_min_connector_overlap 781hb_ot_math_get_glyph_assembly 782 783 784Overview of changes leading to 1.3.2 785Wednesday, September 27, 2016 786==================================== 787 788- Fix build of hb-coretext on older OS X versions. 789 790 791Overview of changes leading to 1.3.1 792Wednesday, September 7, 2016 793==================================== 794 795- Blacklist bad GDEF of more fonts (Padauk). 796- More CoreText backend crash fixes with OS X 10.9.5. 797- Misc fixes. 798 799 800Overview of changes leading to 1.3.0 801Thursday, July 21, 2016 802==================================== 803 804- Update to Unicode 9.0.0 805- Move Javanese from Indic shaper to Universal Shaping Engine. 806- Allow MultipleSubst to delete a glyph (matching Windows engine). 807- Update Universal Shaping Engine to latest draft from Microsoft. 808- DirectWrite backend improvements. Note: this backend is for testing ONLY. 809- CoreText backend improvements with unreachable fonts. 810- Implement symbol fonts (cmap 3.0.0) in hb-ft and hb-ot-font. 811- Blacklist bad GDEF of more fonts (Tahoma & others). 812- Misc fixes. 813 814 815Overview of changes leading to 1.2.7 816Monday, May 2, 2016 817==================================== 818 819- Blacklist another version of Times New Roman (Bold) Italic from Windows 7. 820- Fix Mongolian Free Variation Selectors shaping with certain fonts. 821- Fix Tibetan shorthand contractions shaping. 822- Improved list of language tag mappings. 823- Unbreak build on Windows CE. 824- Make 'glyf' table loading lazy in hb-ot-font. 825 826 827Overview of changes leading to 1.2.6 828Friday, April 8, 2016 829==================================== 830 831- Blacklist GDEF table of another set of Times New Roman (Bold) Italic. 832- DirectWrite backend improvements. Note: DirectWrite backend is 833 exclusively for our internal testing and should NOT be used in any 834 production system whatsoever. 835 836 837Overview of changes leading to 1.2.5 838Monday, April 4, 2016 839==================================== 840 841- Fix GDEF mark-filtering-set, which was broken in 1.2.3. 842 843 844Overview of changes leading to 1.2.4 845Thursday, March 17, 2016 846==================================== 847 848- Synthesize GDEF glyph class for any glyph that does not have one in GDEF. 849 I really hope we don't discover broken fonts that shape badly with this 850 change. 851- Misc build and other minor fixes. 852- API changes: 853 - Added HB_NDEBUG. It's fine for production systems to define this to 854 disable high-overhead debugging checks. However, I also reduced the 855 overhead of those checks, so it's a non-issue right now. You can 856 forget it. Just not defining anything at all is fine. 857 858 859Overview of changes leading to 1.2.3 860Thursday, February 25, 2016 861==================================== 862 863- Blacklist GDEF table of certain versions of Times New Roman (Bold) Italic, 864 due to bug in glyph class of ASCII double-quote character. This should 865 address "regression" introduced in 1.2.0 when we switched mark zeroing 866 in most shapers from BY_UNICODE_LATE to BY_GDEF_LATE. 867 This fourth release in a week should finally stablize things... 868 869- hb-ot-font's get_glyph() implementation saw some optimizations. Though, 870 might be really hard to measure in real-world situations. 871 872- Also, two rather small API changes: 873 874We now disable some time-consuming internal bookkeeping if built with NDEBUG 875defined. This is a first time that we use NDEBUG to disable debug code. If 876there exist production systems that do NOT want to enable NDEBUG, please let 877me know and I'll add HB_NDEBUG. 878 879Added get_nominal_glyph() and get_variation_glyph() instead of get_glyph() 880 881New API: 882- hb_font_get_nominal_glyph_func_t 883- hb_font_get_variation_glyph_func_t 884- hb_font_funcs_set_nominal_glyph_func() 885- hb_font_funcs_set_variation_glyph_func() 886- hb_font_get_nominal_glyph() 887- hb_font_get_variation_glyph() 888 889Deprecated API: 890- hb_font_get_glyph_func_t 891- hb_font_funcs_set_glyph_func() 892 893Clients that implement their own font-funcs are encouraged to replace 894their get_glyph() implementation with a get_nominal_glyph() and 895get_variation_glyph() pair. The variation version can assume that 896variation_selector argument is not zero. Old (deprecated) functions 897will continue working indefinitely using internal gymnastics; it is 898just more efficient to use the new functions. 899 900 901Overview of changes leading to 1.2.2 902Wednesday, February 24, 2016 903==================================== 904 905- Fix regression with mark positioning with fonts that have 906 non-zero mark advances. This was introduced in 1.2.0 while 907 trying to make mark and cursive attachments to work together. 908 I have partially reverted that, so this version is much more 909 like what we had before. All clients who updated to 1.2.0 910 should update to this version. 911 912 913Overview of changes leading to 1.2.1 914Tuesday, February 23, 2016 915==================================== 916 917- CoreText: Fix bug with wrong scale if font scale was changed later. 918 https://github.com/libass/libass/issues/212 919- CoreText: Drastically speed up font initialization. 920- CoreText: Fix tiny leak. 921- Group ZWJ/ZWNJ with previous syllable under cluster-level=0. 922 https://github.com/harfbuzz/harfbuzz/issues/217 923- Add test/shaping/README.md about how to add tests to the suite. 924 925 926Overview of changes leading to 1.2.0 927Friday, February 19, 2016 928==================================== 929 930- Fix various issues (hangs mostly) in case of memory allocation failure. 931- Change mark zeroing types of most shapers from BY_UNICODE_LATE to 932 BY_GDEF_LATE. This seems to be what Uniscribe does. 933- Change mark zeroing of USE shaper from NONE to BY_GDEF_EARLY. That's 934 what Windows does. 935- Allow GPOS cursive connection on marks, and fix the interaction with 936 mark attachment. This work resulted in some changes to how mark 937 attachments work. See: 938 https://github.com/harfbuzz/harfbuzz/issues/211 939 https://github.com/harfbuzz/harfbuzz/commit/86c68c7a2c971efe8e35b1f1bd99401dc8b688d2 940- Graphite2 shaper: improved negative advance handling (eg. Nastaliq). 941- Add nmake-based build system for Windows. 942- Minor speedup. 943- Misc. improvements. 944 945 946Overview of changes leading to 1.1.3 947Monday, January 11, 2016 948==================================== 949 950- Ported Indic shaper to Unicode 8.0 data. 951- Universal Shaping Engine fixes. 952- Speed up CoreText shaper when font fallback happens in CoreText. 953- Documentation improvements, thanks to Khaled Hosny. 954- Very rough directwrite shaper for testing, thanks to Ebrahim Byagowi. 955- Misc bug fixes. 956- New API: 957 958 * Font extents: 959 hb_font_extents_t 960 hb_font_get_font_extents_func_t 961 hb_font_get_font_h_extents_func_t 962 hb_font_get_font_v_extents_func_t 963 hb_font_funcs_set_font_h_extents_func 964 hb_font_funcs_set_font_v_extents_func 965 hb_font_get_h_extents 966 hb_font_get_v_extents 967 hb_font_get_extents_for_direction 968 969 * Buffer message (aka debug): 970 hb_buffer_message_func_t 971 hb_buffer_set_message_func() 972 Actual message protocol to be fleshed out later. 973 974 975Overview of changes leading to 1.1.2 976Wednesday, November 26, 2015 977==================================== 978 979- Fix badly-broken fallback shaper that affected terminology. 980 https://github.com/harfbuzz/harfbuzz/issues/187 981- Fix y_scaling in Graphite shaper. 982- API changes: 983 * An unset glyph_h_origin() function in font-funcs now (sensibly) 984 implies horizontal origin at 0,0. Ie, the nil callback returns 985 true instead of false. As such, implementations that have a 986 glyph_h_origin() that simply returns true, can remove that function 987 with HarfBuzz >= 1.1.2. This results in a tiny speedup. 988 989 990Overview of changes leading to 1.1.1 991Wednesday, November 24, 2015 992==================================== 993 994- Build fixes, specially for hb-coretext. 995 996 997Overview of changes leading to 1.1.0 998Wednesday, November 18, 2015 999==================================== 1000 1001- Implement 'stch' stretch feature for Syriac Abbreviation Mark. 1002 https://github.com/harfbuzz/harfbuzz/issues/141 1003- Disable use of decompose_compatibility() callback. 1004- Implement "shaping" of various Unicode space characters, even 1005 if the font does not support them. 1006 https://github.com/harfbuzz/harfbuzz/issues/153 1007- If font does not support U+2011 NO-BREAK HYPHEN, fallback to 1008 U+2010 HYPHEN. 1009- Changes resulting from libFuzzer continuous fuzzing: 1010 * Reject font tables that need more than 8 edits, 1011 * Bound buffer growth during shaping to 32x, 1012 * Fix assertions and other issues at OOM / buffer max-growth. 1013- Misc fixes and optimizations. 1014- API changes: 1015 * All fonts created with hb_font_create() now inherit from 1016 (ie. have parent) hb_font_get_empty(). 1017 1018 1019Overview of changes leading to 1.0.6 1020Thursday, October 15, 2015 1021==================================== 1022 1023- Reduce max nesting level in OT lookups from 8 to 6. 1024 Should not affect any real font as far as I know. 1025- Fix memory access issue in ot-font. 1026- Revert default load-flags of fonts created using hb_ft_font_create() 1027 back to FT_LOAD_DEFAULT|FT_LOAD_NO_HINTING. This was changed in 1028 last release (1.0.5), but caused major issues, so revert. 1029 https://github.com/harfbuzz/harfbuzz/issues/143 1030 1031 1032Overview of changes leading to 1.0.5 1033Tuesday, October 13, 2015 1034==================================== 1035 1036- Fix multiple memory access bugs discovered using libFuzzer. 1037 https://github.com/harfbuzz/harfbuzz/issues/139 1038 Everyone should upgrade to this version as soon as possible. 1039 We now have continuous fuzzing set up, to avoid issues like 1040 these creeping in again. 1041- Misc fixes. 1042 1043- New API: 1044 * hb_font_set_parent(). 1045 * hb_ft_font_[sg]et_load_flags() 1046 The default flags for fonts created using hb_ft_font_create() 1047 has changed to default to FT_LOAD_DEFAULT now. Previously it 1048 was defaulting to FT_LOAD_DFEAULT|FT_LOAD_NO_HINTING. 1049 1050- API changes: 1051 * Fonts now default to units-per-EM as their scale, instead of 0. 1052 * hb_font_create_sub_font() does NOT make parent font immutable 1053 anymore. hb_font_make_immutable() does. 1054 1055 1056Overview of changes leading to 1.0.4 1057Wednesday, September 30, 2015 1058==================================== 1059 1060- Fix minor out-of-bounds read error. 1061 1062 1063Overview of changes leading to 1.0.3 1064Tuesday, September 1, 2015 1065==================================== 1066 1067- Start of user documentation, from Simon Cozens! 1068- Implement glyph_extents() for TrueType fonts in hb-ot-font. 1069- Improve GPOS cursive attachments with conflicting lookups. 1070- More fixes for cluster-level = 1. 1071- Uniscribe positioning fix. 1072 1073 1074Overview of changes leading to 1.0.2 1075Wednesday, August 19, 2015 1076==================================== 1077 1078- Fix shaping with cluster-level > 0. 1079- Fix Uniscribe backend font-size scaling. 1080- Declare dependencies in harfbuzz.pc. 1081 FreeType is not declared though, to avoid bugs in pkg-config 1082 0.26 with recursive dependencies. 1083- Slightly improved debug infrastructure. More to come later. 1084- Misc build fixes. 1085 1086 1087Overview of changes leading to 1.0.1 1088Monday, July 27, 2015 1089==================================== 1090 1091- Fix out-of-bounds access in USE shaper. 1092 1093 1094Overview of changes leading to 1.0.0 1095Sunday, July 26, 2015 1096==================================== 1097 1098- Implement Universal Shaping Engine: 1099 https://www.microsoft.com/typography/OpenTypeDev/USE/intro.htm 1100 http://blogs.windows.com/bloggingwindows/2015/02/23/windows-shapes-the-worlds-languages/ 1101- Bump version to 1.0.0. The soname was NOT bumped. 1102 1103 1104Overview of changes leading to 0.9.42 1105Thursday, July 26, 2015 1106===================================== 1107 1108- New API to allow for retrieving finer-grained cluster 1109 mappings if the client desires to handle them. Default 1110 behavior is unchanged. 1111- Fix cluster merging when removing default-ignorables. 1112- Update to Unicode 8.0 1113- hb-graphite2 fixes. 1114- Misc fixes. 1115- Removed HB_NO_MERGE_CLUSTERS hack. 1116- New API: 1117 hb_buffer_cluster_level_t enum 1118 hb_buffer_get_cluster_level() 1119 hb_buffer_set_cluster_level() 1120 hb-shape / hb-view --cluster-level 1121 1122 1123Overview of changes leading to 0.9.41 1124Thursday, June 18, 2015 1125===================================== 1126 1127- Fix hb-coretext with trailing whitespace in right-to-left. 1128- New API: hb_buffer_reverse_range(). 1129- Allow implementing atomic ops in config.h. 1130- Fix hb_language_t in language bindings. 1131- Misc fixes. 1132 1133 1134Overview of changes leading to 0.9.40 1135Friday, March 20, 2015 1136===================================== 1137 1138- Another hb-coretext crasher fix. Ouch! 1139- Happy Norouz! 1140 1141 1142Overview of changes leading to 0.9.39 1143Wednesday, March 4, 2015 1144===================================== 1145 1146- Critical hb-coretext fixes. 1147- Optimizations and refactoring; no functional change 1148 expected. 1149- Misc build fixes. 1150 1151 1152Overview of changes leading to 0.9.38 1153Friday, January 23, 2015 1154===================================== 1155 1156- Fix minor out-of-bounds access in Indic shaper. 1157- Change New Tai Lue shaping engine from South-East Asian to default, 1158 reflecting change in Unicode encoding model. 1159- Add hb-shape --font-size. Can take up to two numbers for separate 1160 x / y size. 1161- Fix CoreText and FreeType scale issues with negative scales. 1162- Reject blobs larger than 2GB. This might break some icu-le-hb clients 1163 that need security fixes. See: 1164 http://www.icu-project.org/trac/ticket/11450 1165- Avoid accessing font tables during face destruction, in casce rogue 1166 clients released face data already. 1167- Fix up gobject-introspection a bit. Python bindings kinda working. 1168 See README.python. 1169- Misc fixes. 1170- API additions: 1171 hb_ft_face_create_referenced() 1172 hb_ft_font_create_referenced() 1173 1174 1175Overview of changes leading to 0.9.37 1176Wednesday, December 17, 2014 1177===================================== 1178 1179- Fix out-of-bounds access in Context lookup format 3. 1180- Indic: Allow ZWJ/ZWNJ before syllable modifiers. 1181 1182 1183Overview of changes leading to 0.9.36 1184Thursday, November 20, 2014 1185===================================== 1186 1187- First time that three months went by without a release since 1188 0.9.2 was released on August 10, 2012! 1189- Fix performance bug in hb_ot_collect_glyphs(): 1190 https://bugzilla.mozilla.org/show_bug.cgi?id=1090869 1191- Add basic vertical-text support to hb-ot-font. 1192- Misc build fixes. 1193 1194 1195Overview of changes leading to 0.9.35 1196Saturday, August 13, 2014 1197===================================== 1198 1199- Fix major shape-plan caching bug when more than one shaper were 1200 provided to hb_shape_full() (as exercised by XeTeX). 1201 http://www.mail-archive.com/debian-bugs-dist@lists.debian.org/msg1246370.html 1202- Fix Arabic fallback shaping regression. This was broken in 0.9.32. 1203- Major hb-coretext fixes. That backend is complete now, including 1204 respecing buffer direction and language, down to vertical writing. 1205- Build fixes for Windows CE. Should build fine now. 1206- Misc fixes: 1207 Use atexit() only if it's safe to call from shared library 1208 https://bugs.freedesktop.org/show_bug.cgi?id=82246 1209 Mandaic had errors in its Unicode Joining_Type 1210 https://bugs.freedesktop.org/show_bug.cgi?id=82306 1211- API changes: 1212 1213 * hb_buffer_clear_contents() does not reset buffer flags now. 1214 1215 After 763e5466c0a03a7c27020e1e2598e488612529a7, one doesn't 1216 need to set flags for different pieces of text. The flags now 1217 are something the client sets up once, depending on how it 1218 actually uses the buffer. As such, don't clear it in 1219 clear_contents(). 1220 1221 I don't expect any changes to be needed to any existing client. 1222 1223 1224Overview of changes leading to 0.9.34 1225Saturday, August 2, 2014 1226===================================== 1227 1228- hb_feature_from_string() now accepts CSS font-feature-settings format. 1229- As a result, hb-shape / hb-view --features also accept CSS-style strings. 1230 Eg, "'liga' off" is accepted now. 1231- Add old-spec Myanmar shaper: 1232 https://bugs.freedesktop.org/show_bug.cgi?id=81775 1233- Don't apply 'calt' in Hangul shaper. 1234- Fix mark advance zeroing for Hebrew shaper: 1235 https://bugs.freedesktop.org/show_bug.cgi?id=76767 1236- Implement Windows-1256 custom Arabic shaping. Only built on Windows, 1237 and requires help from get_glyph(). Used by Firefox. 1238 https://bugzilla.mozilla.org/show_bug.cgi?id=1045139 1239- Disable 'liga' in vertical text. 1240- Build fixes. 1241- API changes: 1242 1243 * Make HB_BUFFER_FLAG_BOT/EOT easier to use. 1244 1245 Previously, we expected users to provide BOT/EOT flags when the 1246 text *segment* was at paragraph boundaries. This meant that for 1247 clients that provide full paragraph to HarfBuzz (eg. Pango), they 1248 had code like this: 1249 1250 hb_buffer_set_flags (hb_buffer, 1251 (item_offset == 0 ? HB_BUFFER_FLAG_BOT : 0) | 1252 (item_offset + item_length == paragraph_length ? 1253 HB_BUFFER_FLAG_EOT : 0)); 1254 1255 hb_buffer_add_utf8 (hb_buffer, 1256 paragraph_text, paragraph_length, 1257 item_offset, item_length); 1258 1259 After this change such clients can simply say: 1260 1261 hb_buffer_set_flags (hb_buffer, 1262 HB_BUFFER_FLAG_BOT | HB_BUFFER_FLAG_EOT); 1263 1264 hb_buffer_add_utf8 (hb_buffer, 1265 paragraph_text, paragraph_length, 1266 item_offset, item_length); 1267 1268 Ie, HarfBuzz itself checks whether the segment is at the beginning/end 1269 of the paragraph. Clients that only pass item-at-a-time to HarfBuzz 1270 continue not setting any flags whatsoever. 1271 1272 Another way to put it is: if there's pre-context text in the buffer, 1273 HarfBuzz ignores the BOT flag. If there's post-context, it ignores 1274 EOT flag. 1275 1276 1277Overview of changes leading to 0.9.33 1278Tuesday, July 22, 2014 1279===================================== 1280 1281- Turn off ARabic 'cswh' feature that was accidentally turned on. 1282- Add HB_TAG_MAX_SIGNED. 1283- Make hb_face_make_immutable() really make face immutable! 1284- Windows build fixes. 1285 1286 1287Overview of changes leading to 0.9.32 1288Thursday, July 17, 2014 1289===================================== 1290 1291- Apply Arabic shaping features in spec order exactly. 1292- Another fix for Mongolian free variation selectors. 1293- For non-Arabic scripts in Arabic shaper apply 'rlig' and 'calt' 1294 together. 1295- Minor adjustment to U+FFFD logic. 1296- Fix hb-coretext build. 1297 1298 1299Overview of changes leading to 0.9.31 1300Wednesday, July 16, 2014 1301===================================== 1302 1303- Only accept valid UTF-8/16/32; we missed many cases before. 1304- Better shaping of invalid UTF-8/16/32. Falls back to 1305 U+FFFD REPLACEMENT CHARACTER now. 1306- With all changes in this release, the buffer will contain fully 1307 valid Unicode after hb_buffer_add_utf8/16/32 no matter how 1308 broken the input is. This can be overridden though. See below. 1309- Fix Mongolian Variation Selectors for fonts without GDEF. 1310- Fix minor invalid buffer access. 1311- Accept zh-Hant and zh-Hans language tags. hb_ot_tag_to_language() 1312 now uses these instead of private tags. 1313- Build fixes. 1314- New API: 1315 * hb_buffer_add_codepoints(). This does what hb_buffer_add_utf32() 1316 used to do, ie. no validity check on the input at all. add_utf32 1317 now replaces invalid Unicode codepoints with the replacement 1318 character (see below). 1319 * hb_buffer_set_replacement_codepoint() 1320 * hb_buffer_get_replacement_codepoint() 1321 Previously, in hb_buffer_add_utf8 and hb_buffer_add_utf16, when 1322 we detected broken input, we replaced that with (hb_codepoint_t)-1. 1323 This has changed to use U+FFFD now, but can be changed using these 1324 new API. 1325 1326 1327Overview of changes leading to 0.9.30 1328Wednesday, July 9, 2014 1329===================================== 1330 1331- Update to Unicode 7.0.0: 1332 * New scripts Manichaean and Psalter Pahlavi are shaped using 1333 Arabic shaper. 1334 * All the other new scripts to through the generic shaper for 1335 now. 1336- Minor Indic improvements. 1337- Fix graphite2 backend cluster mapping [crasher!] 1338- API changes: 1339 * New HB_SCRIPT_* values for Unicode 7.0 scripts. 1340 * New function hb_ot_layout_language_get_required_feature(). 1341- Build fixes. 1342 1343 1344Overview of changes leading to 0.9.29 1345Thursday, May 29, 2014 1346===================================== 1347 1348- Implement cmap in hb-ot-font.h. No variation-selectors yet. 1349- Myanmar: Allow MedialYa+Asat. 1350- Various Indic fixes: 1351 * Support most characters in Extended Devanagary and Vedic 1352 Unicode blocks. 1353 * Allow digits and a some punctuation as consonant placeholders. 1354- Build fixes. 1355 1356 1357Overview of changes leading to 0.9.28 1358Monday, April 28, 2014 1359===================================== 1360 1361- Unbreak old-spec Indic shaping. (bug 76705) 1362- Fix shaping of U+17DD and U+0FC6. 1363- Add HB_NO_MERGE_CLUSTERS build option. NOT to be enabled by default 1364 for shipping libraries. It's an option for further experimentation 1365 right now. When we are sure how to do it properly, we will add 1366 public run-time API for the functionality. 1367- Build fixes. 1368 1369 1370Overview of changes leading to 0.9.27 1371Tuesday, March 18, 2014 1372===================================== 1373 1374- Don't use "register" storage class specifier 1375- Wrap definition of free_langs() with HAVE_ATEXIT 1376- Add coretext_aat shaper and hb_coretext_face_create() constructor 1377- If HAVE_ICU_BUILTIN is defined, use hb-icu Unicode callbacks 1378- Add Myanmar test case from OpenType Myanmar spec 1379- Only do fallback Hebrew composition if no GPOS 'mark' available 1380- Allow bootstrapping without gtk-doc 1381- Use AM_MISSING_PROG for ragel and git 1382- Typo in ucdn's Makefile.am 1383- Improve MemoryBarrier() implementation 1384 1385 1386Overview of changes leading to 0.9.26 1387Thursday, January 30, 2014 1388===================================== 1389 1390- Misc fixes. 1391- Fix application of 'rtlm' feature. 1392- Automatically apply frac/numr/dnom around U+2044 FRACTION SLASH. 1393- New header: hb-ot-shape.h 1394- Uniscribe: fix scratch-buffer accounting. 1395- Reorder Tai Tham SAKOT to after tone-marks. 1396- Add Hangul shaper. 1397- New files: 1398 hb-ot-shape-complex-hangul.cc 1399 hb-ot-shape-complex-hebrew.cc 1400 hb-ot-shape-complex-tibetan.cc 1401- Disable 'cswh' feature in Arabic shaper. 1402- Coretext: better handle surrogate pairs. 1403- Add HB_TAG_MAX and _HB_SCRIPT_MAX_VALUE. 1404 1405 1406Overview of changes leading to 0.9.25 1407Wednesday, December 4, 2013 1408===================================== 1409 1410- Myanmar shaper improvements. 1411- Avoid font fallback in CoreText backend. 1412- Additional OpenType language tag mappiongs. 1413- More aggressive shape-plan caching. 1414- Build with / require automake 1.13. 1415- Build with libtool 2.4.2.418 alpha to support ppc64le. 1416 1417 1418Overview of changes leading to 0.9.24 1419Tuesday, November 13, 2013 1420===================================== 1421 1422- Misc compiler warning fixes with clang. 1423- No functional changes. 1424 1425 1426Overview of changes leading to 0.9.23 1427Monday, October 28, 2013 1428===================================== 1429 1430- "Udupi HarfBuzz Hackfest", Paris, October 14..18 2013. 1431- Fix (Chain)Context recursion with non-monotone lookup positions. 1432- Misc Indic bug fixes. 1433- New Javanese / Buginese shaping, similar to Windows 8.1. 1434 1435 1436Overview of changes leading to 0.9.22 1437Thursday, October 3, 2013 1438===================================== 1439 1440- Fix use-after-end-of-scope in hb_language_from_string(). 1441- Fix hiding of default_ignorables if font doesn't have space glyph. 1442- Protect against out-of-range lookup indices. 1443 1444- API Changes: 1445 1446 * Added hb_ot_layout_table_get_lookup_count() 1447 1448 1449Overview of changes leading to 0.9.21 1450Monday, September 16, 2013 1451===================================== 1452 1453- Rename gobject-introspection library name from harfbuzz to HarfBuzz. 1454- Remove (long disabled) hb-old and hb-icu-le test shapers. 1455- Misc gtk-doc and gobject-introspection annotations. 1456- Misc fixes. 1457- API changes: 1458 1459 * Add HB_SET_VALUE_INVALID 1460 1461Overview of changes leading to 0.9.20 1462Thursday, August 29, 2013 1463===================================== 1464 1465General: 1466- Misc substitute_closure() fixes. 1467- Build fixes. 1468 1469Documentation: 1470- gtk-doc boilerplate integrated. Docs are built now, but 1471 contain no contents. By next release hopefully we have 1472 some content in. Enable using --enable-gtk-doc. 1473 1474GObject and Introspection: 1475- Added harfbuzz-gobject library (hb-gobject.h) that has type 1476 bindings for all HarfBuzz objects and enums. Enable using 1477 --with-gobject. 1478- Added gobject-introspection boilerplate. Nothing useful 1479 right now. Work in progress. Gets enabled automatically if 1480 --with-gobject is used. Override with --disable-introspection. 1481 1482OpenType shaper: 1483- Apply 'mark' in Myanmar shaper. 1484- Don't apply 'dlig' by default. 1485 1486Uniscribe shaper: 1487- Support user features. 1488- Fix loading of fonts that are also installed on the system. 1489- Fix shaping of Arabic Presentation Forms. 1490- Fix build with wide chars. 1491 1492CoreText shaper: 1493- Support user features. 1494 1495Source changes: 1496- hb_face_t code moved to hb-face.h / hb-face.cc. 1497- Added hb-deprecated.h. 1498 1499API changes: 1500- Added HB_DISABLE_DEPRECATED. 1501- Deprecated HB_SCRIPT_CANADIAN_ABORIGINAL; replaced by 1502 HB_SCRIPT_CANADIAN_SYLLABICS. 1503- Deprecated HB_BUFFER_FLAGS_DEFAULT; replaced by 1504 HB_BUFFER_FLAG_DEFAULT. 1505- Deprecated HB_BUFFER_SERIALIZE_FLAGS_DEFAULT; replaced by 1506 HB_BUFFER_SERIALIZE_FLAG_DEFAULT. 1507 1508 1509Overview of changes leading to 0.9.19 1510Tuesday, July 16, 2013 1511===================================== 1512 1513- Build fixes. 1514- Better handling of multiple variation selectors in a row. 1515- Pass on variation selector to GSUB if not consumed by cmap. 1516- Fix undefined memory access. 1517- Add Javanese config to Indic shaper. 1518- Misc bug fixes. 1519 1520Overview of changes leading to 0.9.18 1521Tuesday, May 28, 2013 1522===================================== 1523 1524New build system: 1525 1526- All unneeded code is all disabled by default, 1527 1528- Uniscribe and CoreText shapers can be enabled with their --with options, 1529 1530- icu_le and old shapers cannot be enabled for now, 1531 1532- glib, freetype, and cairo will be detected automatically. 1533 They can be force on/off'ed with their --with options, 1534 1535- icu and graphite2 are default off, can be enabled with their --with 1536 options, 1537 1538Moreover, ICU support is now build into a separate library: 1539libharfbuzz-icu.so, and a new harfbuzz-icu.pc is shipped for it. 1540Distros can enable ICU now without every application on earth 1541getting linked to via libharfbuzz.so. 1542 1543For distros I recommend that they make sure they are building --with-glib 1544--with-freetype --with-cairo, --with-icu, and optionally --with-graphite2; 1545And package harfbuzz and harfbuzz-icu separately. 1546 1547 1548Overview of changes leading to 0.9.17 1549Monday, May 20, 2013 1550===================================== 1551 1552- Build fixes. 1553- Fix bug in hb_set_get_min(). 1554- Fix regression with Arabic mark positioning / width-zeroing. 1555 1556Overview of changes leading to 0.9.16 1557Friday, April 19, 2013 1558===================================== 1559 1560- Major speedup in OpenType lookup processing. With the Amiri 1561 Arabic font, this release is over 3x faster than previous 1562 release. All scripts / languages should see this speedup. 1563 1564- New --num-iterations option for hb-shape / hb-view; useful for 1565 profiling. 1566 1567Overview of changes leading to 0.9.15 1568Friday, April 05, 2013 1569===================================== 1570 1571- Build fixes. 1572- Fix crasher in graphite2 shaper. 1573- Fix Arabic mark width zeroing regression. 1574- Don't compose Hangul jamo into Unicode syllables. 1575 1576 1577Overview of changes leading to 0.9.14 1578Thursday, March 21, 2013 1579===================================== 1580 1581- Build fixes. 1582- Fix time-consuming sanitize with malicious fonts. 1583- Implement hb_buffer_deserialize_glyphs() for both json and text. 1584- Do not ignore Hangul filler characters. 1585- Indic fixes: 1586 * Fix Malayalam pre-base reordering interaction with post-forms. 1587 * Further adjust ZWJ handling. Should fix known regressions from 1588 0.9.13. 1589 1590 1591Overview of changes leading to 0.9.13 1592Thursday, February 25, 2013 1593===================================== 1594 1595- Build fixes. 1596- Ngapi HarfBuzz Hackfest in London (February 2013): 1597 * Fixed all known Indic bugs, 1598 * New Win8-style Myanmar shaper, 1599 * New South-East Asian shaper for Tai Tham, Cham, and New Tai Lue, 1600 * Smartly ignore Default_Ignorable characters (joiners, etc) wheb 1601 matching GSUB/GPOS lookups, 1602 * Fix 'Phags-Pa U+A872 shaping, 1603 * Fix partial disabling of default-on features, 1604 * Allow disabling of TrueType kerning. 1605- Fix possible crasher with broken fonts with overlapping tables. 1606- Removed generated files from git again. So, one needs ragel to 1607 bootstrap from the git tree. 1608 1609API changes: 1610- hb_shape() and related APIs now abort if buffer direction is 1611 HB_DIRECTION_INVALID. Previously, hb_shape() was calling 1612 hb_buffer_guess_segment_properties() on the buffer before 1613 shaping. The heuristics in that function are fragile. If the 1614 user really wants the old behvaior, they can call that function 1615 right before calling hb_shape() to get the old behavior. 1616- hb_blob_create_sub_blob() always creates sub-blob with 1617 HB_MEMORY_MODE_READONLY. See comments for the reason. 1618 1619 1620Overview of changes leading to 0.9.12 1621Thursday, January 18, 2013 1622===================================== 1623 1624- Build fixes for Sun compiler. 1625- Minor bug fix. 1626 1627Overview of changes leading to 0.9.11 1628Thursday, January 10, 2013 1629===================================== 1630 1631- Build fixes. 1632- Fix GPOS mark attachment with null Anchor offsets. 1633- [Indic] Fix old-spec reordering of viramas if sequence ends in one. 1634- Fix multi-threaded shaper data creation crash. 1635- Add atomic ops for Solaris. 1636 1637API changes: 1638- Rename hb_buffer_clear() to hb_buffer_clear_contents(). 1639 1640 1641Overview of changes leading to 0.9.10 1642Thursday, January 3, 2013 1643===================================== 1644 1645- [Indic] Fixed rendering of Malayalam dot-reph 1646- Updated OT language tags. 1647- Updated graphite2 backend. 1648- Improved hb_ot_layout_get_size_params() logic. 1649- Improve hb-shape/hb-view help output. 1650- Fixed hb-set.h implementation to not crash. 1651- Fixed various issues with hb_ot_layout_collect_lookups(). 1652- Various build fixes. 1653 1654New API: 1655 1656hb_graphite2_face_get_gr_face() 1657hb_graphite2_font_get_gr_font() 1658hb_coretext_face_get_cg_font() 1659 1660Modified API: 1661 1662hb_ot_layout_get_size_params() 1663 1664 1665Overview of changes leading to 0.9.9 1666Wednesday, December 5, 2012 1667==================================== 1668 1669- Fix build on Windows. 1670- Minor improvements. 1671 1672 1673Overview of changes leading to 0.9.8 1674Tuesday, December 4, 2012 1675==================================== 1676 1677 1678- Actually implement hb_shape_plan_get_shaper (). 1679- Make UCDB data tables const. 1680- Lots of internal refactoring in OTLayout tables. 1681- Flesh out hb_ot_layout_lookup_collect_glyphs(). 1682 1683New API: 1684 1685hb_ot_layout_collect_lookups() 1686hb_ot_layout_get_size_params() 1687 1688 1689Overview of changes leading to 0.9.7 1690Sunday, November 21, 2012 1691==================================== 1692 1693 1694HarfBuzz "All-You-Can-Eat-Sushi" (aka Vancouver) Hackfest and follow-on fixes. 1695 1696- Fix Arabic contextual joining using pre-context text. 1697- Fix Sinhala "split matra" mess. 1698- Fix Khmer shaping with broken fonts. 1699- Implement Thai "PUA" shaping for old fonts. 1700- Do NOT route Kharoshthi script through the Indic shaper. 1701- Disable fallback positioning for Indic and Thai shapers. 1702- Misc fixes. 1703 1704 1705hb-shape / hb-view changes: 1706 1707- Add --text-before and --text-after 1708- Add --bot / --eot / --preserve-default-ignorables 1709- hb-shape --output-format=json 1710 1711 1712New API: 1713 1714hb_buffer_clear() 1715 1716hb_buffer_flags_t 1717 1718HB_BUFFER_FLAGS_DEFAULT 1719HB_BUFFER_FLAG_BOT 1720HB_BUFFER_FLAG_EOT 1721HB_BUFFER_FLAG_PRESERVE_DEFAULT_IGNORABLES 1722 1723hb_buffer_set_flags() 1724hb_buffer_get_flags() 1725 1726HB_BUFFER_SERIALIZE_FLAGS 1727hb_buffer_serialize_glyphs() 1728hb_buffer_deserialize_glyphs() 1729hb_buffer_serialize_list_formats() 1730 1731hb_set_add_range() 1732hb_set_del_range() 1733hb_set_get_population() 1734hb_set_next_range() 1735 1736hb_face_[sg]et_glyph_count() 1737 1738hb_segment_properties_t 1739HB_SEGMENT_PROPERTIES_DEFAULT 1740hb_segment_properties_equal() 1741hb_segment_properties_hash() 1742 1743hb_buffer_set_segment_properties() 1744hb_buffer_get_segment_properties() 1745 1746hb_ot_layout_glyph_class_t 1747hb_ot_layout_get_glyph_class() 1748hb_ot_layout_get_glyphs_in_class() 1749 1750hb_shape_plan_t 1751hb_shape_plan_create() 1752hb_shape_plan_create_cached() 1753hb_shape_plan_get_empty() 1754hb_shape_plan_reference() 1755hb_shape_plan_destroy() 1756hb_shape_plan_set_user_data() 1757hb_shape_plan_get_user_data() 1758hb_shape_plan_execute() 1759hb_shape_plan_get_shaper() 1760 1761hb_ot_shape_plan_collect_lookups() 1762 1763 1764API changes: 1765 1766- Remove "mask" parameter from hb_buffer_add(). 1767- Rename hb_ot_layout_would_substitute_lookup() and hb_ot_layout_substitute_closure_lookup(). 1768- hb-set.h API const correction. 1769- Renamed hb_set_min/max() to hb_set_get_min/max(). 1770- Rename hb_ot_layout_feature_get_lookup_indexes() to hb_ot_layout_feature_get_lookups(). 1771- Rename hb_buffer_guess_properties() to hb_buffer_guess_segment_properties(). 1772 1773 1774 1775Overview of changes leading to 0.9.6 1776Sunday, November 13, 2012 1777==================================== 1778 1779- Don't clear pre-context text if no new context is provided. 1780- Fix ReverseChainingSubstLookup, which was totally borked. 1781- Adjust output format of hb-shape a bit. 1782- Include config.h.in in-tree. Makes it easier for alternate build systems. 1783- Fix hb_buffer_set_length(buffer, 0) invalid memory allocation. 1784- Use ICU LayoutEngine's C API instead of C++. Avoids much headache. 1785- Drop glyphs for all of Unicode Default_Ignorable characters. 1786- Misc build fixes. 1787 1788Arabic shaper: 1789- Enable 'dlig' and 'mset' features in Arabic shaper. 1790- Implement 'Phags-pa shaping, improve Mongolian. 1791 1792Indic shaper: 1793- Decompose Sinhala split matras the way old HarfBuzz / Pango did. 1794- Initial support for Consonant Medials. 1795- Start adding new-style Myanmar shaping. 1796- Make reph and 'pref' logic introspect the font. 1797- Route Meetei-Mayek through the Indic shaper. 1798- Don't apply 'liga' in Indic shaper. 1799- Improve Malayalam pre-base reordering Ra interaction with Chillus. 1800 1801 1802 1803Overview of changes leading to 0.9.5 1804Sunday, October 14, 2012 1805==================================== 1806 1807- Synthetic-GSUB Arabic fallback shaping. 1808 1809- Misc Indic improvements. 1810 1811- Add build system support for pthread. 1812 1813- Imported UCDN for in-tree Unicode callbacks implementation. 1814 1815- Context-aware Arabic joining. 1816 1817- Misc other fixes. 1818 1819- New API: 1820 1821 hb_feature_to/from-string() 1822 hb_buffer_[sg]et_content_type() 1823 1824 1825 1826Overview of changes leading to 0.9.4 1827Tuesday, Sep 03, 2012 1828==================================== 1829 1830- Indic improvements with old-spec Malayalam. 1831 1832- Better fallback glyph positioning, specially with Thai / Lao marks. 1833 1834- Implement dotted-circle insertion. 1835 1836- Better Arabic fallback shaping / ligation. 1837 1838- Added ICU LayoutEngine backend for testing. Call it by the 'icu_le' name. 1839 1840- Misc fixes. 1841 1842 1843 1844Overview of changes leading to 0.9.3 1845Friday, Aug 18, 2012 1846==================================== 1847 1848- Fixed fallback mark positioning for left-to-right text. 1849 1850- Improve mark positioning for the remaining combining classes. 1851 1852- Unbreak Thai and fallback Arabic shaping. 1853 1854- Port Arabic shaper to shape-plan caching. 1855 1856- Use new ICU normalizer functions. 1857 1858 1859 1860Overview of changes leading to 0.9.2 1861Friday, Aug 10, 2012 1862==================================== 1863 1864- Over a thousand commits! This is the first major release of HarfBuzz. 1865 1866- HarfBuzz is feature-complete now! It should be in par, or better, than 1867 both Pango's shapers and old HarfBuzz / Qt shapers. 1868 1869- New Indic shaper, supporting main Indic scripts, Sinhala, and Khmer. 1870 1871- Improved Arabic shaper, with fallback Arabic shaping, supporting Arabic, 1872 Sinhala, N'ko, Mongolian, and Mandaic. 1873 1874- New Thai / Lao shaper. 1875 1876- Tibetan / Hangul support in the generic shaper. 1877 1878- Synthetic GDEF support for fonts without a GDEF table. 1879 1880- Fallback mark positioning for fonts without a GPOS table. 1881 1882- Unicode normalization shaping heuristic during glyph mapping. 1883 1884- New experimental Graphite2 backend. 1885 1886- New Uniscribe backend (primarily for testing). 1887 1888- New CoreText backend (primarily for testing). 1889 1890- Major optimization and speedup. 1891 1892- Test suites and testing infrastructure (work in progress). 1893 1894- Greatly improved hb-view cmdline tool. 1895 1896- hb-shape cmdline tool. 1897 1898- Unicode 6.1 support. 1899 1900Summary of API changes: 1901 1902o Changed API: 1903 1904 - Users are expected to only include main header files now (ie. hb.h, 1905 hb-glib.h, hb-ft.h, ...) 1906 1907 - All struct tag names had their initial underscore removed. 1908 Ie. "struct _hb_buffer_t" is "struct hb_buffer_t" now. 1909 1910 - All set_user_data() functions now take a "replace" boolean parameter. 1911 1912 - hb_buffer_create() takes zero arguments now. 1913 Use hb_buffer_pre_allocate() to pre-allocate. 1914 1915 - hb_buffer_add_utf*() now accept -1 for length parameteres, 1916 meaning "nul-terminated". 1917 1918 - hb_direction_t enum values changed. 1919 1920 - All *_from_string() APIs now take a length parameter to allow for 1921 non-nul-terminated strings. A -1 length means "nul-terminated". 1922 1923 - Typedef for hb_language_t changed. 1924 1925 - hb_get_table_func_t renamed to hb_reference_table_func_t. 1926 1927 - hb_ot_layout_table_choose_script() 1928 1929 - Various renames in hb-unicode.h. 1930 1931o New API: 1932 1933 - hb_buffer_guess_properties() 1934 Automatically called by hb_shape(). 1935 1936 - hb_buffer_normalize_glyphs() 1937 1938 - hb_tag_from_string() 1939 1940 - hb-coretext.h 1941 1942 - hb-uniscribe.h 1943 1944 - hb_face_reference_blob() 1945 - hb_face_[sg]et_index() 1946 - hb_face_set_upem() 1947 1948 - hb_font_get_glyph_name_func_t 1949 hb_font_get_glyph_from_name_func_t 1950 hb_font_funcs_set_glyph_name_func() 1951 hb_font_funcs_set_glyph_from_name_func() 1952 hb_font_get_glyph_name() 1953 hb_font_get_glyph_from_name() 1954 hb_font_glyph_to_string() 1955 hb_font_glyph_from_string() 1956 1957 - hb_font_set_funcs_data() 1958 1959 - hb_ft_font_set_funcs() 1960 - hb_ft_font_get_face() 1961 1962 - hb-gobject.h (work in progress) 1963 1964 - hb_ot_shape_glyphs_closure() 1965 hb_ot_layout_substitute_closure_lookup() 1966 1967 - hb-set.h 1968 1969 - hb_shape_full() 1970 1971 - hb_unicode_combining_class_t 1972 1973 - hb_unicode_compose_func_t 1974 hb_unicode_decompose_func_t 1975 hb_unicode_decompose_compatibility_func_t 1976 hb_unicode_funcs_set_compose_func() 1977 hb_unicode_funcs_set_decompose_func() 1978 hb_unicode_funcs_set_decompose_compatibility_func() 1979 hb_unicode_compose() 1980 hb_unicode_decompose() 1981 hb_unicode_decompose_compatibility() 1982 1983o Removed API: 1984 1985 - hb_ft_get_font_funcs() 1986 1987 - hb_ot_layout_substitute_start() 1988 hb_ot_layout_substitute_lookup() 1989 hb_ot_layout_substitute_finish() 1990 hb_ot_layout_position_start() 1991 hb_ot_layout_position_lookup() 1992 hb_ot_layout_position_finish() 1993 1994 1995 1996Overview of changes leading to 0.6.0 1997Friday, May 27, 2011 1998==================================== 1999 2000- Vertical text support in GPOS 2001- Almost all API entries have unit tests now, under test/ 2002- All thread-safety issues are fixed 2003 2004Summary of API changes follows. 2005 2006 2007* Simple Types API: 2008 2009 o New API: 2010 HB_LANGUAGE_INVALID 2011 hb_language_get_default() 2012 hb_direction_to_string() 2013 hb_direction_from_string() 2014 hb_script_get_horizontal_direction() 2015 HB_UNTAG() 2016 2017 o Renamed API: 2018 hb_category_t renamed to hb_unicode_general_category_t 2019 2020 o Changed API: 2021 hb_language_t is a typed pointers now 2022 2023 o Removed API: 2024 HB_TAG_STR() 2025 2026 2027* Use ISO 15924 tags for hb_script_t: 2028 2029 o New API: 2030 hb_script_from_iso15924_tag() 2031 hb_script_to_iso15924_tag() 2032 hb_script_from_string() 2033 2034 o Changed API: 2035 HB_SCRIPT_* enum members changed value. 2036 2037 2038* Buffer API streamlined: 2039 2040 o New API: 2041 hb_buffer_reset() 2042 hb_buffer_set_length() 2043 hb_buffer_allocation_successful() 2044 2045 o Renamed API: 2046 hb_buffer_ensure() renamed to hb_buffer_pre_allocate() 2047 hb_buffer_add_glyph() renamed to hb_buffer_add() 2048 2049 o Removed API: 2050 hb_buffer_clear() 2051 hb_buffer_clear_positions() 2052 2053 o Changed API: 2054 hb_buffer_get_glyph_infos() takes an out length parameter now 2055 hb_buffer_get_glyph_positions() takes an out length parameter now 2056 2057 2058* Blob API streamlined: 2059 2060 o New API: 2061 hb_blob_get_data() 2062 hb_blob_get_data_writable() 2063 2064 o Renamed API: 2065 hb_blob_create_empty() renamed to hb_blob_get_empty() 2066 2067 o Removed API: 2068 hb_blob_lock() 2069 hb_blob_unlock() 2070 hb_blob_is_writable() 2071 hb_blob_try_writable() 2072 2073 o Changed API: 2074 hb_blob_create() takes user_data before destroy now 2075 2076 2077* Unicode functions API: 2078 2079 o Unicode function vectors can subclass other unicode function vectors now. 2080 Unimplemented callbacks in the subclass automatically chainup to the parent. 2081 2082 o All hb_unicode_funcs_t callbacks take a user_data now. Their setters 2083 take a user_data and its respective destroy callback. 2084 2085 o New API: 2086 hb_unicode_funcs_get_empty() 2087 hb_unicode_funcs_get_default() 2088 hb_unicode_funcs_get_parent() 2089 2090 o Changed API: 2091 hb_unicode_funcs_create() now takes a parent_funcs. 2092 2093 o Removed func getter functions: 2094 hb_unicode_funcs_get_mirroring_func() 2095 hb_unicode_funcs_get_general_category_func() 2096 hb_unicode_funcs_get_script_func() 2097 hb_unicode_funcs_get_combining_class_func() 2098 hb_unicode_funcs_get_eastasian_width_func() 2099 2100 2101* Face API: 2102 2103 o Renamed API: 2104 hb_face_get_table() renamed to hb_face_reference_table() 2105 hb_face_create_for_data() renamed to hb_face_create() 2106 2107 o Changed API: 2108 hb_face_create_for_tables() takes user_data before destroy now 2109 hb_face_reference_table() returns empty blob instead of NULL 2110 hb_get_table_func_t accepts the face as first parameter now 2111 2112* Font API: 2113 2114 o Fonts can subclass other fonts now. Unimplemented callbacks in the 2115 subclass automatically chainup to the parent. When chaining up, 2116 scale is adjusted if the parent font has a different scale. 2117 2118 o All hb_font_funcs_t callbacks take a user_data now. Their setters 2119 take a user_data and its respective destroy callback. 2120 2121 o New API: 2122 hb_font_get_parent() 2123 hb_font_funcs_get_empty() 2124 hb_font_create_sub_font() 2125 2126 o Removed API: 2127 hb_font_funcs_copy() 2128 hb_font_unset_funcs() 2129 2130 o Removed func getter functions: 2131 hb_font_funcs_get_glyph_func() 2132 hb_font_funcs_get_glyph_advance_func() 2133 hb_font_funcs_get_glyph_extents_func() 2134 hb_font_funcs_get_contour_point_func() 2135 hb_font_funcs_get_kerning_func() 2136 2137 o Changed API: 2138 hb_font_create() takes a face and references it now 2139 hb_font_set_funcs() takes user_data before destroy now 2140 hb_font_set_scale() accepts signed integers now 2141 hb_font_get_contour_point_func_t now takes glyph first, then point_index 2142 hb_font_get_glyph_func_t returns a success boolean now 2143 2144 2145* Changed object model: 2146 2147 o All object types have a _get_empty() now: 2148 hb_blob_get_empty() 2149 hb_buffer_get_empty() 2150 hb_face_get_empty() 2151 hb_font_get_empty() 2152 hb_font_funcs_get_empty() 2153 hb_unicode_funcs_get_empty() 2154 2155 o Added _set_user_data() and _get_user_data() for all object types: 2156 hb_blob_get_user_data() 2157 hb_blob_set_user_data() 2158 hb_buffer_get_user_data() 2159 hb_buffer_set_user_data() 2160 hb_face_get_user_data() 2161 hb_face_set_user_data() 2162 hb_font_funcs_get_user_data() 2163 hb_font_funcs_set_user_data() 2164 hb_font_get_user_data() 2165 hb_font_set_user_data() 2166 hb_unicode_funcs_get_user_data() 2167 hb_unicode_funcs_set_user_data() 2168 2169 o Removed the _get_reference_count() from all object types: 2170 hb_blob_get_reference_count() 2171 hb_buffer_get_reference_count() 2172 hb_face_get_reference_count() 2173 hb_font_funcs_get_reference_count() 2174 hb_font_get_reference_count() 2175 hb_unicode_funcs_get_reference_count() 2176 2177 o Added _make_immutable() and _is_immutable() for all object types except for buffer: 2178 hb_blob_make_immutable() 2179 hb_blob_is_immutable() 2180 hb_face_make_immutable() 2181 hb_face_is_immutable() 2182 2183 2184* Changed API for vertical text support 2185 2186 o The following callbacks where removed: 2187 hb_font_get_glyph_advance_func_t 2188 hb_font_get_kerning_func_t 2189 2190 o The following new callbacks added instead: 2191 hb_font_get_glyph_h_advance_func_t 2192 hb_font_get_glyph_v_advance_func_t 2193 hb_font_get_glyph_h_origin_func_t 2194 hb_font_get_glyph_v_origin_func_t 2195 hb_font_get_glyph_h_kerning_func_t 2196 hb_font_get_glyph_v_kerning_func_t 2197 2198 o The following API removed as such: 2199 hb_font_funcs_set_glyph_advance_func() 2200 hb_font_funcs_set_kerning_func() 2201 hb_font_get_glyph_advance() 2202 hb_font_get_kerning() 2203 2204 o New API added instead: 2205 hb_font_funcs_set_glyph_h_advance_func() 2206 hb_font_funcs_set_glyph_v_advance_func() 2207 hb_font_funcs_set_glyph_h_origin_func() 2208 hb_font_funcs_set_glyph_v_origin_func() 2209 hb_font_funcs_set_glyph_h_kerning_func() 2210 hb_font_funcs_set_glyph_v_kerning_func() 2211 hb_font_get_glyph_h_advance() 2212 hb_font_get_glyph_v_advance() 2213 hb_font_get_glyph_h_origin() 2214 hb_font_get_glyph_v_origin() 2215 hb_font_get_glyph_h_kerning() 2216 hb_font_get_glyph_v_kerning() 2217 2218 o The following higher-leve API added for convenience: 2219 hb_font_get_glyph_advance_for_direction() 2220 hb_font_get_glyph_origin_for_direction() 2221 hb_font_add_glyph_origin_for_direction() 2222 hb_font_subtract_glyph_origin_for_direction() 2223 hb_font_get_glyph_kerning_for_direction() 2224 hb_font_get_glyph_extents_for_origin() 2225 hb_font_get_glyph_contour_point_for_origin() 2226 2227 2228* OpenType Layout API: 2229 2230 o New API: 2231 hb_ot_layout_position_start() 2232 hb_ot_layout_substitute_start() 2233 hb_ot_layout_substitute_finish() 2234 2235 2236* Glue code: 2237 2238 o New API: 2239 hb_glib_script_to_script() 2240 hb_glib_script_from_script() 2241 hb_icu_script_to_script() 2242 hb_icu_script_from_script() 2243 2244 2245* Version API added: 2246 2247 o New API: 2248 HB_VERSION_MAJOR 2249 HB_VERSION_MINOR 2250 HB_VERSION_MICRO 2251 HB_VERSION_STRING 2252 HB_VERSION_CHECK() 2253 hb_version() 2254 hb_version_string() 2255 hb_version_check() 2256 2257 2258