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