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