Home | History | Annotate | Download | only in harfbuzz_ng
      1 Overview of changes leading to 2.3.0
      2 Thursday, December 20, 2018
      3 ====================================
      4 - Fix regression on big-endian architectures.  Ouch!
      5 - Misc bug and build fixes.
      6 - Fix subsetting of simple GSUB/GDEF.
      7 - Merge CFF / CFF2 support contributed by Adobe.  This mostly involves
      8   the subsetter, but also get_glyph_extents on CFF fonts.
      9 
     10 New API in hb-aat.h:
     11 +hb_aat_layout_has_substitution()
     12 +hb_aat_layout_has_positioning()
     13 +hb_aat_layout_has_tracking()
     14 
     15 
     16 Overview of changes leading to 2.2.0
     17 Thursday, November 29, 2018
     18 ====================================
     19 - Misc shaping bug fixes.
     20 - Add font variations named-instance API.
     21 - Deprecate font variations axis enumeration API and add replacement.
     22 - AAT shaping improvements:
     23   o Fixed 'kern' table Format 2 implementation.
     24   o Implement 'feat' table API for feature detection.
     25   o Blacklist 'GSUB' table of fonts from 'MUTF' foundry that also have 'morx'.
     26 
     27 New API:
     28 +hb_aat_layout_feature_type_t
     29 +hb_aat_layout_feature_selector_t
     30 +hb_aat_layout_get_feature_types()
     31 +hb_aat_layout_feature_type_get_name_id
     32 +hb_aat_layout_feature_selector_info_t
     33 +HB_AAT_LAYOUT_NO_SELECTOR_INDEX
     34 +hb_aat_layout_feature_type_get_selector_infos()
     35 +hb_ot_var_axis_flags_t
     36 +hb_ot_var_axis_info_t
     37 +hb_ot_var_get_axis_infos()
     38 +hb_ot_var_find_axis_info()
     39 +hb_ot_var_get_named_instance_count()
     40 +hb_ot_var_named_instance_get_subfamily_name_id()
     41 +hb_ot_var_named_instance_get_postscript_name_id()
     42 +hb_ot_var_named_instance_get_design_coords()
     43 
     44 Deprecated API:
     45 +HB_OT_VAR_NO_AXIS_INDEX
     46 +hb_ot_var_axis_t
     47 +hb_ot_var_get_axes()
     48 +hb_ot_var_find_axis()
     49 
     50 
     51 Overview of changes leading to 2.1.3
     52 Friday, November 16, 2018
     53 ====================================
     54 - Fix AAT 'mort' shaping, which was broken in 2.1.2
     55 
     56 
     57 Overview of changes leading to 2.1.2
     58 Friday, November 16, 2018
     59 ====================================
     60 - Various internal changes.
     61 - AAT shaping improvements:
     62   o Implement kern table Format 1 state-machine-based kerning.
     63   o Implement cross-stream kerning (cursive positioning, etc).
     64   o Ignore emptyish GSUB tables (zero scripts) if morx present.
     65   o Don't apply GPOS if morx is being applied.  Matches Apple.
     66 
     67 
     68 -Overview of changes leading to 2.1.1
     69 Monday, November 5, 2018
     70 ====================================
     71 - AAT improvements:
     72   o Implement 'mort' table.
     73   o Implement 'kern' subtables Format 1 and Format 3.
     74 
     75 
     76 Overview of changes leading to 2.1.0
     77 Tuesday, October 30, 2018
     78 ====================================
     79 - AAT shaping improvements:
     80   o Allow user controlling AAT features, for whole buffer only currently.
     81   o Several 'morx' fixes.
     82   o Implement tuple-kerns in 'kerx'; Fixes kerning with Apple default
     83     San Francisco fonts.
     84 - Support for color fonts:
     85   o COLR/CPAL API to fetch color layers.
     86   o SVG table to fetch SVG documents.
     87   o CBDT/sbix API to fetch PNG images.
     88 - New 'name' table API.
     89 - hb-ot-font now uses 'VORG' table to correctly position CFF glyphs
     90   in vertical layout.
     91 - Various fuzzer-found bug fixes.
     92 
     93 Changed API:
     94 
     95 A type and a macro added in 2.0.0 were renamed:
     96 
     97 hb_name_id_t -> hb_ot_name_id_t
     98 HB_NAME_ID_INVALID -> HB_OT_NAME_ID_INVALID
     99 
    100 New API:
    101 
    102 +hb_color_t
    103 +HB_COLOR
    104 +hb_color_get_alpha()
    105 +hb_color_get_red()
    106 +hb_color_get_green()
    107 +hb_color_get_blue()
    108 +hb_ot_color_has_palettes()
    109 +hb_ot_color_palette_get_count()
    110 +hb_ot_color_palette_get_name_id()
    111 +hb_ot_color_palette_color_get_name_id()
    112 +hb_ot_color_palette_flags_t
    113 +hb_ot_color_palette_get_flags()
    114 +hb_ot_color_palette_get_colors()
    115 +hb_ot_color_has_layers()
    116 +hb_ot_color_layer_t
    117 +hb_ot_color_glyph_get_layers()
    118 +hb_ot_color_has_svg()
    119 +hb_ot_color_glyph_reference_svg()
    120 +hb_ot_color_has_png()
    121 +hb_ot_color_glyph_reference_png()
    122 
    123 +hb_ot_name_id_t
    124 +HB_OT_NAME_ID_INVALID
    125 +HB_OT_NAME_ID_COPYRIGHT
    126 +HB_OT_NAME_ID_FONT_FAMILY
    127 +HB_OT_NAME_ID_FONT_SUBFAMILY
    128 +HB_OT_NAME_ID_UNIQUE_ID
    129 +HB_OT_NAME_ID_FULL_NAME
    130 +HB_OT_NAME_ID_VERSION_STRING
    131 +HB_OT_NAME_ID_POSTSCRIPT_NAME
    132 +HB_OT_NAME_ID_TRADEMARK
    133 +HB_OT_NAME_ID_MANUFACTURER
    134 +HB_OT_NAME_ID_DESIGNER
    135 +HB_OT_NAME_ID_DESCRIPTION
    136 +HB_OT_NAME_ID_VENDOR_URL
    137 +HB_OT_NAME_ID_DESIGNER_URL
    138 +HB_OT_NAME_ID_LICENSE
    139 +HB_OT_NAME_ID_LICENSE_URL
    140 +HB_OT_NAME_ID_TYPOGRAPHIC_FAMILY
    141 +HB_OT_NAME_ID_TYPOGRAPHIC_SUBFAMILY
    142 +HB_OT_NAME_ID_MAC_FULL_NAME
    143 +HB_OT_NAME_ID_SAMPLE_TEXT
    144 +HB_OT_NAME_ID_CID_FINDFONT_NAME
    145 +HB_OT_NAME_ID_WWS_FAMILY
    146 +HB_OT_NAME_ID_WWS_SUBFAMILY
    147 +HB_OT_NAME_ID_LIGHT_BACKGROUND
    148 +HB_OT_NAME_ID_DARK_BACKGROUND
    149 +HB_OT_NAME_ID_VARIATIONS_PS_PREFIX
    150 +hb_ot_name_entry_t
    151 +hb_ot_name_list_names()
    152 +hb_ot_name_get_utf8()
    153 +hb_ot_name_get_utf16()
    154 +hb_ot_name_get_utf32()
    155 
    156 
    157 Overview of changes leading to 2.0.2
    158 Saturday, October 20, 2018
    159 ====================================
    160 - Fix two minor memory access issues in AAT tables.
    161 
    162 
    163 Overview of changes leading to 2.0.1
    164 Friday, October 19, 2018
    165 ====================================
    166 - Fix hb-version.h reported release version that went wrong (1.8.0)
    167   with previous release.
    168 - Fix extrapolation in 'trak' table.
    169 - Fix hb-font infinite-recursion issue with some font funcs and
    170   subclassed fonts.
    171 - Implement variation-kerning format in kerx table, although without
    172   variation.
    173 - Fix return value of hb_map_is_empty().
    174 
    175 
    176 Overview of changes leading to 2.0.0
    177 Thursday, October 18, 2018
    178 ====================================
    179 - Added AAT shaping support (morx/kerx/trak).
    180   Automatically used if GSUB/GPOS are not available respectively.
    181   Set HB_OPTIONS=aat env var to have morx/kerx preferred over
    182   GSUB/GPOS.
    183 - Apply TrueType kern table internally, instead of relying on
    184   hb_font_t callbacks.
    185 - Khmer shaper significantly rewritten to better match Uniscribe.
    186 - Indic3 tags ('dev3', etc) are passed to USE shaper.
    187 - .dfont Mac font containers implemented.
    188 - Script- and language-mapping revamped to better use BCP 47.
    189 - Misc USE and Indic fixes.
    190 - Misc everything fixes.
    191 - Too many things to list.  Biggest release since 0.9.1, with
    192   over 500 commits in just over 5 weeks!  Didn't intend it to
    193   be a big release.  Just happened to become.
    194 - hb-ft now locks underlying FT_Face during use.
    195 
    196 API changes:
    197 
    198 - Newly-created hb_font_t's now have our internal "hb-ot-font"
    199   callbacks set on them, so they should work out of the box
    200   without any callbacks set.  If callbacks are set, everything
    201   is back to what it was before, the fallback callbacks are
    202   null.  If you to get the internal implementation modified,
    203   sub_font it.
    204 
    205 - New hb_font_funcs_set_nominal_glyphs_func() allows speeding
    206   up character to glyph mapping.
    207 
    208 New API:
    209 +HB_FEATURE_GLOBAL_START
    210 +HB_FEATURE_GLOBAL_END
    211 +hb_buffer_set_invisible_glyph()
    212 +hb_buffer_get_invisible_glyph()
    213 +hb_font_funcs_set_nominal_glyphs_func()
    214 +hb_ot_layout_table_select_script()
    215 +hb_ot_layout_script_select_language()
    216 +hb_ot_layout_feature_get_name_ids()
    217 +hb_ot_layout_feature_get_characters()
    218 +hb_name_id_t
    219 +HB_NAME_ID_INVALID
    220 +HB_OT_MAX_TAGS_PER_SCRIPT
    221 +hb_ot_tags_from_script_and_language()
    222 +hb_ot_tags_to_script_and_language()
    223 
    224 Deprecated API:
    225 -hb_font_funcs_set_glyph_func()
    226 -hb_unicode_eastasian_width_func_t
    227 -hb_unicode_funcs_set_eastasian_width_func()
    228 -hb_unicode_eastasian_width()
    229 -hb_unicode_decompose_compatibility_func_t
    230 -HB_UNICODE_MAX_DECOMPOSITION_LEN
    231 -hb_unicode_funcs_set_decompose_compatibility_func()
    232 -hb_unicode_decompose_compatibility()
    233 -hb_font_funcs_set_glyph_h_kerning_func()
    234 -hb_font_funcs_set_glyph_v_kerning_func()
    235 -hb_font_get_glyph_h_kerning()
    236 -hb_font_get_glyph_v_kerning()
    237 -hb_font_get_glyph_kerning_for_direction()
    238 -hb_ot_layout_table_choose_script()
    239 -hb_ot_layout_script_find_language()
    240 -hb_ot_tags_from_script()
    241 -hb_ot_tag_from_language()
    242 
    243 
    244 Overview of changes leading to 1.9.0
    245 Monday, September 10, 2018
    246 ====================================
    247 - Added 'cmap' API to hb_face_t.
    248 - Face-builder API.
    249 - hb-ot-font re-creation should be much leaner now, as the
    250   font tables it uses are cached on hb_face_t now.
    251 - Internal source header file name changes:
    252   hb-*-private.hh is renamed to hb-*.hh.
    253 
    254 New API:
    255 +HB_UNICODE_MAX
    256 +hb_face_collect_unicodes()
    257 +hb_face_collect_variation_selectors()
    258 +hb_face_collect_variation_unicodes()
    259 +hb_face_builder_create()
    260 +hb_face_builder_add_table()
    261 
    262 
    263 Overview of changes leading to 1.8.8
    264 Tuesday, August 14, 2018
    265 ====================================
    266 - Fix hb-icu crash on architectures where compare_exchange_weak() can
    267   fail falsely.  This bug was introduced in 1.8.4.
    268   https://bugs.chromium.org/p/chromium/issues/detail?id=873568
    269 - More internal refactoring of atomic operations and singletons.
    270 - API changes:
    271   The following functions do NOT reference their return value before
    272   returning:
    273   * hb_unicode_funcs_get_default()
    274   * hb_glib_get_unicode_funcs()
    275   * hb_icu_get_unicode_funcs()
    276   This is consistent with their naming ("get", instead of "reference")
    277   as well as how they are used in the wild (ie. no one calls destroy()
    278   on their return value.)
    279 
    280 
    281 Overview of changes leading to 1.8.7
    282 Wednesday, August 8, 2018
    283 ====================================
    284 - Fix assertion failure with GDEF-blacklisted fonts.
    285 
    286 
    287 Overview of changes leading to 1.8.6
    288 Tuesday, August 7, 2018
    289 ====================================
    290 - Internal code shuffling.
    291 - New API to speed up getting advance widths for implementations
    292   that have heavy overhead in get_h_advance callback:
    293 +hb_font_funcs_set_glyph_h_advances_func
    294 +hb_font_funcs_set_glyph_v_advances_func
    295 +hb_font_get_glyph_advances_for_direction
    296 +hb_font_get_glyph_h_advances
    297 +hb_font_get_glyph_h_advances_func_t
    298 +hb_font_get_glyph_v_advances
    299 +hb_font_get_glyph_v_advances_func_t
    300 
    301 
    302 Overview of changes leading to 1.8.5
    303 Wednesday, August 1, 2018
    304 ====================================
    305 - Major Khmer shaper improvements to better match Microsoft.
    306 - Indic bug fixes.
    307 - Internal improvements to atomic operations.
    308 
    309 
    310 Overview of changes leading to 1.8.4
    311 Tuesday, July 17, 2018
    312 ====================================
    313 - Fix build on non-C++11.
    314 - Use C++-style GCC atomics and C++11 atomics.
    315 
    316 
    317 Overview of changes leading to 1.8.3
    318 Wednesday, July 11, 2018
    319 ====================================
    320 - A couple of Indic / USE bug fixes.
    321 - Disable vectorization, as it was causing unaligned access bus error on
    322   certain 32bit architectures.
    323 
    324 
    325 Overview of changes leading to 1.8.2
    326 Tuesday, July 3, 2018
    327 ====================================
    328 - Fix infinite loop in Khmer shaper.
    329 - Improve hb_blob_create_from_file() for streams.
    330 
    331 
    332 Overview of changes leading to 1.8.1
    333 Tuesday, June 12, 2018
    334 ====================================
    335 - Fix hb-version.h file generation; last two releases went out with wrong ones.
    336 - Add correctness bug in hb_set_t operations, introduced in 1.7.7.
    337 - Remove HB_SUBSET_BUILTIN build option.  Not necessary.
    338 
    339 
    340 Overview of changes leading to 1.8.0
    341 Tuesday, June 5, 2018
    342 ====================================
    343 - Update to Unicode 11.0.0.
    344 
    345 
    346 Overview of changes leading to 1.7.7
    347 Tuesday, June 5, 2018
    348 ====================================
    349 - Lots of internal changes, but not yet exposed externally.
    350 - All HarfBuzz objects are significantly smaller in size now.
    351 - Sinhala: Position repha on top of post-consonant, not base.
    352   This better matches Windows 10 behavior, which was changed
    353   from previous Windows versions.
    354 - New build options:
    355   o New cpp macro HB_NO_ATEXIT
    356   o New cpp macro HB_SUBSET_BUILTIN
    357 - Significant libharfbuzz-subset changes. API subject to change.
    358 - New API in libharfbuzz:
    359 
    360 +hb_blob_create_from_file()
    361 +hb_face_count()
    362 
    363 A hashmap implementation:
    364 +hb-map.h
    365 +HB_MAP_VALUE_INVALID
    366 +hb_map_t
    367 +hb_map_create()
    368 +hb_map_get_empty()
    369 +hb_map_reference()
    370 +hb_map_destroy()
    371 +hb_map_set_user_data()
    372 +hb_map_get_user_data()
    373 +hb_map_allocation_successful()
    374 +hb_map_clear()
    375 +hb_map_is_empty()
    376 +hb_map_get_population()
    377 +hb_map_set()
    378 +hb_map_get()
    379 +hb_map_del()
    380 +hb_map_has()
    381 
    382 
    383 Overview of changes leading to 1.7.6
    384 Wednesday, March 7, 2018
    385 ====================================
    386 
    387 - Fix to hb_set_t binary operations. Ouch.
    388 - New experimental harfbuzz-subset library. All of hb-subset.h
    389   is experimental right now and API WILL change.
    390 
    391 - New API:
    392 hb_blob_copy_writable_or_fail()
    393 HB_OT_TAG_BASE
    394 hb_set_previous()
    395 hb_set_previous_range()
    396 
    397 
    398 Overview of changes leading to 1.7.5
    399 Tuesday, January 30, 2018
    400 ====================================
    401 
    402 - Separate Khmer shaper from Indic.
    403 - First stab at AAT morx. Not hooked up.
    404 - Misc bug fixes.
    405 
    406 
    407 Overview of changes leading to 1.7.4
    408 Wednesday, December 20, 2017
    409 ====================================
    410 
    411 - Fix collect_glyphs() regression caused by hb_set_t changes.
    412 
    413 
    414 Overview of changes leading to 1.7.3
    415 Monday, December 18, 2017
    416 ====================================
    417 
    418 - hb_set_t performance tuning and optimizations.
    419 - Speed up collect_glyphs() and reject garbage data.
    420 - In hb_coretext_font_create() set font point-size (ptem).
    421 - Misc fixes.
    422 
    423 
    424 Overview of changes leading to 1.7.2
    425 Monday, December 4, 2017
    426 ====================================
    427 
    428 - Optimize hb_set_add_range().
    429 - Misc fixes.
    430 - New API:
    431 hb_coretext_font_create()
    432 
    433 
    434 Overview of changes leading to 1.7.1
    435 Tuesday, November 14, 2017
    436 ====================================
    437 
    438 - Fix atexit object destruction regression.
    439 - Fix minor integer-overflow.
    440 
    441 
    442 Overview of changes leading to 1.7.0
    443 Monday, November 13, 2017
    444 ====================================
    445 
    446 - Minor Indic fixes.
    447 - Implement kerning and glyph names in hb-ot-font.
    448 - Various DSO optimization re .data and .bss sizes.
    449 - Make C++11 optional; build fixes.
    450 - Mark all other backends "unsafe-to-break".
    451 - Graphite fix.
    452 
    453 
    454 Overview of changes leading to 1.6.3
    455 Thursday, October 26th, 2017
    456 ====================================
    457 
    458 - Fix hb_set_t some more.  Should be solid now.
    459 - Implement get_glyph_name() for hb-ot-font.
    460 - Misc fixes.
    461 
    462 
    463 Overview of changes leading to 1.6.2
    464 Monday, October 23nd, 2017
    465 ====================================
    466 
    467 - Yesterday's release had a bad crasher; don't use it.  That's what
    468   happens when one works on Sunday...
    469   https://github.com/harfbuzz/harfbuzz/issues/578
    470 - Build fixes for FreeBSD and Chrome Android.
    471 
    472 
    473 Overview of changes leading to 1.6.1
    474 Sunday, October 22nd, 2017
    475 ====================================
    476 
    477 - Don't skip over COMBINING GRAPHEME JOINER when ligating, etc.
    478   To be refined: https://github.com/harfbuzz/harfbuzz/issues/554
    479 - Faster hb_set_t implementation.
    480 - Don't use deprecated ICU API.
    481 - Fix undefined-behavior in Myanmar shaper, introduced in 1.6.0
    482 - Deprecated API:
    483   hb_set_invert()
    484 
    485 
    486 Overview of changes leading to 1.6.0
    487 Friday, October the 13th, 2017
    488 ====================================
    489 
    490 - Update to Unicode 10.
    491 
    492 - Various Indic and Universal Shaping Engine fixes as a result of
    493   HarfBuzz Hackfest with Jonathan Kew at Web Engines Hackfest at
    494   the Igalia offices in A Corua, Spain.  Thanks Igalia for having
    495   us!
    496 
    497 - Implement Unicode Arabic Mark Ordering Algorithm UTR#53.
    498 
    499 - Implement optical sizing / tracking in CoreText backend, using
    500   new API hb_font_set_ptem().
    501 
    502 - Allow notifying hb_font_t that underlying FT_Face changed sizing,
    503   using new API hb_ft_font_changed().
    504 
    505 - More Graphite backend RTL fixes.
    506 
    507 - Fix caching of variable font shaping plans.
    508 
    509 - hb-view / hb-shape now accept following new arguments:
    510 
    511   o --unicodes: takes a list of hex numbers that represent Unicode
    512     codepoints.
    513 
    514 New API:
    515 +hb_face_get_table_tags()
    516 +hb_font_set_ptem()
    517 +hb_font_get_ptem()
    518 +hb_ft_font_changed()
    519 
    520 
    521 Overview of changes leading to 1.5.1
    522 Tuesday, September 5, 2017
    523 ====================================
    524 
    525 - Fix "unsafe-to-break" in fallback shaping and other corner cases.
    526   All our tests pass with --verify now, meaning unsafe-to-break API
    527   works as expected.
    528 - Add --unicodes to hb-view / hb-shape.
    529 - [indic] Treat Consonant_With_Stacker as consonant.  This will need
    530   further tweaking.
    531 - hb_buffer_diff() tweaks.
    532 
    533 
    534 Overview of changes leading to 1.5.0
    535 Wednesday, August 23, 2017
    536 ====================================
    537 
    538 - Misc new API, for appending a buffer to another, and for comparing
    539   contents of two buffers for types of differences.
    540 
    541 - New "unsafe-to-break" API.  Can be used to speed up reshaping
    542   in line-breaking situations.  Essentially, after shaping, it returns
    543   positions in the input string (some of the cluster boundaries) that
    544   are "safe to break" in that if the text is segmented at that position
    545   and two sides reshaped and concatenated, the shaping result is
    546   exactly the same as shaping the text in one piece.
    547 
    548   hb-view and hb-shape and hb-shape now take --verify, which verifies
    549   the above property.
    550 
    551   Some corner cases of the implementation are still not quite working.
    552   Those will be fixed in subsequent releases.
    553 
    554 - New API:
    555 
    556 hb_buffer_append()
    557 
    558 hb_glyph_flags_t
    559 HB_GLYPH_FLAG_UNSAFE_TO_BREAK
    560 HB_GLYPH_FLAG_DEFINED
    561 hb_glyph_info_get_glyph_flags()
    562 
    563 HB_BUFFER_SERIALIZE_FLAG_GLYPH_FLAGS
    564 
    565 hb_buffer_diff_flags_t
    566 HB_BUFFER_DIFF_FLAG_EQUAL
    567 HB_BUFFER_DIFF_FLAG_CONTENT_TYPE_MISMATCH
    568 HB_BUFFER_DIFF_FLAG_LENGTH_MISMATCH
    569 HB_BUFFER_DIFF_FLAG_NOTDEF_PRESENT
    570 HB_BUFFER_DIFF_FLAG_DOTTED_CIRCLE_PRESENT
    571 HB_BUFFER_DIFF_FLAG_CODEPOINT_MISMATCH
    572 HB_BUFFER_DIFF_FLAG_CLUSTER_MISMATCH
    573 HB_BUFFER_DIFF_FLAG_GLYPH_FLAGS_MISMATCH
    574 HB_BUFFER_DIFF_FLAG_POSITION_MISMATCH
    575 hb_buffer_diff
    576 
    577 
    578 Overview of changes leading to 1.4.8
    579 Tuesday, August 8, 2017
    580 ====================================
    581 
    582 - Major fix to avar table handling.
    583 - Rename hb-shape --show-message to --trace.
    584 - Build fixes.
    585 
    586 
    587 Overview of changes leading to 1.4.7
    588 Tuesday, July 18, 2017
    589 ====================================
    590 
    591 - Multiple Indic, Tibetan, and Cham fixes.
    592 - CoreText: Allow disabling kerning.
    593 - Adjust Arabic feature order again.
    594 - Misc build fixes.
    595 
    596 
    597 Overview of changes leading to 1.4.6
    598 Sunday, April 23, 2017
    599 ====================================
    600 
    601 - Graphite2: Fix RTL positioning issue.
    602 - Backlist GDEF of more versions of Padauk and Tahoma.
    603 - New, experimental, cmake alternative build system.
    604 
    605 
    606 Overview of changes leading to 1.4.5
    607 Friday, March 10, 2017
    608 ====================================
    609 
    610 - Revert "Fix Context lookup application when moving back after a glyph..."
    611   This introduced memory access problems.  To be fixed properly soon.
    612 
    613 
    614 Overview of changes leading to 1.4.4
    615 Sunday, March 5, 2017
    616 ====================================
    617 
    618 - Fix Context lookup application when moving back after a glyph deletion.
    619 - Fix buffer-overrun in Bengali.
    620 
    621 
    622 Overview of changes leading to 1.4.3
    623 Saturday, February 25, 2017
    624 ====================================
    625 
    626 - Route Adlam script to Arabic shaper.
    627 - Misc fixes.
    628 - New API:
    629   hb_font_set_face()
    630 - Deprecate API:
    631   hb_graphite2_font_get_gr_font()
    632 
    633 
    634 Overview of changes leading to 1.4.2
    635 Monday, January 23, 2017
    636 ====================================
    637 
    638 - Implement OpenType Font Variation tables avar/fvar/HVAR/VVAR.
    639 - hb-shape and hb-view now accept --variations.
    640 - New API:
    641 
    642 hb_variation_t
    643 hb_variation_from_string()
    644 hb_variation_to_string()
    645 
    646 hb_font_set_variations()
    647 hb_font_set_var_coords_design()
    648 hb_font_get_var_coords_normalized()
    649 
    650 hb-ot-var.h:
    651 hb_ot_var_axis_t
    652 hb_ot_var_has_data()
    653 hb_ot_var_get_axis_count()
    654 hb_ot_var_get_axes()
    655 hb_ot_var_find_axis()
    656 hb_ot_var_normalize_variations()
    657 hb_ot_var_normalize_coords()
    658 
    659 - MVAR to be implemented later.  Access to named instances to be
    660   implemented later as well.
    661 
    662 - Misc fixes.
    663 
    664 
    665 Overview of changes leading to 1.4.1
    666 Thursday, January 5, 2017
    667 ====================================
    668 
    669 - Always build and use UCDN for Unicode data by default.
    670   Reduces dependence on version of Unicode data in glib,
    671   specially in the Windows bundles we are shipping, which
    672   have very old glib.
    673 
    674 
    675 Overview of changes leading to 1.4.0
    676 Thursday, January 5, 2017
    677 ====================================
    678 
    679 - Merged "OpenType GX" branch which adds core of support for
    680   OpenType 1.8 Font Variations.  To that extent, the relevant
    681   new API is:
    682 
    683 New API:
    684 hb_font_set_var_coords_normalized()
    685 
    686   with supporting API:
    687 
    688 New API:
    689 HB_OT_LAYOUT_NO_VARIATIONS_INDEX
    690 hb_ot_layout_table_find_feature_variations()
    691 hb_ot_layout_feature_with_variations_get_lookups()
    692 hb_shape_plan_create2()
    693 hb_shape_plan_create_cached2()
    694 
    695   Currently variations in GSUB/GPOS/GDEF are fully supported,
    696   and no other tables are supported.  In particular, fvar/avar
    697   are NOT supported, hence the hb_font_set_var_coords_normalized()
    698   taking normalized coordinates.  API to take design coordinates
    699   will be added in the future.
    700 
    701   HVAR/VVAR/MVAR support will also be added to hb-ot-font in the
    702   future.
    703 
    704 - Fix regression in GDEF glyph class processing.
    705 - Add decompositions for Chakma, Limbu, and Balinese in USE shaper.
    706 - Misc fixes.
    707 
    708 
    709 Overview of changes leading to 1.3.4
    710 Monday, December 5, 2016
    711 ====================================
    712 
    713 - Fix vertical glyph origin in hb-ot-font.
    714 - Implement CBDT/CBLC color font glyph extents in hb-ot-font.
    715 
    716 
    717 Overview of changes leading to 1.3.3
    718 Wednesday, September 28, 2016
    719 ====================================
    720 
    721 - Implement parsing of OpenType MATH table.
    722 New API:
    723 HB_OT_TAG_MATH
    724 HB_OT_MATH_SCRIPT
    725 hb_ot_math_constant_t
    726 hb_ot_math_kern_t
    727 hb_ot_math_glyph_variant_t
    728 hb_ot_math_glyph_part_flags_t
    729 hb_ot_math_glyph_part_t
    730 hb_ot_math_has_data
    731 hb_ot_math_get_constant
    732 hb_ot_math_get_glyph_italics_correction
    733 hb_ot_math_get_glyph_top_accent_attachment
    734 hb_ot_math_get_glyph_kerning
    735 hb_ot_math_is_glyph_extended_shape
    736 hb_ot_math_get_glyph_variants
    737 hb_ot_math_get_min_connector_overlap
    738 hb_ot_math_get_glyph_assembly
    739 
    740 
    741 Overview of changes leading to 1.3.2
    742 Wednesday, September 27, 2016
    743 ====================================
    744 
    745 - Fix build of hb-coretext on older OS X versions.
    746 
    747 
    748 Overview of changes leading to 1.3.1
    749 Wednesday, September 7, 2016
    750 ====================================
    751 
    752 - Blacklist bad GDEF of more fonts (Padauk).
    753 - More CoreText backend crash fixes with OS X 10.9.5.
    754 - Misc fixes.
    755 
    756 
    757 Overview of changes leading to 1.3.0
    758 Thursday, July 21, 2016
    759 ====================================
    760 
    761 - Update to Unicode 9.0.0
    762 - Move Javanese from Indic shaper to Universal Shaping Engine.
    763 - Allow MultipleSubst to delete a glyph (matching Windows engine).
    764 - Update Universal Shaping Engine to latest draft from Microsoft.
    765 - DirectWrite backend improvements.  Note: this backend is for testing ONLY.
    766 - CoreText backend improvements with unreachable fonts.
    767 - Implement symbol fonts (cmap 3.0.0) in hb-ft and hb-ot-font.
    768 - Blacklist bad GDEF of more fonts (Tahoma & others).
    769 - Misc fixes.
    770 
    771 
    772 Overview of changes leading to 1.2.7
    773 Monday, May 2, 2016
    774 ====================================
    775 
    776 - Blacklist another version of Times New Roman (Bold) Italic from Windows 7.
    777 - Fix Mongolian Free Variation Selectors shaping with certain fonts.
    778 - Fix Tibetan shorthand contractions shaping.
    779 - Improved list of language tag mappings.
    780 - Unbreak build on Windows CE.
    781 - Make 'glyf' table loading lazy in hb-ot-font.
    782 
    783 
    784 Overview of changes leading to 1.2.6
    785 Friday, April 8, 2016
    786 ====================================
    787 
    788 - Blacklist GDEF table of another set of Times New Roman (Bold) Italic.
    789 - DirectWrite backend improvements.  Note: DirectWrite backend is
    790   exclusively for our internal testing and should NOT be used in any
    791   production system whatsoever.
    792 
    793 
    794 Overview of changes leading to 1.2.5
    795 Monday, April 4, 2016
    796 ====================================
    797 
    798 - Fix GDEF mark-filtering-set, which was broken in 1.2.3.
    799 
    800 
    801 Overview of changes leading to 1.2.4
    802 Thursday, March 17, 2016
    803 ====================================
    804 
    805 - Synthesize GDEF glyph class for any glyph that does not have one in GDEF.
    806   I really hope we don't discover broken fonts that shape badly with this
    807   change.
    808 - Misc build and other minor fixes.
    809 - API changes:
    810   - Added HB_NDEBUG.  It's fine for production systems to define this to
    811     disable high-overhead debugging checks.  However, I also reduced the
    812     overhead of those checks, so it's a non-issue right now.  You can
    813     forget it.  Just not defining anything at all is fine.
    814 
    815 
    816 Overview of changes leading to 1.2.3
    817 Thursday, February 25, 2016
    818 ====================================
    819 
    820 - Blacklist GDEF table of certain versions of Times New Roman (Bold) Italic,
    821   due to bug in glyph class of ASCII double-quote character.  This should
    822   address "regression" introduced in 1.2.0 when we switched mark zeroing
    823   in most shapers from BY_UNICODE_LATE to BY_GDEF_LATE.
    824   This fourth release in a week should finally stablize things...
    825 
    826 - hb-ot-font's get_glyph() implementation saw some optimizations.  Though,
    827   might be really hard to measure in real-world situations.
    828 
    829 - Also, two rather small API changes:
    830 
    831 We now disable some time-consuming internal bookkeeping if built with NDEBUG
    832 defined.  This is a first time that we use NDEBUG to disable debug code.  If
    833 there exist production systems that do NOT want to enable NDEBUG, please let
    834 me know and I'll add HB_NDEBUG.
    835 
    836 Added get_nominal_glyph() and get_variation_glyph() instead of get_glyph()
    837 
    838 New API:
    839 - hb_font_get_nominal_glyph_func_t
    840 - hb_font_get_variation_glyph_func_t
    841 - hb_font_funcs_set_nominal_glyph_func()
    842 - hb_font_funcs_set_variation_glyph_func()
    843 - hb_font_get_nominal_glyph()
    844 - hb_font_get_variation_glyph()
    845 
    846 Deprecated API:
    847 - hb_font_get_glyph_func_t
    848 - hb_font_funcs_set_glyph_func()
    849 
    850 Clients that implement their own font-funcs are encouraged to replace
    851 their get_glyph() implementation with a get_nominal_glyph() and
    852 get_variation_glyph() pair.  The variation version can assume that
    853 variation_selector argument is not zero.  Old (deprecated) functions
    854 will continue working indefinitely using internal gymnastics; it is
    855 just more efficient to use the new functions.
    856 
    857 
    858 Overview of changes leading to 1.2.2
    859 Wednesday, February 24, 2016
    860 ====================================
    861 
    862 - Fix regression with mark positioning with fonts that have
    863   non-zero mark advances.  This was introduced in 1.2.0 while
    864   trying to make mark and cursive attachments to work together.
    865   I have partially reverted that, so this version is much more
    866   like what we had before.  All clients who updated to 1.2.0
    867   should update to this version.
    868 
    869 
    870 Overview of changes leading to 1.2.1
    871 Tuesday, February 23, 2016
    872 ====================================
    873 
    874 - CoreText: Fix bug with wrong scale if font scale was changed later.
    875   https://github.com/libass/libass/issues/212
    876 - CoreText: Drastically speed up font initialization.
    877 - CoreText: Fix tiny leak.
    878 - Group ZWJ/ZWNJ with previous syllable under cluster-level=0.
    879   https://github.com/harfbuzz/harfbuzz/issues/217
    880 - Add test/shaping/README.md about how to add tests to the suite.
    881 
    882 
    883 Overview of changes leading to 1.2.0
    884 Friday, February 19, 2016
    885 ====================================
    886 
    887 - Fix various issues (hangs mostly) in case of memory allocation failure.
    888 - Change mark zeroing types of most shapers from BY_UNICODE_LATE to
    889   BY_GDEF_LATE.  This seems to be what Uniscribe does.
    890 - Change mark zeroing of USE shaper from NONE to BY_GDEF_EARLY.  That's
    891   what Windows does.
    892 - Allow GPOS cursive connection on marks, and fix the interaction with
    893   mark attachment.  This work resulted in some changes to how mark
    894   attachments work.  See:
    895   https://github.com/harfbuzz/harfbuzz/issues/211
    896   https://github.com/harfbuzz/harfbuzz/commit/86c68c7a2c971efe8e35b1f1bd99401dc8b688d2
    897 - Graphite2 shaper: improved negative advance handling (eg. Nastaliq).
    898 - Add nmake-based build system for Windows.
    899 - Minor speedup.
    900 - Misc. improvements.
    901 
    902 
    903 Overview of changes leading to 1.1.3
    904 Monday, January 11, 2016
    905 ====================================
    906 
    907 - Ported Indic shaper to Unicode 8.0 data.
    908 - Universal Shaping Engine fixes.
    909 - Speed up CoreText shaper when font fallback happens in CoreText.
    910 - Documentation improvements, thanks to Khaled Hosny.
    911 - Very rough directwrite shaper for testing, thanks to Ebrahim Byagowi.
    912 - Misc bug fixes.
    913 - New API:
    914 
    915   * Font extents:
    916       hb_font_extents_t
    917       hb_font_get_font_extents_func_t
    918       hb_font_get_font_h_extents_func_t
    919       hb_font_get_font_v_extents_func_t
    920       hb_font_funcs_set_font_h_extents_func
    921       hb_font_funcs_set_font_v_extents_func
    922       hb_font_get_h_extents
    923       hb_font_get_v_extents
    924       hb_font_get_extents_for_direction
    925 
    926   * Buffer message (aka debug):
    927       hb_buffer_message_func_t
    928       hb_buffer_set_message_func()
    929     Actual message protocol to be fleshed out later.
    930 
    931 
    932 Overview of changes leading to 1.1.2
    933 Wednesday, November 26, 2015
    934 ====================================
    935 
    936 - Fix badly-broken fallback shaper that affected terminology.
    937   https://github.com/harfbuzz/harfbuzz/issues/187
    938 - Fix y_scaling in Graphite shaper.
    939 - API changes:
    940   * An unset glyph_h_origin() function in font-funcs now (sensibly)
    941     implies horizontal origin at 0,0.  Ie, the nil callback returns
    942     true instead of false.  As such, implementations that have a
    943     glyph_h_origin() that simply returns true, can remove that function
    944     with HarfBuzz >= 1.1.2.  This results in a tiny speedup.
    945 
    946 
    947 Overview of changes leading to 1.1.1
    948 Wednesday, November 24, 2015
    949 ====================================
    950 
    951 - Build fixes, specially for hb-coretext.
    952 
    953 
    954 Overview of changes leading to 1.1.0
    955 Wednesday, November 18, 2015
    956 ====================================
    957 
    958 - Implement 'stch' stretch feature for Syriac Abbreviation Mark.
    959   https://github.com/harfbuzz/harfbuzz/issues/141
    960 - Disable use of decompose_compatibility() callback.
    961 - Implement "shaping" of various Unicode space characters, even
    962   if the font does not support them.
    963   https://github.com/harfbuzz/harfbuzz/issues/153
    964 - If font does not support U+2011 NO-BREAK HYPHEN, fallback to
    965   U+2010 HYPHEN.
    966 - Changes resulting from libFuzzer continuous fuzzing:
    967   * Reject font tables that need more than 8 edits,
    968   * Bound buffer growth during shaping to 32x,
    969   * Fix assertions and other issues at OOM / buffer max-growth.
    970 - Misc fixes and optimizations.
    971 - API changes:
    972   * All fonts created with hb_font_create() now inherit from
    973     (ie. have parent) hb_font_get_empty().
    974 
    975 
    976 Overview of changes leading to 1.0.6
    977 Thursday, October 15, 2015
    978 ====================================
    979 
    980 - Reduce max nesting level in OT lookups from 8 to 6.
    981   Should not affect any real font as far as I know.
    982 - Fix memory access issue in ot-font.
    983 - Revert default load-flags of fonts created using hb_ft_font_create()
    984   back to FT_LOAD_DEFAULT|FT_LOAD_NO_HINTING.  This was changed in
    985   last release (1.0.5), but caused major issues, so revert.
    986   https://github.com/harfbuzz/harfbuzz/issues/143
    987 
    988 
    989 Overview of changes leading to 1.0.5
    990 Tuesday, October 13, 2015
    991 ====================================
    992 
    993 - Fix multiple memory access bugs discovered using libFuzzer.
    994   https://github.com/harfbuzz/harfbuzz/issues/139
    995   Everyone should upgrade to this version as soon as possible.
    996   We now have continuous fuzzing set up, to avoid issues like
    997   these creeping in again.
    998 - Misc fixes.
    999 
   1000 - New API:
   1001   * hb_font_set_parent().
   1002   * hb_ft_font_[sg]et_load_flags()
   1003     The default flags for fonts created using hb_ft_font_create()
   1004     has changed to default to FT_LOAD_DEFAULT now.  Previously it
   1005     was defaulting to FT_LOAD_DFEAULT|FT_LOAD_NO_HINTING.
   1006 
   1007 - API changes:
   1008   * Fonts now default to units-per-EM as their scale, instead of 0.
   1009   * hb_font_create_sub_font() does NOT make parent font immutable
   1010     anymore.  hb_font_make_immutable() does.
   1011 
   1012 
   1013 Overview of changes leading to 1.0.4
   1014 Wednesday, September 30, 2015
   1015 ====================================
   1016 
   1017 - Fix minor out-of-bounds read error.
   1018 
   1019 
   1020 Overview of changes leading to 1.0.3
   1021 Tuesday, September 1, 2015
   1022 ====================================
   1023 
   1024 - Start of user documentation, from Simon Cozens!
   1025 - Implement glyph_extents() for TrueType fonts in hb-ot-font.
   1026 - Improve GPOS cursive attachments with conflicting lookups.
   1027 - More fixes for cluster-level = 1.
   1028 - Uniscribe positioning fix.
   1029 
   1030 
   1031 Overview of changes leading to 1.0.2
   1032 Wednesday, August 19, 2015
   1033 ====================================
   1034 
   1035 - Fix shaping with cluster-level > 0.
   1036 - Fix Uniscribe backend font-size scaling.
   1037 - Declare dependencies in harfbuzz.pc.
   1038   FreeType is not declared though, to avoid bugs in pkg-config
   1039   0.26 with recursive dependencies.
   1040 - Slightly improved debug infrastructure.  More to come later.
   1041 - Misc build fixes.
   1042 
   1043 
   1044 Overview of changes leading to 1.0.1
   1045 Monday, July 27, 2015
   1046 ====================================
   1047 
   1048 - Fix out-of-bounds access in USE shaper.
   1049 
   1050 
   1051 Overview of changes leading to 1.0.0
   1052 Sunday, July 26, 2015
   1053 ====================================
   1054 
   1055 - Implement Universal Shaping Engine:
   1056   https://www.microsoft.com/typography/OpenTypeDev/USE/intro.htm
   1057   http://blogs.windows.com/bloggingwindows/2015/02/23/windows-shapes-the-worlds-languages/
   1058 - Bump version to 1.0.0.  The soname was NOT bumped.
   1059 
   1060 
   1061 Overview of changes leading to 0.9.42
   1062 Thursday, July 26, 2015
   1063 =====================================
   1064 
   1065 - New API to allow for retrieving finer-grained cluster
   1066   mappings if the client desires to handle them.  Default
   1067   behavior is unchanged.
   1068 - Fix cluster merging when removing default-ignorables.
   1069 - Update to Unicode 8.0
   1070 - hb-graphite2 fixes.
   1071 - Misc fixes.
   1072 - Removed HB_NO_MERGE_CLUSTERS hack.
   1073 - New API:
   1074   hb_buffer_cluster_level_t enum
   1075   hb_buffer_get_cluster_level()
   1076   hb_buffer_set_cluster_level()
   1077   hb-shape / hb-view --cluster-level
   1078 
   1079 
   1080 Overview of changes leading to 0.9.41
   1081 Thursday, June 18, 2015
   1082 =====================================
   1083 
   1084 - Fix hb-coretext with trailing whitespace in right-to-left.
   1085 - New API: hb_buffer_reverse_range().
   1086 - Allow implementing atomic ops in config.h.
   1087 - Fix hb_language_t in language bindings.
   1088 - Misc fixes.
   1089 
   1090 
   1091 Overview of changes leading to 0.9.40
   1092 Friday, March 20, 2015
   1093 =====================================
   1094 
   1095 - Another hb-coretext crasher fix.  Ouch!
   1096 - Happy Norouz!
   1097 
   1098 
   1099 Overview of changes leading to 0.9.39
   1100 Wednesday, March 4, 2015
   1101 =====================================
   1102 
   1103 - Critical hb-coretext fixes.
   1104 - Optimizations and refactoring; no functional change
   1105   expected.
   1106 - Misc build fixes.
   1107 
   1108 
   1109 Overview of changes leading to 0.9.38
   1110 Friday, January 23, 2015
   1111 =====================================
   1112 
   1113 - Fix minor out-of-bounds access in Indic shaper.
   1114 - Change New Tai Lue shaping engine from South-East Asian to default,
   1115   reflecting change in Unicode encoding model.
   1116 - Add hb-shape --font-size.  Can take up to two numbers for separate
   1117   x / y size.
   1118 - Fix CoreText and FreeType scale issues with negative scales.
   1119 - Reject blobs larger than 2GB.  This might break some icu-le-hb clients
   1120   that need security fixes.  See:
   1121   http://www.icu-project.org/trac/ticket/11450
   1122 - Avoid accessing font tables during face destruction, in casce rogue
   1123   clients released face data already.
   1124 - Fix up gobject-introspection a bit.  Python bindings kinda working.
   1125   See README.python.
   1126 - Misc fixes.
   1127 - API additions:
   1128   hb_ft_face_create_referenced()
   1129   hb_ft_font_create_referenced()
   1130 
   1131 
   1132 Overview of changes leading to 0.9.37
   1133 Wednesday, December 17, 2014
   1134 =====================================
   1135 
   1136 - Fix out-of-bounds access in Context lookup format 3.
   1137 - Indic: Allow ZWJ/ZWNJ before syllable modifiers.
   1138 
   1139 
   1140 Overview of changes leading to 0.9.36
   1141 Thursday, November 20, 2014
   1142 =====================================
   1143 
   1144 - First time that three months went by without a release since
   1145   0.9.2 was released on August 10, 2012!
   1146 - Fix performance bug in hb_ot_collect_glyphs():
   1147   https://bugzilla.mozilla.org/show_bug.cgi?id=1090869
   1148 - Add basic vertical-text support to hb-ot-font.
   1149 - Misc build fixes.
   1150 
   1151 
   1152 Overview of changes leading to 0.9.35
   1153 Saturday, August 13, 2014
   1154 =====================================
   1155 
   1156 - Fix major shape-plan caching bug when more than one shaper were
   1157   provided to hb_shape_full() (as exercised by XeTeX).
   1158   http://www.mail-archive.com/debian-bugs-dist@lists.debian.org/msg1246370.html
   1159 - Fix Arabic fallback shaping regression.  This was broken in 0.9.32.
   1160 - Major hb-coretext fixes.  That backend is complete now, including
   1161   respecing buffer direction and language, down to vertical writing.
   1162 - Build fixes for Windows CE.  Should build fine now.
   1163 - Misc fixes:
   1164   Use atexit() only if it's safe to call from shared library
   1165   https://bugs.freedesktop.org/show_bug.cgi?id=82246
   1166   Mandaic had errors in its Unicode Joining_Type
   1167   https://bugs.freedesktop.org/show_bug.cgi?id=82306
   1168 - API changes:
   1169 
   1170   * hb_buffer_clear_contents() does not reset buffer flags now.
   1171 
   1172     After 763e5466c0a03a7c27020e1e2598e488612529a7, one doesn't
   1173     need to set flags for different pieces of text.  The flags now
   1174     are something the client sets up once, depending on how it
   1175     actually uses the buffer.  As such, don't clear it in
   1176     clear_contents().
   1177 
   1178     I don't expect any changes to be needed to any existing client.
   1179 
   1180 
   1181 Overview of changes leading to 0.9.34
   1182 Saturday, August 2, 2014
   1183 =====================================
   1184 
   1185 - hb_feature_from_string() now accepts CSS font-feature-settings format.
   1186 - As a result, hb-shape / hb-view --features also accept CSS-style strings.
   1187   Eg, "'liga' off" is accepted now.
   1188 - Add old-spec Myanmar shaper:
   1189   https://bugs.freedesktop.org/show_bug.cgi?id=81775
   1190 - Don't apply 'calt' in Hangul shaper.
   1191 - Fix mark advance zeroing for Hebrew shaper:
   1192   https://bugs.freedesktop.org/show_bug.cgi?id=76767
   1193 - Implement Windows-1256 custom Arabic shaping.  Only built on Windows,
   1194   and requires help from get_glyph().  Used by Firefox.
   1195   https://bugzilla.mozilla.org/show_bug.cgi?id=1045139
   1196 - Disable 'liga' in vertical text.
   1197 - Build fixes.
   1198 - API changes:
   1199 
   1200   * Make HB_BUFFER_FLAG_BOT/EOT easier to use.
   1201 
   1202     Previously, we expected users to provide BOT/EOT flags when the
   1203     text *segment* was at paragraph boundaries.  This meant that for
   1204     clients that provide full paragraph to HarfBuzz (eg. Pango), they
   1205     had code like this:
   1206 
   1207       hb_buffer_set_flags (hb_buffer,
   1208                            (item_offset == 0 ? HB_BUFFER_FLAG_BOT : 0) |
   1209                            (item_offset + item_length == paragraph_length ?
   1210                             HB_BUFFER_FLAG_EOT : 0));
   1211 
   1212       hb_buffer_add_utf8 (hb_buffer,
   1213                           paragraph_text, paragraph_length,
   1214                           item_offset, item_length);
   1215 
   1216     After this change such clients can simply say:
   1217 
   1218       hb_buffer_set_flags (hb_buffer,
   1219                            HB_BUFFER_FLAG_BOT | HB_BUFFER_FLAG_EOT);
   1220 
   1221       hb_buffer_add_utf8 (hb_buffer,
   1222                           paragraph_text, paragraph_length,
   1223                           item_offset, item_length);
   1224 
   1225     Ie, HarfBuzz itself checks whether the segment is at the beginning/end
   1226     of the paragraph.  Clients that only pass item-at-a-time to HarfBuzz
   1227     continue not setting any flags whatsoever.
   1228 
   1229     Another way to put it is: if there's pre-context text in the buffer,
   1230     HarfBuzz ignores the BOT flag.  If there's post-context, it ignores
   1231     EOT flag.
   1232 
   1233 
   1234 Overview of changes leading to 0.9.33
   1235 Tuesday, July 22, 2014
   1236 =====================================
   1237 
   1238 - Turn off ARabic 'cswh' feature that was accidentally turned on.
   1239 - Add HB_TAG_MAX_SIGNED.
   1240 - Make hb_face_make_immutable() really make face immutable!
   1241 - Windows build fixes.
   1242 
   1243 
   1244 Overview of changes leading to 0.9.32
   1245 Thursday, July 17, 2014
   1246 =====================================
   1247 
   1248 - Apply Arabic shaping features in spec order exactly.
   1249 - Another fix for Mongolian free variation selectors.
   1250 - For non-Arabic scripts in Arabic shaper apply 'rlig' and 'calt'
   1251   together.
   1252 - Minor adjustment to U+FFFD logic.
   1253 - Fix hb-coretext build.
   1254 
   1255 
   1256 Overview of changes leading to 0.9.31
   1257 Wednesday, July 16, 2014
   1258 =====================================
   1259 
   1260 - Only accept valid UTF-8/16/32; we missed many cases before.
   1261 - Better shaping of invalid UTF-8/16/32.  Falls back to
   1262   U+FFFD REPLACEMENT CHARACTER now.
   1263 - With all changes in this release, the buffer will contain fully
   1264   valid Unicode after hb_buffer_add_utf8/16/32 no matter how
   1265   broken the input is.  This can be overridden though.  See below.
   1266 - Fix Mongolian Variation Selectors for fonts without GDEF.
   1267 - Fix minor invalid buffer access.
   1268 - Accept zh-Hant and zh-Hans language tags.  hb_ot_tag_to_language()
   1269   now uses these instead of private tags.
   1270 - Build fixes.
   1271 - New API:
   1272   * hb_buffer_add_codepoints().  This does what hb_buffer_add_utf32()
   1273     used to do, ie. no validity check on the input at all.  add_utf32
   1274     now replaces invalid Unicode codepoints with the replacement
   1275     character (see below).
   1276   * hb_buffer_set_replacement_codepoint()
   1277   * hb_buffer_get_replacement_codepoint()
   1278     Previously, in hb_buffer_add_utf8 and hb_buffer_add_utf16, when
   1279     we detected broken input, we replaced that with (hb_codepoint_t)-1.
   1280     This has changed to use U+FFFD now, but can be changed using these
   1281     new API.
   1282 
   1283 
   1284 Overview of changes leading to 0.9.30
   1285 Wednesday, July 9, 2014
   1286 =====================================
   1287 
   1288 - Update to Unicode 7.0.0:
   1289   * New scripts Manichaean and Psalter Pahlavi are shaped using
   1290     Arabic shaper.
   1291   * All the other new scripts to through the generic shaper for
   1292     now.
   1293 - Minor Indic improvements.
   1294 - Fix graphite2 backend cluster mapping [crasher!]
   1295 - API changes:
   1296   * New HB_SCRIPT_* values for Unicode 7.0 scripts.
   1297   * New function hb_ot_layout_language_get_required_feature().
   1298 - Build fixes.
   1299 
   1300 
   1301 Overview of changes leading to 0.9.29
   1302 Thursday, May 29, 2014
   1303 =====================================
   1304 
   1305 - Implement cmap in hb-ot-font.h.  No variation-selectors yet.
   1306 - Myanmar: Allow MedialYa+Asat.
   1307 - Various Indic fixes:
   1308   * Support most characters in Extended Devanagary and Vedic
   1309     Unicode blocks.
   1310   * Allow digits and a some punctuation as consonant placeholders.
   1311 - Build fixes.
   1312 
   1313 
   1314 Overview of changes leading to 0.9.28
   1315 Monday, April 28, 2014
   1316 =====================================
   1317 
   1318 - Unbreak old-spec Indic shaping. (bug 76705)
   1319 - Fix shaping of U+17DD and U+0FC6.
   1320 - Add HB_NO_MERGE_CLUSTERS build option.  NOT to be enabled by default
   1321   for shipping libraries.  It's an option for further experimentation
   1322   right now.  When we are sure how to do it properly, we will add
   1323   public run-time API for the functionality.
   1324 - Build fixes.
   1325 
   1326 
   1327 Overview of changes leading to 0.9.27
   1328 Tuesday, March 18, 2014
   1329 =====================================
   1330 
   1331 - Don't use "register" storage class specifier
   1332 - Wrap definition of free_langs() with HAVE_ATEXIT
   1333 - Add coretext_aat shaper and hb_coretext_face_create() constructor
   1334 - If HAVE_ICU_BUILTIN is defined, use hb-icu Unicode callbacks
   1335 - Add Myanmar test case from OpenType Myanmar spec
   1336 - Only do fallback Hebrew composition if no GPOS 'mark' available
   1337 - Allow bootstrapping without gtk-doc
   1338 - Use AM_MISSING_PROG for ragel and git
   1339 - Typo in ucdn's Makefile.am
   1340 - Improve MemoryBarrier() implementation
   1341 
   1342 
   1343 Overview of changes leading to 0.9.26
   1344 Thursday, January 30, 2014
   1345 =====================================
   1346 
   1347 - Misc fixes.
   1348 - Fix application of 'rtlm' feature.
   1349 - Automatically apply frac/numr/dnom around U+2044 FRACTION SLASH.
   1350 - New header: hb-ot-shape.h
   1351 - Uniscribe: fix scratch-buffer accounting.
   1352 - Reorder Tai Tham SAKOT to after tone-marks.
   1353 - Add Hangul shaper.
   1354 - New files:
   1355   hb-ot-shape-complex-hangul.cc
   1356   hb-ot-shape-complex-hebrew.cc
   1357   hb-ot-shape-complex-tibetan.cc
   1358 - Disable 'cswh' feature in Arabic shaper.
   1359 - Coretext: better handle surrogate pairs.
   1360 - Add HB_TAG_MAX and _HB_SCRIPT_MAX_VALUE.
   1361 
   1362 
   1363 Overview of changes leading to 0.9.25
   1364 Wednesday, December 4, 2013
   1365 =====================================
   1366 
   1367 - Myanmar shaper improvements.
   1368 - Avoid font fallback in CoreText backend.
   1369 - Additional OpenType language tag mappiongs.
   1370 - More aggressive shape-plan caching.
   1371 - Build with / require automake 1.13.
   1372 - Build with libtool 2.4.2.418 alpha to support ppc64le.
   1373 
   1374 
   1375 Overview of changes leading to 0.9.24
   1376 Tuesday, November 13, 2013
   1377 =====================================
   1378 
   1379 - Misc compiler warning fixes with clang.
   1380 - No functional changes.
   1381 
   1382 
   1383 Overview of changes leading to 0.9.23
   1384 Monday, October 28, 2013
   1385 =====================================
   1386 
   1387 - "Udupi HarfBuzz Hackfest", Paris, October 14..18 2013.
   1388 - Fix (Chain)Context recursion with non-monotone lookup positions.
   1389 - Misc Indic bug fixes.
   1390 - New Javanese / Buginese shaping, similar to Windows 8.1.
   1391 
   1392 
   1393 Overview of changes leading to 0.9.22
   1394 Thursday, October 3, 2013
   1395 =====================================
   1396 
   1397 - Fix use-after-end-of-scope in hb_language_from_string().
   1398 - Fix hiding of default_ignorables if font doesn't have space glyph.
   1399 - Protect against out-of-range lookup indices.
   1400 
   1401 - API Changes:
   1402 
   1403   * Added hb_ot_layout_table_get_lookup_count()
   1404 
   1405 
   1406 Overview of changes leading to 0.9.21
   1407 Monday, September 16, 2013
   1408 =====================================
   1409 
   1410 - Rename gobject-introspection library name from harfbuzz to HarfBuzz.
   1411 - Remove (long disabled) hb-old and hb-icu-le test shapers.
   1412 - Misc gtk-doc and gobject-introspection annotations.
   1413 - Misc fixes.
   1414 - API changes:
   1415 
   1416   * Add HB_SET_VALUE_INVALID
   1417 
   1418 Overview of changes leading to 0.9.20
   1419 Thursday, August 29, 2013
   1420 =====================================
   1421 
   1422 General:
   1423 - Misc substitute_closure() fixes.
   1424 - Build fixes.
   1425 
   1426 Documentation:
   1427 - gtk-doc boilerplate integrated.  Docs are built now, but
   1428   contain no contents.  By next release hopefully we have
   1429   some content in.  Enable using --enable-gtk-doc.
   1430 
   1431 GObject and Introspection:
   1432 - Added harfbuzz-gobject library (hb-gobject.h) that has type
   1433   bindings for all HarfBuzz objects and enums.  Enable using
   1434   --with-gobject.
   1435 - Added gobject-introspection boilerplate.  Nothing useful
   1436   right now.  Work in progress.  Gets enabled automatically if
   1437   --with-gobject is used.  Override with --disable-introspection.
   1438 
   1439 OpenType shaper:
   1440 - Apply 'mark' in Myanmar shaper.
   1441 - Don't apply 'dlig' by default.
   1442 
   1443 Uniscribe shaper:
   1444 - Support user features.
   1445 - Fix loading of fonts that are also installed on the system.
   1446 - Fix shaping of Arabic Presentation Forms.
   1447 - Fix build with wide chars.
   1448 
   1449 CoreText shaper:
   1450 - Support user features.
   1451 
   1452 Source changes:
   1453 - hb_face_t code moved to hb-face.h / hb-face.cc.
   1454 - Added hb-deprecated.h.
   1455 
   1456 API changes:
   1457 - Added HB_DISABLE_DEPRECATED.
   1458 - Deprecated HB_SCRIPT_CANADIAN_ABORIGINAL; replaced by
   1459   HB_SCRIPT_CANADIAN_SYLLABICS.
   1460 - Deprecated HB_BUFFER_FLAGS_DEFAULT; replaced by
   1461   HB_BUFFER_FLAG_DEFAULT.
   1462 - Deprecated HB_BUFFER_SERIALIZE_FLAGS_DEFAULT; replaced by
   1463   HB_BUFFER_SERIALIZE_FLAG_DEFAULT.
   1464 
   1465 
   1466 Overview of changes leading to 0.9.19
   1467 Tuesday, July 16, 2013
   1468 =====================================
   1469 
   1470 - Build fixes.
   1471 - Better handling of multiple variation selectors in a row.
   1472 - Pass on variation selector to GSUB if not consumed by cmap.
   1473 - Fix undefined memory access.
   1474 - Add Javanese config to Indic shaper.
   1475 - Misc bug fixes.
   1476 
   1477 Overview of changes leading to 0.9.18
   1478 Tuesday, May 28, 2013
   1479 =====================================
   1480 
   1481 New build system:
   1482 
   1483 - All unneeded code is all disabled by default,
   1484 
   1485 - Uniscribe and CoreText shapers can be enabled with their --with options,
   1486 
   1487 - icu_le and old shapers cannot be enabled for now,
   1488 
   1489 - glib, freetype, and cairo will be detected automatically.
   1490   They can be force on/off'ed with their --with options,
   1491 
   1492 - icu and graphite2 are default off, can be enabled with their --with
   1493   options,
   1494 
   1495 Moreover, ICU support is now build into a separate library:
   1496 libharfbuzz-icu.so, and a new harfbuzz-icu.pc is shipped for it.
   1497 Distros can enable ICU now without every application on earth
   1498 getting linked to via libharfbuzz.so.
   1499 
   1500 For distros I recommend that they make sure they are building --with-glib
   1501 --with-freetype --with-cairo, --with-icu, and optionally --with-graphite2;
   1502 And package harfbuzz and harfbuzz-icu separately.
   1503 
   1504 
   1505 Overview of changes leading to 0.9.17
   1506 Monday, May 20, 2013
   1507 =====================================
   1508 
   1509 - Build fixes.
   1510 - Fix bug in hb_set_get_min().
   1511 - Fix regression with Arabic mark positioning / width-zeroing.
   1512 
   1513 Overview of changes leading to 0.9.16
   1514 Friday, April 19, 2013
   1515 =====================================
   1516 
   1517 - Major speedup in OpenType lookup processing.  With the Amiri
   1518   Arabic font, this release is over 3x faster than previous
   1519   release.  All scripts / languages should see this speedup.
   1520 
   1521 - New --num-iterations option for hb-shape / hb-view; useful for
   1522   profiling.
   1523 
   1524 Overview of changes leading to 0.9.15
   1525 Friday, April 05, 2013
   1526 =====================================
   1527 
   1528 - Build fixes.
   1529 - Fix crasher in graphite2 shaper.
   1530 - Fix Arabic mark width zeroing regression.
   1531 - Don't compose Hangul jamo into Unicode syllables.
   1532 
   1533 
   1534 Overview of changes leading to 0.9.14
   1535 Thursday, March 21, 2013
   1536 =====================================
   1537 
   1538 - Build fixes.
   1539 - Fix time-consuming sanitize with malicious fonts.
   1540 - Implement hb_buffer_deserialize_glyphs() for both json and text.
   1541 - Do not ignore Hangul filler characters.
   1542 - Indic fixes:
   1543   * Fix Malayalam pre-base reordering interaction with post-forms.
   1544   * Further adjust ZWJ handling.  Should fix known regressions from
   1545     0.9.13.
   1546 
   1547 
   1548 Overview of changes leading to 0.9.13
   1549 Thursday, February 25, 2013
   1550 =====================================
   1551 
   1552 - Build fixes.
   1553 - Ngapi HarfBuzz Hackfest in London (February 2013):
   1554   * Fixed all known Indic bugs,
   1555   * New Win8-style Myanmar shaper,
   1556   * New South-East Asian shaper for Tai Tham, Cham, and New Tai Lue,
   1557   * Smartly ignore Default_Ignorable characters (joiners, etc) wheb
   1558     matching GSUB/GPOS lookups,
   1559   * Fix 'Phags-Pa U+A872 shaping,
   1560   * Fix partial disabling of default-on features,
   1561   * Allow disabling of TrueType kerning.
   1562 - Fix possible crasher with broken fonts with overlapping tables.
   1563 - Removed generated files from git again.  So, one needs ragel to
   1564   bootstrap from the git tree.
   1565 
   1566 API changes:
   1567 - hb_shape() and related APIs now abort if buffer direction is
   1568   HB_DIRECTION_INVALID.  Previously, hb_shape() was calling
   1569   hb_buffer_guess_segment_properties() on the buffer before
   1570   shaping.  The heuristics in that function are fragile.  If the
   1571   user really wants the old behvaior, they can call that function
   1572   right before calling hb_shape() to get the old behavior.
   1573 - hb_blob_create_sub_blob() always creates sub-blob with
   1574   HB_MEMORY_MODE_READONLY.  See comments for the reason.
   1575 
   1576 
   1577 Overview of changes leading to 0.9.12
   1578 Thursday, January 18, 2013
   1579 =====================================
   1580 
   1581 - Build fixes for Sun compiler.
   1582 - Minor bug fix.
   1583 
   1584 Overview of changes leading to 0.9.11
   1585 Thursday, January 10, 2013
   1586 =====================================
   1587 
   1588 - Build fixes.
   1589 - Fix GPOS mark attachment with null Anchor offsets.
   1590 - [Indic] Fix old-spec reordering of viramas if sequence ends in one.
   1591 - Fix multi-threaded shaper data creation crash.
   1592 - Add atomic ops for Solaris.
   1593 
   1594 API changes:
   1595 - Rename hb_buffer_clear() to hb_buffer_clear_contents().
   1596 
   1597 
   1598 Overview of changes leading to 0.9.10
   1599 Thursday, January 3, 2013
   1600 =====================================
   1601 
   1602 - [Indic] Fixed rendering of Malayalam dot-reph
   1603 - Updated OT language tags.
   1604 - Updated graphite2 backend.
   1605 - Improved hb_ot_layout_get_size_params() logic.
   1606 - Improve hb-shape/hb-view help output.
   1607 - Fixed hb-set.h implementation to not crash.
   1608 - Fixed various issues with hb_ot_layout_collect_lookups().
   1609 - Various build fixes.
   1610 
   1611 New API:
   1612 
   1613 hb_graphite2_face_get_gr_face()
   1614 hb_graphite2_font_get_gr_font()
   1615 hb_coretext_face_get_cg_font()
   1616 
   1617 Modified API:
   1618 
   1619 hb_ot_layout_get_size_params()
   1620 
   1621 
   1622 Overview of changes leading to 0.9.9
   1623 Wednesday, December 5, 2012
   1624 ====================================
   1625 
   1626 - Fix build on Windows.
   1627 - Minor improvements.
   1628 
   1629 
   1630 Overview of changes leading to 0.9.8
   1631 Tuesday, December 4, 2012
   1632 ====================================
   1633 
   1634 
   1635 - Actually implement hb_shape_plan_get_shaper ().
   1636 - Make UCDB data tables const.
   1637 - Lots of internal refactoring in OTLayout tables.
   1638 - Flesh out hb_ot_layout_lookup_collect_glyphs().
   1639 
   1640 New API:
   1641 
   1642 hb_ot_layout_collect_lookups()
   1643 hb_ot_layout_get_size_params()
   1644 
   1645 
   1646 Overview of changes leading to 0.9.7
   1647 Sunday, November 21, 2012
   1648 ====================================
   1649 
   1650 
   1651 HarfBuzz "All-You-Can-Eat-Sushi" (aka Vancouver) Hackfest and follow-on fixes.
   1652 
   1653 - Fix Arabic contextual joining using pre-context text.
   1654 - Fix Sinhala "split matra" mess.
   1655 - Fix Khmer shaping with broken fonts.
   1656 - Implement Thai "PUA" shaping for old fonts.
   1657 - Do NOT route Kharoshthi script through the Indic shaper.
   1658 - Disable fallback positioning for Indic and Thai shapers.
   1659 - Misc fixes.
   1660 
   1661 
   1662 hb-shape / hb-view changes:
   1663 
   1664 - Add --text-before and --text-after
   1665 - Add --bot / --eot / --preserve-default-ignorables
   1666 - hb-shape --output-format=json
   1667 
   1668 
   1669 New API:
   1670 
   1671 hb_buffer_clear()
   1672 
   1673 hb_buffer_flags_t
   1674 
   1675 HB_BUFFER_FLAGS_DEFAULT
   1676 HB_BUFFER_FLAG_BOT
   1677 HB_BUFFER_FLAG_EOT
   1678 HB_BUFFER_FLAG_PRESERVE_DEFAULT_IGNORABLES
   1679 
   1680 hb_buffer_set_flags()
   1681 hb_buffer_get_flags()
   1682 
   1683 HB_BUFFER_SERIALIZE_FLAGS
   1684 hb_buffer_serialize_glyphs()
   1685 hb_buffer_deserialize_glyphs()
   1686 hb_buffer_serialize_list_formats()
   1687 
   1688 hb_set_add_range()
   1689 hb_set_del_range()
   1690 hb_set_get_population()
   1691 hb_set_next_range()
   1692 
   1693 hb_face_[sg]et_glyph_count()
   1694 
   1695 hb_segment_properties_t
   1696 HB_SEGMENT_PROPERTIES_DEFAULT
   1697 hb_segment_properties_equal()
   1698 hb_segment_properties_hash()
   1699 
   1700 hb_buffer_set_segment_properties()
   1701 hb_buffer_get_segment_properties()
   1702 
   1703 hb_ot_layout_glyph_class_t
   1704 hb_ot_layout_get_glyph_class()
   1705 hb_ot_layout_get_glyphs_in_class()
   1706 
   1707 hb_shape_plan_t
   1708 hb_shape_plan_create()
   1709 hb_shape_plan_create_cached()
   1710 hb_shape_plan_get_empty()
   1711 hb_shape_plan_reference()
   1712 hb_shape_plan_destroy()
   1713 hb_shape_plan_set_user_data()
   1714 hb_shape_plan_get_user_data()
   1715 hb_shape_plan_execute()
   1716 hb_shape_plan_get_shaper()
   1717 
   1718 hb_ot_shape_plan_collect_lookups()
   1719 
   1720 
   1721 API changes:
   1722 
   1723 - Remove "mask" parameter from hb_buffer_add().
   1724 - Rename hb_ot_layout_would_substitute_lookup() and hb_ot_layout_substitute_closure_lookup().
   1725 - hb-set.h API const correction.
   1726 - Renamed hb_set_min/max() to hb_set_get_min/max().
   1727 - Rename hb_ot_layout_feature_get_lookup_indexes() to hb_ot_layout_feature_get_lookups().
   1728 - Rename hb_buffer_guess_properties() to hb_buffer_guess_segment_properties().
   1729 
   1730 
   1731 
   1732 Overview of changes leading to 0.9.6
   1733 Sunday, November 13, 2012
   1734 ====================================
   1735 
   1736 - Don't clear pre-context text if no new context is provided.
   1737 - Fix ReverseChainingSubstLookup, which was totally borked.
   1738 - Adjust output format of hb-shape a bit.
   1739 - Include config.h.in in-tree.  Makes it easier for alternate build systems.
   1740 - Fix hb_buffer_set_length(buffer, 0) invalid memory allocation.
   1741 - Use ICU LayoutEngine's C API instead of C++.  Avoids much headache.
   1742 - Drop glyphs for all of Unicode Default_Ignorable characters.
   1743 - Misc build fixes.
   1744 
   1745 Arabic shaper:
   1746 - Enable 'dlig' and 'mset' features in Arabic shaper.
   1747 - Implement 'Phags-pa shaping, improve Mongolian.
   1748 
   1749 Indic shaper:
   1750 - Decompose Sinhala split matras the way old HarfBuzz / Pango did.
   1751 - Initial support for Consonant Medials.
   1752 - Start adding new-style Myanmar shaping.
   1753 - Make reph and 'pref' logic introspect the font.
   1754 - Route Meetei-Mayek through the Indic shaper.
   1755 - Don't apply 'liga' in Indic shaper.
   1756 - Improve Malayalam pre-base reordering Ra interaction with Chillus.
   1757 
   1758 
   1759 
   1760 Overview of changes leading to 0.9.5
   1761 Sunday, October 14, 2012
   1762 ====================================
   1763 
   1764 - Synthetic-GSUB Arabic fallback shaping.
   1765 
   1766 - Misc Indic improvements.
   1767 
   1768 - Add build system support for pthread.
   1769 
   1770 - Imported UCDN for in-tree Unicode callbacks implementation.
   1771 
   1772 - Context-aware Arabic joining.
   1773 
   1774 - Misc other fixes.
   1775 
   1776 - New API:
   1777 
   1778   hb_feature_to/from-string()
   1779   hb_buffer_[sg]et_content_type()
   1780 
   1781 
   1782 
   1783 Overview of changes leading to 0.9.4
   1784 Tuesday, Sep 03, 2012
   1785 ====================================
   1786 
   1787 - Indic improvements with old-spec Malayalam.
   1788 
   1789 - Better fallback glyph positioning, specially with Thai / Lao marks.
   1790 
   1791 - Implement dotted-circle insertion.
   1792 
   1793 - Better Arabic fallback shaping / ligation.
   1794 
   1795 - Added ICU LayoutEngine backend for testing.  Call it by the 'icu_le' name.
   1796 
   1797 - Misc fixes.
   1798 
   1799 
   1800 
   1801 Overview of changes leading to 0.9.3
   1802 Friday, Aug 18, 2012
   1803 ====================================
   1804 
   1805 - Fixed fallback mark positioning for left-to-right text.
   1806 
   1807 - Improve mark positioning for the remaining combining classes.
   1808 
   1809 - Unbreak Thai and fallback Arabic shaping.
   1810 
   1811 - Port Arabic shaper to shape-plan caching.
   1812 
   1813 - Use new ICU normalizer functions.
   1814 
   1815 
   1816 
   1817 Overview of changes leading to 0.9.2
   1818 Friday, Aug 10, 2012
   1819 ====================================
   1820 
   1821 - Over a thousand commits!  This is the first major release of HarfBuzz.
   1822 
   1823 - HarfBuzz is feature-complete now!  It should be in par, or better, than
   1824   both Pango's shapers and old HarfBuzz / Qt shapers.
   1825 
   1826 - New Indic shaper, supporting main Indic scripts, Sinhala, and Khmer.
   1827 
   1828 - Improved Arabic shaper, with fallback Arabic shaping, supporting Arabic,
   1829   Sinhala, N'ko, Mongolian, and Mandaic.
   1830 
   1831 - New Thai / Lao shaper.
   1832 
   1833 - Tibetan / Hangul support in the generic shaper.
   1834 
   1835 - Synthetic GDEF support for fonts without a GDEF table.
   1836 
   1837 - Fallback mark positioning for fonts without a GPOS table.
   1838 
   1839 - Unicode normalization shaping heuristic during glyph mapping.
   1840 
   1841 - New experimental Graphite2 backend.
   1842 
   1843 - New Uniscribe backend (primarily for testing).
   1844 
   1845 - New CoreText backend (primarily for testing).
   1846 
   1847 - Major optimization and speedup.
   1848 
   1849 - Test suites and testing infrastructure (work in progress).
   1850 
   1851 - Greatly improved hb-view cmdline tool.
   1852 
   1853 - hb-shape cmdline tool.
   1854 
   1855 - Unicode 6.1 support.
   1856 
   1857 Summary of API changes:
   1858 
   1859 o Changed API:
   1860 
   1861   - Users are expected to only include main header files now (ie. hb.h,
   1862     hb-glib.h, hb-ft.h, ...)
   1863 
   1864   - All struct tag names had their initial underscore removed.
   1865     Ie. "struct _hb_buffer_t" is "struct hb_buffer_t" now.
   1866 
   1867   - All set_user_data() functions now take a "replace" boolean parameter.
   1868 
   1869   - hb_buffer_create() takes zero arguments now.
   1870     Use hb_buffer_pre_allocate() to pre-allocate.
   1871 
   1872   - hb_buffer_add_utf*() now accept -1 for length parameteres,
   1873     meaning "nul-terminated".
   1874 
   1875   - hb_direction_t enum values changed.
   1876 
   1877   - All *_from_string() APIs now take a length parameter to allow for
   1878     non-nul-terminated strings. A -1 length means "nul-terminated".
   1879 
   1880   - Typedef for hb_language_t changed.
   1881 
   1882   - hb_get_table_func_t renamed to hb_reference_table_func_t.
   1883 
   1884   - hb_ot_layout_table_choose_script()
   1885 
   1886   - Various renames in hb-unicode.h.
   1887 
   1888 o New API:
   1889 
   1890   - hb_buffer_guess_properties()
   1891     Automatically called by hb_shape().
   1892 
   1893   - hb_buffer_normalize_glyphs()
   1894 
   1895   - hb_tag_from_string()
   1896 
   1897   - hb-coretext.h
   1898 
   1899   - hb-uniscribe.h
   1900 
   1901   - hb_face_reference_blob()
   1902   - hb_face_[sg]et_index()
   1903   - hb_face_set_upem()
   1904 
   1905   - hb_font_get_glyph_name_func_t
   1906     hb_font_get_glyph_from_name_func_t
   1907     hb_font_funcs_set_glyph_name_func()
   1908     hb_font_funcs_set_glyph_from_name_func()
   1909     hb_font_get_glyph_name()
   1910     hb_font_get_glyph_from_name()
   1911     hb_font_glyph_to_string()
   1912     hb_font_glyph_from_string()
   1913 
   1914   - hb_font_set_funcs_data()
   1915 
   1916   - hb_ft_font_set_funcs()
   1917   - hb_ft_font_get_face()
   1918 
   1919   - hb-gobject.h (work in progress)
   1920 
   1921   - hb_ot_shape_glyphs_closure()
   1922     hb_ot_layout_substitute_closure_lookup()
   1923 
   1924   - hb-set.h
   1925 
   1926   - hb_shape_full()
   1927 
   1928   - hb_unicode_combining_class_t
   1929 
   1930   - hb_unicode_compose_func_t
   1931     hb_unicode_decompose_func_t
   1932     hb_unicode_decompose_compatibility_func_t
   1933     hb_unicode_funcs_set_compose_func()
   1934     hb_unicode_funcs_set_decompose_func()
   1935     hb_unicode_funcs_set_decompose_compatibility_func()
   1936     hb_unicode_compose()
   1937     hb_unicode_decompose()
   1938     hb_unicode_decompose_compatibility()
   1939 
   1940 o Removed API:
   1941 
   1942   - hb_ft_get_font_funcs()
   1943 
   1944   - hb_ot_layout_substitute_start()
   1945     hb_ot_layout_substitute_lookup()
   1946     hb_ot_layout_substitute_finish()
   1947     hb_ot_layout_position_start()
   1948     hb_ot_layout_position_lookup()
   1949     hb_ot_layout_position_finish()
   1950 
   1951 
   1952 
   1953 Overview of changes leading to 0.6.0
   1954 Friday, May 27, 2011
   1955 ====================================
   1956 
   1957 - Vertical text support in GPOS
   1958 - Almost all API entries have unit tests now, under test/
   1959 - All thread-safety issues are fixed
   1960 
   1961 Summary of API changes follows.
   1962 
   1963 
   1964 * Simple Types API:
   1965 
   1966   o New API:
   1967     HB_LANGUAGE_INVALID
   1968     hb_language_get_default()
   1969     hb_direction_to_string()
   1970     hb_direction_from_string()
   1971     hb_script_get_horizontal_direction()
   1972     HB_UNTAG()
   1973 
   1974   o Renamed API:
   1975     hb_category_t renamed to hb_unicode_general_category_t
   1976 
   1977   o Changed API:
   1978     hb_language_t is a typed pointers now
   1979 
   1980   o Removed API:
   1981     HB_TAG_STR()
   1982 
   1983 
   1984 * Use ISO 15924 tags for hb_script_t:
   1985 
   1986   o New API:
   1987     hb_script_from_iso15924_tag()
   1988     hb_script_to_iso15924_tag()
   1989     hb_script_from_string()
   1990 
   1991   o Changed API:
   1992     HB_SCRIPT_* enum members changed value.
   1993 
   1994 
   1995 * Buffer API streamlined:
   1996 
   1997   o New API:
   1998     hb_buffer_reset()
   1999     hb_buffer_set_length()
   2000     hb_buffer_allocation_successful()
   2001 
   2002   o Renamed API:
   2003     hb_buffer_ensure() renamed to hb_buffer_pre_allocate()
   2004     hb_buffer_add_glyph() renamed to hb_buffer_add()
   2005 
   2006   o Removed API:
   2007     hb_buffer_clear()
   2008     hb_buffer_clear_positions()
   2009 
   2010   o Changed API:
   2011     hb_buffer_get_glyph_infos() takes an out length parameter now
   2012     hb_buffer_get_glyph_positions() takes an out length parameter now
   2013 
   2014 
   2015 * Blob API streamlined:
   2016 
   2017   o New API:
   2018     hb_blob_get_data()
   2019     hb_blob_get_data_writable()
   2020 
   2021   o Renamed API:
   2022     hb_blob_create_empty() renamed to hb_blob_get_empty()
   2023 
   2024   o Removed API:
   2025     hb_blob_lock()
   2026     hb_blob_unlock()
   2027     hb_blob_is_writable()
   2028     hb_blob_try_writable()
   2029 
   2030   o Changed API:
   2031     hb_blob_create() takes user_data before destroy now
   2032 
   2033 
   2034 * Unicode functions API:
   2035 
   2036   o Unicode function vectors can subclass other unicode function vectors now.
   2037     Unimplemented callbacks in the subclass automatically chainup to the parent.
   2038 
   2039   o All hb_unicode_funcs_t callbacks take a user_data now.  Their setters
   2040     take a user_data and its respective destroy callback.
   2041 
   2042   o New API:
   2043     hb_unicode_funcs_get_empty()
   2044     hb_unicode_funcs_get_default()
   2045     hb_unicode_funcs_get_parent()
   2046 
   2047   o Changed API:
   2048     hb_unicode_funcs_create() now takes a parent_funcs.
   2049 
   2050   o Removed func getter functions:
   2051     hb_unicode_funcs_get_mirroring_func()
   2052     hb_unicode_funcs_get_general_category_func()
   2053     hb_unicode_funcs_get_script_func()
   2054     hb_unicode_funcs_get_combining_class_func()
   2055     hb_unicode_funcs_get_eastasian_width_func()
   2056 
   2057 
   2058 * Face API:
   2059 
   2060   o Renamed API:
   2061     hb_face_get_table() renamed to hb_face_reference_table()
   2062     hb_face_create_for_data() renamed to hb_face_create()
   2063 
   2064   o Changed API:
   2065     hb_face_create_for_tables() takes user_data before destroy now
   2066     hb_face_reference_table() returns empty blob instead of NULL
   2067     hb_get_table_func_t accepts the face as first parameter now
   2068 
   2069 * Font API:
   2070 
   2071   o Fonts can subclass other fonts now.  Unimplemented callbacks in the
   2072     subclass automatically chainup to the parent.  When chaining up,
   2073     scale is adjusted if the parent font has a different scale.
   2074 
   2075   o All hb_font_funcs_t callbacks take a user_data now.  Their setters
   2076     take a user_data and its respective destroy callback.
   2077 
   2078   o New API:
   2079     hb_font_get_parent()
   2080     hb_font_funcs_get_empty()
   2081     hb_font_create_sub_font()
   2082 
   2083   o Removed API:
   2084     hb_font_funcs_copy()
   2085     hb_font_unset_funcs()
   2086 
   2087   o Removed func getter functions:
   2088     hb_font_funcs_get_glyph_func()
   2089     hb_font_funcs_get_glyph_advance_func()
   2090     hb_font_funcs_get_glyph_extents_func()
   2091     hb_font_funcs_get_contour_point_func()
   2092     hb_font_funcs_get_kerning_func()
   2093 
   2094   o Changed API:
   2095     hb_font_create() takes a face and references it now
   2096     hb_font_set_funcs() takes user_data before destroy now
   2097     hb_font_set_scale() accepts signed integers now
   2098     hb_font_get_contour_point_func_t now takes glyph first, then point_index
   2099     hb_font_get_glyph_func_t returns a success boolean now
   2100 
   2101 
   2102 * Changed object model:
   2103 
   2104   o All object types have a _get_empty() now:
   2105     hb_blob_get_empty()
   2106     hb_buffer_get_empty()
   2107     hb_face_get_empty()
   2108     hb_font_get_empty()
   2109     hb_font_funcs_get_empty()
   2110     hb_unicode_funcs_get_empty()
   2111 
   2112   o Added _set_user_data() and _get_user_data() for all object types:
   2113     hb_blob_get_user_data()
   2114     hb_blob_set_user_data()
   2115     hb_buffer_get_user_data()
   2116     hb_buffer_set_user_data()
   2117     hb_face_get_user_data()
   2118     hb_face_set_user_data()
   2119     hb_font_funcs_get_user_data()
   2120     hb_font_funcs_set_user_data()
   2121     hb_font_get_user_data()
   2122     hb_font_set_user_data()
   2123     hb_unicode_funcs_get_user_data()
   2124     hb_unicode_funcs_set_user_data()
   2125 
   2126   o Removed the _get_reference_count() from all object types:
   2127     hb_blob_get_reference_count()
   2128     hb_buffer_get_reference_count()
   2129     hb_face_get_reference_count()
   2130     hb_font_funcs_get_reference_count()
   2131     hb_font_get_reference_count()
   2132     hb_unicode_funcs_get_reference_count()
   2133 
   2134   o Added _make_immutable() and _is_immutable() for all object types except for buffer:
   2135     hb_blob_make_immutable()
   2136     hb_blob_is_immutable()
   2137     hb_face_make_immutable()
   2138     hb_face_is_immutable()
   2139 
   2140 
   2141 * Changed API for vertical text support
   2142 
   2143   o The following callbacks where removed:
   2144     hb_font_get_glyph_advance_func_t
   2145     hb_font_get_kerning_func_t
   2146 
   2147   o The following new callbacks added instead:
   2148     hb_font_get_glyph_h_advance_func_t
   2149     hb_font_get_glyph_v_advance_func_t
   2150     hb_font_get_glyph_h_origin_func_t
   2151     hb_font_get_glyph_v_origin_func_t
   2152     hb_font_get_glyph_h_kerning_func_t
   2153     hb_font_get_glyph_v_kerning_func_t
   2154 
   2155   o The following API removed as such:
   2156     hb_font_funcs_set_glyph_advance_func()
   2157     hb_font_funcs_set_kerning_func()
   2158     hb_font_get_glyph_advance()
   2159     hb_font_get_kerning()
   2160 
   2161   o New API added instead:
   2162     hb_font_funcs_set_glyph_h_advance_func()
   2163     hb_font_funcs_set_glyph_v_advance_func()
   2164     hb_font_funcs_set_glyph_h_origin_func()
   2165     hb_font_funcs_set_glyph_v_origin_func()
   2166     hb_font_funcs_set_glyph_h_kerning_func()
   2167     hb_font_funcs_set_glyph_v_kerning_func()
   2168     hb_font_get_glyph_h_advance()
   2169     hb_font_get_glyph_v_advance()
   2170     hb_font_get_glyph_h_origin()
   2171     hb_font_get_glyph_v_origin()
   2172     hb_font_get_glyph_h_kerning()
   2173     hb_font_get_glyph_v_kerning()
   2174 
   2175   o The following higher-leve API added for convenience:
   2176     hb_font_get_glyph_advance_for_direction()
   2177     hb_font_get_glyph_origin_for_direction()
   2178     hb_font_add_glyph_origin_for_direction()
   2179     hb_font_subtract_glyph_origin_for_direction()
   2180     hb_font_get_glyph_kerning_for_direction()
   2181     hb_font_get_glyph_extents_for_origin()
   2182     hb_font_get_glyph_contour_point_for_origin()
   2183 
   2184 
   2185 * OpenType Layout API:
   2186 
   2187   o New API:
   2188     hb_ot_layout_position_start()
   2189     hb_ot_layout_substitute_start()
   2190     hb_ot_layout_substitute_finish()
   2191 
   2192 
   2193 * Glue code:
   2194 
   2195   o New API:
   2196     hb_glib_script_to_script()
   2197     hb_glib_script_from_script()
   2198     hb_icu_script_to_script()
   2199     hb_icu_script_from_script()
   2200 
   2201 
   2202 * Version API added:
   2203 
   2204   o New API:
   2205     HB_VERSION_MAJOR
   2206     HB_VERSION_MINOR
   2207     HB_VERSION_MICRO
   2208     HB_VERSION_STRING
   2209     HB_VERSION_CHECK()
   2210     hb_version()
   2211     hb_version_string()
   2212     hb_version_check()
   2213 
   2214 
   2215