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