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