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