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