1Overview of changes leading to 0.9.14 2Thursday, March 21, 2013 3===================================== 4 5- Build fixes. 6- Fix time-consuming sanitize with malicious fonts. 7- Implement hb_buffer_deserialize_glyphs() for both json and text. 8- Do not ignore Hangul filler characters. 9- Indic fixes: 10 * Fix Malayalam pre-base reordering interaction with post-forms. 11 * Further adjust ZWJ handling. Should fix known regressions from 12 0.9.13. 13 14 15Overview of changes leading to 0.9.13 16Thursday, February 25, 2013 17===================================== 18 19- Build fixes. 20- Ngapi HarfBuzz Hackfest in London (February 2013): 21 * Fixed all known Indic bugs, 22 * New Win8-style Myanmar shaper, 23 * New South-East Asian shaper for Tai Tham, Cham, and New Tai Lue, 24 * Smartly ignore Default_Ignorable characters (joiners, etc) wheb 25 matching GSUB/GPOS lookups, 26 * Fix 'Phags-Pa U+A872 shaping, 27 * Fix partial disabling of default-on features, 28 * Allow disabling of TrueType kerning. 29- Fix possible crasher with broken fonts with overlapping tables. 30- Removed generated files from git again. So, one needs ragel to 31 bootstrap from the git tree. 32 33API changes: 34- hb_shape() and related APIs now abort if buffer direction is 35 HB_DIRECTION_INVALID. Previously, hb_shape() was calling 36 hb_buffer_guess_segment_properties() on the buffer before 37 shaping. The heuristics in that function are fragile. If the 38 user really wants the old behvaior, they can call that function 39 right before calling hb_shape() to get the old behavior. 40- hb_blob_create_sub_blob() always creates sub-blob with 41 HB_MEMORY_MODE_READONLY. See comments for the reason. 42 43 44Overview of changes leading to 0.9.12 45Thursday, January 18, 2013 46===================================== 47 48- Build fixes for Sun compiler. 49- Minor bug fix. 50 51Overview of changes leading to 0.9.11 52Thursday, January 10, 2013 53===================================== 54 55- Build fixes. 56- Fix GPOS mark attachment with null Anchor offsets. 57- [Indic] Fix old-spec reordering of viramas if sequence ends in one. 58- Fix multi-threaded shaper data creation crash. 59- Add atomic ops for Solaris. 60 61API changes: 62- Rename hb_buffer_clear() to hb_buffer_clear_contents(). 63 64 65Overview of changes leading to 0.9.10 66Thursday, January 3, 2013 67===================================== 68 69- [Indic] Fixed rendering of Malayalam dot-reph 70- Updated OT language tags. 71- Updated graphite2 backend. 72- Improved hb_ot_layout_get_size_params() logic. 73- Improve hb-shape/hb-view help output. 74- Fixed hb-set.h implementation to not crash. 75- Fixed various issues with hb_ot_layout_collect_lookups(). 76- Various build fixes. 77 78New API: 79 80hb_graphite2_face_get_gr_face() 81hb_graphite2_font_get_gr_font() 82hb_coretext_face_get_cg_font() 83 84Modified API: 85 86hb_ot_layout_get_size_params() 87 88 89Overview of changes leading to 0.9.9 90Wednesday, December 5, 2012 91==================================== 92 93- Fix build on Windows. 94- Minor improvements. 95 96 97Overview of changes leading to 0.9.8 98Tuesday, December 4, 2012 99==================================== 100 101 102- Actually implement hb_shape_plan_get_shaper (). 103- Make UCDB data tables const. 104- Lots of internal refactoring in OTLayout tables. 105- Flesh out hb_ot_layout_lookup_collect_glyphs(). 106 107New API: 108 109hb_ot_layout_collect_lookups() 110hb_ot_layout_get_size_params() 111 112 113Overview of changes leading to 0.9.7 114Sunday, November 21, 2012 115==================================== 116 117 118HarfBuzz "All-You-Can-Eat-Sushi" (aka Vancouver) Hackfest and follow-on fixes. 119 120- Fix Arabic contextual joining using pre-context text. 121- Fix Sinhala "split matra" mess. 122- Fix Khmer shaping with broken fonts. 123- Implement Thai "PUA" shaping for old fonts. 124- Do NOT route Kharoshthi script through the Indic shaper. 125- Disable fallback positioning for Indic and Thai shapers. 126- Misc fixes. 127 128 129hb-shape / hb-view changes: 130 131- Add --text-before and --text-after 132- Add --bot / --eot / --preserve-default-ignorables 133- hb-shape --output-format=json 134 135 136New API: 137 138hb_buffer_clear() 139 140hb_buffer_flags_t 141 142HB_BUFFER_FLAGS_DEFAULT 143HB_BUFFER_FLAG_BOT 144HB_BUFFER_FLAG_EOT 145HB_BUFFER_FLAG_PRESERVE_DEFAULT_IGNORABLES 146 147hb_buffer_set_flags() 148hb_buffer_get_flags() 149 150HB_BUFFER_SERIALIZE_FLAGS 151hb_buffer_serialize_glyphs() 152hb_buffer_deserialize_glyphs() 153hb_buffer_serialize_list_formats() 154 155hb_set_add_range() 156hb_set_del_range() 157hb_set_get_population() 158hb_set_next_range() 159 160hb_face_[sg]et_glyph_count() 161 162hb_segment_properties_t 163HB_SEGMENT_PROPERTIES_DEFAULT 164hb_segment_properties_equal() 165hb_segment_properties_hash() 166 167hb_buffer_set_segment_properties() 168hb_buffer_get_segment_properties() 169 170hb_ot_layout_glyph_class_t 171hb_ot_layout_get_glyph_class() 172hb_ot_layout_get_glyphs_in_class() 173 174hb_shape_plan_t 175hb_shape_plan_create() 176hb_shape_plan_create_cached() 177hb_shape_plan_get_empty() 178hb_shape_plan_reference() 179hb_shape_plan_destroy() 180hb_shape_plan_set_user_data() 181hb_shape_plan_get_user_data() 182hb_shape_plan_execute() 183hb_shape_plan_get_shaper() 184 185hb_ot_shape_plan_collect_lookups() 186 187 188API changes: 189 190- Remove "mask" parameter from hb_buffer_add(). 191- Rename hb_ot_layout_would_substitute_lookup() and hb_ot_layout_substitute_closure_lookup(). 192- hb-set.h API const correction. 193- Renamed hb_set_min/max() to hb_set_get_min/max(). 194- Rename hb_ot_layout_feature_get_lookup_indexes() to hb_ot_layout_feature_get_lookups(). 195- Rename hb_buffer_guess_properties() to hb_buffer_guess_segment_properties(). 196 197 198 199Overview of changes leading to 0.9.6 200Sunday, November 13, 2012 201==================================== 202 203- Don't clear pre-context text if no new context is provided. 204- Fix ReverseChainingSubstLookup, which was totally borked. 205- Adjust output format of hb-shape a bit. 206- Include config.h.in in-tree. Makes it easier for alternate build systems. 207- Fix hb_buffer_set_length(buffer, 0) invalid memory allocation. 208- Use ICU LayoutEngine's C API instead of C++. Avoids much headache. 209- Drop glyphs for all of Unicode Default_Ignorable characters. 210- Misc build fixes. 211 212Arabic shaper: 213- Enable 'dlig' and 'mset' features in Arabic shaper. 214- Implement 'Phags-pa shaping, improve Mongolian. 215 216Indic shaper: 217- Decompose Sinhala split matras the way old HarfBuzz / Pango did. 218- Initial support for Consonant Medials. 219- Start adding new-style Myanmar shaping. 220- Make reph and 'pref' logic introspect the font. 221- Route Meetei-Mayek through the Indic shaper. 222- Don't apply 'liga' in Indic shaper. 223- Improve Malayalam pre-base reordering Ra interaction with Chillus. 224 225 226 227Overview of changes leading to 0.9.5 228Sunday, October 14, 2012 229==================================== 230 231- Synthetic-GSUB Arabic fallback shaping. 232 233- Misc Indic improvements. 234 235- Add build system support for pthread. 236 237- Imported UCDN for in-tree Unicode callbacks implementation. 238 239- Context-aware Arabic joining. 240 241- Misc other fixes. 242 243- New API: 244 245 hb_feature_to/from-string() 246 hb_buffer_[sg]et_content_type() 247 248 249 250Overview of changes leading to 0.9.4 251Tuesday, Sep 03, 2012 252==================================== 253 254- Indic improvements with old-spec Malayalam. 255 256- Better fallback glyph positioning, specially with Thai / Lao marks. 257 258- Implement dotted-circle insertion. 259 260- Better Arabic fallback shaping / ligation. 261 262- Added ICU LayoutEngine backend for testing. Call it by the 'icu_le' name. 263 264- Misc fixes. 265 266 267 268Overview of changes leading to 0.9.3 269Friday, Aug 18, 2012 270==================================== 271 272- Fixed fallback mark positioning for left-to-right text. 273 274- Improve mark positioning for the remaining combining classes. 275 276- Unbreak Thai and fallback Arabic shaping. 277 278- Port Arabic shaper to shape-plan caching. 279 280- Use new ICU normalizer functions. 281 282 283 284Overview of changes leading to 0.9.2 285Friday, Aug 10, 2012 286==================================== 287 288- Over a thousand commits! This is the first major release of HarfBuzz. 289 290- HarfBuzz is feature-complete now! It should be in par, or better, than 291 both Pango's shapers and old HarfBuzz / Qt shapers. 292 293- New Indic shaper, supporting main Indic scripts, Sinhala, and Khmer. 294 295- Improved Arabic shaper, with fallback Arabic shaping, supporting Arabic, 296 Sinhala, N'ko, Mongolian, and Mandaic. 297 298- New Thai / Lao shaper. 299 300- Tibetan / Hangul support in the generic shaper. 301 302- Synthetic GDEF support for fonts without a GDEF table. 303 304- Fallback mark positioning for fonts without a GPOS table. 305 306- Unicode normalization shaping heuristic during glyph mapping. 307 308- New experimental Graphite2 backend. 309 310- New Uniscribe backend (primarily for testing). 311 312- New CoreText backend (primarily for testing). 313 314- Major optimization and speedup. 315 316- Test suites and testing infrastructure (work in progress). 317 318- Greatly improved hb-view cmdline tool. 319 320- hb-shape cmdline tool. 321 322- Unicode 6.1 support. 323 324Summary of API changes: 325 326o Changed API: 327 328 - Users are expected to only include main header files now (ie. hb.h, 329 hb-glib.h, hb-ft.h, ...) 330 331 - All struct tag names had their initial underscore removed. 332 Ie. "struct _hb_buffer_t" is "struct hb_buffer_t" now. 333 334 - All set_user_data() functions now take a "replace" boolean parameter. 335 336 - hb_buffer_create() takes zero arguments now. 337 Use hb_buffer_pre_allocate() to pre-allocate. 338 339 - hb_buffer_add_utf*() now accept -1 for length parameteres, 340 meaning "nul-terminated". 341 342 - hb_direction_t enum values changed. 343 344 - All *_from_string() APIs now take a length parameter to allow for 345 non-nul-terminated strings. A -1 length means "nul-terminated". 346 347 - Typedef for hb_language_t changed. 348 349 - hb_get_table_func_t renamed to hb_reference_table_func_t. 350 351 - hb_ot_layout_table_choose_script() 352 353 - Various renames in hb-unicode.h. 354 355o New API: 356 357 - hb_buffer_guess_properties() 358 Automatically called by hb_shape(). 359 360 - hb_buffer_normalize_glyphs() 361 362 - hb_tag_from_string() 363 364 - hb-coretext.h 365 366 - hb-uniscribe.h 367 368 - hb_face_reference_blob() 369 - hb_face_[sg]et_index() 370 - hb_face_set_upem() 371 372 - hb_font_get_glyph_name_func_t 373 hb_font_get_glyph_from_name_func_t 374 hb_font_funcs_set_glyph_name_func() 375 hb_font_funcs_set_glyph_from_name_func() 376 hb_font_get_glyph_name() 377 hb_font_get_glyph_from_name() 378 hb_font_glyph_to_string() 379 hb_font_glyph_from_string() 380 381 - hb_font_set_funcs_data() 382 383 - hb_ft_font_set_funcs() 384 - hb_ft_font_get_face() 385 386 - hb-gobject.h (work in progress) 387 388 - hb_ot_shape_glyphs_closure() 389 hb_ot_layout_substitute_closure_lookup() 390 391 - hb-set.h 392 393 - hb_shape_full() 394 395 - hb_unicode_combining_class_t 396 397 - hb_unicode_compose_func_t 398 hb_unicode_decompose_func_t 399 hb_unicode_decompose_compatibility_func_t 400 hb_unicode_funcs_set_compose_func() 401 hb_unicode_funcs_set_decompose_func() 402 hb_unicode_funcs_set_decompose_compatibility_func() 403 hb_unicode_compose() 404 hb_unicode_decompose() 405 hb_unicode_decompose_compatibility() 406 407o Removed API: 408 409 - hb_ft_get_font_funcs() 410 411 - hb_ot_layout_substitute_start() 412 hb_ot_layout_substitute_lookup() 413 hb_ot_layout_substitute_finish() 414 hb_ot_layout_position_start() 415 hb_ot_layout_position_lookup() 416 hb_ot_layout_position_finish() 417 418 419 420Overview of changes leading to 0.6.0 421Friday, May 27, 2011 422==================================== 423 424- Vertical text support in GPOS 425- Almost all API entries have unit tests now, under test/ 426- All thread-safety issues are fixed 427 428Summary of API changes follows. 429 430 431* Simple Types API: 432 433 o New API: 434 HB_LANGUAGE_INVALID 435 hb_language_get_default() 436 hb_direction_to_string() 437 hb_direction_from_string() 438 hb_script_get_horizontal_direction() 439 HB_UNTAG() 440 441 o Renamed API: 442 hb_category_t renamed to hb_unicode_general_category_t 443 444 o Changed API: 445 hb_language_t is a typed pointers now 446 447 o Removed API: 448 HB_TAG_STR() 449 450 451* Use ISO 15924 tags for hb_script_t: 452 453 o New API: 454 hb_script_from_iso15924_tag() 455 hb_script_to_iso15924_tag() 456 hb_script_from_string() 457 458 o Changed API: 459 HB_SCRIPT_* enum members changed value. 460 461 462* Buffer API streamlined: 463 464 o New API: 465 hb_buffer_reset() 466 hb_buffer_set_length() 467 hb_buffer_allocation_successful() 468 469 o Renamed API: 470 hb_buffer_ensure() renamed to hb_buffer_pre_allocate() 471 hb_buffer_add_glyph() renamed to hb_buffer_add() 472 473 o Removed API: 474 hb_buffer_clear() 475 hb_buffer_clear_positions() 476 477 o Changed API: 478 hb_buffer_get_glyph_infos() takes an out length parameter now 479 hb_buffer_get_glyph_positions() takes an out length parameter now 480 481 482* Blob API streamlined: 483 484 o New API: 485 hb_blob_get_data() 486 hb_blob_get_data_writable() 487 488 o Renamed API: 489 hb_blob_create_empty() renamed to hb_blob_get_empty() 490 491 o Removed API: 492 hb_blob_lock() 493 hb_blob_unlock() 494 hb_blob_is_writable() 495 hb_blob_try_writable() 496 497 o Changed API: 498 hb_blob_create() takes user_data before destroy now 499 500 501* Unicode functions API: 502 503 o Unicode function vectors can subclass other unicode function vectors now. 504 Unimplemented callbacks in the subclass automatically chainup to the parent. 505 506 o All hb_unicode_funcs_t callbacks take a user_data now. Their setters 507 take a user_data and its respective destroy callback. 508 509 o New API: 510 hb_unicode_funcs_get_empty() 511 hb_unicode_funcs_get_default() 512 hb_unicode_funcs_get_parent() 513 514 o Changed API: 515 hb_unicode_funcs_create() now takes a parent_funcs. 516 517 o Removed func getter functions: 518 hb_unicode_funcs_get_mirroring_func() 519 hb_unicode_funcs_get_general_category_func() 520 hb_unicode_funcs_get_script_func() 521 hb_unicode_funcs_get_combining_class_func() 522 hb_unicode_funcs_get_eastasian_width_func() 523 524 525* Face API: 526 527 o Renamed API: 528 hb_face_get_table() renamed to hb_face_reference_table() 529 hb_face_create_for_data() renamed to hb_face_create() 530 531 o Changed API: 532 hb_face_create_for_tables() takes user_data before destroy now 533 hb_face_reference_table() returns empty blob instead of NULL 534 hb_get_table_func_t accepts the face as first parameter now 535 536* Font API: 537 538 o Fonts can subclass other fonts now. Unimplemented callbacks in the 539 subclass automatically chainup to the parent. When chaining up, 540 scale is adjusted if the parent font has a different scale. 541 542 o All hb_font_funcs_t callbacks take a user_data now. Their setters 543 take a user_data and its respective destroy callback. 544 545 o New API: 546 hb_font_get_parent() 547 hb_font_funcs_get_empty() 548 hb_font_create_sub_font() 549 550 o Removed API: 551 hb_font_funcs_copy() 552 hb_font_unset_funcs() 553 554 o Removed func getter functions: 555 hb_font_funcs_get_glyph_func() 556 hb_font_funcs_get_glyph_advance_func() 557 hb_font_funcs_get_glyph_extents_func() 558 hb_font_funcs_get_contour_point_func() 559 hb_font_funcs_get_kerning_func() 560 561 o Changed API: 562 hb_font_create() takes a face and references it now 563 hb_font_set_funcs() takes user_data before destroy now 564 hb_font_set_scale() accepts signed integers now 565 hb_font_get_contour_point_func_t now takes glyph first, then point_index 566 hb_font_get_glyph_func_t returns a success boolean now 567 568 569* Changed object model: 570 571 o All object types have a _get_empty() now: 572 hb_blob_get_empty() 573 hb_buffer_get_empty() 574 hb_face_get_empty() 575 hb_font_get_empty() 576 hb_font_funcs_get_empty() 577 hb_unicode_funcs_get_empty() 578 579 o Added _set_user_data() and _get_user_data() for all object types: 580 hb_blob_get_user_data() 581 hb_blob_set_user_data() 582 hb_buffer_get_user_data() 583 hb_buffer_set_user_data() 584 hb_face_get_user_data() 585 hb_face_set_user_data() 586 hb_font_funcs_get_user_data() 587 hb_font_funcs_set_user_data() 588 hb_font_get_user_data() 589 hb_font_set_user_data() 590 hb_unicode_funcs_get_user_data() 591 hb_unicode_funcs_set_user_data() 592 593 o Removed the _get_reference_count() from all object types: 594 hb_blob_get_reference_count() 595 hb_buffer_get_reference_count() 596 hb_face_get_reference_count() 597 hb_font_funcs_get_reference_count() 598 hb_font_get_reference_count() 599 hb_unicode_funcs_get_reference_count() 600 601 o Added _make_immutable() and _is_immutable() for all object types except for buffer: 602 hb_blob_make_immutable() 603 hb_blob_is_immutable() 604 hb_face_make_immutable() 605 hb_face_is_immutable() 606 607 608* Changed API for vertical text support 609 610 o The following callbacks where removed: 611 hb_font_get_glyph_advance_func_t 612 hb_font_get_kerning_func_t 613 614 o The following new callbacks added instead: 615 hb_font_get_glyph_h_advance_func_t 616 hb_font_get_glyph_v_advance_func_t 617 hb_font_get_glyph_h_origin_func_t 618 hb_font_get_glyph_v_origin_func_t 619 hb_font_get_glyph_h_kerning_func_t 620 hb_font_get_glyph_v_kerning_func_t 621 622 o The following API removed as such: 623 hb_font_funcs_set_glyph_advance_func() 624 hb_font_funcs_set_kerning_func() 625 hb_font_get_glyph_advance() 626 hb_font_get_kerning() 627 628 o New API added instead: 629 hb_font_funcs_set_glyph_h_advance_func() 630 hb_font_funcs_set_glyph_v_advance_func() 631 hb_font_funcs_set_glyph_h_origin_func() 632 hb_font_funcs_set_glyph_v_origin_func() 633 hb_font_funcs_set_glyph_h_kerning_func() 634 hb_font_funcs_set_glyph_v_kerning_func() 635 hb_font_get_glyph_h_advance() 636 hb_font_get_glyph_v_advance() 637 hb_font_get_glyph_h_origin() 638 hb_font_get_glyph_v_origin() 639 hb_font_get_glyph_h_kerning() 640 hb_font_get_glyph_v_kerning() 641 642 o The following higher-leve API added for convenience: 643 hb_font_get_glyph_advance_for_direction() 644 hb_font_get_glyph_origin_for_direction() 645 hb_font_add_glyph_origin_for_direction() 646 hb_font_subtract_glyph_origin_for_direction() 647 hb_font_get_glyph_kerning_for_direction() 648 hb_font_get_glyph_extents_for_origin() 649 hb_font_get_glyph_contour_point_for_origin() 650 651 652* OpenType Layout API: 653 654 o New API: 655 hb_ot_layout_position_start() 656 hb_ot_layout_substitute_start() 657 hb_ot_layout_substitute_finish() 658 659 660* Glue code: 661 662 o New API: 663 hb_glib_script_to_script() 664 hb_glib_script_from_script() 665 hb_icu_script_to_script() 666 hb_icu_script_from_script() 667 668 669* Version API added: 670 671 o New API: 672 HB_VERSION_MAJOR 673 HB_VERSION_MINOR 674 HB_VERSION_MICRO 675 HB_VERSION_STRING 676 HB_VERSION_CHECK() 677 hb_version() 678 hb_version_string() 679 hb_version_check() 680 681 682