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