tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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