Home | History | Annotate | Download | only in harfbuzz_ng
      1 Overview of changes leading to 1.2.6
      2 Friday, April 8, 2016
      3 ====================================
      4 
      5 - Blacklist GDEF table of another set of Times New Roman (Bold) Italic.
      6 - DirectWrite backend improvements.  Note: DirectWrite backend is
      7   exclusively for our internal testing and should NOT be used in any
      8   production system whatsoever.
      9 
     10 
     11 Overview of changes leading to 1.2.5
     12 Monday, April 4, 2016
     13 ====================================
     14 
     15 - Fix GDEF mark-filtering-set, which was broken in 1.2.3.
     16 
     17 
     18 Overview of changes leading to 1.2.4
     19 Thursday, March 17, 2016
     20 ====================================
     21 
     22 - Synthesize GDEF glyph class for any glyph that does not have one in GDEF.
     23   I really hope we don't discover broken fonts that shape badly with this
     24   change.
     25 - Misc build and other minor fixes.
     26 - API changes:
     27   - Added HB_NDEBUG.  It's fine for production systems to define this to
     28     disable high-overhead debugging checks.  However, I also reduced the
     29     overhead of those checks, so it's a non-issue right now.  You can
     30     forget it.  Just not defining anything at all is fine.
     31 
     32 
     33 Overview of changes leading to 1.2.3
     34 Thursday, February 25, 2016
     35 ====================================
     36 
     37 - Blacklist GDEF table of certain versions of Times New Roman (Bold) Italic,
     38   due to bug in glyph class of ASCII double-quote character.  This should
     39   address "regression" introduced in 1.2.0 when we switched mark zeroing
     40   in most shapers from BY_UNICODE_LATE to BY_GDEF_LATE.
     41   This fourth release in a week should finally stablize things...
     42 
     43 - hb-ot-font's get_glyph() implementation saw some optimizations.  Though,
     44   might be really hard to measure in real-world situations.
     45 
     46 - Also, two rather small API changes:
     47 
     48 We now disable some time-consuming internal bookkeeping if built with NDEBUG
     49 defined.  This is a first time that we use NDEBUG to disable debug code.  If
     50 there exist production systems that do NOT want to enable NDEBUG, please let
     51 me know and I'll add HB_NDEBUG.
     52 
     53 Added get_nominal_glyph() and get_variation_glyph() instead of get_glyph()
     54 
     55 New API:
     56 - hb_font_get_nominal_glyph_func_t
     57 - hb_font_get_variation_glyph_func_t
     58 - hb_font_funcs_set_nominal_glyph_func()
     59 - hb_font_funcs_set_variation_glyph_func()
     60 - hb_font_get_nominal_glyph()
     61 - hb_font_get_variation_glyph()
     62 
     63 Deprecated API:
     64 - hb_font_get_glyph_func_t
     65 - hb_font_funcs_set_glyph_func()
     66 
     67 Clients that implement their own font-funcs are encouraged to replace
     68 their get_glyph() implementation with a get_nominal_glyph() and
     69 get_variation_glyph() pair.  The variation version can assume that
     70 variation_selector argument is not zero.  Old (deprecated) functions
     71 will continue working indefinitely using internal gymnastics; it is
     72 just more efficient to use the new functions.
     73 
     74 
     75 Overview of changes leading to 1.2.2
     76 Wednesday, February 24, 2016
     77 ====================================
     78 
     79 - Fix regression with mark positioning with fonts that have
     80   non-zero mark advances.  This was introduced in 1.2.0 while
     81   trying to make mark and cursive attachments to work together.
     82   I have partially reverted that, so this version is much more
     83   like what we had before.  All clients who updated to 1.2.0
     84   should update to this version.
     85 
     86 
     87 Overview of changes leading to 1.2.1
     88 Tuesday, February 23, 2016
     89 ====================================
     90 
     91 - CoreText: Fix bug with wrong scale if font scale was changed later.
     92   https://github.com/libass/libass/issues/212
     93 - CoreText: Drastically speed up font initialization.
     94 - CoreText: Fix tiny leak.
     95 - Group ZWJ/ZWNJ with previous syllable under cluster-level=0.
     96   https://github.com/behdad/harfbuzz/issues/217
     97 - Add test/shaping/README.md about how to add tests to the suite.
     98 
     99 
    100 Overview of changes leading to 1.2.0
    101 Friday, February 19, 2016
    102 ====================================
    103 
    104 - Fix various issues (hangs mostly) in case of memory allocation failure.
    105 - Change mark zeroing types of most shapers from BY_UNICODE_LATE to
    106   BY_GDEF_LATE.  This seems to be what Uniscribe does.
    107 - Change mark zeroing of USE shaper from NONE to BY_GDEF_EARLY.  That's
    108   what Windows does.
    109 - Allow GPOS cursive connection on marks, and fix the interaction with
    110   mark attachment.  This work resulted in some changes to how mark
    111   attachments work.  See:
    112   https://github.com/behdad/harfbuzz/issues/211
    113   https://github.com/behdad/harfbuzz/commit/86c68c7a2c971efe8e35b1f1bd99401dc8b688d2
    114 - Graphite2 shaper: improved negative advance handling (eg. Nastaliq).
    115 - Add nmake-based build system for Windows.
    116 - Minor speedup.
    117 - Misc. improvements.
    118 
    119 
    120 Overview of changes leading to 1.1.3
    121 Monday, January 11, 2016
    122 ====================================
    123 
    124 - Ported Indic shaper to Unicode 8.0 data.
    125 - Universal Shaping Engine fixes.
    126 - Speed up CoreText shaper when font fallback happens in CoreText.
    127 - Documentation improvements, thanks to Khaled Hosny.
    128 - Very rough directwrite shaper for testing, thanks to Ebrahim Byagowi.
    129 - Misc bug fixes.
    130 - New API:
    131 
    132   * Font extents:
    133       hb_font_extents_t
    134       hb_font_get_font_extents_func_t
    135       hb_font_get_font_h_extents_func_t
    136       hb_font_get_font_v_extents_func_t
    137       hb_font_funcs_set_font_h_extents_func
    138       hb_font_funcs_set_font_v_extents_func
    139       hb_font_get_h_extents
    140       hb_font_get_v_extents
    141       hb_font_get_extents_for_direction
    142 
    143   * Buffer message (aka debug):
    144       hb_buffer_message_func_t
    145       hb_buffer_set_message_func()
    146     Actual message protocol to be fleshed out later.
    147 
    148 
    149 Overview of changes leading to 1.1.2
    150 Wednesday, November 26, 2015
    151 ====================================
    152 
    153 - Fix badly-broken fallback shaper that affected terminology.
    154   https://github.com/behdad/harfbuzz/issues/187
    155 - Fix y_scaling in Graphite shaper.
    156 - API changes:
    157   * An unset glyph_h_origin() function in font-funcs now (sensibly)
    158     implies horizontal origin at 0,0.  Ie, the nil callback returns
    159     true instead of false.  As such, implementations that have a
    160     glyph_h_origin() that simply returns true, can remove that function
    161     with HarfBuzz >= 1.1.2.  This results in a tiny speedup.
    162 
    163 
    164 Overview of changes leading to 1.1.1
    165 Wednesday, November 24, 2015
    166 ====================================
    167 
    168 - Build fixes, specially for hb-coretext.
    169 
    170 
    171 Overview of changes leading to 1.1.0
    172 Wednesday, November 18, 2015
    173 ====================================
    174 
    175 - Implement 'stch' stretch feature for Syriac Abbreviation Mark.
    176   https://github.com/behdad/harfbuzz/issues/141
    177 - Disable use of decompose_compatibility() callback.
    178 - Implement "shaping" of various Unicode space characters, even
    179   if the font does not support them.
    180   https://github.com/behdad/harfbuzz/issues/153
    181 - If font does not support U+2011 NO-BREAK HYPHEN, fallback to
    182   U+2010 HYPHEN.
    183 - Changes resulting from libFuzzer continuous fuzzing:
    184   * Reject font tables that need more than 8 edits,
    185   * Bound buffer growth during shaping to 32x,
    186   * Fix assertions and other issues at OOM / buffer max-growth.
    187 - Misc fixes and optimizations.
    188 - API changes:
    189   * All fonts created with hb_font_create() now inherit from
    190     (ie. have parent) hb_font_get_empty().
    191 
    192 
    193 Overview of changes leading to 1.0.6
    194 Thursday, October 15, 2015
    195 ====================================
    196 
    197 - Reduce max nesting level in OT lookups from 8 to 6.
    198   Should not affect any real font as far as I know.
    199 - Fix memory access issue in ot-font.
    200 - Revert default load-flags of fonts created using hb_ft_font_create()
    201   back to FT_LOAD_DEFAULT|FT_LOAD_NO_HINTING.  This was changed in
    202   last release (1.0.5), but caused major issues, so revert.
    203   https://github.com/behdad/harfbuzz/issues/143
    204 
    205 
    206 Overview of changes leading to 1.0.5
    207 Tuesday, October 13, 2015
    208 ====================================
    209 
    210 - Fix multiple memory access bugs discovered using libFuzzer.
    211   https://github.com/behdad/harfbuzz/issues/139
    212   Everyone should upgrade to this version as soon as possible.
    213   We now have continuous fuzzing set up, to avoid issues like
    214   these creeping in again.
    215 - Misc fixes.
    216 
    217 - New API:
    218   * hb_font_set_parent().
    219   * hb_ft_font_[sg]et_load_flags()
    220     The default flags for fonts created using hb_ft_font_create()
    221     has changed to default to FT_LOAD_DEFAULT now.  Previously it
    222     was defaulting to FT_LOAD_DFEAULT|FT_LOAD_NO_HINTING.
    223 
    224 - API changes:
    225   * Fonts now default to units-per-EM as their scale, instead of 0.
    226   * hb_font_create_sub_font() does NOT make parent font immutable
    227     anymore.  hb_font_make_immutable() does.
    228 
    229 
    230 Overview of changes leading to 1.0.4
    231 Wednesday, September 30, 2015
    232 ====================================
    233 
    234 - Fix minor out-of-bounds read error.
    235 
    236 
    237 Overview of changes leading to 1.0.3
    238 Tuesday, September 1, 2015
    239 ====================================
    240 
    241 - Start of user documentation, from Simon Cozens!
    242 - Implement glyph_extents() for TrueType fonts in hb-ot-font.
    243 - Improve GPOS cursive attachments with conflicting lookups.
    244 - More fixes for cluster-level = 1.
    245 - Uniscribe positioning fix.
    246 
    247 
    248 Overview of changes leading to 1.0.2
    249 Wednesday, August 19, 2015
    250 ====================================
    251 
    252 - Fix shaping with cluster-level > 0.
    253 - Fix Uniscribe backend font-size scaling.
    254 - Declare dependencies in harfbuzz.pc.
    255   FreeType is not declared though, to avoid bugs in pkg-config
    256   0.26 with recursive dependencies.
    257 - Slightly improved debug infrastructure.  More to come later.
    258 - Misc build fixes.
    259 
    260 
    261 Overview of changes leading to 1.0.1
    262 Monday, July 27, 2015
    263 ====================================
    264 
    265 - Fix out-of-bounds access in USE shaper.
    266 
    267 
    268 Overview of changes leading to 1.0.0
    269 Sunday, July 26, 2015
    270 ====================================
    271 
    272 - Implement Universal Shaping Engine:
    273   https://www.microsoft.com/typography/OpenTypeDev/USE/intro.htm
    274   http://blogs.windows.com/bloggingwindows/2015/02/23/windows-shapes-the-worlds-languages/
    275 - Bump version to 1.0.0.  The soname was NOT bumped.
    276 
    277 
    278 Overview of changes leading to 0.9.42
    279 Thursday, July 26, 2015
    280 =====================================
    281 
    282 - New API to allow for retrieving finer-grained cluster
    283   mappings if the client desires to handle them.  Default
    284   behavior is unchanged.
    285 - Fix cluster merging when removing default-ignorables.
    286 - Update to Unicode 8.0
    287 - hb-graphite2 fixes.
    288 - Misc fixes.
    289 - Removed HB_NO_MERGE_CLUSTERS hack.
    290 - New API:
    291   hb_buffer_cluster_level_t enum
    292   hb_buffer_get_cluster_level()
    293   hb_buffer_set_cluster_level()
    294   hb-shape / hb-view --cluster-level
    295 
    296 
    297 Overview of changes leading to 0.9.41
    298 Thursday, June 18, 2015
    299 =====================================
    300 
    301 - Fix hb-coretext with trailing whitespace in right-to-left.
    302 - New API: hb_buffer_reverse_range().
    303 - Allow implementing atomic ops in config.h.
    304 - Fix hb_language_t in language bindings.
    305 - Misc fixes.
    306 
    307 
    308 Overview of changes leading to 0.9.40
    309 Friday, March 20, 2015
    310 =====================================
    311 
    312 - Another hb-coretext crasher fix.  Ouch!
    313 - Happy Norouz!
    314 
    315 
    316 Overview of changes leading to 0.9.39
    317 Wednesday, March 4, 2015
    318 =====================================
    319 
    320 - Critical hb-coretext fixes.
    321 - Optimizations and refactoring; no functional change
    322   expected.
    323 - Misc build fixes.
    324 
    325 
    326 Overview of changes leading to 0.9.38
    327 Friday, January 23, 2015
    328 =====================================
    329 
    330 - Fix minor out-of-bounds access in Indic shaper.
    331 - Change New Tai Lue shaping engine from South-East Asian to default,
    332   reflecting change in Unicode encoding model.
    333 - Add hb-shape --font-size.  Can take up to two numbers for separate
    334   x / y size.
    335 - Fix CoreText and FreeType scale issues with negative scales.
    336 - Reject blobs larger than 2GB.  This might break some icu-le-hb clients
    337   that need security fixes.  See:
    338   http://www.icu-project.org/trac/ticket/11450
    339 - Avoid accessing font tables during face destruction, in casce rogue
    340   clients released face data already.
    341 - Fix up gobject-introspection a bit.  Python bindings kinda working.
    342   See README.python.
    343 - Misc fixes.
    344 - API additions:
    345   hb_ft_face_create_referenced()
    346   hb_ft_font_create_referenced()
    347 
    348 
    349 Overview of changes leading to 0.9.37
    350 Wednesday, December 17, 2014
    351 =====================================
    352 
    353 - Fix out-of-bounds access in Context lookup format 3.
    354 - Indic: Allow ZWJ/ZWNJ before syllable modifiers.
    355 
    356 
    357 Overview of changes leading to 0.9.36
    358 Thursday, November 20, 2014
    359 =====================================
    360 
    361 - First time that three months went by without a release since
    362   0.9.2 was released on August 10, 2012!
    363 - Fix performance bug in hb_ot_collect_glyphs():
    364   https://bugzilla.mozilla.org/show_bug.cgi?id=1090869
    365 - Add basic vertical-text support to hb-ot-font.
    366 - Misc build fixes.
    367 
    368 
    369 Overview of changes leading to 0.9.35
    370 Saturday, August 13, 2014
    371 =====================================
    372 
    373 - Fix major shape-plan caching bug when more than one shaper were
    374   provided to hb_shape_full() (as exercised by XeTeX).
    375   http://www.mail-archive.com/debian-bugs-dist@lists.debian.org/msg1246370.html
    376 - Fix Arabic fallback shaping regression.  This was broken in 0.9.32.
    377 - Major hb-coretext fixes.  That backend is complete now, including
    378   respecing buffer direction and language, down to vertical writing.
    379 - Build fixes for Windows CE.  Should build fine now.
    380 - Misc fixes:
    381   Use atexit() only if it's safe to call from shared library
    382   https://bugs.freedesktop.org/show_bug.cgi?id=82246
    383   Mandaic had errors in its Unicode Joining_Type
    384   https://bugs.freedesktop.org/show_bug.cgi?id=82306
    385 - API changes:
    386 
    387   * hb_buffer_clear_contents() does not reset buffer flags now.
    388 
    389     After 763e5466c0a03a7c27020e1e2598e488612529a7, one doesn't
    390     need to set flags for different pieces of text.  The flags now
    391     are something the client sets up once, depending on how it
    392     actually uses the buffer.  As such, don't clear it in
    393     clear_contents().
    394 
    395     I don't expect any changes to be needed to any existing client.
    396 
    397 
    398 Overview of changes leading to 0.9.34
    399 Saturday, August 2, 2014
    400 =====================================
    401 
    402 - hb_feature_from_string() now accepts CSS font-feature-settings format.
    403 - As a result, hb-shape / hb-view --features also accept CSS-style strings.
    404   Eg, "'liga' off" is accepted now.
    405 - Add old-spec Myanmar shaper:
    406   https://bugs.freedesktop.org/show_bug.cgi?id=81775
    407 - Don't apply 'calt' in Hangul shaper.
    408 - Fix mark advance zeroing for Hebrew shaper:
    409   https://bugs.freedesktop.org/show_bug.cgi?id=76767
    410 - Implement Windows-1256 custom Arabic shaping.  Only built on Windows,
    411   and requires help from get_glyph().  Used by Firefox.
    412   https://bugzilla.mozilla.org/show_bug.cgi?id=1045139
    413 - Disable 'liga' in vertical text.
    414 - Build fixes.
    415 - API changes:
    416 
    417   * Make HB_BUFFER_FLAG_BOT/EOT easier to use.
    418 
    419     Previously, we expected users to provide BOT/EOT flags when the
    420     text *segment* was at paragraph boundaries.  This meant that for
    421     clients that provide full paragraph to HarfBuzz (eg. Pango), they
    422     had code like this:
    423 
    424       hb_buffer_set_flags (hb_buffer,
    425                            (item_offset == 0 ? HB_BUFFER_FLAG_BOT : 0) |
    426                            (item_offset + item_length == paragraph_length ?
    427                             HB_BUFFER_FLAG_EOT : 0));
    428 
    429       hb_buffer_add_utf8 (hb_buffer,
    430                           paragraph_text, paragraph_length,
    431                           item_offset, item_length);
    432 
    433     After this change such clients can simply say:
    434 
    435       hb_buffer_set_flags (hb_buffer,
    436                            HB_BUFFER_FLAG_BOT | HB_BUFFER_FLAG_EOT);
    437 
    438       hb_buffer_add_utf8 (hb_buffer,
    439                           paragraph_text, paragraph_length,
    440                           item_offset, item_length);
    441 
    442     Ie, HarfBuzz itself checks whether the segment is at the beginning/end
    443     of the paragraph.  Clients that only pass item-at-a-time to HarfBuzz
    444     continue not setting any flags whatsoever.
    445 
    446     Another way to put it is: if there's pre-context text in the buffer,
    447     HarfBuzz ignores the BOT flag.  If there's post-context, it ignores
    448     EOT flag.
    449 
    450 
    451 Overview of changes leading to 0.9.33
    452 Tuesday, July 22, 2014
    453 =====================================
    454 
    455 - Turn off ARabic 'cswh' feature that was accidentally turned on.
    456 - Add HB_TAG_MAX_SIGNED.
    457 - Make hb_face_make_immutable() really make face immutable!
    458 - Windows build fixes.
    459 
    460 
    461 Overview of changes leading to 0.9.32
    462 Thursday, July 17, 2014
    463 =====================================
    464 
    465 - Apply Arabic shaping features in spec order exactly.
    466 - Another fix for Mongolian free variation selectors.
    467 - For non-Arabic scripts in Arabic shaper apply 'rlig' and 'calt'
    468   together.
    469 - Minor adjustment to U+FFFD logic.
    470 - Fix hb-coretext build.
    471 
    472 
    473 Overview of changes leading to 0.9.31
    474 Wednesday, July 16, 2014
    475 =====================================
    476 
    477 - Only accept valid UTF-8/16/32; we missed many cases before.
    478 - Better shaping of invalid UTF-8/16/32.  Falls back to
    479   U+FFFD REPLACEMENT CHARACTER now.
    480 - With all changes in this release, the buffer will contain fully
    481   valid Unicode after hb_buffer_add_utf8/16/32 no matter how
    482   broken the input is.  This can be overriden though.  See below.
    483 - Fix Mongolian Variation Selectors for fonts without GDEF.
    484 - Fix minor invalid buffer access.
    485 - Accept zh-Hant and zh-Hans language tags.  hb_ot_tag_to_language()
    486   now uses these instead of private tags.
    487 - Build fixes.
    488 - New API:
    489   * hb_buffer_add_codepoints().  This does what hb_buffer_add_utf32()
    490     used to do, ie. no validity check on the input at all.  add_utf32
    491     now replaces invalid Unicode codepoints with the replacement
    492     character (see below).
    493   * hb_buffer_set_replacement_codepoint()
    494   * hb_buffer_get_replacement_codepoint()
    495     Previously, in hb_buffer_add_utf8 and hb_buffer_add_utf16, when
    496     we detected broken input, we replaced that with (hb_codepoint_t)-1.
    497     This has changed to use U+FFFD now, but can be changed using these
    498     new API.
    499 
    500 
    501 Overview of changes leading to 0.9.30
    502 Wednesday, July 9, 2014
    503 =====================================
    504 
    505 - Update to Unicode 7.0.0:
    506   * New scripts Manichaean and Psalter Pahlavi are shaped using
    507     Arabic shaper.
    508   * All the other new scripts to through the generic shaper for
    509     now.
    510 - Minor Indic improvements.
    511 - Fix graphite2 backend cluster mapping [crasher!]
    512 - API changes:
    513   * New HB_SCRIPT_* values for Unicode 7.0 scripts.
    514   * New function hb_ot_layout_language_get_required_feature().
    515 - Build fixes.
    516 
    517 
    518 Overview of changes leading to 0.9.29
    519 Thursday, May 29, 2014
    520 =====================================
    521 
    522 - Implement cmap in hb-ot-font.h.  No variation-selectors yet.
    523 - Myanmar: Allow MedialYa+Asat.
    524 - Various Indic fixes:
    525   * Support most characters in Extended Devanagary and Vedic
    526     Unicode blocks.
    527   * Allow digits and a some punctuation as consonant placeholders.
    528 - Build fixes.
    529 
    530 
    531 Overview of changes leading to 0.9.28
    532 Monday, April 28, 2014
    533 =====================================
    534 
    535 - Unbreak old-spec Indic shaping. (bug 76705)
    536 - Fix shaping of U+17DD and U+0FC6.
    537 - Add HB_NO_MERGE_CLUSTERS build option.  NOT to be enabled by default
    538   for shipping libraries.  It's an option for further experimentation
    539   right now.  When we are sure how to do it properly, we will add
    540   public run-time API for the functionality.
    541 - Build fixes.
    542 
    543 
    544 Overview of changes leading to 0.9.27
    545 Tuesday, March 18, 2014
    546 =====================================
    547 
    548 - Don't use "register" storage class specifier
    549 - Wrap definition of free_langs() with HAVE_ATEXIT
    550 - Add coretext_aat shaper and hb_coretext_face_create() constructor
    551 - If HAVE_ICU_BUILTIN is defined, use hb-icu Unicode callbacks
    552 - Add Myanmar test case from OpenType Myanmar spec
    553 - Only do fallback Hebrew composition if no GPOS 'mark' available
    554 - Allow bootstrapping without gtk-doc
    555 - Use AM_MISSING_PROG for ragel and git
    556 - Typo in ucdn's Makefile.am
    557 - Improve MemoryBarrier() implementation
    558 
    559 
    560 Overview of changes leading to 0.9.26
    561 Thursday, January 30, 2014
    562 =====================================
    563 
    564 - Misc fixes.
    565 - Fix application of 'rtlm' feature.
    566 - Automatically apply frac/numr/dnom around U+2044 FRACTION SLASH.
    567 - New header: hb-ot-shape.h
    568 - Uniscribe: fix scratch-buffer accounting.
    569 - Reorder Tai Tham SAKOT to after tone-marks.
    570 - Add Hangul shaper.
    571 - New files:
    572   hb-ot-shape-complex-hangul.cc
    573   hb-ot-shape-complex-hebrew.cc
    574   hb-ot-shape-complex-tibetan.cc
    575 - Disable 'cswh' feature in Arabic shaper.
    576 - Coretext: better handle surrogate pairs.
    577 - Add HB_TAG_MAX and _HB_SCRIPT_MAX_VALUE.
    578 
    579 
    580 Overview of changes leading to 0.9.25
    581 Wednesday, December 4, 2013
    582 =====================================
    583 
    584 - Myanmar shaper improvements.
    585 - Avoid font fallback in CoreText backend.
    586 - Additional OpenType language tag mappiongs.
    587 - More aggressive shape-plan caching.
    588 - Build with / require automake 1.13.
    589 - Build with libtool 2.4.2.418 alpha to support ppc64le.
    590 
    591 
    592 Overview of changes leading to 0.9.24
    593 Tuesday, November 13, 2013
    594 =====================================
    595 
    596 - Misc compiler warning fixes with clang.
    597 - No functional changes.
    598 
    599 
    600 Overview of changes leading to 0.9.23
    601 Monday, October 28, 2013
    602 =====================================
    603 
    604 - "Udupi HarfBuzz Hackfest", Paris, October 14..18 2013.
    605 - Fix (Chain)Context recursion with non-monotone lookup positions.
    606 - Misc Indic bug fixes.
    607 - New Javanese / Buginese shaping, similar to Windows 8.1.
    608 
    609 
    610 Overview of changes leading to 0.9.22
    611 Thursday, October 3, 2013
    612 =====================================
    613 
    614 - Fix use-after-end-of-scope in hb_language_from_string().
    615 - Fix hiding of default_ignorables if font doesn't have space glyph.
    616 - Protect against out-of-range lookup indices.
    617 
    618 - API Changes:
    619 
    620   * Added hb_ot_layout_table_get_lookup_count()
    621 
    622 
    623 Overview of changes leading to 0.9.21
    624 Monday, September 16, 2013
    625 =====================================
    626 
    627 - Rename gobject-introspection library name from harfbuzz to HarfBuzz.
    628 - Remove (long disabled) hb-old and hb-icu-le test shapers.
    629 - Misc gtk-doc and gobject-introspection annotations.
    630 - Misc fixes.
    631 - API changes:
    632 
    633   * Add HB_SET_VALUE_INVALID
    634 
    635 Overview of changes leading to 0.9.20
    636 Thursday, August 29, 2013
    637 =====================================
    638 
    639 General:
    640 - Misc substitute_closure() fixes.
    641 - Build fixes.
    642 
    643 Documentation:
    644 - gtk-doc boilerplate integrated.  Docs are built now, but
    645   contain no contents.  By next release hopefully we have
    646   some content in.  Enable using --enable-gtk-doc.
    647 
    648 GObject and Introspection:
    649 - Added harfbuzz-gobject library (hb-gobject.h) that has type
    650   bindings for all HarfBuzz objects and enums.  Enable using
    651   --with-gobject.
    652 - Added gobject-introspection boilerplate.  Nothing useful
    653   right now.  Work in progress.  Gets enabled automatically if
    654   --with-gobject is used.  Override with --disable-introspection.
    655 
    656 OpenType shaper:
    657 - Apply 'mark' in Myanmar shaper.
    658 - Don't apply 'dlig' by default.
    659 
    660 Uniscribe shaper:
    661 - Support user features.
    662 - Fix loading of fonts that are also installed on the system.
    663 - Fix shaping of Arabic Presentation Forms.
    664 - Fix build with wide chars.
    665 
    666 CoreText shaper:
    667 - Support user features.
    668 
    669 Source changes:
    670 - hb_face_t code moved to hb-face.h / hb-face.cc.
    671 - Added hb-deprecated.h.
    672 
    673 API changes:
    674 - Added HB_DISABLE_DEPRECATED.
    675 - Deprecated HB_SCRIPT_CANADIAN_ABORIGINAL; replaced by
    676   HB_SCRIPT_CANADIAN_SYLLABICS.
    677 - Deprecated HB_BUFFER_FLAGS_DEFAULT; replaced by
    678   HB_BUFFER_FLAG_DEFAULT.
    679 - Deprecated HB_BUFFER_SERIALIZE_FLAGS_DEFAULT; replaced by
    680   HB_BUFFER_SERIALIZE_FLAG_DEFAULT.
    681 
    682 
    683 Overview of changes leading to 0.9.19
    684 Tuesday, July 16, 2013
    685 =====================================
    686 
    687 - Build fixes.
    688 - Better handling of multiple variation selectors in a row.
    689 - Pass on variation selector to GSUB if not consumed by cmap.
    690 - Fix undefined memory access.
    691 - Add Javanese config to Indic shaper.
    692 - Misc bug fixes.
    693 
    694 Overview of changes leading to 0.9.18
    695 Tuesday, May 28, 2013
    696 =====================================
    697 
    698 New build system:
    699 
    700 - All unneeded code is all disabled by default,
    701 
    702 - Uniscribe and CoreText shapers can be enabled with their --with options,
    703 
    704 - icu_le and old shapers cannot be enabled for now,
    705 
    706 - glib, freetype, and cairo will be detected automatically.
    707   They can be force on/off'ed with their --with options,
    708 
    709 - icu and graphite2 are default off, can be enabled with their --with
    710   options,
    711 
    712 Moreover, ICU support is now build into a separate library:
    713 libharfbuzz-icu.so, and a new harfbuzz-icu.pc is shipped for it.
    714 Distros can enable ICU now without every application on earth
    715 getting linked to via libharfbuzz.so.
    716 
    717 For distros I recommend that they make sure they are building --with-glib
    718 --with-freetype --with-cairo, --with-icu, and optionally --with-graphite2;
    719 And package harfbuzz and harfbuzz-icu separately.
    720 
    721 
    722 Overview of changes leading to 0.9.17
    723 Monday, May 20, 2013
    724 =====================================
    725 
    726 - Build fixes.
    727 - Fix bug in hb_set_get_min().
    728 - Fix regression with Arabic mark positioning / width-zeroing.
    729 
    730 Overview of changes leading to 0.9.16
    731 Friday, April 19, 2013
    732 =====================================
    733 
    734 - Major speedup in OpenType lookup processing.  With the Amiri
    735   Arabic font, this release is over 3x faster than previous
    736   release.  All scripts / languages should see this speedup.
    737 
    738 - New --num-iterations option for hb-shape / hb-view; useful for
    739   profiling.
    740 
    741 Overview of changes leading to 0.9.15
    742 Friday, April 05, 2013
    743 =====================================
    744 
    745 - Build fixes.
    746 - Fix crasher in graphite2 shaper.
    747 - Fix Arabic mark width zeroing regression.
    748 - Don't compose Hangul jamo into Unicode syllables.
    749 
    750 
    751 Overview of changes leading to 0.9.14
    752 Thursday, March 21, 2013
    753 =====================================
    754 
    755 - Build fixes.
    756 - Fix time-consuming sanitize with malicious fonts.
    757 - Implement hb_buffer_deserialize_glyphs() for both json and text.
    758 - Do not ignore Hangul filler characters.
    759 - Indic fixes:
    760   * Fix Malayalam pre-base reordering interaction with post-forms.
    761   * Further adjust ZWJ handling.  Should fix known regressions from
    762     0.9.13.
    763 
    764 
    765 Overview of changes leading to 0.9.13
    766 Thursday, February 25, 2013
    767 =====================================
    768 
    769 - Build fixes.
    770 - Ngapi HarfBuzz Hackfest in London (February 2013):
    771   * Fixed all known Indic bugs,
    772   * New Win8-style Myanmar shaper,
    773   * New South-East Asian shaper for Tai Tham, Cham, and New Tai Lue,
    774   * Smartly ignore Default_Ignorable characters (joiners, etc) wheb
    775     matching GSUB/GPOS lookups,
    776   * Fix 'Phags-Pa U+A872 shaping,
    777   * Fix partial disabling of default-on features,
    778   * Allow disabling of TrueType kerning.
    779 - Fix possible crasher with broken fonts with overlapping tables.
    780 - Removed generated files from git again.  So, one needs ragel to
    781   bootstrap from the git tree.
    782 
    783 API changes:
    784 - hb_shape() and related APIs now abort if buffer direction is
    785   HB_DIRECTION_INVALID.  Previously, hb_shape() was calling
    786   hb_buffer_guess_segment_properties() on the buffer before
    787   shaping.  The heuristics in that function are fragile.  If the
    788   user really wants the old behvaior, they can call that function
    789   right before calling hb_shape() to get the old behavior.
    790 - hb_blob_create_sub_blob() always creates sub-blob with
    791   HB_MEMORY_MODE_READONLY.  See comments for the reason.
    792 
    793 
    794 Overview of changes leading to 0.9.12
    795 Thursday, January 18, 2013
    796 =====================================
    797 
    798 - Build fixes for Sun compiler.
    799 - Minor bug fix.
    800 
    801 Overview of changes leading to 0.9.11
    802 Thursday, January 10, 2013
    803 =====================================
    804 
    805 - Build fixes.
    806 - Fix GPOS mark attachment with null Anchor offsets.
    807 - [Indic] Fix old-spec reordering of viramas if sequence ends in one.
    808 - Fix multi-threaded shaper data creation crash.
    809 - Add atomic ops for Solaris.
    810 
    811 API changes:
    812 - Rename hb_buffer_clear() to hb_buffer_clear_contents().
    813 
    814 
    815 Overview of changes leading to 0.9.10
    816 Thursday, January 3, 2013
    817 =====================================
    818 
    819 - [Indic] Fixed rendering of Malayalam dot-reph
    820 - Updated OT language tags.
    821 - Updated graphite2 backend.
    822 - Improved hb_ot_layout_get_size_params() logic.
    823 - Improve hb-shape/hb-view help output.
    824 - Fixed hb-set.h implementation to not crash.
    825 - Fixed various issues with hb_ot_layout_collect_lookups().
    826 - Various build fixes.
    827 
    828 New API:
    829 
    830 hb_graphite2_face_get_gr_face()
    831 hb_graphite2_font_get_gr_font()
    832 hb_coretext_face_get_cg_font()
    833 
    834 Modified API:
    835 
    836 hb_ot_layout_get_size_params()
    837 
    838 
    839 Overview of changes leading to 0.9.9
    840 Wednesday, December 5, 2012
    841 ====================================
    842 
    843 - Fix build on Windows.
    844 - Minor improvements.
    845 
    846 
    847 Overview of changes leading to 0.9.8
    848 Tuesday, December 4, 2012
    849 ====================================
    850 
    851 
    852 - Actually implement hb_shape_plan_get_shaper ().
    853 - Make UCDB data tables const.
    854 - Lots of internal refactoring in OTLayout tables.
    855 - Flesh out hb_ot_layout_lookup_collect_glyphs().
    856 
    857 New API:
    858 
    859 hb_ot_layout_collect_lookups()
    860 hb_ot_layout_get_size_params()
    861 
    862 
    863 Overview of changes leading to 0.9.7
    864 Sunday, November 21, 2012
    865 ====================================
    866 
    867 
    868 HarfBuzz "All-You-Can-Eat-Sushi" (aka Vancouver) Hackfest and follow-on fixes.
    869 
    870 - Fix Arabic contextual joining using pre-context text.
    871 - Fix Sinhala "split matra" mess.
    872 - Fix Khmer shaping with broken fonts.
    873 - Implement Thai "PUA" shaping for old fonts.
    874 - Do NOT route Kharoshthi script through the Indic shaper.
    875 - Disable fallback positioning for Indic and Thai shapers.
    876 - Misc fixes.
    877 
    878 
    879 hb-shape / hb-view changes:
    880 
    881 - Add --text-before and --text-after
    882 - Add --bot / --eot / --preserve-default-ignorables
    883 - hb-shape --output-format=json
    884 
    885 
    886 New API:
    887 
    888 hb_buffer_clear()
    889 
    890 hb_buffer_flags_t
    891 
    892 HB_BUFFER_FLAGS_DEFAULT
    893 HB_BUFFER_FLAG_BOT
    894 HB_BUFFER_FLAG_EOT
    895 HB_BUFFER_FLAG_PRESERVE_DEFAULT_IGNORABLES
    896 
    897 hb_buffer_set_flags()
    898 hb_buffer_get_flags()
    899 
    900 HB_BUFFER_SERIALIZE_FLAGS
    901 hb_buffer_serialize_glyphs()
    902 hb_buffer_deserialize_glyphs()
    903 hb_buffer_serialize_list_formats()
    904 
    905 hb_set_add_range()
    906 hb_set_del_range()
    907 hb_set_get_population()
    908 hb_set_next_range()
    909 
    910 hb_face_[sg]et_glyph_count()
    911 
    912 hb_segment_properties_t
    913 HB_SEGMENT_PROPERTIES_DEFAULT
    914 hb_segment_properties_equal()
    915 hb_segment_properties_hash()
    916 
    917 hb_buffer_set_segment_properties()
    918 hb_buffer_get_segment_properties()
    919 
    920 hb_ot_layout_glyph_class_t
    921 hb_ot_layout_get_glyph_class()
    922 hb_ot_layout_get_glyphs_in_class()
    923 
    924 hb_shape_plan_t
    925 hb_shape_plan_create()
    926 hb_shape_plan_create_cached()
    927 hb_shape_plan_get_empty()
    928 hb_shape_plan_reference()
    929 hb_shape_plan_destroy()
    930 hb_shape_plan_set_user_data()
    931 hb_shape_plan_get_user_data()
    932 hb_shape_plan_execute()
    933 hb_shape_plan_get_shaper()
    934 
    935 hb_ot_shape_plan_collect_lookups()
    936 
    937 
    938 API changes:
    939 
    940 - Remove "mask" parameter from hb_buffer_add().
    941 - Rename hb_ot_layout_would_substitute_lookup() and hb_ot_layout_substitute_closure_lookup().
    942 - hb-set.h API const correction.
    943 - Renamed hb_set_min/max() to hb_set_get_min/max().
    944 - Rename hb_ot_layout_feature_get_lookup_indexes() to hb_ot_layout_feature_get_lookups().
    945 - Rename hb_buffer_guess_properties() to hb_buffer_guess_segment_properties().
    946 
    947 
    948 
    949 Overview of changes leading to 0.9.6
    950 Sunday, November 13, 2012
    951 ====================================
    952 
    953 - Don't clear pre-context text if no new context is provided.
    954 - Fix ReverseChainingSubstLookup, which was totally borked.
    955 - Adjust output format of hb-shape a bit.
    956 - Include config.h.in in-tree.  Makes it easier for alternate build systems.
    957 - Fix hb_buffer_set_length(buffer, 0) invalid memory allocation.
    958 - Use ICU LayoutEngine's C API instead of C++.  Avoids much headache.
    959 - Drop glyphs for all of Unicode Default_Ignorable characters.
    960 - Misc build fixes.
    961 
    962 Arabic shaper:
    963 - Enable 'dlig' and 'mset' features in Arabic shaper.
    964 - Implement 'Phags-pa shaping, improve Mongolian.
    965 
    966 Indic shaper:
    967 - Decompose Sinhala split matras the way old HarfBuzz / Pango did.
    968 - Initial support for Consonant Medials.
    969 - Start adding new-style Myanmar shaping.
    970 - Make reph and 'pref' logic introspect the font.
    971 - Route Meetei-Mayek through the Indic shaper.
    972 - Don't apply 'liga' in Indic shaper.
    973 - Improve Malayalam pre-base reordering Ra interaction with Chillus.
    974 
    975 
    976 
    977 Overview of changes leading to 0.9.5
    978 Sunday, October 14, 2012
    979 ====================================
    980 
    981 - Synthetic-GSUB Arabic fallback shaping.
    982 
    983 - Misc Indic improvements.
    984 
    985 - Add build system support for pthread.
    986 
    987 - Imported UCDN for in-tree Unicode callbacks implementation.
    988 
    989 - Context-aware Arabic joining.
    990 
    991 - Misc other fixes.
    992 
    993 - New API:
    994 
    995   hb_feature_to/from-string()
    996   hb_buffer_[sg]et_content_type()
    997 
    998 
    999 
   1000 Overview of changes leading to 0.9.4
   1001 Tuesday, Sep 03, 2012
   1002 ====================================
   1003 
   1004 - Indic improvements with old-spec Malayalam.
   1005 
   1006 - Better fallback glyph positioning, specially with Thai / Lao marks.
   1007 
   1008 - Implement dotted-circle insertion.
   1009 
   1010 - Better Arabic fallback shaping / ligation.
   1011 
   1012 - Added ICU LayoutEngine backend for testing.  Call it by the 'icu_le' name.
   1013 
   1014 - Misc fixes.
   1015 
   1016 
   1017 
   1018 Overview of changes leading to 0.9.3
   1019 Friday, Aug 18, 2012
   1020 ====================================
   1021 
   1022 - Fixed fallback mark positioning for left-to-right text.
   1023 
   1024 - Improve mark positioning for the remaining combining classes.
   1025 
   1026 - Unbreak Thai and fallback Arabic shaping.
   1027 
   1028 - Port Arabic shaper to shape-plan caching.
   1029 
   1030 - Use new ICU normalizer functions.
   1031 
   1032 
   1033 
   1034 Overview of changes leading to 0.9.2
   1035 Friday, Aug 10, 2012
   1036 ====================================
   1037 
   1038 - Over a thousand commits!  This is the first major release of HarfBuzz.
   1039 
   1040 - HarfBuzz is feature-complete now!  It should be in par, or better, than
   1041   both Pango's shapers and old HarfBuzz / Qt shapers.
   1042 
   1043 - New Indic shaper, supporting main Indic scripts, Sinhala, and Khmer.
   1044 
   1045 - Improved Arabic shaper, with fallback Arabic shaping, supporting Arabic,
   1046   Sinhala, N'ko, Mongolian, and Mandaic.
   1047 
   1048 - New Thai / Lao shaper.
   1049 
   1050 - Tibetan / Hangul support in the generic shaper.
   1051 
   1052 - Synthetic GDEF support for fonts without a GDEF table.
   1053 
   1054 - Fallback mark positioning for fonts without a GPOS table.
   1055 
   1056 - Unicode normalization shaping heuristic during glyph mapping.
   1057 
   1058 - New experimental Graphite2 backend.
   1059 
   1060 - New Uniscribe backend (primarily for testing).
   1061 
   1062 - New CoreText backend (primarily for testing).
   1063 
   1064 - Major optimization and speedup.
   1065 
   1066 - Test suites and testing infrastructure (work in progress).
   1067 
   1068 - Greatly improved hb-view cmdline tool.
   1069 
   1070 - hb-shape cmdline tool.
   1071 
   1072 - Unicode 6.1 support.
   1073 
   1074 Summary of API changes:
   1075 
   1076 o Changed API:
   1077 
   1078   - Users are expected to only include main header files now (ie. hb.h,
   1079     hb-glib.h, hb-ft.h, ...)
   1080 
   1081   - All struct tag names had their initial underscore removed.
   1082     Ie. "struct _hb_buffer_t" is "struct hb_buffer_t" now.
   1083 
   1084   - All set_user_data() functions now take a "replace" boolean parameter.
   1085 
   1086   - hb_buffer_create() takes zero arguments now.
   1087     Use hb_buffer_pre_allocate() to pre-allocate.
   1088 
   1089   - hb_buffer_add_utf*() now accept -1 for length parameteres,
   1090     meaning "nul-terminated".
   1091 
   1092   - hb_direction_t enum values changed.
   1093 
   1094   - All *_from_string() APIs now take a length parameter to allow for
   1095     non-nul-terminated strings. A -1 length means "nul-terminated".
   1096 
   1097   - Typedef for hb_language_t changed.
   1098 
   1099   - hb_get_table_func_t renamed to hb_reference_table_func_t.
   1100 
   1101   - hb_ot_layout_table_choose_script()
   1102 
   1103   - Various renames in hb-unicode.h.
   1104 
   1105 o New API:
   1106 
   1107   - hb_buffer_guess_properties()
   1108     Automatically called by hb_shape().
   1109 
   1110   - hb_buffer_normalize_glyphs()
   1111 
   1112   - hb_tag_from_string()
   1113 
   1114   - hb-coretext.h
   1115 
   1116   - hb-uniscribe.h
   1117 
   1118   - hb_face_reference_blob()
   1119   - hb_face_[sg]et_index()
   1120   - hb_face_set_upem()
   1121 
   1122   - hb_font_get_glyph_name_func_t
   1123     hb_font_get_glyph_from_name_func_t
   1124     hb_font_funcs_set_glyph_name_func()
   1125     hb_font_funcs_set_glyph_from_name_func()
   1126     hb_font_get_glyph_name()
   1127     hb_font_get_glyph_from_name()
   1128     hb_font_glyph_to_string()
   1129     hb_font_glyph_from_string()
   1130 
   1131   - hb_font_set_funcs_data()
   1132 
   1133   - hb_ft_font_set_funcs()
   1134   - hb_ft_font_get_face()
   1135 
   1136   - hb-gobject.h (work in progress)
   1137 
   1138   - hb_ot_shape_glyphs_closure()
   1139     hb_ot_layout_substitute_closure_lookup()
   1140 
   1141   - hb-set.h
   1142 
   1143   - hb_shape_full()
   1144 
   1145   - hb_unicode_combining_class_t
   1146 
   1147   - hb_unicode_compose_func_t
   1148     hb_unicode_decompose_func_t
   1149     hb_unicode_decompose_compatibility_func_t
   1150     hb_unicode_funcs_set_compose_func()
   1151     hb_unicode_funcs_set_decompose_func()
   1152     hb_unicode_funcs_set_decompose_compatibility_func()
   1153     hb_unicode_compose()
   1154     hb_unicode_decompose()
   1155     hb_unicode_decompose_compatibility()
   1156 
   1157 o Removed API:
   1158 
   1159   - hb_ft_get_font_funcs()
   1160 
   1161   - hb_ot_layout_substitute_start()
   1162     hb_ot_layout_substitute_lookup()
   1163     hb_ot_layout_substitute_finish()
   1164     hb_ot_layout_position_start()
   1165     hb_ot_layout_position_lookup()
   1166     hb_ot_layout_position_finish()
   1167 
   1168 
   1169 
   1170 Overview of changes leading to 0.6.0
   1171 Friday, May 27, 2011
   1172 ====================================
   1173 
   1174 - Vertical text support in GPOS
   1175 - Almost all API entries have unit tests now, under test/
   1176 - All thread-safety issues are fixed
   1177 
   1178 Summary of API changes follows.
   1179 
   1180 
   1181 * Simple Types API:
   1182 
   1183   o New API:
   1184     HB_LANGUAGE_INVALID
   1185     hb_language_get_default()
   1186     hb_direction_to_string()
   1187     hb_direction_from_string()
   1188     hb_script_get_horizontal_direction()
   1189     HB_UNTAG()
   1190 
   1191   o Renamed API:
   1192     hb_category_t renamed to hb_unicode_general_category_t
   1193 
   1194   o Changed API:
   1195     hb_language_t is a typed pointers now
   1196 
   1197   o Removed API:
   1198     HB_TAG_STR()
   1199 
   1200 
   1201 * Use ISO 15924 tags for hb_script_t:
   1202 
   1203   o New API:
   1204     hb_script_from_iso15924_tag()
   1205     hb_script_to_iso15924_tag()
   1206     hb_script_from_string()
   1207 
   1208   o Changed API:
   1209     HB_SCRIPT_* enum members changed value.
   1210 
   1211 
   1212 * Buffer API streamlined:
   1213 
   1214   o New API:
   1215     hb_buffer_reset()
   1216     hb_buffer_set_length()
   1217     hb_buffer_allocation_successful()
   1218 
   1219   o Renamed API:
   1220     hb_buffer_ensure() renamed to hb_buffer_pre_allocate()
   1221     hb_buffer_add_glyph() renamed to hb_buffer_add()
   1222 
   1223   o Removed API:
   1224     hb_buffer_clear()
   1225     hb_buffer_clear_positions()
   1226 
   1227   o Changed API:
   1228     hb_buffer_get_glyph_infos() takes an out length parameter now
   1229     hb_buffer_get_glyph_positions() takes an out length parameter now
   1230 
   1231 
   1232 * Blob API streamlined:
   1233 
   1234   o New API:
   1235     hb_blob_get_data()
   1236     hb_blob_get_data_writable()
   1237 
   1238   o Renamed API:
   1239     hb_blob_create_empty() renamed to hb_blob_get_empty()
   1240 
   1241   o Removed API:
   1242     hb_blob_lock()
   1243     hb_blob_unlock()
   1244     hb_blob_is_writable()
   1245     hb_blob_try_writable()
   1246 
   1247   o Changed API:
   1248     hb_blob_create() takes user_data before destroy now
   1249 
   1250 
   1251 * Unicode functions API:
   1252 
   1253   o Unicode function vectors can subclass other unicode function vectors now.
   1254     Unimplemented callbacks in the subclass automatically chainup to the parent.
   1255 
   1256   o All hb_unicode_funcs_t callbacks take a user_data now.  Their setters
   1257     take a user_data and its respective destroy callback.
   1258 
   1259   o New API:
   1260     hb_unicode_funcs_get_empty()
   1261     hb_unicode_funcs_get_default()
   1262     hb_unicode_funcs_get_parent()
   1263 
   1264   o Changed API:
   1265     hb_unicode_funcs_create() now takes a parent_funcs.
   1266 
   1267   o Removed func getter functions:
   1268     hb_unicode_funcs_get_mirroring_func()
   1269     hb_unicode_funcs_get_general_category_func()
   1270     hb_unicode_funcs_get_script_func()
   1271     hb_unicode_funcs_get_combining_class_func()
   1272     hb_unicode_funcs_get_eastasian_width_func()
   1273 
   1274 
   1275 * Face API:
   1276 
   1277   o Renamed API:
   1278     hb_face_get_table() renamed to hb_face_reference_table()
   1279     hb_face_create_for_data() renamed to hb_face_create()
   1280 
   1281   o Changed API:
   1282     hb_face_create_for_tables() takes user_data before destroy now
   1283     hb_face_reference_table() returns empty blob instead of NULL
   1284     hb_get_table_func_t accepts the face as first parameter now
   1285 
   1286 * Font API:
   1287 
   1288   o Fonts can subclass other fonts now.  Unimplemented callbacks in the
   1289     subclass automatically chainup to the parent.  When chaining up,
   1290     scale is adjusted if the parent font has a different scale.
   1291 
   1292   o All hb_font_funcs_t callbacks take a user_data now.  Their setters
   1293     take a user_data and its respective destroy callback.
   1294 
   1295   o New API:
   1296     hb_font_get_parent()
   1297     hb_font_funcs_get_empty()
   1298     hb_font_create_sub_font()
   1299 
   1300   o Removed API:
   1301     hb_font_funcs_copy()
   1302     hb_font_unset_funcs()
   1303 
   1304   o Removed func getter functions:
   1305     hb_font_funcs_get_glyph_func()
   1306     hb_font_funcs_get_glyph_advance_func()
   1307     hb_font_funcs_get_glyph_extents_func()
   1308     hb_font_funcs_get_contour_point_func()
   1309     hb_font_funcs_get_kerning_func()
   1310 
   1311   o Changed API:
   1312     hb_font_create() takes a face and references it now
   1313     hb_font_set_funcs() takes user_data before destroy now
   1314     hb_font_set_scale() accepts signed integers now
   1315     hb_font_get_contour_point_func_t now takes glyph first, then point_index
   1316     hb_font_get_glyph_func_t returns a success boolean now
   1317 
   1318 
   1319 * Changed object model:
   1320 
   1321   o All object types have a _get_empty() now:
   1322     hb_blob_get_empty()
   1323     hb_buffer_get_empty()
   1324     hb_face_get_empty()
   1325     hb_font_get_empty()
   1326     hb_font_funcs_get_empty()
   1327     hb_unicode_funcs_get_empty()
   1328 
   1329   o Added _set_user_data() and _get_user_data() for all object types:
   1330     hb_blob_get_user_data()
   1331     hb_blob_set_user_data()
   1332     hb_buffer_get_user_data()
   1333     hb_buffer_set_user_data()
   1334     hb_face_get_user_data()
   1335     hb_face_set_user_data()
   1336     hb_font_funcs_get_user_data()
   1337     hb_font_funcs_set_user_data()
   1338     hb_font_get_user_data()
   1339     hb_font_set_user_data()
   1340     hb_unicode_funcs_get_user_data()
   1341     hb_unicode_funcs_set_user_data()
   1342 
   1343   o Removed the _get_reference_count() from all object types:
   1344     hb_blob_get_reference_count()
   1345     hb_buffer_get_reference_count()
   1346     hb_face_get_reference_count()
   1347     hb_font_funcs_get_reference_count()
   1348     hb_font_get_reference_count()
   1349     hb_unicode_funcs_get_reference_count()
   1350 
   1351   o Added _make_immutable() and _is_immutable() for all object types except for buffer:
   1352     hb_blob_make_immutable()
   1353     hb_blob_is_immutable()
   1354     hb_face_make_immutable()
   1355     hb_face_is_immutable()
   1356 
   1357 
   1358 * Changed API for vertical text support
   1359 
   1360   o The following callbacks where removed:
   1361     hb_font_get_glyph_advance_func_t
   1362     hb_font_get_kerning_func_t
   1363 
   1364   o The following new callbacks added instead:
   1365     hb_font_get_glyph_h_advance_func_t
   1366     hb_font_get_glyph_v_advance_func_t
   1367     hb_font_get_glyph_h_origin_func_t
   1368     hb_font_get_glyph_v_origin_func_t
   1369     hb_font_get_glyph_h_kerning_func_t
   1370     hb_font_get_glyph_v_kerning_func_t
   1371 
   1372   o The following API removed as such:
   1373     hb_font_funcs_set_glyph_advance_func()
   1374     hb_font_funcs_set_kerning_func()
   1375     hb_font_get_glyph_advance()
   1376     hb_font_get_kerning()
   1377 
   1378   o New API added instead:
   1379     hb_font_funcs_set_glyph_h_advance_func()
   1380     hb_font_funcs_set_glyph_v_advance_func()
   1381     hb_font_funcs_set_glyph_h_origin_func()
   1382     hb_font_funcs_set_glyph_v_origin_func()
   1383     hb_font_funcs_set_glyph_h_kerning_func()
   1384     hb_font_funcs_set_glyph_v_kerning_func()
   1385     hb_font_get_glyph_h_advance()
   1386     hb_font_get_glyph_v_advance()
   1387     hb_font_get_glyph_h_origin()
   1388     hb_font_get_glyph_v_origin()
   1389     hb_font_get_glyph_h_kerning()
   1390     hb_font_get_glyph_v_kerning()
   1391 
   1392   o The following higher-leve API added for convenience:
   1393     hb_font_get_glyph_advance_for_direction()
   1394     hb_font_get_glyph_origin_for_direction()
   1395     hb_font_add_glyph_origin_for_direction()
   1396     hb_font_subtract_glyph_origin_for_direction()
   1397     hb_font_get_glyph_kerning_for_direction()
   1398     hb_font_get_glyph_extents_for_origin()
   1399     hb_font_get_glyph_contour_point_for_origin()
   1400 
   1401 
   1402 * OpenType Layout API:
   1403 
   1404   o New API:
   1405     hb_ot_layout_position_start()
   1406     hb_ot_layout_substitute_start()
   1407     hb_ot_layout_substitute_finish()
   1408 
   1409 
   1410 * Glue code:
   1411 
   1412   o New API:
   1413     hb_glib_script_to_script()
   1414     hb_glib_script_from_script()
   1415     hb_icu_script_to_script()
   1416     hb_icu_script_from_script()
   1417 
   1418 
   1419 * Version API added:
   1420 
   1421   o New API:
   1422     HB_VERSION_MAJOR
   1423     HB_VERSION_MINOR
   1424     HB_VERSION_MICRO
   1425     HB_VERSION_STRING
   1426     HB_VERSION_CHECK()
   1427     hb_version()
   1428     hb_version_string()
   1429     hb_version_check()
   1430 
   1431 
   1432