• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1Overview of changes leading to 10.2.0
2Saturday, January 11, 2025
3====================================
4- Consider Unicode Variation Selectors when subsetting “cmap” table.
5- Guard hb_cairo_glyphs_from_buffer() against malformed UTF-8 strings.
6- Fix incorrect “COLR” v1 glyph scaling in hb-cairo.
7- Use locale-independent parsing of double numbers is “hb-subset” command line
8  tool.
9- Fix incorrect zeroing of advance width of base glyphs in various “Courier New”
10  font versions due to incorrect “GDEF” glyph classes.
11- Fix handling of long language codes with “HB_LEAN” configuration.
12- Update OpenType language system registry.
13- Allow all Myanmar tone marks (including visarga) in any order
14- Don’t insert U+25CC DOTTED CIRCLE before superscript/subscript digits
15- Handle Garay script as right to left script.
16- New API for serializing font tables and potentially repacking them in optimal
17  way. This was a previously experimental-only API.
18- New API for converting font variation setting from and to strings.
19- Various build fixes
20- Various subsetter and instancer fixes.
21
22- New API:
23+hb_subset_serialize_link_t
24+hb_subset_serialize_object_t
25+hb_subset_serialize_or_fail()
26+hb_subset_axis_range_from_string()
27+hb_subset_axis_range_to_string()
28
29
30Overview of changes leading to 10.1.0
31Tuesday, November 5, 2024
32====================================
33- Fix the sign of fallback vertical glyph advance (used when font has no
34  vertical advance data).
35- Increase maximum “CFF” operands limit 20 times to support more complex fonts.
36- Add “--face-loader” option to command line utilities.
37- Support “COLR” v0 table in hb_font_get_glyph_extents().
38- Add support for font functions that use Core Text APIs, similar to FreeType
39  font functions. This allows, for example, using drawing fonts that use the new
40  (and undocumented) “hvgl” table.
41- Update IANA and OT language registries, as well ase USE data files.
42- Fix build with ICU 76.
43- Various compiler warnings and build fixes.
44- Various subsetter fixes.
45
46- New API:
47+hb_face_create_or_fail()
48+hb_face_create_from_file_or_fail()
49+hb_coretext_face_create_from_file_or_fail()
50+hb_coretext_font_set_funcs()
51+hb_ft_face_create_from_file_or_fail()
52
53Overview of changes leading to 10.0.1
54Tuesday, September 24, 2024
55====================================
56- Relax sanitization checks for “morx” subtables to fix broken AAT shaping of
57  macOS 15.0 version of GeezaPro.
58
59
60Overview of changes leading to 10.0.0
61Monday, September 23, 2024
62====================================
63- Unicode 16.0.0 support.
64- Various documentation fixes.
65- Various build fixes.
66- Add API to allow HarfBuzz client to set what glyph to use when a Unicode
67  Variation Selector is not supported by the font, which would allow the client
68  to customize what happens in this case, by using a different font for example.
69- Add a callback to for “hb_face_t” for getting the list of table tags. This is
70  now used to make calling “hb_face_get_table_tags()” work on a faces created by
71  “hb_face_create_for_tables()” (e.g. faces returned by “hb_subset_or_fail()”).
72- CGJ and Mongolian Variation Selectors are now ignored during glyph
73  positioning, previously they would block both glyph substitution and
74  positioning across them.
75- Support cairo script as an output format for “hb-view” command line tool.
76- Drop an optimization that would cause HarfBuzz not apply pair positioning
77  lookup subtables under certain circumstances, for compatibility with other
78  implementations that do apply these subtables.
79- Subsetting will now fail if source font has no glyphs, so feeding the subsetter
80  invalid data will not silently return an empty face.
81- If after partially instancing a font no variation data is left (the instance
82  is fully static), don’t consider this a failure.
83- Workaround a Firefox bug in displaying SVGs generated be “hb-view” command
84  line tool under certain circumstances.
85- Fix bug in macroman mapping for “cmap” table.
86- Fix difference shaping output when HarfBuzz is built with with
87  “HB_NO_OT_RULESETS_FAST_PATH” enabled.
88- Various subsetting and instancing fixes.
89- Various fuzzing fixes.
90- Add “with_libstdcxx” meson build option.
91
92
93- New API:
94+HB_SCRIPT_GARAY
95+HB_SCRIPT_GURUNG_KHEMA
96+HB_SCRIPT_KIRAT_RAI
97+HB_SCRIPT_OL_ONAL
98+HB_SCRIPT_SUNUWAR
99+HB_SCRIPT_TODHRI
100+HB_SCRIPT_TULU_TIGALARI
101+hb_buffer_set_not_found_variation_selector_glyph()
102+hb_buffer_get_not_found_variation_selector_glyph()
103+hb_get_table_tags_func_t
104+hb_face_set_get_table_tags_func()
105
106
107Overview of changes leading to 9.0.0
108Thursday, Jun 27, 2024
109====================================
110- HarfBuzz now the supports the proposed new OpenType “VARC” table. This
111  replaces the previously supported “Variable Composites” experimental feature.
112  “VARC” support is still experimental and it is not enabled unless HarfBuzz is
113  built with experimental APIs enabled:
114  https://github.com/harfbuzz/boring-expansion-spec/blob/main/VARC.md
115- Autotools build system have been dropped. Meson is the only supported build
116  system in HarfBuzz going forward.
117- Speed up “AAT” shaping for short words by up to 4%.
118- Ignore unknown “CFF” operators.
119- “hb_subset_input_keep_everything()” now keeps also non-unicode “name” table
120  records.
121- Update the IANA and OpenType language tag registries.
122- Support composite glyphs with very large number of points in hb-draw API.
123- Various build fixes.
124
125
126Overview of changes leading to 8.5.0
127Monday, May 13, 2024
128====================================
129- API for partial instancing is now stable and have been promoted out of
130  experimental APIs.
131- Support instancing “BASE” table.
132- Speedup AAT shaping by 13–30%.
133- Various build fixes.
134- Various subsetter and instancer fixes.
135
136- New API:
137+HB_SUBSET_FLAGS_OPTIMIZE_IUP_DELTAS
138+hb_subset_input_get_axis_range()
139+hb_subset_input_pin_axis_location()
140
141Overview of changes leading to 8.4.0
142Saturday, March 29, 2024
143====================================
144- Add /bigobj to MSVC compiler flags in meson build, to fix building hb-subset.cc
145- Specify minimum versions of various dependencies in meson and autotools build.
146- When subsetting, place variation store at the end of “GDEF” table  to fix
147  shaping issues with some versions of Adobe InDesign.
148- Various build fixes.
149
150- New API:
151+hb_buffer_set_random_state()
152+hb_buffer_get_random_state()
153
154Overview of changes leading to 8.3.1
155Saturday, March 16, 2024
156====================================
157- hb_blob_create_from_file_or_fail() on Windows will now try to interpret the
158  file name as UTF-8 first, and as system code page if it is not valid UTF-8.
159- Fix hb_style_get_value() in fonts with “STAT” table.
160- Properly handle negative offsets in CFF table.
161- Update IANA Language Subtag Registry to 2024-03-07.
162- Subsetter now supports subsetting “BASE” table.
163- Subsetter will update “hhea” font metrics in sync with “OS/2” ones.
164- “--variations” option of “hb-subset” now supports leaving out values that
165  should be unchanged, e.g. “wght=:500:” will change the default and keep max
166  and min unchanged. It also supports “*=drop” to to pin all axes to default
167  location.
168- Fix hb_ot_math_get_glyph_kerning() to match updated “MATH” table spec.
169- Support legacy MacRoman encoding in “cmap” table.
170- Various build fixes.
171- Various subsetting and instancing fixes.
172
173- New API:
174hb_subset_input_pin_all_axes_to_default()
175
176Overview of changes leading to 8.3.0
177Saturday, November 11, 2023
178====================================
179- Improve memory barrier to fix potential segfaults.
180- Various build fixes.
181- Various subsetting and instancing fixes.
182- Rename “hb-subset” option “--instance” to “--variations” to match the other
183  tools. Old option is kept as an alias.
184
185- New API:
186HB_AAT_LAYOUT_FEATURE_TYPE_CURSIVE_CONNECTION
187
188- Deprecated API:
189HB_AAT_LAYOUT_FEATURE_TYPE_CURISVE_CONNECTION
190
191Overview of changes leading to 8.2.2
192Wednesday, October 18, 2023
193“From the river to the sea, Palestine will be free”
194====================================
195- Fix regression from 8.1.0 in shaping fonts with duplicate feature tags.
196- Fix regression from 8.2.0 in parsing CSS-style feature strings.
197- Variable fonts instanciation now handles more tables.
198- Various CMake build improvements.
199- various fixes to build without errors with gcc 4.9.2.
200
201
202Overview of changes leading to 8.2.1
203Monday, September 18, 2023
204====================================
205- Unicode 15.1 support.
206
207
208Overview of changes leading to 8.2.0
209Friday, September 8, 2023
210====================================
211- Various build and fuzzing fixes
212- Improvements to COLRv1 painting.
213
214- New API:
215+hb_paint_color_glyph_func_t
216+hb_paint_funcs_set_color_glyph_func
217+hb_paint_color_glyph
218
219
220Overview of changes leading to 8.1.1
221Wednesday, August 2, 2023
222====================================
223- Fix shaping of contextual rules at the end of string, introduced in 8.1.0
224- Fix stack-overflow in repacker with malicious fonts.
225- 30% speed up loading Noto Duployan font.
226
227
228Overview of changes leading to 8.1.0
229Tuesday, August 1, 2023
230====================================
231- Fix long-standing build issue with the AIX compiler and older Apple clang.
232
233- Revert optimization that could cause timeout during subsetting with malicious fonts.
234
235- More optimization work:
236  - 45% speed up in shaping Noto Duployan font.
237  - 10% speed up in subsetting Noto Duployan font.
238  - Another 8% speed up in shaping Gulzar.
239  - 5% speed up in loading Roboto.
240
241- New API:
242+hb_ot_layout_collect_features_map()
243
244
245Overview of changes leading to 8.0.1
246Wednesday, July 12, 2023
247====================================
248- Build fix on 32-bit ARM.
249
250- More speed optimizations:
251  - 60% speed up in retain-gid (used for IFT) subsetting of SourceHanSans-VF.
252  - 16% speed up in retain-gid (used for IFT) subsetting of NotoSansCJKkr.
253  - 38% speed up in subsetting (beyond-64k) mega-merged Noto.
254
255
256Overview of changes leading to 8.0.0
257Sunday, July 9, 2023
258====================================
259- New, experimental, WebAssembly (WASM) shaper, that provides greater
260  flexibility over OpenType/AAT/Graphite shaping, using WebAssembly embedded
261  inside the font file. Currently WASM shaper is disabled by default and needs
262  to be enabled at build time. For details, see:
263
264    https://github.com/harfbuzz/harfbuzz/blob/main/docs/wasm-shaper.md
265
266  For example fonts making use of the WASM shaper, see:
267
268    https://github.com/harfbuzz/harfbuzz-wasm-examples
269
270- Improvements to Experimental features introduced in earlier releases:
271  - Support for subsetting beyond-64k and VarComposites fonts.
272  - Support for instancing variable fonts with cubic “glyf” table.
273
274- Many big speed optimizations:
275  - Up to 89% speedup loading variable fonts for shaping.
276  - Up to 88% speedup in small subsets of large (eg. CJK) fonts (both TTF and
277    OTF), essential for Incremental Font Transfer (IFT).
278  - Over 50% speedup in loading Roboto font for shaping.
279  - Up to 40% speed up in loading (sanitizing) complex fonts.
280  - 30% speed up in shaping Gulzar font.
281  - Over 25% speedup in glyph loading Roboto font.
282  - 10% speed up loading glyph shapes in VarComposite Hangul font.
283  - hb-hashmap optimizations & hashing improvements.
284
285- New macro HB_ALWAYS_INLINE. HarfBuzz now inlines functions more aggressively,
286  which results in some speedup at the expense of bigger code size. To disable
287  this feature define the macro to just inline.
288
289- New API:
290+HB_CODEPOINT_INVALID
291+hb_ot_layout_get_baseline2()
292+hb_ot_layout_get_baseline_with_fallback2()
293+hb_ot_layout_get_font_extents()
294+hb_ot_layout_get_font_extents2()
295+hb_subset_input_set_axis_range()
296
297
298Overview of changes leading to 7.3.0
299Tuesday, May 9, 2023
300====================================
301- Speedup applying glyph variation in VarComposites fonts (over 40% speedup).
302  (Behdad Esfahbod)
303- Speedup instancing some fonts (over 20% speedup in instancing RobotoFlex).
304  (Behdad Esfahbod)
305- Speedup shaping some fonts (over 30% speedup in shaping Roboto).
306  (Behdad Esfahbod)
307- Support subsetting VarComposites and beyond-64k fonts. (Behdad Esfahbod)
308- New configuration macro HB_MINIMIZE_MEMORY_USAGE to favor optimizing memory
309  usage over speed. (Behdad Esfahbod)
310- Supporting setting the mapping between old and new glyph indices during
311  subsetting. (Garret Rieger)
312- Various fixes and improvements.
313  (Behdad Esfahbod, Denis Rochette, Garret Rieger, Han Seung Min, Qunxin Liu)
314
315- New API:
316+hb_subset_input_old_to_new_glyph_mapping()
317
318
319Overview of changes leading to 7.2.0
320Thursday, April 27, 2023
321====================================
322- Add Tifinagh to the list of scripts that can natively be either right-to-left
323  or left-to-right, to improve handling of its glyph positioning.
324  (Simon Cozens)
325- Return also single substitution from hb_ot_layout_lookup_get_glyph_alternates()
326  (Behdad Esfahbod)
327- Fix 4.2.0 regression in applying across syllables in syllabic scripts.
328  (Behdad Esfahbod)
329- Add flag to avoid glyph substitution closure during subsetting, and the
330  corresponding “--no-layout-closure” option to “hb-subset” command line tool.
331  (Garret Rieger)
332- Support instancing COLRv1 table. (Qunxin Liu)
333- Don’t drop used user-defined name table entries during subsetting.
334  (Qunxin Liu)
335- Optimize handling of “gvar” table. (Behdad Esfahbod)
336- Various subsetter bug fixes and improvements. (Garret Rieger, Qunxin Liu)
337- Various documentation improvements. (Behdad Esfahbod, Josef Friedrich)
338
339- New API:
340+HB_SUBSET_FLAGS_NO_LAYOUT_CLOSURE
341+HB_UNICODE_COMBINING_CLASS_CCC132
342
343- Deprecated API:
344+HB_UNICODE_COMBINING_CLASS_CCC133
345
346
347Overview of changes leading to 7.1.0
348Friday, March 3, 2023
349====================================
350- New experimental hb_shape_justify() API that uses font variations to expand
351  or shrink the text to a given advance. (Behdad Esfahbod)
352- Various build and bug fixes. (Behdad Esfahbod, Garret Rieger, Qunxin Liu)
353
354- New API:
355+hb_font_set_variation()
356
357
358Overview of changes leading to 7.0.1
359Monday, February 20, 2023
360====================================
361- Various build and bug fixes.
362
363
364Overview of changes leading to 7.0.0
365Saturday, February 11, 2023
366====================================
367- New hb-paint API that is designed mainly to paint “COLRv1” glyphs, but can be
368  also used as a unified API to paint any of the glyph representations
369  supported by HarfBuzz (B/W outlines, color layers, or color bitmaps).
370  (Behdad Esfahbod, Matthias Clasen)
371- New hb-cairo API for integrating with cairo graphics library. This is provided
372  as a separate harfbuzz-cairo library. (Behdad Esfahbod, Matthias Clasen)
373- Support for instancing “CFF2” table. (Behdad Esfahbod)
374- Support font emboldening. (Behdad Esfahbod)
375- Support feature ranges with AAT shaping. (Behdad Esfahbod)
376- Experimental support to cubic curves in “glyf” table, see
377  https://github.com/harfbuzz/boring-expansion-spec/blob/main/glyf1-cubicOutlines.md
378  for spec. (Behdad Esfahbod)
379- Various subsetter improvements. (Garret Rieger, Qunxin Liu, Behdad Esfahbod)
380- Various documentation improvements.
381  (Behdad Esfahbod, Matthias Clasen, Khaled Hosny)
382- Significantly reduced memory use during shaping. (Behdad Esfahbod)
383- Greatly reduced memory use during subsetting “CFF” table. (Behdad Esfahbod)
384- New command line utility, hb-info, for querying various font information.
385  (Behdad Esfahbod, Matthias Clasen)
386- New hb-shape/hb-view options: --glyphs, --color-palette, --font-bold,
387  --font-grade, and --named-instance. (Behdad Esfahbod)
388- Miscellaneous fixes and improvements.
389  (Amir Masoud Abdol, Andres Salomon, Behdad Esfahbod, Chun-wei Fan,
390  Garret Rieger, Jens Kutilek, Khaled Hosny, Konstantin Käfer, Matthias Clasen,
391  Nirbheek Chauhan, Pedro J. Estébanez, Qunxin Liu, Sergei Trofimovich)
392
393- New API:
394+HB_FONT_NO_VAR_NAMED_INSTANCE
395+HB_PAINT_IMAGE_FORMAT_BGRA
396+HB_PAINT_IMAGE_FORMAT_PNG
397+HB_PAINT_IMAGE_FORMAT_SVG
398+hb_cairo_font_face_create_for_face
399+hb_cairo_font_face_create_for_font
400+hb_cairo_font_face_get_face
401+hb_cairo_font_face_get_font
402+hb_cairo_font_face_get_scale_factor
403+hb_cairo_font_face_set_font_init_func
404+hb_cairo_font_face_set_scale_factor
405+hb_cairo_font_init_func_t
406+hb_cairo_glyphs_from_buffer
407+hb_cairo_scaled_font_get_font
408+hb_color_line_get_color_stops
409+hb_color_line_get_color_stops_func_t
410+hb_color_line_get_extend
411+hb_color_line_get_extend_func_t
412+hb_color_line_t
413+hb_color_stop_t
414+hb_draw_funcs_get_empty
415+hb_draw_funcs_get_user_data
416+hb_draw_funcs_set_user_data
417+hb_face_collect_nominal_glyph_mapping
418+hb_font_draw_glyph
419+hb_font_draw_glyph_func_t
420+hb_font_funcs_set_draw_glyph_func
421+hb_font_funcs_set_paint_glyph_func
422+hb_font_get_synthetic_bold
423+hb_font_get_var_named_instance
424+hb_font_paint_glyph
425+hb_font_paint_glyph_func_t
426+hb_font_set_synthetic_bold
427+hb_map_keys
428+hb_map_next
429+hb_map_update
430+hb_map_values
431+hb_ot_color_glyph_has_paint
432+hb_ot_color_has_paint
433+hb_ot_layout_script_select_language2
434+hb_ot_name_id_predefined_t
435+hb_paint_color
436+hb_paint_color_func_t
437+hb_paint_composite_mode_t
438+hb_paint_custom_palette_color
439+hb_paint_custom_palette_color_func_t
440+hb_paint_extend_t
441+hb_paint_funcs_create
442+hb_paint_funcs_destroy
443+hb_paint_funcs_get_empty
444+hb_paint_funcs_get_user_data
445+hb_paint_funcs_is_immutable
446+hb_paint_funcs_make_immutable
447+hb_paint_funcs_reference
448+hb_paint_funcs_set_color_func
449+hb_paint_funcs_set_custom_palette_color_func
450+hb_paint_funcs_set_image_func
451+hb_paint_funcs_set_linear_gradient_func
452+hb_paint_funcs_set_pop_clip_func
453+hb_paint_funcs_set_pop_group_func
454+hb_paint_funcs_set_pop_transform_func
455+hb_paint_funcs_set_push_clip_glyph_func
456+hb_paint_funcs_set_push_clip_rectangle_func
457+hb_paint_funcs_set_push_group_func
458+hb_paint_funcs_set_push_transform_func
459+hb_paint_funcs_set_radial_gradient_func
460+hb_paint_funcs_set_sweep_gradient_func
461+hb_paint_funcs_set_user_data
462+hb_paint_funcs_t
463+hb_paint_image
464+hb_paint_image_func_t
465+hb_paint_linear_gradient
466+hb_paint_linear_gradient_func_t
467+hb_paint_pop_clip
468+hb_paint_pop_clip_func_t
469+hb_paint_pop_group
470+hb_paint_pop_group_func_t
471+hb_paint_pop_transform
472+hb_paint_pop_transform_func_t
473+hb_paint_push_clip_glyph
474+hb_paint_push_clip_glyph_func_t
475+hb_paint_push_clip_rectangle
476+hb_paint_push_clip_rectangle_func_t
477+hb_paint_push_group
478+hb_paint_push_group_func_t
479+hb_paint_push_transform
480+hb_paint_push_transform_func_t
481+hb_paint_radial_gradient
482+hb_paint_radial_gradient_func_t
483+hb_paint_sweep_gradient
484+hb_paint_sweep_gradient_func_t
485+hb_set_is_inverted
486+hb_subset_input_keep_everything
487
488- Deprecated API:
489+hb_font_funcs_set_glyph_shape_func
490+hb_font_get_glyph_shape_func_t
491+hb_font_get_glyph_shape
492
493
494Overview of changes leading to 6.0.0
495Friday, December 16, 2022
496====================================
497- A new API have been added to pre-process the face and speed up future
498  subsetting operations on that face. Provides up to a 95% reduction in
499  subsetting times when the same face is subset more than once.
500
501  For more details and benchmarks, see:
502  https://github.com/harfbuzz/harfbuzz/blob/main/docs/subset-preprocessing.md
503
504  (Garret Rieger, Behdad Esfahbod)
505
506- Shaping have been speedup by skipping entire lookups when the buffer contents
507  don't intersect with the lookup. Shows up to a 10% speedup in shaping some
508  fonts. (Behdad Esfahbod)
509
510- A new experimental feature, “Variable Composites” (enabled by passing
511  -Dexperimental_api=true to meson), is also featured in this release.
512  This technology enables drastic compression of fonts in the Chinese,
513  Japanese, Korean, and other writing systems, by reusing the OpenType Font
514  Variations technology for encoding “smart components” into the font.
515
516  The specification for these  extensions to the font format can be found in:
517  https://github.com/harfbuzz/boring-expansion-spec/blob/glyf1/glyf1.md
518
519  A test variable-font with ~7160 Hangul syllables derived from the
520  NotoSerifKR-VF font has been built, with existing OpenType technology, as
521  well as with the new Variable Composites (VarComposites) technology. The
522  VarComposites font is over 90% smaller than the OpenType version of the font!
523  Both fonts can be obtained from the “smarties” repository:
524  https://github.com/behdad/smarties/tree/3.0/fonts/hangul/serif
525
526  When building HarfBuzz with experimental features enabled, you can test
527  the “smarties” font with a sample character like this:
528
529  $ hb-view butchered-hangul-serif-smarties-variable.ttf -u AE01 --variations=wght=700
530
531  (Behdad Esfahbod)
532
533- The HarfBuzz subsetter can now drop axes by pinning them to specific values
534  (also referred to as instancing). There are a couple of restrictions
535  currently:
536
537  - Only works with TrueType (“glyf”) based fonts. “CFF2” fonts are not yet
538    supported.
539  - Only supports the case where all axes in a font are pinned.
540
541  (Garret Rieger, Qunxin Liu)
542
543- Miscellaneous fixes and improvements.
544
545  (Behdad Esfahbod, Christoph Reiter, David Corbett, Eli Schwartz, Garret
546   Rieger, Joel Auterson, Jordan Petridis, Khaled Hosny, Lorenz Wildberg,
547   Marco Rebhan, Martin Storsjö, Matthias Clasen, Qunxin Liu, Satadru Pramanik)
548
549
550- New API
551+hb_subset_input_pin_axis_location()
552+hb_subset_input_pin_axis_to_default()
553+hb_subset_preprocess()
554
555
556Overview of changes leading to 5.3.1
557Wednesday, October 19, 2022
558====================================
559- Subsetter repacker fixes. (Garret Rieger)
560- Adjust Grapheme clusters for Katakana voiced sound marks. (Behdad Esfahbod)
561- New “hb-subset” option “--preprocess-face”. (Garret Rieger)
562
563
564Overview of changes leading to 5.3.0
565Saturday, October 8, 2022
566"Women, Life, Freedom" #MahsaAmini
567====================================
568- Don’t add glyphs from dropped MATH or COLR tables to the subset glyphs.
569  (Khaled Hosny)
570- Map “rlig” to appropriate AAT feature selectors. (Jonathan Kew)
571- Update USE data files to latest version. (David Corbett)
572- Check “CBDT” extents first before outline tables, to help with fonts that
573  also include an empty “glyf” table. (Khaled Hosny)
574- More work towards variable font instancing in the subsetter. (Qunxin Liu)
575- Subsetter repacker improvements. (Garret Rieger)
576- New API:
577+hb_ot_layout_lookup_get_optical_bound()
578+hb_face_builder_sort_tables()
579
580
581Overview of changes leading to 5.2.0
582Saturday, September 17, 2022
583====================================
584- Fix regressions in hb-ft font functions for FT_Face’s with transformation
585  matrix. (Behdad Esfahbod)
586- The experimental hb-repacker API now supports splitting several GPOS subtable
587  types when needed. (Garret Rieger)
588- The HarfBuzz extensions to OpenType font format are now opt-in behind
589  build-time flags. (Behdad Esfahbod)
590- The experimental hb-subset variable fonts instantiation API can now
591  instantiate more font tables and arbitrary axis locations. (Qunxin Liu)
592- Unicode 15 support. (David Corbett)
593- Various documentation improvements. (Behdad Esfahbod, Matthias Clasen)
594- The hb-view command line tool now detects WezTerm inline images support.
595  (Wez Furlong)
596- Fix FreeType and ICU dependency lookup with meson. (Xavier Claessens)
597
598- New API:
599+HB_SCRIPT_KAWI
600+HB_SCRIPT_NAG_MUNDARI
601
602
603Overview of changes leading to 5.1.0
604Sunday, July 31, 2022
605====================================
606- More extensive buffer tracing messages. (Behdad Esfahbod)
607- Fix hb-ft regression in bitmap fonts rendering. (Behdad Esfahbod)
608- Support extension promotion of lookups in hb-subset-repacker. (Garret Rieger)
609- A new HB_GLYPH_FLAG_SAFE_TO_INSERT_TATWEEL for scripts that use elongation
610  (e.g. Arabic) to signify where it is safe to insert tatweel glyph without
611  interrupting shaping. (Behdad Esfahbod)
612- Add “--safe-to-insert-tatweel” to “hb-shape” tool. (Behdad Esfahbod)
613
614- New API
615+HB_GLYPH_FLAG_SAFE_TO_INSERT_TATWEEL
616+HB_BUFFER_FLAG_PRODUCE_SAFE_TO_INSERT_TATWEEL
617
618
619Overview of changes leading to 5.0.1
620Saturday, July 23, 2022
621====================================
622- Fix version 2 “avar” table with hb-ft. (Behdad Esfahbod)
623
624
625Overview of changes leading to 5.0.0
626Saturday, July 23, 2022
627====================================
628- Support fonts with more than 65535 glyphs in “GDEF”, “GSUB”, and “GPOS”
629  tables. This is part of https://github.com/be-fonts/boring-expansion-spec to
630  extend OpenType in a backward-compatible way.
631  (Behdad Esfahbod, Garret Rieger)
632- Complete support for more than 65535 glyphs in “glyf” table that started in
633  4.0.0 release. Part of boring-expansion-spec. (Behdad Esfahbod)
634- Support version 2 of “avar” table. Part of boring-expansion-spec.
635  (Behdad Esfahbod)
636- Fix mark attachment on multiple substitutions in some cases.
637  (Behdad Esfahbod)
638- Fix application of “calt”, “rclt”, and “ccmp” features to better match
639  Uniscribe behaviour with some Arabic fonts. (Behdad Esfahbod)
640- Improvement to interaction between multiple cursive attachments.
641  (Behdad Esfahbod)
642- Improve multiple mark interactions in Hebrew. (Behdad Esfahbod)
643- Implement language-specific forms in AAT shaping. (Behdad Esfahbod)
644- Fix variation of “VORG” table. (Behdad Esfahbod)
645- Support for specific script tags to be retained in the subsetter, and add
646  “--layout-scripts” option to “hb-subset” tool. (Garret Rieger)
647- Accept space as delimiter for --features/--variations in command line tools.
648- Improve subsetting of “COLR” table. (Qunxin Liu)
649- Improved fuzzing coverage for ot-math API. (Frédéric Wang)
650- Fix “kern” table version 2 (AAT) sanitization on 32-bit systems.
651  (Behdad Esfahbod)
652- Allow negative glyph advances from “graphite2” shaper. (Stephan Bergmann)
653- Implement loading (color) bitmap fonts with hb-ft. (Behdad Esfahbod)
654- Fix regression in hb-ft when changing font size. (Behdad Esfahbod)
655- Fix build on GCC < 7. (Kleis Auke Wolthuizen)
656- Dynamically load dwrite.dll on windows if “directwrite” shaper is enabled.
657  (Luca Bacci)
658- Provide a single-file harfbuzz-subset.cc file for easier alternate building
659  of hb-subset library, similar to harfbuzz.cc. (Khaled Hosny)
660
661- New API
662+HB_SUBSET_SETS_LAYOUT_SCRIPT_TAG
663+hb_language_matches()
664
665
666Overview of changes leading to 4.4.1
667Wednesday, June 29, 2022
668====================================
669- Fix test failure with some compilers.
670- Fix Telugu and Kannada kerning regression.
671
672
673Overview of changes leading to 4.4.0
674Monday, June 27, 2022
675====================================
676- Caching of variable fonts shaping, in particular when using HarfBuzz’s own
677  font loading functions (ot). Bringing performance of variable shaping in par
678  with non-variable fonts shaping. (Behdad Esfahbod)
679- Caching of format 2 “Contextual Substitution” and “Chained Contexts
680  Substitution” lookups. Resulting in up to 20% speedup of lookup-heavy fonts
681  like Gulzar or Noto Nastaliq Urdu. (Behdad Esfahbod)
682- Improved ANSI output from hb-view. (Behdad Esfahbod)
683- Support for shaping legacy, pre-OpenType Windows 3.1-era, Arabic fonts that
684  relied on a fixed PUA encoding. (Khaled Hosny, Behdad Esfahbod)
685- Sinhala script is now shaped by the USE shaper instead of “indic” one.
686  (Behdad Esfahbod, David Corbett)
687- Thai shaper improvements. (David Corbett)
688- hb-ot-name API supports approximate BCP-47 language matching, for example
689  asking for “en_US” in a font that has only “en” names will return them.
690  (Behdad Esfahbod)
691- Optimized TrueType glyph shape loading. (Behdad Esfahbod)
692- Fix subsetting of HarfBuzz faces created via hb_face_create_for_tables().
693  (Garret Rieger)
694- Add 32 bit var store support to the subsetter. (Garret Rieger)
695
696- New API
697+HB_BUFFER_FLAG_DEFINED
698+HB_BUFFER_SERIALIZE_FLAG_DEFINED
699+hb_font_changed()
700+hb_font_get_serial()
701+hb_ft_hb_font_changed()
702+hb_set_hash()
703+hb_map_copy()
704+hb_map_hash()
705
706
707Overview of changes leading to 4.3.0
708Friday, May 20, 2022
709====================================
710- Major speed up in loading and subsetting fonts, especially in
711  handling CFF table. Subsetting some fonts is now 3 times faster.
712  (Behdad Esfahbod, Garret Rieger)
713- Speed up blending CFF2 table. (Behdad Esfahbod)
714- Speed up hb_ot_tags_from_language(). (Behdad Esfahbod, David Corbett)
715- Fix USE classification of U+10A38 to fix multiple marks on single Kharoshthi
716  base. (David Corbett)
717- Fix parsing of empty CFF Index. (Behdad Esfahbod)
718- Fix subsetting CPAL table with partial palette overlaps. (Garret Rieger)
719
720- New API
721+hb_map_is_equal() (Behdad Esfahbod)
722
723
724Overview of changes leading to 4.2.1
725Sunday, April 24, 2022
726====================================
727- Make sure hb_blob_create_from_file_or_fail() always returns nullptr in case
728  of failure and not empty blob sometimes. (Khaled Hosny)
729- Add --passthrough-tables option to hb-subset. (Cosimo Lupo)
730- Reinstate a pause after basic features in Khmer shaper, fixing a regression
731  introduced in previous release. (Behdad Esfahbod)
732- Better handling of Regional_Indicator when shaped with RTL-native scripts,
733  reverting earlier fix that caused regressions in AAT shaping. (Behdad Esfahbod)
734
735
736Overview of changes leading to 4.2.0
737Wednesday, March 30, 2022
738====================================
739- Source code reorganization, splitting large hb-ot-layout files into smaller,
740  per-subtable ones under OT/Layout/*. Code for more tables will follow suit in
741  later releases. (Garret Rieger, Behdad Esfahbod)
742- Revert Indic shaper change in previous release that broke some fonts and
743  instead make per-syllable restriction of “GSUB” application limited to
744  script-specific Indic features, while applying them and discretionary
745  features in one go. (Behdad Esfahbod)
746- Fix decoding of private in gvar table. (Behdad Esfahbod)
747- Fix handling of contextual lookups that delete too many glyphs. (Behdad Esfahbod)
748- Make “morx” deleted glyphs don’t block “GPOS” application. (Behdad Esfahbod)
749- Various build fixes. (Chun-wei Fan, Khaled Hosny)
750
751- New API
752+hb_set_next_many() (Andrew John)
753
754
755Overview of changes leading to 4.1.0
756Wednesday, March 23, 2022
757====================================
758- Various OSS-Fuzz fixes. (Behdad Esfahbod)
759- Make fallback vertical-origin match FreeType’s. (Behdad Esfahbod)
760- Treat visible viramas like dependent vowels in USE shaper. (David Corbett)
761- Apply presentation forms features and discretionary features in one go in
762  Indic shaper, which seems to match Uniscribe and CoreText behaviour.
763  (Behdad Esfahbod, David Corbett)
764- Various bug fixes.
765
766- New API
767+hb_set_add_sorted_array() (Andrew John)
768
769
770Overview of changes leading to 4.0.1
771Friday, March 11, 2022
772====================================
773- Update OpenType to AAT mappings for “hist” and “vrtr” features.
774  (Florian Pircher)
775- Update IANA Language Subtag Registry to 2022-03-02. (David Corbett)
776- Update USE shaper to allow any non-numeric tail in a symbol cluster, and
777  remove obsolete data overrides. (David Corbett)
778- Fix handling of baseline variations to return correctly scaled values.
779  (Matthias Clasen)
780- A new experimental hb_subset_repack_or_fail() to repack an array of objects,
781  eliminating offset overflows. The API is not available unless HarfBuzz is
782  built with experimental APIs enabled. (Qunxin Liu)
783
784- New experimental API
785+hb_link_t
786+hb_object_t
787+hb_subset_repack_or_fail()
788
789
790Overview of changes leading to 4.0.0
791Tuesday, March 1, 2022
792====================================
793- New public API to create subset plan and gather information on things like
794  glyph mappings in the final subset. The plan can then be passed on to perform
795  the subsetting operation. (Garret Rieger)
796- Draw API for extracting glyph shapes have been extended and finalized and is
797  no longer an experimental API. The draw API supports glyf, CFF and CFF2
798  glyph outlines tables, and applies variation settings set on the font as well
799  as synthetic slant. The new public API is not backward compatible with the
800  previous, non-public, experimental API. (Behdad Esfahbod)
801- The hb-view tool will use HarfBuzz draw API to render the glyphs instead of
802  cairo-ft when compiled with Cairo 1.17.5 or newer, setting HB_DRAW
803  environment variable to 1 or 0 will force using or not use the draw API,
804  respectively. (Behdad Esfahbod)
805- The hb-shape and hb-view tools now default to using HarfBuzz’s own font
806  loading functions (ot) instead of FreeType ones (ft). They also have a new
807  option, --font-slant, to apply synthetic slant to the font. (Behdad Esfahbod)
808- HarfBuzz now supports more than 65535 (the OpenType limit) glyph shapes and
809  metrics. See https://github.com/be-fonts/boring-expansion-spec/issues/6 and
810  https://github.com/be-fonts/boring-expansion-spec/issues/7 for details.
811  (Behdad Esfahbod)
812- New API to get the dominant horizontal baseline tag for a given script.
813  (Behdad Esfahbod)
814- New API to get the baseline positions from the font, and synthesize missing
815  ones. As well as new API to get font metrics and synthesize missing ones.
816  (Matthias Clasen)
817- Improvements to finding dependencies on Windows when building with Visual
818  Studio. (Chun-wei Fan)
819- New buffer flag, HB_BUFFER_FLAG_PRODUCE_UNSAFE_TO_CONCAT, that must be set
820  during shaping for HB_GLYPH_FLAG_UNSAFE_TO_CONCAT flag to be reliably
821  produced. This is to limit the performance hit of producing this flag to when
822  it is actually needed. (Behdad Esfahbod)
823- Documentation improvements. (Matthias Clasen)
824
825- New API
826 - General:
827   +HB_BUFFER_FLAG_PRODUCE_UNSAFE_TO_CONCAT
828   +hb_var_num_t
829
830 - Draw:
831   +hb_draw_funcs_t
832   +hb_draw_funcs_create()
833   +hb_draw_funcs_reference()
834   +hb_draw_funcs_destroy()
835   +hb_draw_funcs_is_immutable()
836   +hb_draw_funcs_make_immutable()
837   +hb_draw_move_to_func_t
838   +hb_draw_funcs_set_move_to_func()
839   +hb_draw_line_to_func_t
840   +hb_draw_funcs_set_line_to_func()
841   +hb_draw_quadratic_to_func_t
842   +hb_draw_funcs_set_quadratic_to_func()
843   +hb_draw_cubic_to_func_t
844   +hb_draw_funcs_set_cubic_to_func()
845   +hb_draw_close_path_func_t
846   +hb_draw_funcs_set_close_path_func()
847   +hb_draw_state_t
848   +HB_DRAW_STATE_DEFAULT
849   +hb_draw_move_to()
850   +hb_draw_line_to()
851   +hb_draw_quadratic_to()
852   +hb_draw_cubic_to()
853   +hb_draw_close_path()
854   +hb_font_get_glyph_shape_func_t
855   +hb_font_funcs_set_glyph_shape_func()
856   +hb_font_get_glyph_shape()
857
858 - OpenType layout
859   +HB_OT_LAYOUT_BASELINE_TAG_IDEO_FACE_CENTRAL
860   +HB_OT_LAYOUT_BASELINE_TAG_IDEO_EMBOX_CENTRAL
861   +hb_ot_layout_get_horizontal_baseline_tag_for_script()
862   +hb_ot_layout_get_baseline_with_fallback()
863
864 - Metrics:
865   +hb_ot_metrics_get_position_with_fallback()
866
867 - Subset:
868   +hb_subset_plan_t
869   +hb_subset_plan_create_or_fail()
870   +hb_subset_plan_reference()
871   +hb_subset_plan_destroy()
872   +hb_subset_plan_set_user_data()
873   +hb_subset_plan_get_user_data()
874   +hb_subset_plan_execute_or_fail()
875   +hb_subset_plan_unicode_to_old_glyph_mapping()
876   +hb_subset_plan_new_to_old_glyph_mapping()
877   +hb_subset_plan_old_to_new_glyph_mapping()
878
879
880Overview of changes leading to 3.4.0
881Sunday, February 13, 2022
882====================================
883- Perform sanity checks on shaping results is now part of “harfbuzz” library
884  and can be enabled by setting the buffer flag HB_BUFFER_FLAG_VERIFY.
885  (Behdad Esfahbod)
886- Arabic Mark Transient Reordering Algorithm have been updated to revision 6.
887  (Khaled Hosny)
888- ISO 15924 code for mathematical notation, ‘Zmth’, now maps to the OpenType
889  ‘math’ tag. (Alexis King)
890- It is now possible to get at once all math kerning values for a given glyph
891  at a given corner. (Alexis King)
892- Fix locale_t portability issues on systems the typedef’s it to a void
893  pointer. (Behdad Esfahbod)
894
895- New API:
896+HB_BUFFER_FLAG_VERIFY
897+HB_OT_TAG_MATH_SCRIPT
898+HB_SCRIPT_MATH
899+hb_ot_math_kern_entry_t
900+hb_ot_math_get_glyph_kernings()
901
902- Deprecated API
903+HB_OT_MATH_SCRIPT
904
905
906Overview of changes leading to 3.3.2
907Sunday, February 6, 2022
908====================================
909- Revert splitting of pair positioning values introduced in 3.3.0 as it proved
910  problematic. (Behdad Esfahbod)
911
912
913Overview of changes leading to 3.3.1
914Monday, January 31, 2022
915====================================
916- Fix heap-use-after-free in harfbuzz-subset introduced in previous release.
917  (Garret Rieger)
918
919
920Overview of changes leading to 3.3.0
921Monday, January 31, 2022
922====================================
923- Improved documentation. (Matthias Clasen)
924- Internal code cleanup, using C++ standard library more. (Behdad Esfahbod)
925- The low 16-bits of face index will be used by hb_face_create() to select a
926  face inside a font collection file format, while the high 16-bits will be
927  used by hb_font_create() to load the named instance. (Behdad Esfahbod)
928- Glyph positions and other font metrics now apply synthetic slant set by
929  hb_font_set_synthetic_slant(), for improved positioning for synthetically
930  slanted fonts. (Behdad Esfahbod)
931- Fixed unintentional locale dependency in hb_variation_to_string() for decimal
932  point representation. (Matthias Clasen)
933- When applying pair positioning (kerning) the positioning value is split
934  between the two sides of the pair for improved cursor positioning between
935  such pairs. (Behdad Esfahbod)
936- Introduced new HB_GLYPH_FLAG_UNSAFE_TO_CONCAT, to be used in conjunction
937  with HB_GLYPH_FLAG_UNSAFE_TO_BREAK for optimizing re-shaping during line
938  breaking. Check the documentation for further details. (Behdad Esfahbod)
939- Improved handling of macrolanguages when mapping BCP 47 codes to OpenType
940  tags. (David Corbett)
941
942- New API:
943+HB_GLYPH_FLAG_UNSAFE_TO_CONCAT
944+hb_segment_properties_overlay()
945+hb_buffer_create_similar()
946+hb_font_set_synthetic_slant()
947+hb_font_get_synthetic_slant()
948+hb_font_get_var_coords_design()
949
950
951Overview of changes leading to 3.2.0
952Friday, November 26, 2021
953====================================
954“harfbuzz” library improvements:
955- Fixed shaping of Apple Color Emoji flags in right-to-left context. (Behdad Esfahbod)
956- Fixed positioning of CFF fonts in HB_TINY profile. (Behdad Esfahbod)
957- OpenType 1.9 language tags update. (David Corbett)
958- Add HB_NO_VERTICAL config option.
959- Add HB_CONFIG_OVERRIDE_H for easier configuration. (Behdad Esfahbod)
960
961“harfbuzz-subset” library improvements:
962- Improved packing of cmap, loca, and Ligature tables. (Garret Rieger)
963- Significantly improved overflow-resolution strategy in the repacker. (Garret Rieger)
964
965
966Overview of changes leading to 3.1.2
967Friday, November 26, 2021
968====================================
969- hb-shape / hb-view: revert treating text on the commandline as single
970  paragraph (was introduced in 3.0.0); add new --single-par to do that.
971  (Behdad Esfahbod)
972- Subsetter bug fixes. (Garret Rieger, Qunxin Liu, Behdad Esfahbod)
973
974
975Overview of changes leading to 3.1.1
976Wednesday, November 8, 2021
977====================================
978- Work around GCC cast-align error/warning on some platforms. (Behdad Esfahbod)
979- Documentation improvements. (Matthias Clasen)
980
981
982Overview of changes leading to 3.1.0
983Wednesday, November 3, 2021
984====================================
985- Better offset-overflow handling in the subsetter library. (Garret Rieger)
986- Improved Unicode 14 properties in the USE shaper, and various other USE
987  shaper fixes. (David Corbett)
988- MATH and COLR v1 tables subsetting support, and various other subsetter fixes.
989  (Qunxin Liu)
990- Support for Pwo Karen / Ason Chin medial la. (Simon Cozens)
991- Apply GPOS positioning when substituting with morx table, if kerx is missing.
992  (Behdad Esfahbod)
993- Apply calt and clig features across syllable boundaries in Indic shaper.
994  (Behdad Esfahbod)
995- meson option for enabling Graphite 2 has been renamed to graphite2.
996- Build and documentation fixes.
997
998- New API:
999+hb_buffer_set_not_found_glyph()
1000+hb_buffer_get_not_found_glyph()
1001
1002
1003Overview of changes leading to 3.0.0
1004Friday, September 17, 2021
1005====================================
1006- Unicode 14.0 support (David Corbett).
1007- The hb-subset API and the harfbuzz-subset library's ABI are now declared
1008  stable. The harfbuzz-subset library would not have been possible without the
1009  work of Garret Rieger and Qunxin Liu from Google Fonts, and the earlier work
1010  of Michiharu Ariza from Adobe.
1011- The hb-style API is now stable and no longer experimental.
1012
1013- New API:
1014+hb_style_tag_t
1015+hb_style_get_value()
1016+hb_subset_input_t
1017+hb_subset_flags_t
1018+hb_subset_sets_t
1019+hb_subset_input_create_or_fail()
1020+hb_subset_input_reference()
1021+hb_subset_input_destroy()
1022+hb_subset_input_set_user_data()
1023+hb_subset_input_get_user_data()
1024+hb_subset_input_unicode_set()
1025+hb_subset_input_glyph_set()
1026+hb_subset_input_set()
1027+hb_subset_input_get_flags()
1028+hb_subset_input_set_flags()
1029+hb_subset_or_fail()
1030
1031- Removed old unstable harfbuzz-subset API:
1032-hb_subset_input_nameid_set()
1033-hb_subset_input_namelangid_set()
1034-hb_subset_input_layout_features_set()
1035-hb_subset_input_no_subset_tables_set()
1036-hb_subset_input_drop_tables_set()
1037-hb_subset_input_set_drop_hints()
1038-hb_subset_input_get_drop_hints()
1039-hb_subset_input_set_desubroutinize()
1040-hb_subset_input_get_desubroutinize()
1041-hb_subset_input_set_retain_gids()
1042-hb_subset_input_get_retain_gids()
1043-hb_subset_input_set_name_legacy()
1044-hb_subset_input_get_name_legacy()
1045-hb_subset_input_set_overlaps_flag()
1046-hb_subset_input_get_overlaps_flag()
1047-hb_subset_input_set_notdef_outline()
1048-hb_subset_input_get_notdef_outline()
1049-hb_subset_input_set_no_prune_unicode_ranges()
1050-hb_subset_input_get_no_prune_unicode_ranges()
1051-hb_subset()
1052
1053
1054Overview of changes leading to 2.9.1
1055Tuesday, September 7, 2021
1056====================================
1057- Final subset API is in place and if no issues are discovered, it will be the
1058  stable subset API of HarfBuzz 3.0.0. Old API is kept to ease transition, but
1059  will be removed in 3.0.0.
1060- Various fuzzer-found bug fixes.
1061- hb_buffer_append() now handles the pre- and post-context which previously
1062  were left unchanged in the destination buffer.
1063- hb-view / hb-shape now accept following new arguments:
1064  o --unicodes-before/after: takes a list of hex numbers that represent Unicode
1065    codepoints.
1066- Undeprecated API:
1067  hb_set_invert()
1068
1069
1070Overview of changes leading to 2.9.0
1071Wednesday, August 18, 2021
1072History Repeats Itself (Afghanistan)
1073====================================
1074- Subsetter API is being stabilized, with the first stable API to happen in
1075  3.0.0 release (https://github.com/harfbuzz/harfbuzz/issues/3078).
1076- Support multiple variation axes with same tag, aka HOI.
1077- The “coretext” testing shaper now passes font variations to CoreText.
1078- hb-shape/hb-view does not break line at new lines unless text is read from
1079  file.
1080- hb-view and hb-subset has a --batch now, similar to hb-shape.
1081- The --batch mode now uses ; as argument separator instead of : used previously.
1082- The --batch in hb-shape does not expect 0th argument anymore. That is, the
1083  lines read are interpreted as argv[1:], instead of argv[0:].
1084- The --batch option has been undocumented. We are ready to document it; send
1085  feedback if you find it useful.
1086- hb-subset got arguments revamps. Added much-requested --gids-file, --glyphs,
1087  --glyphs-file, --unicodes-file, supporting ranges in --unicodes.
1088- Various bug fixes.
1089
1090
1091Overview of changes leading to 2.8.2
1092Tuesday, July 8, 2021
1093====================================
1094- Shaping LTR digits for RTL scripts now makes the native direction of the
1095  digits LTR, applying shaping and positioning rules on the same glyph order as
1096  Uniscribe. (Jonathan Kew, Khaled Hosny).
1097- Subsetting COLR v1 and CPAL tables is now supported. (Garret Rieger, Qunxin Liu)
1098- Various fixes and improvements to the subsetter. (Garret Rieger, Qunxin Liu, Behdad)
1099- When applying morx table, mark glyph widths should not be zeroed. (Jonathan Kew)
1100- GPOS is preferred over kerx, if GSUB was applied. (Behdad)
1101- Regional_Indicator pairs are grouped together when clustering. (Behdad)
1102- New API:
1103+hb_blob_create_or_fail()
1104+hb_blob_create_from_file_or_fail()
1105+hb_set_copy()
1106
1107
1108Overview of changes leading to 2.8.1
1109Tuesday, May 4, 2021
1110====================================
1111- Subsetter now fully supports GSUB/GPOS/GDEF tables (including variations); as
1112  such, layout tables are retained by subsetter by default. (Garret Rieger, Qunxin Liu)
1113- Build scripts no longer check for FontConfig as HarfBuzz does not use it.
1114- hb-view supports iTerm2 and kitty inline image protocols (Khaled Hosny),
1115  it can also use Chafa for terminal graphics if available (Hans Petter Jansson).
1116
1117Overview of changes leading to 2.8.0
1118Tuesday, March 16, 2021
1119====================================
1120- Shape joining scripts other than Arabic/Syriac using the Universal Shaping Engine.
1121  Previously these were shaped using the generalized Arabic shaper. (David Corbett)
1122- Fix regression in shaping of U+0B55 ORIYA SIGN OVERLINE. (David Corbett)
1123- Update language tags. (David Corbett)
1124- Variations: reduce error: do not round each interpolated delta. (Just van Rossum)
1125- Documentation improvements. (Khaled Hosny, Nathan Willis)
1126- Subsetter improvements: subsets most, if not all, lookup types now. (Garret Rieger, Qunxin Liu)
1127- Fuzzer-found fixes and other improvements when memory failures happen. (Behdad)
1128- Removed most atomic implementations now that we have C++11 atomic impl. (Behdad)
1129- General codebase upkeep; using more C++11 features: constexpr constructors, etc. (Behdad)
1130
1131
1132Overview of changes leading to 2.7.4
1133Sunday, December 27, 2020
1134====================================
1135- Fix missing --enable-introspection configure option from previous release
1136  tarball.
1137- Documentation updates.
1138
1139
1140Overview of changes leading to 2.7.3
1141Wednesday, December 23, 2020
1142====================================
1143- Update USE shaper to 2020-08-13 specification, and other improvements.
1144- Don’t disable liga feature in myanmar shaper, to match Uniscribe.
1145- Improvements to language and script tags handling.
1146- Update language system tag registry to OpenType 1.8.4
1147- Support for serializing and deserializing Unicode buffers. Serialized buffers
1148  are now delimited with `<>` or `[]` based on whether it is a Unicode or
1149  glyphs buffer.
1150- Increase buffer work limits to handle fonts with many complex lookups.
1151- Handle more shaping operations in trace output.
1152- Memory access fixes.
1153- More OOM fixes.
1154- Improved documentation.
1155- Build system improvements.
1156- New API:
1157+hb_buffer_has_positions()
1158+hb_buffer_serialize()
1159+hb_buffer_serialize_unicode()
1160+hb_buffer_deserialize_unicode()
1161
1162
1163Overview of changes leading to 2.7.2
1164Saturday, August 29, 2020
1165====================================
1166- Fix a regression in the previous release that caused a crash with Kaithi.
1167- More OOM fixes.
1168
1169
1170Overview of changes leading to 2.7.1
1171Thursday, August 13, 2020
1172====================================
1173- ot-funcs now handles variable empty glyphs better when hvar/vvar isn't present.
1174- Reverted a GDEF processing regression.
1175- A couple of fixes to handle OOM better.
1176
1177
1178Overview of changes leading to 2.7.0
1179Saturday, July 25, 2020
1180====================================
1181- Use an implementation for round that always rounds up, some minor fluctuations
1182  are expected on var font specially when hb-ot callback is used.
1183- Fix an AAT's `kerx` issue on broken rendering of Devanagari Sangam MN.
1184- Remove AAT's `lcar` table support from _get_ligature_carets API, not even much
1185  use on macOS installed fonts (only two files).  GDEF support is the recommended
1186  one and expected to work properly after issues fixed two releases ago.
1187- Minor memory fixes to handle OOM better specially in hb-ft.
1188- Minor .so files versioning scheme change and remove stable/unstable scheme
1189  differences, was never used in practice (always default to stable scheme).
1190- We are now suggesting careful packaging of the library using meson,
1191  https://github.com/harfbuzz/harfbuzz/wiki/Notes-on-migration-to-meson
1192  for more information.
1193- Distribution package URL is changed, either use GitHub generated tarballs,
1194  `https://github.com/harfbuzz/harfbuzz/archive/$pkgver.tar.gz`
1195  or, even more preferably use commit hash of the release and git checkouts like,
1196  `git+https://github.com/harfbuzz/harfbuzz#commit=$commit`
1197
1198
1199Overview of changes leading to 2.6.8
1200Monday, June 22, 2020
1201====================================
1202- New API to fetch glyph alternates from GSUB table.
1203- hb-coretext build fix for macOS < 10.10.
1204- Meson build fixes, cmake port removal is postponed but please prepare for
1205  it and give us feedback.
1206  Autotools is still our main build system however please consider
1207  experimenting with meson also for packaging the library.
1208- New API:
1209+hb_ot_layout_lookup_get_glyph_alternates()
1210
1211
1212Overview of changes leading to 2.6.7
1213Wednesday, June 3, 2020
1214====================================
1215- Update to Unicode 13.0.0.
1216- Fix hb_ot_layout_get_ligature_carets for fonts without lcar table, it was
1217  completely broken for all the other fonts since 2.1.2.
1218- As a part of our migration to meson, this release will be the last one
1219  to provide cmake port files but autotools still is our main build system.
1220  There is a possibility that the next version or the after be released
1221  using meson.
1222
1223
1224Overview of changes leading to 2.6.6
1225Tuesday, May 12, 2020
1226====================================
1227- A fix in AAT kerning for Geeza Pro.
1228- Better support for resource fork fonts on macOS.
1229
1230
1231Overview of changes leading to 2.6.5
1232Friday, April 17, 2020
1233====================================
1234- Add experimental meson build system.  Autotools is still the primary
1235  and supported build system.
1236- AAT is now always preferred for horizontal scripts when both AAT and OT
1237  layout tables exist at the same time.
1238- Subsetter improvements.
1239- New API:
1240+hb_ft_font_lock_face()
1241+hb_ft_font_unlock_face()
1242
1243
1244Overview of changes leading to 2.6.4
1245Monday, October 29, 2019
1246====================================
1247- Small bug fix.
1248- Build fixes.
1249
1250
1251Overview of changes leading to 2.6.3
1252Monday, October 28, 2019
1253====================================
1254- Misc small fixes, mostly to build-related issues.
1255- New API:
1256+hb_font_get_nominal_glyphs()
1257
1258
1259Overview of changes leading to 2.6.2
1260Monday, September 30, 2019
1261====================================
1262- Misc small fixes, mostly to build-related issues.
1263
1264
1265Overview of changes leading to 2.6.1
1266Thursday, August 22, 2019
1267====================================
1268- Fix regression with hb_font_create_sub_font scaling introduced in 2.6.0.
1269- Change interpretation of font PTEM size / CoreText font size handling.
1270  See https://github.com/harfbuzz/harfbuzz/pull/1484
1271- hb-ot-font: Prefer symbol cmap subtable if present.
1272- Apply 'dist'/'abvm'/'blwm' features to all scripts.
1273- Drop experimental DirectWrite API.
1274
1275
1276Overview of changes leading to 2.6.0
1277Tuesday, August 13, 2019
1278====================================
1279- New OpenType metrics, baseline, and metadata table access APIs.
1280- New API to set font variations to a named-instance.
1281- New hb-gdi.h header and API for creating hb_face_t from HFONT.
1282- Amalgam: Provide a single-file harfbuzz.cc file for easier alternate building.
1283- More size-reduction configurable options, enabled by HB_TINY.
1284- New API:
1285+hb_font_set_var_named_instance()
1286+hb_gdi_face_create()
1287+hb_ot_layout_baseline_tag_t
1288+hb_ot_layout_get_baseline()
1289+hb_ot_meta_tag_t
1290+hb_ot_meta_get_entry_tags()
1291+hb_ot_meta_reference_entry()
1292+hb_ot_metrics_tag_t
1293+hb_ot_metrics_get_position()
1294+hb_ot_metrics_get_variation()
1295+hb_ot_metrics_get_x_variation()
1296+hb_ot_metrics_get_y_variation()
1297
1298
1299Overview of changes leading to 2.5.3
1300Wednesday, June 26, 2019
1301====================================
1302- Fix UCD script data for Unicode 10+ scripts.  This was broken since 2.5.0.
1303- More optimizations for HB_TINY.
1304
1305
1306Overview of changes leading to 2.5.2
1307Thursday, June 20, 2019
1308====================================
1309- More hb-config.hh facilities to shrink library size, namely when built as
1310  HB_TINY.
1311- New documentation of custom configurations in CONFIG.md.
1312- Fix build on gcc 4.8.  That's supported again.
1313- Universal Shaping Engine improvements thanks to David Corbett.
1314- API Changes: Undeprecate some horizontal-kerning API and re-enable in hb-ft,
1315  such that Type1 fonts will continue kerning.
1316
1317
1318Overview of changes leading to 2.5.1
1319Friday, May 31, 2019
1320====================================
1321- Fix build with various versions of Visual Studio.
1322- Improved documentation, thanks to Nathan Willis.
1323- Bugfix in subsetting glyf table.
1324- Improved scripts for cross-compiling for Windows using mingw.
1325- Rename HB_MATH_GLYPH_PART_FLAG_EXTENDER to HB_OT_MATH_GLYPH_PART_FLAG_EXTENDER.
1326  A deprecated macro is added for backwards-compatibility.
1327
1328
1329Overview of changes leading to 2.5.0
1330Friday, May 24, 2019
1331====================================
1332- This release does not include much functional changes, but includes major internal
1333  code-base changes.  We now require C++11.  Support for gcc 4.8 and earlier has been
1334  dropped.
1335- New hb-config.hh facility for compiling smaller library for embedded and web usecases.
1336- New Unicode Character Database implementation that is half the size of previously-used
1337  UCDN.
1338- Subsetter improvements.
1339- Improved documentation, thanks to Nathan Willis.
1340- Misc shaping fixes.
1341
1342
1343Overview of changes leading to 2.4.0
1344Monday, March 25, 2019
1345====================================
1346- Unicode 12.
1347- Misc fixes.
1348- Subsetter improvements.
1349- New API:
1350HB_BUFFER_FLAG_DO_NOT_INSERT_DOTTED_CIRCLE
1351hb_directwrite_face_create()
1352
1353
1354Overview of changes leading to 2.3.1
1355Wednesday, January 30, 2019
1356====================================
1357- AAT bug fixes.
1358- Misc internal housekeeping cleanup.
1359
1360
1361Overview of changes leading to 2.3.0
1362Thursday, December 20, 2018
1363====================================
1364- Fix regression on big-endian architectures.  Ouch!
1365- Misc bug and build fixes.
1366- Fix subsetting of simple GSUB/GDEF.
1367- Merge CFF / CFF2 support contributed by Adobe.  This mostly involves
1368  the subsetter, but also get_glyph_extents on CFF fonts.
1369
1370New API in hb-aat.h:
1371+hb_aat_layout_has_substitution()
1372+hb_aat_layout_has_positioning()
1373+hb_aat_layout_has_tracking()
1374
1375
1376Overview of changes leading to 2.2.0
1377Thursday, November 29, 2018
1378====================================
1379- Misc shaping bug fixes.
1380- Add font variations named-instance API.
1381- Deprecate font variations axis enumeration API and add replacement.
1382- AAT shaping improvements:
1383  o Fixed 'kern' table Format 2 implementation.
1384  o Implement 'feat' table API for feature detection.
1385  o Blacklist 'GSUB' table of fonts from 'MUTF' foundry that also have 'morx'.
1386
1387New API:
1388+hb_aat_layout_feature_type_t
1389+hb_aat_layout_feature_selector_t
1390+hb_aat_layout_get_feature_types()
1391+hb_aat_layout_feature_type_get_name_id
1392+hb_aat_layout_feature_selector_info_t
1393+HB_AAT_LAYOUT_NO_SELECTOR_INDEX
1394+hb_aat_layout_feature_type_get_selector_infos()
1395+hb_ot_var_axis_flags_t
1396+hb_ot_var_axis_info_t
1397+hb_ot_var_get_axis_infos()
1398+hb_ot_var_find_axis_info()
1399+hb_ot_var_get_named_instance_count()
1400+hb_ot_var_named_instance_get_subfamily_name_id()
1401+hb_ot_var_named_instance_get_postscript_name_id()
1402+hb_ot_var_named_instance_get_design_coords()
1403
1404Deprecated API:
1405+HB_OT_VAR_NO_AXIS_INDEX
1406+hb_ot_var_axis_t
1407+hb_ot_var_get_axes()
1408+hb_ot_var_find_axis()
1409
1410
1411Overview of changes leading to 2.1.3
1412Friday, November 16, 2018
1413====================================
1414- Fix AAT 'mort' shaping, which was broken in 2.1.2
1415
1416
1417Overview of changes leading to 2.1.2
1418Friday, November 16, 2018
1419====================================
1420- Various internal changes.
1421- AAT shaping improvements:
1422  o Implement kern table Format 1 state-machine-based kerning.
1423  o Implement cross-stream kerning (cursive positioning, etc).
1424  o Ignore emptyish GSUB tables (zero scripts) if morx present.
1425  o Don't apply GPOS if morx is being applied.  Matches Apple.
1426
1427
1428-Overview of changes leading to 2.1.1
1429Monday, November 5, 2018
1430====================================
1431- AAT improvements:
1432  o Implement 'mort' table.
1433  o Implement 'kern' subtables Format 1 and Format 3.
1434
1435
1436Overview of changes leading to 2.1.0
1437Tuesday, October 30, 2018
1438====================================
1439- AAT shaping improvements:
1440  o Allow user controlling AAT features, for whole buffer only currently.
1441  o Several 'morx' fixes.
1442  o Implement tuple-kerns in 'kerx'; Fixes kerning with Apple default
1443    San Francisco fonts.
1444- Support for color fonts:
1445  o COLR/CPAL API to fetch color layers.
1446  o SVG table to fetch SVG documents.
1447  o CBDT/sbix API to fetch PNG images.
1448- New 'name' table API.
1449- hb-ot-font now uses 'VORG' table to correctly position CFF glyphs
1450  in vertical layout.
1451- Various fuzzer-found bug fixes.
1452
1453Changed API:
1454
1455A type and a macro added in 2.0.0 were renamed:
1456
1457hb_name_id_t -> hb_ot_name_id_t
1458HB_NAME_ID_INVALID -> HB_OT_NAME_ID_INVALID
1459
1460New API:
1461
1462+hb_color_t
1463+HB_COLOR
1464+hb_color_get_alpha()
1465+hb_color_get_red()
1466+hb_color_get_green()
1467+hb_color_get_blue()
1468+hb_ot_color_has_palettes()
1469+hb_ot_color_palette_get_count()
1470+hb_ot_color_palette_get_name_id()
1471+hb_ot_color_palette_color_get_name_id()
1472+hb_ot_color_palette_flags_t
1473+hb_ot_color_palette_get_flags()
1474+hb_ot_color_palette_get_colors()
1475+hb_ot_color_has_layers()
1476+hb_ot_color_layer_t
1477+hb_ot_color_glyph_get_layers()
1478+hb_ot_color_has_svg()
1479+hb_ot_color_glyph_reference_svg()
1480+hb_ot_color_has_png()
1481+hb_ot_color_glyph_reference_png()
1482
1483+hb_ot_name_id_t
1484+HB_OT_NAME_ID_INVALID
1485+HB_OT_NAME_ID_COPYRIGHT
1486+HB_OT_NAME_ID_FONT_FAMILY
1487+HB_OT_NAME_ID_FONT_SUBFAMILY
1488+HB_OT_NAME_ID_UNIQUE_ID
1489+HB_OT_NAME_ID_FULL_NAME
1490+HB_OT_NAME_ID_VERSION_STRING
1491+HB_OT_NAME_ID_POSTSCRIPT_NAME
1492+HB_OT_NAME_ID_TRADEMARK
1493+HB_OT_NAME_ID_MANUFACTURER
1494+HB_OT_NAME_ID_DESIGNER
1495+HB_OT_NAME_ID_DESCRIPTION
1496+HB_OT_NAME_ID_VENDOR_URL
1497+HB_OT_NAME_ID_DESIGNER_URL
1498+HB_OT_NAME_ID_LICENSE
1499+HB_OT_NAME_ID_LICENSE_URL
1500+HB_OT_NAME_ID_TYPOGRAPHIC_FAMILY
1501+HB_OT_NAME_ID_TYPOGRAPHIC_SUBFAMILY
1502+HB_OT_NAME_ID_MAC_FULL_NAME
1503+HB_OT_NAME_ID_SAMPLE_TEXT
1504+HB_OT_NAME_ID_CID_FINDFONT_NAME
1505+HB_OT_NAME_ID_WWS_FAMILY
1506+HB_OT_NAME_ID_WWS_SUBFAMILY
1507+HB_OT_NAME_ID_LIGHT_BACKGROUND
1508+HB_OT_NAME_ID_DARK_BACKGROUND
1509+HB_OT_NAME_ID_VARIATIONS_PS_PREFIX
1510+hb_ot_name_entry_t
1511+hb_ot_name_list_names()
1512+hb_ot_name_get_utf8()
1513+hb_ot_name_get_utf16()
1514+hb_ot_name_get_utf32()
1515
1516
1517Overview of changes leading to 2.0.2
1518Saturday, October 20, 2018
1519====================================
1520- Fix two minor memory access issues in AAT tables.
1521
1522
1523Overview of changes leading to 2.0.1
1524Friday, October 19, 2018
1525====================================
1526- Fix hb-version.h reported release version that went wrong (1.8.0)
1527  with previous release.
1528- Fix extrapolation in 'trak' table.
1529- Fix hb-font infinite-recursion issue with some font funcs and
1530  subclassed fonts.
1531- Implement variation-kerning format in kerx table, although without
1532  variation.
1533- Fix return value of hb_map_is_empty().
1534
1535
1536Overview of changes leading to 2.0.0
1537Thursday, October 18, 2018
1538====================================
1539- Added AAT shaping support (morx/kerx/trak).
1540  Automatically used if GSUB/GPOS are not available respectively.
1541  Set HB_OPTIONS=aat env var to have morx/kerx preferred over
1542  GSUB/GPOS.
1543- Apply TrueType kern table internally, instead of relying on
1544  hb_font_t callbacks.
1545- Khmer shaper significantly rewritten to better match Uniscribe.
1546- Indic3 tags ('dev3', etc) are passed to USE shaper.
1547- .dfont Mac font containers implemented.
1548- Script- and language-mapping revamped to better use BCP 47.
1549- Misc USE and Indic fixes.
1550- Misc everything fixes.
1551- Too many things to list.  Biggest release since 0.9.1, with
1552  over 500 commits in just over 5 weeks!  Didn't intend it to
1553  be a big release.  Just happened to become.
1554- hb-ft now locks underlying FT_Face during use.
1555
1556API changes:
1557
1558- Newly-created hb_font_t's now have our internal "hb-ot-font"
1559  callbacks set on them, so they should work out of the box
1560  without any callbacks set.  If callbacks are set, everything
1561  is back to what it was before, the fallback callbacks are
1562  null.  If you to get the internal implementation modified,
1563  sub_font it.
1564
1565- New hb_font_funcs_set_nominal_glyphs_func() allows speeding
1566  up character to glyph mapping.
1567
1568New API:
1569+HB_FEATURE_GLOBAL_START
1570+HB_FEATURE_GLOBAL_END
1571+hb_buffer_set_invisible_glyph()
1572+hb_buffer_get_invisible_glyph()
1573+hb_font_funcs_set_nominal_glyphs_func()
1574+hb_ot_layout_table_select_script()
1575+hb_ot_layout_script_select_language()
1576+hb_ot_layout_feature_get_name_ids()
1577+hb_ot_layout_feature_get_characters()
1578+hb_name_id_t
1579+HB_NAME_ID_INVALID
1580+HB_OT_MAX_TAGS_PER_SCRIPT
1581+hb_ot_tags_from_script_and_language()
1582+hb_ot_tags_to_script_and_language()
1583
1584Deprecated API:
1585-hb_font_funcs_set_glyph_func()
1586-hb_unicode_eastasian_width_func_t
1587-hb_unicode_funcs_set_eastasian_width_func()
1588-hb_unicode_eastasian_width()
1589-hb_unicode_decompose_compatibility_func_t
1590-HB_UNICODE_MAX_DECOMPOSITION_LEN
1591-hb_unicode_funcs_set_decompose_compatibility_func()
1592-hb_unicode_decompose_compatibility()
1593-hb_font_funcs_set_glyph_h_kerning_func()
1594-hb_font_funcs_set_glyph_v_kerning_func()
1595-hb_font_get_glyph_h_kerning()
1596-hb_font_get_glyph_v_kerning()
1597-hb_font_get_glyph_kerning_for_direction()
1598-hb_ot_layout_table_choose_script()
1599-hb_ot_layout_script_find_language()
1600-hb_ot_tags_from_script()
1601-hb_ot_tag_from_language()
1602
1603
1604Overview of changes leading to 1.9.0
1605Monday, September 10, 2018
1606====================================
1607- Added 'cmap' API to hb_face_t.
1608- Face-builder API.
1609- hb-ot-font re-creation should be much leaner now, as the
1610  font tables it uses are cached on hb_face_t now.
1611- Internal source header file name changes:
1612  hb-*-private.hh is renamed to hb-*.hh.
1613
1614New API:
1615+HB_UNICODE_MAX
1616+hb_face_collect_unicodes()
1617+hb_face_collect_variation_selectors()
1618+hb_face_collect_variation_unicodes()
1619+hb_face_builder_create()
1620+hb_face_builder_add_table()
1621
1622
1623Overview of changes leading to 1.8.8
1624Tuesday, August 14, 2018
1625====================================
1626- Fix hb-icu crash on architectures where compare_exchange_weak() can
1627  fail falsely.  This bug was introduced in 1.8.4.
1628  https://bugs.chromium.org/p/chromium/issues/detail?id=873568
1629- More internal refactoring of atomic operations and singletons.
1630- API changes:
1631  The following functions do NOT reference their return value before
1632  returning:
1633  * hb_unicode_funcs_get_default()
1634  * hb_glib_get_unicode_funcs()
1635  * hb_icu_get_unicode_funcs()
1636  This is consistent with their naming ("get", instead of "reference")
1637  as well as how they are used in the wild (ie. no one calls destroy()
1638  on their return value.)
1639
1640
1641Overview of changes leading to 1.8.7
1642Wednesday, August 8, 2018
1643====================================
1644- Fix assertion failure with GDEF-blacklisted fonts.
1645
1646
1647Overview of changes leading to 1.8.6
1648Tuesday, August 7, 2018
1649====================================
1650- Internal code shuffling.
1651- New API to speed up getting advance widths for implementations
1652  that have heavy overhead in get_h_advance callback:
1653+hb_font_funcs_set_glyph_h_advances_func
1654+hb_font_funcs_set_glyph_v_advances_func
1655+hb_font_get_glyph_advances_for_direction
1656+hb_font_get_glyph_h_advances
1657+hb_font_get_glyph_h_advances_func_t
1658+hb_font_get_glyph_v_advances
1659+hb_font_get_glyph_v_advances_func_t
1660
1661
1662Overview of changes leading to 1.8.5
1663Wednesday, August 1, 2018
1664====================================
1665- Major Khmer shaper improvements to better match Microsoft.
1666- Indic bug fixes.
1667- Internal improvements to atomic operations.
1668
1669
1670Overview of changes leading to 1.8.4
1671Tuesday, July 17, 2018
1672====================================
1673- Fix build on non-C++11.
1674- Use C++-style GCC atomics and C++11 atomics.
1675
1676
1677Overview of changes leading to 1.8.3
1678Wednesday, July 11, 2018
1679====================================
1680- A couple of Indic / USE bug fixes.
1681- Disable vectorization, as it was causing unaligned access bus error on
1682  certain 32bit architectures.
1683
1684
1685Overview of changes leading to 1.8.2
1686Tuesday, July 3, 2018
1687====================================
1688- Fix infinite loop in Khmer shaper.
1689- Improve hb_blob_create_from_file() for streams.
1690
1691
1692Overview of changes leading to 1.8.1
1693Tuesday, June 12, 2018
1694====================================
1695- Fix hb-version.h file generation; last two releases went out with wrong ones.
1696- Add correctness bug in hb_set_t operations, introduced in 1.7.7.
1697- Remove HB_SUBSET_BUILTIN build option.  Not necessary.
1698
1699
1700Overview of changes leading to 1.8.0
1701Tuesday, June 5, 2018
1702====================================
1703- Update to Unicode 11.0.0.
1704
1705
1706Overview of changes leading to 1.7.7
1707Tuesday, June 5, 2018
1708====================================
1709- Lots of internal changes, but not yet exposed externally.
1710- All HarfBuzz objects are significantly smaller in size now.
1711- Sinhala: Position repha on top of post-consonant, not base.
1712  This better matches Windows 10 behavior, which was changed
1713  from previous Windows versions.
1714- New build options:
1715  o New cpp macro HB_NO_ATEXIT
1716  o New cpp macro HB_SUBSET_BUILTIN
1717- Significant libharfbuzz-subset changes. API subject to change.
1718- New API in libharfbuzz:
1719
1720+hb_blob_create_from_file()
1721+hb_face_count()
1722
1723A hashmap implementation:
1724+hb-map.h
1725+HB_MAP_VALUE_INVALID
1726+hb_map_t
1727+hb_map_create()
1728+hb_map_get_empty()
1729+hb_map_reference()
1730+hb_map_destroy()
1731+hb_map_set_user_data()
1732+hb_map_get_user_data()
1733+hb_map_allocation_successful()
1734+hb_map_clear()
1735+hb_map_is_empty()
1736+hb_map_get_population()
1737+hb_map_set()
1738+hb_map_get()
1739+hb_map_del()
1740+hb_map_has()
1741
1742
1743Overview of changes leading to 1.7.6
1744Wednesday, March 7, 2018
1745====================================
1746
1747- Fix to hb_set_t binary operations. Ouch.
1748- New experimental harfbuzz-subset library. All of hb-subset.h
1749  is experimental right now and API WILL change.
1750
1751- New API:
1752hb_blob_copy_writable_or_fail()
1753HB_OT_TAG_BASE
1754hb_set_previous()
1755hb_set_previous_range()
1756
1757
1758Overview of changes leading to 1.7.5
1759Tuesday, January 30, 2018
1760====================================
1761
1762- Separate Khmer shaper from Indic.
1763- First stab at AAT morx. Not hooked up.
1764- Misc bug fixes.
1765
1766
1767Overview of changes leading to 1.7.4
1768Wednesday, December 20, 2017
1769====================================
1770
1771- Fix collect_glyphs() regression caused by hb_set_t changes.
1772
1773
1774Overview of changes leading to 1.7.3
1775Monday, December 18, 2017
1776====================================
1777
1778- hb_set_t performance tuning and optimizations.
1779- Speed up collect_glyphs() and reject garbage data.
1780- In hb_coretext_font_create() set font point-size (ptem).
1781- Misc fixes.
1782
1783
1784Overview of changes leading to 1.7.2
1785Monday, December 4, 2017
1786====================================
1787
1788- Optimize hb_set_add_range().
1789- Misc fixes.
1790- New API:
1791hb_coretext_font_create()
1792
1793
1794Overview of changes leading to 1.7.1
1795Tuesday, November 14, 2017
1796====================================
1797
1798- Fix atexit object destruction regression.
1799- Fix minor integer-overflow.
1800
1801
1802Overview of changes leading to 1.7.0
1803Monday, November 13, 2017
1804====================================
1805
1806- Minor Indic fixes.
1807- Implement kerning and glyph names in hb-ot-font.
1808- Various DSO optimization re .data and .bss sizes.
1809- Make C++11 optional; build fixes.
1810- Mark all other backends "unsafe-to-break".
1811- Graphite fix.
1812
1813
1814Overview of changes leading to 1.6.3
1815Thursday, October 26th, 2017
1816====================================
1817
1818- Fix hb_set_t some more.  Should be solid now.
1819- Implement get_glyph_name() for hb-ot-font.
1820- Misc fixes.
1821
1822
1823Overview of changes leading to 1.6.2
1824Monday, October 23nd, 2017
1825====================================
1826
1827- Yesterday's release had a bad crasher; don't use it.  That's what
1828  happens when one works on Sunday...
1829  https://github.com/harfbuzz/harfbuzz/issues/578
1830- Build fixes for FreeBSD and Chrome Android.
1831
1832
1833Overview of changes leading to 1.6.1
1834Sunday, October 22nd, 2017
1835====================================
1836
1837- Don't skip over COMBINING GRAPHEME JOINER when ligating, etc.
1838  To be refined: https://github.com/harfbuzz/harfbuzz/issues/554
1839- Faster hb_set_t implementation.
1840- Don't use deprecated ICU API.
1841- Fix undefined-behavior in Myanmar shaper, introduced in 1.6.0
1842- Deprecated API:
1843  hb_set_invert()
1844
1845
1846Overview of changes leading to 1.6.0
1847Friday, October the 13th, 2017
1848====================================
1849
1850- Update to Unicode 10.
1851
1852- Various Indic and Universal Shaping Engine fixes as a result of
1853  HarfBuzz Hackfest with Jonathan Kew at Web Engines Hackfest at
1854  the Igalia offices in A Coruña, Spain.  Thanks Igalia for having
1855  us!
1856
1857- Implement Unicode Arabic Mark Ordering Algorithm UTR#53.
1858
1859- Implement optical sizing / tracking in CoreText backend, using
1860  new API hb_font_set_ptem().
1861
1862- Allow notifying hb_font_t that underlying FT_Face changed sizing,
1863  using new API hb_ft_font_changed().
1864
1865- More Graphite backend RTL fixes.
1866
1867- Fix caching of variable font shaping plans.
1868
1869- hb-view / hb-shape now accept following new arguments:
1870
1871  o --unicodes: takes a list of hex numbers that represent Unicode
1872    codepoints.
1873
1874New API:
1875+hb_face_get_table_tags()
1876+hb_font_set_ptem()
1877+hb_font_get_ptem()
1878+hb_ft_font_changed()
1879
1880
1881Overview of changes leading to 1.5.1
1882Tuesday, September 5, 2017
1883====================================
1884
1885- Fix "unsafe-to-break" in fallback shaping and other corner cases.
1886  All our tests pass with --verify now, meaning unsafe-to-break API
1887  works as expected.
1888- Add --unicodes to hb-view / hb-shape.
1889- [indic] Treat Consonant_With_Stacker as consonant.  This will need
1890  further tweaking.
1891- hb_buffer_diff() tweaks.
1892
1893
1894Overview of changes leading to 1.5.0
1895Wednesday, August 23, 2017
1896====================================
1897
1898- Misc new API, for appending a buffer to another, and for comparing
1899  contents of two buffers for types of differences.
1900
1901- New "unsafe-to-break" API.  Can be used to speed up reshaping
1902  in line-breaking situations.  Essentially, after shaping, it returns
1903  positions in the input string (some of the cluster boundaries) that
1904  are "safe to break" in that if the text is segmented at that position
1905  and two sides reshaped and concatenated, the shaping result is
1906  exactly the same as shaping the text in one piece.
1907
1908  hb-view and hb-shape and hb-shape now take --verify, which verifies
1909  the above property.
1910
1911  Some corner cases of the implementation are still not quite working.
1912  Those will be fixed in subsequent releases.
1913
1914- New API:
1915
1916hb_buffer_append()
1917
1918hb_glyph_flags_t
1919HB_GLYPH_FLAG_UNSAFE_TO_BREAK
1920HB_GLYPH_FLAG_DEFINED
1921hb_glyph_info_get_glyph_flags()
1922
1923HB_BUFFER_SERIALIZE_FLAG_GLYPH_FLAGS
1924
1925hb_buffer_diff_flags_t
1926HB_BUFFER_DIFF_FLAG_EQUAL
1927HB_BUFFER_DIFF_FLAG_CONTENT_TYPE_MISMATCH
1928HB_BUFFER_DIFF_FLAG_LENGTH_MISMATCH
1929HB_BUFFER_DIFF_FLAG_NOTDEF_PRESENT
1930HB_BUFFER_DIFF_FLAG_DOTTED_CIRCLE_PRESENT
1931HB_BUFFER_DIFF_FLAG_CODEPOINT_MISMATCH
1932HB_BUFFER_DIFF_FLAG_CLUSTER_MISMATCH
1933HB_BUFFER_DIFF_FLAG_GLYPH_FLAGS_MISMATCH
1934HB_BUFFER_DIFF_FLAG_POSITION_MISMATCH
1935hb_buffer_diff
1936
1937
1938Overview of changes leading to 1.4.8
1939Tuesday, August 8, 2017
1940====================================
1941
1942- Major fix to avar table handling.
1943- Rename hb-shape --show-message to --trace.
1944- Build fixes.
1945
1946
1947Overview of changes leading to 1.4.7
1948Tuesday, July 18, 2017
1949====================================
1950
1951- Multiple Indic, Tibetan, and Cham fixes.
1952- CoreText: Allow disabling kerning.
1953- Adjust Arabic feature order again.
1954- Misc build fixes.
1955
1956
1957Overview of changes leading to 1.4.6
1958Sunday, April 23, 2017
1959====================================
1960
1961- Graphite2: Fix RTL positioning issue.
1962- Backlist GDEF of more versions of Padauk and Tahoma.
1963- New, experimental, cmake alternative build system.
1964
1965
1966Overview of changes leading to 1.4.5
1967Friday, March 10, 2017
1968====================================
1969
1970- Revert "Fix Context lookup application when moving back after a glyph..."
1971  This introduced memory access problems.  To be fixed properly soon.
1972
1973
1974Overview of changes leading to 1.4.4
1975Sunday, March 5, 2017
1976====================================
1977
1978- Fix Context lookup application when moving back after a glyph deletion.
1979- Fix buffer-overrun in Bengali.
1980
1981
1982Overview of changes leading to 1.4.3
1983Saturday, February 25, 2017
1984====================================
1985
1986- Route Adlam script to Arabic shaper.
1987- Misc fixes.
1988- New API:
1989  hb_font_set_face()
1990- Deprecate API:
1991  hb_graphite2_font_get_gr_font()
1992
1993
1994Overview of changes leading to 1.4.2
1995Monday, January 23, 2017
1996====================================
1997
1998- Implement OpenType Font Variation tables avar/fvar/HVAR/VVAR.
1999- hb-shape and hb-view now accept --variations.
2000- New API:
2001
2002hb_variation_t
2003hb_variation_from_string()
2004hb_variation_to_string()
2005
2006hb_font_set_variations()
2007hb_font_set_var_coords_design()
2008hb_font_get_var_coords_normalized()
2009
2010hb-ot-var.h:
2011hb_ot_var_axis_t
2012hb_ot_var_has_data()
2013hb_ot_var_get_axis_count()
2014hb_ot_var_get_axes()
2015hb_ot_var_find_axis()
2016hb_ot_var_normalize_variations()
2017hb_ot_var_normalize_coords()
2018
2019- MVAR to be implemented later.  Access to named instances to be
2020  implemented later as well.
2021
2022- Misc fixes.
2023
2024
2025Overview of changes leading to 1.4.1
2026Thursday, January 5, 2017
2027====================================
2028
2029- Always build and use UCDN for Unicode data by default.
2030  Reduces dependence on version of Unicode data in glib,
2031  specially in the Windows bundles we are shipping, which
2032  have very old glib.
2033
2034
2035Overview of changes leading to 1.4.0
2036Thursday, January 5, 2017
2037====================================
2038
2039- Merged "OpenType GX" branch which adds core of support for
2040  OpenType 1.8 Font Variations.  To that extent, the relevant
2041  new API is:
2042
2043New API:
2044hb_font_set_var_coords_normalized()
2045
2046  with supporting API:
2047
2048New API:
2049HB_OT_LAYOUT_NO_VARIATIONS_INDEX
2050hb_ot_layout_table_find_feature_variations()
2051hb_ot_layout_feature_with_variations_get_lookups()
2052hb_shape_plan_create2()
2053hb_shape_plan_create_cached2()
2054
2055  Currently variations in GSUB/GPOS/GDEF are fully supported,
2056  and no other tables are supported.  In particular, fvar/avar
2057  are NOT supported, hence the hb_font_set_var_coords_normalized()
2058  taking normalized coordinates.  API to take design coordinates
2059  will be added in the future.
2060
2061  HVAR/VVAR/MVAR support will also be added to hb-ot-font in the
2062  future.
2063
2064- Fix regression in GDEF glyph class processing.
2065- Add decompositions for Chakma, Limbu, and Balinese in USE shaper.
2066- Misc fixes.
2067
2068
2069Overview of changes leading to 1.3.4
2070Monday, December 5, 2016
2071====================================
2072
2073- Fix vertical glyph origin in hb-ot-font.
2074- Implement CBDT/CBLC color font glyph extents in hb-ot-font.
2075
2076
2077Overview of changes leading to 1.3.3
2078Wednesday, September 28, 2016
2079====================================
2080
2081- Implement parsing of OpenType MATH table.
2082New API:
2083HB_OT_TAG_MATH
2084HB_OT_MATH_SCRIPT
2085hb_ot_math_constant_t
2086hb_ot_math_kern_t
2087hb_ot_math_glyph_variant_t
2088hb_ot_math_glyph_part_flags_t
2089hb_ot_math_glyph_part_t
2090hb_ot_math_has_data
2091hb_ot_math_get_constant
2092hb_ot_math_get_glyph_italics_correction
2093hb_ot_math_get_glyph_top_accent_attachment
2094hb_ot_math_get_glyph_kerning
2095hb_ot_math_is_glyph_extended_shape
2096hb_ot_math_get_glyph_variants
2097hb_ot_math_get_min_connector_overlap
2098hb_ot_math_get_glyph_assembly
2099
2100
2101Overview of changes leading to 1.3.2
2102Wednesday, September 27, 2016
2103====================================
2104
2105- Fix build of hb-coretext on older OS X versions.
2106
2107
2108Overview of changes leading to 1.3.1
2109Wednesday, September 7, 2016
2110====================================
2111
2112- Blacklist bad GDEF of more fonts (Padauk).
2113- More CoreText backend crash fixes with OS X 10.9.5.
2114- Misc fixes.
2115
2116
2117Overview of changes leading to 1.3.0
2118Thursday, July 21, 2016
2119====================================
2120
2121- Update to Unicode 9.0.0
2122- Move Javanese from Indic shaper to Universal Shaping Engine.
2123- Allow MultipleSubst to delete a glyph (matching Windows engine).
2124- Update Universal Shaping Engine to latest draft from Microsoft.
2125- DirectWrite backend improvements.  Note: this backend is for testing ONLY.
2126- CoreText backend improvements with unreachable fonts.
2127- Implement symbol fonts (cmap 3.0.0) in hb-ft and hb-ot-font.
2128- Blacklist bad GDEF of more fonts (Tahoma & others).
2129- Misc fixes.
2130
2131
2132Overview of changes leading to 1.2.7
2133Monday, May 2, 2016
2134====================================
2135
2136- Blacklist another version of Times New Roman (Bold) Italic from Windows 7.
2137- Fix Mongolian Free Variation Selectors shaping with certain fonts.
2138- Fix Tibetan shorthand contractions shaping.
2139- Improved list of language tag mappings.
2140- Unbreak build on Windows CE.
2141- Make 'glyf' table loading lazy in hb-ot-font.
2142
2143
2144Overview of changes leading to 1.2.6
2145Friday, April 8, 2016
2146====================================
2147
2148- Blacklist GDEF table of another set of Times New Roman (Bold) Italic.
2149- DirectWrite backend improvements.  Note: DirectWrite backend is
2150  exclusively for our internal testing and should NOT be used in any
2151  production system whatsoever.
2152
2153
2154Overview of changes leading to 1.2.5
2155Monday, April 4, 2016
2156====================================
2157
2158- Fix GDEF mark-filtering-set, which was broken in 1.2.3.
2159
2160
2161Overview of changes leading to 1.2.4
2162Thursday, March 17, 2016
2163====================================
2164
2165- Synthesize GDEF glyph class for any glyph that does not have one in GDEF.
2166  I really hope we don't discover broken fonts that shape badly with this
2167  change.
2168- Misc build and other minor fixes.
2169- API changes:
2170  - Added HB_NDEBUG.  It's fine for production systems to define this to
2171    disable high-overhead debugging checks.  However, I also reduced the
2172    overhead of those checks, so it's a non-issue right now.  You can
2173    forget it.  Just not defining anything at all is fine.
2174
2175
2176Overview of changes leading to 1.2.3
2177Thursday, February 25, 2016
2178====================================
2179
2180- Blacklist GDEF table of certain versions of Times New Roman (Bold) Italic,
2181  due to bug in glyph class of ASCII double-quote character.  This should
2182  address "regression" introduced in 1.2.0 when we switched mark zeroing
2183  in most shapers from BY_UNICODE_LATE to BY_GDEF_LATE.
2184  This fourth release in a week should finally stabilize things...
2185
2186- hb-ot-font's get_glyph() implementation saw some optimizations.  Though,
2187  might be really hard to measure in real-world situations.
2188
2189- Also, two rather small API changes:
2190
2191We now disable some time-consuming internal bookkeeping if built with NDEBUG
2192defined.  This is a first time that we use NDEBUG to disable debug code.  If
2193there exist production systems that do NOT want to enable NDEBUG, please let
2194me know and I'll add HB_NDEBUG.
2195
2196Added get_nominal_glyph() and get_variation_glyph() instead of get_glyph()
2197
2198New API:
2199- hb_font_get_nominal_glyph_func_t
2200- hb_font_get_variation_glyph_func_t
2201- hb_font_funcs_set_nominal_glyph_func()
2202- hb_font_funcs_set_variation_glyph_func()
2203- hb_font_get_nominal_glyph()
2204- hb_font_get_variation_glyph()
2205
2206Deprecated API:
2207- hb_font_get_glyph_func_t
2208- hb_font_funcs_set_glyph_func()
2209
2210Clients that implement their own font-funcs are encouraged to replace
2211their get_glyph() implementation with a get_nominal_glyph() and
2212get_variation_glyph() pair.  The variation version can assume that
2213variation_selector argument is not zero.  Old (deprecated) functions
2214will continue working indefinitely using internal gymnastics; it is
2215just more efficient to use the new functions.
2216
2217
2218Overview of changes leading to 1.2.2
2219Wednesday, February 24, 2016
2220====================================
2221
2222- Fix regression with mark positioning with fonts that have
2223  non-zero mark advances.  This was introduced in 1.2.0 while
2224  trying to make mark and cursive attachments to work together.
2225  I have partially reverted that, so this version is much more
2226  like what we had before.  All clients who updated to 1.2.0
2227  should update to this version.
2228
2229
2230Overview of changes leading to 1.2.1
2231Tuesday, February 23, 2016
2232====================================
2233
2234- CoreText: Fix bug with wrong scale if font scale was changed later.
2235  https://github.com/libass/libass/issues/212
2236- CoreText: Drastically speed up font initialization.
2237- CoreText: Fix tiny leak.
2238- Group ZWJ/ZWNJ with previous syllable under cluster-level=0.
2239  https://github.com/harfbuzz/harfbuzz/issues/217
2240- Add test/shaping/README.md about how to add tests to the suite.
2241
2242
2243Overview of changes leading to 1.2.0
2244Friday, February 19, 2016
2245====================================
2246
2247- Fix various issues (hangs mostly) in case of memory allocation failure.
2248- Change mark zeroing types of most shapers from BY_UNICODE_LATE to
2249  BY_GDEF_LATE.  This seems to be what Uniscribe does.
2250- Change mark zeroing of USE shaper from NONE to BY_GDEF_EARLY.  That's
2251  what Windows does.
2252- Allow GPOS cursive connection on marks, and fix the interaction with
2253  mark attachment.  This work resulted in some changes to how mark
2254  attachments work.  See:
2255  https://github.com/harfbuzz/harfbuzz/issues/211
2256  https://github.com/harfbuzz/harfbuzz/commit/86c68c7a2c971efe8e35b1f1bd99401dc8b688d2
2257- Graphite2 shaper: improved negative advance handling (eg. Nastaliq).
2258- Add nmake-based build system for Windows.
2259- Minor speedup.
2260- Misc. improvements.
2261
2262
2263Overview of changes leading to 1.1.3
2264Monday, January 11, 2016
2265====================================
2266
2267- Ported Indic shaper to Unicode 8.0 data.
2268- Universal Shaping Engine fixes.
2269- Speed up CoreText shaper when font fallback happens in CoreText.
2270- Documentation improvements, thanks to Khaled Hosny.
2271- Very rough directwrite shaper for testing, thanks to Ebrahim Byagowi.
2272- Misc bug fixes.
2273- New API:
2274
2275  * Font extents:
2276      hb_font_extents_t
2277      hb_font_get_font_extents_func_t
2278      hb_font_get_font_h_extents_func_t
2279      hb_font_get_font_v_extents_func_t
2280      hb_font_funcs_set_font_h_extents_func
2281      hb_font_funcs_set_font_v_extents_func
2282      hb_font_get_h_extents
2283      hb_font_get_v_extents
2284      hb_font_get_extents_for_direction
2285
2286  * Buffer message (aka debug):
2287      hb_buffer_message_func_t
2288      hb_buffer_set_message_func()
2289    Actual message protocol to be fleshed out later.
2290
2291
2292Overview of changes leading to 1.1.2
2293Wednesday, November 26, 2015
2294====================================
2295
2296- Fix badly-broken fallback shaper that affected terminology.
2297  https://github.com/harfbuzz/harfbuzz/issues/187
2298- Fix y_scaling in Graphite shaper.
2299- API changes:
2300  * An unset glyph_h_origin() function in font-funcs now (sensibly)
2301    implies horizontal origin at 0,0.  Ie, the nil callback returns
2302    true instead of false.  As such, implementations that have a
2303    glyph_h_origin() that simply returns true, can remove that function
2304    with HarfBuzz >= 1.1.2.  This results in a tiny speedup.
2305
2306
2307Overview of changes leading to 1.1.1
2308Wednesday, November 24, 2015
2309====================================
2310
2311- Build fixes, specially for hb-coretext.
2312
2313
2314Overview of changes leading to 1.1.0
2315Wednesday, November 18, 2015
2316====================================
2317
2318- Implement 'stch' stretch feature for Syriac Abbreviation Mark.
2319  https://github.com/harfbuzz/harfbuzz/issues/141
2320- Disable use of decompose_compatibility() callback.
2321- Implement "shaping" of various Unicode space characters, even
2322  if the font does not support them.
2323  https://github.com/harfbuzz/harfbuzz/issues/153
2324- If font does not support U+2011 NO-BREAK HYPHEN, fallback to
2325  U+2010 HYPHEN.
2326- Changes resulting from libFuzzer continuous fuzzing:
2327  * Reject font tables that need more than 8 edits,
2328  * Bound buffer growth during shaping to 32x,
2329  * Fix assertions and other issues at OOM / buffer max-growth.
2330- Misc fixes and optimizations.
2331- API changes:
2332  * All fonts created with hb_font_create() now inherit from
2333    (ie. have parent) hb_font_get_empty().
2334
2335
2336Overview of changes leading to 1.0.6
2337Thursday, October 15, 2015
2338====================================
2339
2340- Reduce max nesting level in OT lookups from 8 to 6.
2341  Should not affect any real font as far as I know.
2342- Fix memory access issue in ot-font.
2343- Revert default load-flags of fonts created using hb_ft_font_create()
2344  back to FT_LOAD_DEFAULT|FT_LOAD_NO_HINTING.  This was changed in
2345  last release (1.0.5), but caused major issues, so revert.
2346  https://github.com/harfbuzz/harfbuzz/issues/143
2347
2348
2349Overview of changes leading to 1.0.5
2350Tuesday, October 13, 2015
2351====================================
2352
2353- Fix multiple memory access bugs discovered using libFuzzer.
2354  https://github.com/harfbuzz/harfbuzz/issues/139
2355  Everyone should upgrade to this version as soon as possible.
2356  We now have continuous fuzzing set up, to avoid issues like
2357  these creeping in again.
2358- Misc fixes.
2359
2360- New API:
2361  * hb_font_set_parent().
2362  * hb_ft_font_[sg]et_load_flags()
2363    The default flags for fonts created using hb_ft_font_create()
2364    has changed to default to FT_LOAD_DEFAULT now.  Previously it
2365    was defaulting to FT_LOAD_DFEAULT|FT_LOAD_NO_HINTING.
2366
2367- API changes:
2368  * Fonts now default to units-per-EM as their scale, instead of 0.
2369  * hb_font_create_sub_font() does NOT make parent font immutable
2370    anymore.  hb_font_make_immutable() does.
2371
2372
2373Overview of changes leading to 1.0.4
2374Wednesday, September 30, 2015
2375====================================
2376
2377- Fix minor out-of-bounds read error.
2378
2379
2380Overview of changes leading to 1.0.3
2381Tuesday, September 1, 2015
2382====================================
2383
2384- Start of user documentation, from Simon Cozens!
2385- Implement glyph_extents() for TrueType fonts in hb-ot-font.
2386- Improve GPOS cursive attachments with conflicting lookups.
2387- More fixes for cluster-level = 1.
2388- Uniscribe positioning fix.
2389
2390
2391Overview of changes leading to 1.0.2
2392Wednesday, August 19, 2015
2393====================================
2394
2395- Fix shaping with cluster-level > 0.
2396- Fix Uniscribe backend font-size scaling.
2397- Declare dependencies in harfbuzz.pc.
2398  FreeType is not declared though, to avoid bugs in pkg-config
2399  0.26 with recursive dependencies.
2400- Slightly improved debug infrastructure.  More to come later.
2401- Misc build fixes.
2402
2403
2404Overview of changes leading to 1.0.1
2405Monday, July 27, 2015
2406====================================
2407
2408- Fix out-of-bounds access in USE shaper.
2409
2410
2411Overview of changes leading to 1.0.0
2412Sunday, July 26, 2015
2413====================================
2414
2415- Implement Universal Shaping Engine:
2416  https://www.microsoft.com/typography/OpenTypeDev/USE/intro.htm
2417  http://blogs.windows.com/bloggingwindows/2015/02/23/windows-shapes-the-worlds-languages/
2418- Bump version to 1.0.0.  The soname was NOT bumped.
2419
2420
2421Overview of changes leading to 0.9.42
2422Thursday, July 26, 2015
2423=====================================
2424
2425- New API to allow for retrieving finer-grained cluster
2426  mappings if the client desires to handle them.  Default
2427  behavior is unchanged.
2428- Fix cluster merging when removing default-ignorables.
2429- Update to Unicode 8.0
2430- hb-graphite2 fixes.
2431- Misc fixes.
2432- Removed HB_NO_MERGE_CLUSTERS hack.
2433- New API:
2434  hb_buffer_cluster_level_t enum
2435  hb_buffer_get_cluster_level()
2436  hb_buffer_set_cluster_level()
2437  hb-shape / hb-view --cluster-level
2438
2439
2440Overview of changes leading to 0.9.41
2441Thursday, June 18, 2015
2442=====================================
2443
2444- Fix hb-coretext with trailing whitespace in right-to-left.
2445- New API: hb_buffer_reverse_range().
2446- Allow implementing atomic ops in config.h.
2447- Fix hb_language_t in language bindings.
2448- Misc fixes.
2449
2450
2451Overview of changes leading to 0.9.40
2452Friday, March 20, 2015
2453=====================================
2454
2455- Another hb-coretext crasher fix.  Ouch!
2456- Happy Norouz!
2457
2458
2459Overview of changes leading to 0.9.39
2460Wednesday, March 4, 2015
2461=====================================
2462
2463- Critical hb-coretext fixes.
2464- Optimizations and refactoring; no functional change
2465  expected.
2466- Misc build fixes.
2467
2468
2469Overview of changes leading to 0.9.38
2470Friday, January 23, 2015
2471=====================================
2472
2473- Fix minor out-of-bounds access in Indic shaper.
2474- Change New Tai Lue shaping engine from South-East Asian to default,
2475  reflecting change in Unicode encoding model.
2476- Add hb-shape --font-size.  Can take up to two numbers for separate
2477  x / y size.
2478- Fix CoreText and FreeType scale issues with negative scales.
2479- Reject blobs larger than 2GB.  This might break some icu-le-hb clients
2480  that need security fixes.  See:
2481  http://www.icu-project.org/trac/ticket/11450
2482- Avoid accessing font tables during face destruction, in casce rogue
2483  clients released face data already.
2484- Fix up gobject-introspection a bit.  Python bindings kinda working.
2485  See README.python.
2486- Misc fixes.
2487- API additions:
2488  hb_ft_face_create_referenced()
2489  hb_ft_font_create_referenced()
2490
2491
2492Overview of changes leading to 0.9.37
2493Wednesday, December 17, 2014
2494=====================================
2495
2496- Fix out-of-bounds access in Context lookup format 3.
2497- Indic: Allow ZWJ/ZWNJ before syllable modifiers.
2498
2499
2500Overview of changes leading to 0.9.36
2501Thursday, November 20, 2014
2502=====================================
2503
2504- First time that three months went by without a release since
2505  0.9.2 was released on August 10, 2012!
2506- Fix performance bug in hb_ot_collect_glyphs():
2507  https://bugzilla.mozilla.org/show_bug.cgi?id=1090869
2508- Add basic vertical-text support to hb-ot-font.
2509- Misc build fixes.
2510
2511
2512Overview of changes leading to 0.9.35
2513Saturday, August 13, 2014
2514=====================================
2515
2516- Fix major shape-plan caching bug when more than one shaper were
2517  provided to hb_shape_full() (as exercised by XeTeX).
2518  http://www.mail-archive.com/debian-bugs-dist@lists.debian.org/msg1246370.html
2519- Fix Arabic fallback shaping regression.  This was broken in 0.9.32.
2520- Major hb-coretext fixes.  That backend is complete now, including
2521  respecing buffer direction and language, down to vertical writing.
2522- Build fixes for Windows CE.  Should build fine now.
2523- Misc fixes:
2524  Use atexit() only if it's safe to call from shared library
2525  https://bugs.freedesktop.org/show_bug.cgi?id=82246
2526  Mandaic had errors in its Unicode Joining_Type
2527  https://bugs.freedesktop.org/show_bug.cgi?id=82306
2528- API changes:
2529
2530  * hb_buffer_clear_contents() does not reset buffer flags now.
2531
2532    After 763e5466c0a03a7c27020e1e2598e488612529a7, one doesn't
2533    need to set flags for different pieces of text.  The flags now
2534    are something the client sets up once, depending on how it
2535    actually uses the buffer.  As such, don't clear it in
2536    clear_contents().
2537
2538    I don't expect any changes to be needed to any existing client.
2539
2540
2541Overview of changes leading to 0.9.34
2542Saturday, August 2, 2014
2543=====================================
2544
2545- hb_feature_from_string() now accepts CSS font-feature-settings format.
2546- As a result, hb-shape / hb-view --features also accept CSS-style strings.
2547  Eg, "'liga' off" is accepted now.
2548- Add old-spec Myanmar shaper:
2549  https://bugs.freedesktop.org/show_bug.cgi?id=81775
2550- Don't apply 'calt' in Hangul shaper.
2551- Fix mark advance zeroing for Hebrew shaper:
2552  https://bugs.freedesktop.org/show_bug.cgi?id=76767
2553- Implement Windows-1256 custom Arabic shaping.  Only built on Windows,
2554  and requires help from get_glyph().  Used by Firefox.
2555  https://bugzilla.mozilla.org/show_bug.cgi?id=1045139
2556- Disable 'liga' in vertical text.
2557- Build fixes.
2558- API changes:
2559
2560  * Make HB_BUFFER_FLAG_BOT/EOT easier to use.
2561
2562    Previously, we expected users to provide BOT/EOT flags when the
2563    text *segment* was at paragraph boundaries.  This meant that for
2564    clients that provide full paragraph to HarfBuzz (eg. Pango), they
2565    had code like this:
2566
2567      hb_buffer_set_flags (hb_buffer,
2568                           (item_offset == 0 ? HB_BUFFER_FLAG_BOT : 0) |
2569                           (item_offset + item_length == paragraph_length ?
2570                            HB_BUFFER_FLAG_EOT : 0));
2571
2572      hb_buffer_add_utf8 (hb_buffer,
2573                          paragraph_text, paragraph_length,
2574                          item_offset, item_length);
2575
2576    After this change such clients can simply say:
2577
2578      hb_buffer_set_flags (hb_buffer,
2579                           HB_BUFFER_FLAG_BOT | HB_BUFFER_FLAG_EOT);
2580
2581      hb_buffer_add_utf8 (hb_buffer,
2582                          paragraph_text, paragraph_length,
2583                          item_offset, item_length);
2584
2585    Ie, HarfBuzz itself checks whether the segment is at the beginning/end
2586    of the paragraph.  Clients that only pass item-at-a-time to HarfBuzz
2587    continue not setting any flags whatsoever.
2588
2589    Another way to put it is: if there's pre-context text in the buffer,
2590    HarfBuzz ignores the BOT flag.  If there's post-context, it ignores
2591    EOT flag.
2592
2593
2594Overview of changes leading to 0.9.33
2595Tuesday, July 22, 2014
2596=====================================
2597
2598- Turn off ARabic 'cswh' feature that was accidentally turned on.
2599- Add HB_TAG_MAX_SIGNED.
2600- Make hb_face_make_immutable() really make face immutable!
2601- Windows build fixes.
2602
2603
2604Overview of changes leading to 0.9.32
2605Thursday, July 17, 2014
2606=====================================
2607
2608- Apply Arabic shaping features in spec order exactly.
2609- Another fix for Mongolian free variation selectors.
2610- For non-Arabic scripts in Arabic shaper apply 'rlig' and 'calt'
2611  together.
2612- Minor adjustment to U+FFFD logic.
2613- Fix hb-coretext build.
2614
2615
2616Overview of changes leading to 0.9.31
2617Wednesday, July 16, 2014
2618=====================================
2619
2620- Only accept valid UTF-8/16/32; we missed many cases before.
2621- Better shaping of invalid UTF-8/16/32.  Falls back to
2622  U+FFFD REPLACEMENT CHARACTER now.
2623- With all changes in this release, the buffer will contain fully
2624  valid Unicode after hb_buffer_add_utf8/16/32 no matter how
2625  broken the input is.  This can be overridden though.  See below.
2626- Fix Mongolian Variation Selectors for fonts without GDEF.
2627- Fix minor invalid buffer access.
2628- Accept zh-Hant and zh-Hans language tags.  hb_ot_tag_to_language()
2629  now uses these instead of private tags.
2630- Build fixes.
2631- New API:
2632  * hb_buffer_add_codepoints().  This does what hb_buffer_add_utf32()
2633    used to do, ie. no validity check on the input at all.  add_utf32
2634    now replaces invalid Unicode codepoints with the replacement
2635    character (see below).
2636  * hb_buffer_set_replacement_codepoint()
2637  * hb_buffer_get_replacement_codepoint()
2638    Previously, in hb_buffer_add_utf8 and hb_buffer_add_utf16, when
2639    we detected broken input, we replaced that with (hb_codepoint_t)-1.
2640    This has changed to use U+FFFD now, but can be changed using these
2641    new API.
2642
2643
2644Overview of changes leading to 0.9.30
2645Wednesday, July 9, 2014
2646=====================================
2647
2648- Update to Unicode 7.0.0:
2649  * New scripts Manichaean and Psalter Pahlavi are shaped using
2650    Arabic shaper.
2651  * All the other new scripts to through the generic shaper for
2652    now.
2653- Minor Indic improvements.
2654- Fix graphite2 backend cluster mapping [crasher!]
2655- API changes:
2656  * New HB_SCRIPT_* values for Unicode 7.0 scripts.
2657  * New function hb_ot_layout_language_get_required_feature().
2658- Build fixes.
2659
2660
2661Overview of changes leading to 0.9.29
2662Thursday, May 29, 2014
2663=====================================
2664
2665- Implement cmap in hb-ot-font.h.  No variation-selectors yet.
2666- Myanmar: Allow MedialYa+Asat.
2667- Various Indic fixes:
2668  * Support most characters in Extended Devanagary and Vedic
2669    Unicode blocks.
2670  * Allow digits and a some punctuation as consonant placeholders.
2671- Build fixes.
2672
2673
2674Overview of changes leading to 0.9.28
2675Monday, April 28, 2014
2676=====================================
2677
2678- Unbreak old-spec Indic shaping. (bug 76705)
2679- Fix shaping of U+17DD and U+0FC6.
2680- Add HB_NO_MERGE_CLUSTERS build option.  NOT to be enabled by default
2681  for shipping libraries.  It's an option for further experimentation
2682  right now.  When we are sure how to do it properly, we will add
2683  public run-time API for the functionality.
2684- Build fixes.
2685
2686
2687Overview of changes leading to 0.9.27
2688Tuesday, March 18, 2014
2689=====================================
2690
2691- Don't use "register" storage class specifier
2692- Wrap definition of free_langs() with HAVE_ATEXIT
2693- Add coretext_aat shaper and hb_coretext_face_create() constructor
2694- If HAVE_ICU_BUILTIN is defined, use hb-icu Unicode callbacks
2695- Add Myanmar test case from OpenType Myanmar spec
2696- Only do fallback Hebrew composition if no GPOS 'mark' available
2697- Allow bootstrapping without gtk-doc
2698- Use AM_MISSING_PROG for ragel and git
2699- Typo in ucdn's Makefile.am
2700- Improve MemoryBarrier() implementation
2701
2702
2703Overview of changes leading to 0.9.26
2704Thursday, January 30, 2014
2705=====================================
2706
2707- Misc fixes.
2708- Fix application of 'rtlm' feature.
2709- Automatically apply frac/numr/dnom around U+2044 FRACTION SLASH.
2710- New header: hb-ot-shape.h
2711- Uniscribe: fix scratch-buffer accounting.
2712- Reorder Tai Tham SAKOT to after tone-marks.
2713- Add Hangul shaper.
2714- New files:
2715  hb-ot-shape-complex-hangul.cc
2716  hb-ot-shape-complex-hebrew.cc
2717  hb-ot-shape-complex-tibetan.cc
2718- Disable 'cswh' feature in Arabic shaper.
2719- Coretext: better handle surrogate pairs.
2720- Add HB_TAG_MAX and _HB_SCRIPT_MAX_VALUE.
2721
2722
2723Overview of changes leading to 0.9.25
2724Wednesday, December 4, 2013
2725=====================================
2726
2727- Myanmar shaper improvements.
2728- Avoid font fallback in CoreText backend.
2729- Additional OpenType language tag mappiongs.
2730- More aggressive shape-plan caching.
2731- Build with / require automake 1.13.
2732- Build with libtool 2.4.2.418 alpha to support ppc64le.
2733
2734
2735Overview of changes leading to 0.9.24
2736Tuesday, November 13, 2013
2737=====================================
2738
2739- Misc compiler warning fixes with clang.
2740- No functional changes.
2741
2742
2743Overview of changes leading to 0.9.23
2744Monday, October 28, 2013
2745=====================================
2746
2747- "Udupi HarfBuzz Hackfest", Paris, October 14..18 2013.
2748- Fix (Chain)Context recursion with non-monotone lookup positions.
2749- Misc Indic bug fixes.
2750- New Javanese / Buginese shaping, similar to Windows 8.1.
2751
2752
2753Overview of changes leading to 0.9.22
2754Thursday, October 3, 2013
2755=====================================
2756
2757- Fix use-after-end-of-scope in hb_language_from_string().
2758- Fix hiding of default_ignorables if font doesn't have space glyph.
2759- Protect against out-of-range lookup indices.
2760
2761- API Changes:
2762
2763  * Added hb_ot_layout_table_get_lookup_count()
2764
2765
2766Overview of changes leading to 0.9.21
2767Monday, September 16, 2013
2768=====================================
2769
2770- Rename gobject-introspection library name from harfbuzz to HarfBuzz.
2771- Remove (long disabled) hb-old and hb-icu-le test shapers.
2772- Misc gtk-doc and gobject-introspection annotations.
2773- Misc fixes.
2774- API changes:
2775
2776  * Add HB_SET_VALUE_INVALID
2777
2778Overview of changes leading to 0.9.20
2779Thursday, August 29, 2013
2780=====================================
2781
2782General:
2783- Misc substitute_closure() fixes.
2784- Build fixes.
2785
2786Documentation:
2787- gtk-doc boilerplate integrated.  Docs are built now, but
2788  contain no contents.  By next release hopefully we have
2789  some content in.  Enable using --enable-gtk-doc.
2790
2791GObject and Introspection:
2792- Added harfbuzz-gobject library (hb-gobject.h) that has type
2793  bindings for all HarfBuzz objects and enums.  Enable using
2794  --with-gobject.
2795- Added gobject-introspection boilerplate.  Nothing useful
2796  right now.  Work in progress.  Gets enabled automatically if
2797  --with-gobject is used.  Override with --disable-introspection.
2798
2799OpenType shaper:
2800- Apply 'mark' in Myanmar shaper.
2801- Don't apply 'dlig' by default.
2802
2803Uniscribe shaper:
2804- Support user features.
2805- Fix loading of fonts that are also installed on the system.
2806- Fix shaping of Arabic Presentation Forms.
2807- Fix build with wide chars.
2808
2809CoreText shaper:
2810- Support user features.
2811
2812Source changes:
2813- hb_face_t code moved to hb-face.h / hb-face.cc.
2814- Added hb-deprecated.h.
2815
2816API changes:
2817- Added HB_DISABLE_DEPRECATED.
2818- Deprecated HB_SCRIPT_CANADIAN_ABORIGINAL; replaced by
2819  HB_SCRIPT_CANADIAN_SYLLABICS.
2820- Deprecated HB_BUFFER_FLAGS_DEFAULT; replaced by
2821  HB_BUFFER_FLAG_DEFAULT.
2822- Deprecated HB_BUFFER_SERIALIZE_FLAGS_DEFAULT; replaced by
2823  HB_BUFFER_SERIALIZE_FLAG_DEFAULT.
2824
2825
2826Overview of changes leading to 0.9.19
2827Tuesday, July 16, 2013
2828=====================================
2829
2830- Build fixes.
2831- Better handling of multiple variation selectors in a row.
2832- Pass on variation selector to GSUB if not consumed by cmap.
2833- Fix undefined memory access.
2834- Add Javanese config to Indic shaper.
2835- Misc bug fixes.
2836
2837Overview of changes leading to 0.9.18
2838Tuesday, May 28, 2013
2839=====================================
2840
2841New build system:
2842
2843- All unneeded code is all disabled by default,
2844
2845- Uniscribe and CoreText shapers can be enabled with their --with options,
2846
2847- icu_le and old shapers cannot be enabled for now,
2848
2849- glib, freetype, and cairo will be detected automatically.
2850  They can be force on/off'ed with their --with options,
2851
2852- icu and graphite2 are default off, can be enabled with their --with
2853  options,
2854
2855Moreover, ICU support is now build into a separate library:
2856libharfbuzz-icu.so, and a new harfbuzz-icu.pc is shipped for it.
2857Distros can enable ICU now without every application on earth
2858getting linked to via libharfbuzz.so.
2859
2860For distros I recommend that they make sure they are building --with-glib
2861--with-freetype --with-cairo, --with-icu, and optionally --with-graphite2;
2862And package harfbuzz and harfbuzz-icu separately.
2863
2864
2865Overview of changes leading to 0.9.17
2866Monday, May 20, 2013
2867=====================================
2868
2869- Build fixes.
2870- Fix bug in hb_set_get_min().
2871- Fix regression with Arabic mark positioning / width-zeroing.
2872
2873Overview of changes leading to 0.9.16
2874Friday, April 19, 2013
2875=====================================
2876
2877- Major speedup in OpenType lookup processing.  With the Amiri
2878  Arabic font, this release is over 3x faster than previous
2879  release.  All scripts / languages should see this speedup.
2880
2881- New --num-iterations option for hb-shape / hb-view; useful for
2882  profiling.
2883
2884Overview of changes leading to 0.9.15
2885Friday, April 05, 2013
2886=====================================
2887
2888- Build fixes.
2889- Fix crasher in graphite2 shaper.
2890- Fix Arabic mark width zeroing regression.
2891- Don't compose Hangul jamo into Unicode syllables.
2892
2893
2894Overview of changes leading to 0.9.14
2895Thursday, March 21, 2013
2896=====================================
2897
2898- Build fixes.
2899- Fix time-consuming sanitize with malicious fonts.
2900- Implement hb_buffer_deserialize_glyphs() for both json and text.
2901- Do not ignore Hangul filler characters.
2902- Indic fixes:
2903  * Fix Malayalam pre-base reordering interaction with post-forms.
2904  * Further adjust ZWJ handling.  Should fix known regressions from
2905    0.9.13.
2906
2907
2908Overview of changes leading to 0.9.13
2909Thursday, February 25, 2013
2910=====================================
2911
2912- Build fixes.
2913- Ngapi HarfBuzz Hackfest in London (February 2013):
2914  * Fixed all known Indic bugs,
2915  * New Win8-style Myanmar shaper,
2916  * New South-East Asian shaper for Tai Tham, Cham, and New Tai Lue,
2917  * Smartly ignore Default_Ignorable characters (joiners, etc) wheb
2918    matching GSUB/GPOS lookups,
2919  * Fix 'Phags-Pa U+A872 shaping,
2920  * Fix partial disabling of default-on features,
2921  * Allow disabling of TrueType kerning.
2922- Fix possible crasher with broken fonts with overlapping tables.
2923- Removed generated files from git again.  So, one needs ragel to
2924  bootstrap from the git tree.
2925
2926API changes:
2927- hb_shape() and related APIs now abort if buffer direction is
2928  HB_DIRECTION_INVALID.  Previously, hb_shape() was calling
2929  hb_buffer_guess_segment_properties() on the buffer before
2930  shaping.  The heuristics in that function are fragile.  If the
2931  user really wants the old behvaior, they can call that function
2932  right before calling hb_shape() to get the old behavior.
2933- hb_blob_create_sub_blob() always creates sub-blob with
2934  HB_MEMORY_MODE_READONLY.  See comments for the reason.
2935
2936
2937Overview of changes leading to 0.9.12
2938Thursday, January 18, 2013
2939=====================================
2940
2941- Build fixes for Sun compiler.
2942- Minor bug fix.
2943
2944Overview of changes leading to 0.9.11
2945Thursday, January 10, 2013
2946=====================================
2947
2948- Build fixes.
2949- Fix GPOS mark attachment with null Anchor offsets.
2950- [Indic] Fix old-spec reordering of viramas if sequence ends in one.
2951- Fix multi-threaded shaper data creation crash.
2952- Add atomic ops for Solaris.
2953
2954API changes:
2955- Rename hb_buffer_clear() to hb_buffer_clear_contents().
2956
2957
2958Overview of changes leading to 0.9.10
2959Thursday, January 3, 2013
2960=====================================
2961
2962- [Indic] Fixed rendering of Malayalam dot-reph
2963- Updated OT language tags.
2964- Updated graphite2 backend.
2965- Improved hb_ot_layout_get_size_params() logic.
2966- Improve hb-shape/hb-view help output.
2967- Fixed hb-set.h implementation to not crash.
2968- Fixed various issues with hb_ot_layout_collect_lookups().
2969- Various build fixes.
2970
2971New API:
2972
2973hb_graphite2_face_get_gr_face()
2974hb_graphite2_font_get_gr_font()
2975hb_coretext_face_get_cg_font()
2976
2977Modified API:
2978
2979hb_ot_layout_get_size_params()
2980
2981
2982Overview of changes leading to 0.9.9
2983Wednesday, December 5, 2012
2984====================================
2985
2986- Fix build on Windows.
2987- Minor improvements.
2988
2989
2990Overview of changes leading to 0.9.8
2991Tuesday, December 4, 2012
2992====================================
2993
2994
2995- Actually implement hb_shape_plan_get_shaper ().
2996- Make UCDB data tables const.
2997- Lots of internal refactoring in OTLayout tables.
2998- Flesh out hb_ot_layout_lookup_collect_glyphs().
2999
3000New API:
3001
3002hb_ot_layout_collect_lookups()
3003hb_ot_layout_get_size_params()
3004
3005
3006Overview of changes leading to 0.9.7
3007Sunday, November 21, 2012
3008====================================
3009
3010
3011HarfBuzz "All-You-Can-Eat-Sushi" (aka Vancouver) Hackfest and follow-on fixes.
3012
3013- Fix Arabic contextual joining using pre-context text.
3014- Fix Sinhala "split matra" mess.
3015- Fix Khmer shaping with broken fonts.
3016- Implement Thai "PUA" shaping for old fonts.
3017- Do NOT route Kharoshthi script through the Indic shaper.
3018- Disable fallback positioning for Indic and Thai shapers.
3019- Misc fixes.
3020
3021
3022hb-shape / hb-view changes:
3023
3024- Add --text-before and --text-after
3025- Add --bot / --eot / --preserve-default-ignorables
3026- hb-shape --output-format=json
3027
3028
3029New API:
3030
3031hb_buffer_clear()
3032
3033hb_buffer_flags_t
3034
3035HB_BUFFER_FLAGS_DEFAULT
3036HB_BUFFER_FLAG_BOT
3037HB_BUFFER_FLAG_EOT
3038HB_BUFFER_FLAG_PRESERVE_DEFAULT_IGNORABLES
3039
3040hb_buffer_set_flags()
3041hb_buffer_get_flags()
3042
3043HB_BUFFER_SERIALIZE_FLAGS
3044hb_buffer_serialize_glyphs()
3045hb_buffer_deserialize_glyphs()
3046hb_buffer_serialize_list_formats()
3047
3048hb_set_add_range()
3049hb_set_del_range()
3050hb_set_get_population()
3051hb_set_next_range()
3052
3053hb_face_[sg]et_glyph_count()
3054
3055hb_segment_properties_t
3056HB_SEGMENT_PROPERTIES_DEFAULT
3057hb_segment_properties_equal()
3058hb_segment_properties_hash()
3059
3060hb_buffer_set_segment_properties()
3061hb_buffer_get_segment_properties()
3062
3063hb_ot_layout_glyph_class_t
3064hb_ot_layout_get_glyph_class()
3065hb_ot_layout_get_glyphs_in_class()
3066
3067hb_shape_plan_t
3068hb_shape_plan_create()
3069hb_shape_plan_create_cached()
3070hb_shape_plan_get_empty()
3071hb_shape_plan_reference()
3072hb_shape_plan_destroy()
3073hb_shape_plan_set_user_data()
3074hb_shape_plan_get_user_data()
3075hb_shape_plan_execute()
3076hb_shape_plan_get_shaper()
3077
3078hb_ot_shape_plan_collect_lookups()
3079
3080
3081API changes:
3082
3083- Remove "mask" parameter from hb_buffer_add().
3084- Rename hb_ot_layout_would_substitute_lookup() and hb_ot_layout_substitute_closure_lookup().
3085- hb-set.h API const correction.
3086- Renamed hb_set_min/max() to hb_set_get_min/max().
3087- Rename hb_ot_layout_feature_get_lookup_indexes() to hb_ot_layout_feature_get_lookups().
3088- Rename hb_buffer_guess_properties() to hb_buffer_guess_segment_properties().
3089
3090
3091
3092Overview of changes leading to 0.9.6
3093Sunday, November 13, 2012
3094====================================
3095
3096- Don't clear pre-context text if no new context is provided.
3097- Fix ReverseChainingSubstLookup, which was totally borked.
3098- Adjust output format of hb-shape a bit.
3099- Include config.h.in in-tree.  Makes it easier for alternate build systems.
3100- Fix hb_buffer_set_length(buffer, 0) invalid memory allocation.
3101- Use ICU LayoutEngine's C API instead of C++.  Avoids much headache.
3102- Drop glyphs for all of Unicode Default_Ignorable characters.
3103- Misc build fixes.
3104
3105Arabic shaper:
3106- Enable 'dlig' and 'mset' features in Arabic shaper.
3107- Implement 'Phags-pa shaping, improve Mongolian.
3108
3109Indic shaper:
3110- Decompose Sinhala split matras the way old HarfBuzz / Pango did.
3111- Initial support for Consonant Medials.
3112- Start adding new-style Myanmar shaping.
3113- Make reph and 'pref' logic introspect the font.
3114- Route Meetei-Mayek through the Indic shaper.
3115- Don't apply 'liga' in Indic shaper.
3116- Improve Malayalam pre-base reordering Ra interaction with Chillus.
3117
3118
3119
3120Overview of changes leading to 0.9.5
3121Sunday, October 14, 2012
3122====================================
3123
3124- Synthetic-GSUB Arabic fallback shaping.
3125
3126- Misc Indic improvements.
3127
3128- Add build system support for pthread.
3129
3130- Imported UCDN for in-tree Unicode callbacks implementation.
3131
3132- Context-aware Arabic joining.
3133
3134- Misc other fixes.
3135
3136- New API:
3137
3138  hb_feature_to/from-string()
3139  hb_buffer_[sg]et_content_type()
3140
3141
3142
3143Overview of changes leading to 0.9.4
3144Tuesday, Sep 03, 2012
3145====================================
3146
3147- Indic improvements with old-spec Malayalam.
3148
3149- Better fallback glyph positioning, specially with Thai / Lao marks.
3150
3151- Implement dotted-circle insertion.
3152
3153- Better Arabic fallback shaping / ligation.
3154
3155- Added ICU LayoutEngine backend for testing.  Call it by the 'icu_le' name.
3156
3157- Misc fixes.
3158
3159
3160
3161Overview of changes leading to 0.9.3
3162Friday, Aug 18, 2012
3163====================================
3164
3165- Fixed fallback mark positioning for left-to-right text.
3166
3167- Improve mark positioning for the remaining combining classes.
3168
3169- Unbreak Thai and fallback Arabic shaping.
3170
3171- Port Arabic shaper to shape-plan caching.
3172
3173- Use new ICU normalizer functions.
3174
3175
3176
3177Overview of changes leading to 0.9.2
3178Friday, Aug 10, 2012
3179====================================
3180
3181- Over a thousand commits!  This is the first major release of HarfBuzz.
3182
3183- HarfBuzz is feature-complete now!  It should be in par, or better, than
3184  both Pango's shapers and old HarfBuzz / Qt shapers.
3185
3186- New Indic shaper, supporting main Indic scripts, Sinhala, and Khmer.
3187
3188- Improved Arabic shaper, with fallback Arabic shaping, supporting Arabic,
3189  Sinhala, N'ko, Mongolian, and Mandaic.
3190
3191- New Thai / Lao shaper.
3192
3193- Tibetan / Hangul support in the generic shaper.
3194
3195- Synthetic GDEF support for fonts without a GDEF table.
3196
3197- Fallback mark positioning for fonts without a GPOS table.
3198
3199- Unicode normalization shaping heuristic during glyph mapping.
3200
3201- New experimental Graphite2 backend.
3202
3203- New Uniscribe backend (primarily for testing).
3204
3205- New CoreText backend (primarily for testing).
3206
3207- Major optimization and speedup.
3208
3209- Test suites and testing infrastructure (work in progress).
3210
3211- Greatly improved hb-view cmdline tool.
3212
3213- hb-shape cmdline tool.
3214
3215- Unicode 6.1 support.
3216
3217Summary of API changes:
3218
3219o Changed API:
3220
3221  - Users are expected to only include main header files now (ie. hb.h,
3222    hb-glib.h, hb-ft.h, ...)
3223
3224  - All struct tag names had their initial underscore removed.
3225    Ie. "struct _hb_buffer_t" is "struct hb_buffer_t" now.
3226
3227  - All set_user_data() functions now take a "replace" boolean parameter.
3228
3229  - hb_buffer_create() takes zero arguments now.
3230    Use hb_buffer_pre_allocate() to pre-allocate.
3231
3232  - hb_buffer_add_utf*() now accept -1 for length parameters,
3233    meaning "nul-terminated".
3234
3235  - hb_direction_t enum values changed.
3236
3237  - All *_from_string() APIs now take a length parameter to allow for
3238    non-nul-terminated strings. A -1 length means "nul-terminated".
3239
3240  - Typedef for hb_language_t changed.
3241
3242  - hb_get_table_func_t renamed to hb_reference_table_func_t.
3243
3244  - hb_ot_layout_table_choose_script()
3245
3246  - Various renames in hb-unicode.h.
3247
3248o New API:
3249
3250  - hb_buffer_guess_properties()
3251    Automatically called by hb_shape().
3252
3253  - hb_buffer_normalize_glyphs()
3254
3255  - hb_tag_from_string()
3256
3257  - hb-coretext.h
3258
3259  - hb-uniscribe.h
3260
3261  - hb_face_reference_blob()
3262  - hb_face_[sg]et_index()
3263  - hb_face_set_upem()
3264
3265  - hb_font_get_glyph_name_func_t
3266    hb_font_get_glyph_from_name_func_t
3267    hb_font_funcs_set_glyph_name_func()
3268    hb_font_funcs_set_glyph_from_name_func()
3269    hb_font_get_glyph_name()
3270    hb_font_get_glyph_from_name()
3271    hb_font_glyph_to_string()
3272    hb_font_glyph_from_string()
3273
3274  - hb_font_set_funcs_data()
3275
3276  - hb_ft_font_set_funcs()
3277  - hb_ft_font_get_face()
3278
3279  - hb-gobject.h (work in progress)
3280
3281  - hb_ot_shape_glyphs_closure()
3282    hb_ot_layout_substitute_closure_lookup()
3283
3284  - hb-set.h
3285
3286  - hb_shape_full()
3287
3288  - hb_unicode_combining_class_t
3289
3290  - hb_unicode_compose_func_t
3291    hb_unicode_decompose_func_t
3292    hb_unicode_decompose_compatibility_func_t
3293    hb_unicode_funcs_set_compose_func()
3294    hb_unicode_funcs_set_decompose_func()
3295    hb_unicode_funcs_set_decompose_compatibility_func()
3296    hb_unicode_compose()
3297    hb_unicode_decompose()
3298    hb_unicode_decompose_compatibility()
3299
3300o Removed API:
3301
3302  - hb_ft_get_font_funcs()
3303
3304  - hb_ot_layout_substitute_start()
3305    hb_ot_layout_substitute_lookup()
3306    hb_ot_layout_substitute_finish()
3307    hb_ot_layout_position_start()
3308    hb_ot_layout_position_lookup()
3309    hb_ot_layout_position_finish()
3310
3311
3312
3313Overview of changes leading to 0.6.0
3314Friday, May 27, 2011
3315====================================
3316
3317- Vertical text support in GPOS
3318- Almost all API entries have unit tests now, under test/
3319- All thread-safety issues are fixed
3320
3321Summary of API changes follows.
3322
3323
3324* Simple Types API:
3325
3326  o New API:
3327    HB_LANGUAGE_INVALID
3328    hb_language_get_default()
3329    hb_direction_to_string()
3330    hb_direction_from_string()
3331    hb_script_get_horizontal_direction()
3332    HB_UNTAG()
3333
3334  o Renamed API:
3335    hb_category_t renamed to hb_unicode_general_category_t
3336
3337  o Changed API:
3338    hb_language_t is a typed pointers now
3339
3340  o Removed API:
3341    HB_TAG_STR()
3342
3343
3344* Use ISO 15924 tags for hb_script_t:
3345
3346  o New API:
3347    hb_script_from_iso15924_tag()
3348    hb_script_to_iso15924_tag()
3349    hb_script_from_string()
3350
3351  o Changed API:
3352    HB_SCRIPT_* enum members changed value.
3353
3354
3355* Buffer API streamlined:
3356
3357  o New API:
3358    hb_buffer_reset()
3359    hb_buffer_set_length()
3360    hb_buffer_allocation_successful()
3361
3362  o Renamed API:
3363    hb_buffer_ensure() renamed to hb_buffer_pre_allocate()
3364    hb_buffer_add_glyph() renamed to hb_buffer_add()
3365
3366  o Removed API:
3367    hb_buffer_clear()
3368    hb_buffer_clear_positions()
3369
3370  o Changed API:
3371    hb_buffer_get_glyph_infos() takes an out length parameter now
3372    hb_buffer_get_glyph_positions() takes an out length parameter now
3373
3374
3375* Blob API streamlined:
3376
3377  o New API:
3378    hb_blob_get_data()
3379    hb_blob_get_data_writable()
3380
3381  o Renamed API:
3382    hb_blob_create_empty() renamed to hb_blob_get_empty()
3383
3384  o Removed API:
3385    hb_blob_lock()
3386    hb_blob_unlock()
3387    hb_blob_is_writable()
3388    hb_blob_try_writable()
3389
3390  o Changed API:
3391    hb_blob_create() takes user_data before destroy now
3392
3393
3394* Unicode functions API:
3395
3396  o Unicode function vectors can subclass other unicode function vectors now.
3397    Unimplemented callbacks in the subclass automatically chainup to the parent.
3398
3399  o All hb_unicode_funcs_t callbacks take a user_data now.  Their setters
3400    take a user_data and its respective destroy callback.
3401
3402  o New API:
3403    hb_unicode_funcs_get_empty()
3404    hb_unicode_funcs_get_default()
3405    hb_unicode_funcs_get_parent()
3406
3407  o Changed API:
3408    hb_unicode_funcs_create() now takes a parent_funcs.
3409
3410  o Removed func getter functions:
3411    hb_unicode_funcs_get_mirroring_func()
3412    hb_unicode_funcs_get_general_category_func()
3413    hb_unicode_funcs_get_script_func()
3414    hb_unicode_funcs_get_combining_class_func()
3415    hb_unicode_funcs_get_eastasian_width_func()
3416
3417
3418* Face API:
3419
3420  o Renamed API:
3421    hb_face_get_table() renamed to hb_face_reference_table()
3422    hb_face_create_for_data() renamed to hb_face_create()
3423
3424  o Changed API:
3425    hb_face_create_for_tables() takes user_data before destroy now
3426    hb_face_reference_table() returns empty blob instead of NULL
3427    hb_get_table_func_t accepts the face as first parameter now
3428
3429* Font API:
3430
3431  o Fonts can subclass other fonts now.  Unimplemented callbacks in the
3432    subclass automatically chainup to the parent.  When chaining up,
3433    scale is adjusted if the parent font has a different scale.
3434
3435  o All hb_font_funcs_t callbacks take a user_data now.  Their setters
3436    take a user_data and its respective destroy callback.
3437
3438  o New API:
3439    hb_font_get_parent()
3440    hb_font_funcs_get_empty()
3441    hb_font_create_sub_font()
3442
3443  o Removed API:
3444    hb_font_funcs_copy()
3445    hb_font_unset_funcs()
3446
3447  o Removed func getter functions:
3448    hb_font_funcs_get_glyph_func()
3449    hb_font_funcs_get_glyph_advance_func()
3450    hb_font_funcs_get_glyph_extents_func()
3451    hb_font_funcs_get_contour_point_func()
3452    hb_font_funcs_get_kerning_func()
3453
3454  o Changed API:
3455    hb_font_create() takes a face and references it now
3456    hb_font_set_funcs() takes user_data before destroy now
3457    hb_font_set_scale() accepts signed integers now
3458    hb_font_get_contour_point_func_t now takes glyph first, then point_index
3459    hb_font_get_glyph_func_t returns a success boolean now
3460
3461
3462* Changed object model:
3463
3464  o All object types have a _get_empty() now:
3465    hb_blob_get_empty()
3466    hb_buffer_get_empty()
3467    hb_face_get_empty()
3468    hb_font_get_empty()
3469    hb_font_funcs_get_empty()
3470    hb_unicode_funcs_get_empty()
3471
3472  o Added _set_user_data() and _get_user_data() for all object types:
3473    hb_blob_get_user_data()
3474    hb_blob_set_user_data()
3475    hb_buffer_get_user_data()
3476    hb_buffer_set_user_data()
3477    hb_face_get_user_data()
3478    hb_face_set_user_data()
3479    hb_font_funcs_get_user_data()
3480    hb_font_funcs_set_user_data()
3481    hb_font_get_user_data()
3482    hb_font_set_user_data()
3483    hb_unicode_funcs_get_user_data()
3484    hb_unicode_funcs_set_user_data()
3485
3486  o Removed the _get_reference_count() from all object types:
3487    hb_blob_get_reference_count()
3488    hb_buffer_get_reference_count()
3489    hb_face_get_reference_count()
3490    hb_font_funcs_get_reference_count()
3491    hb_font_get_reference_count()
3492    hb_unicode_funcs_get_reference_count()
3493
3494  o Added _make_immutable() and _is_immutable() for all object types except for buffer:
3495    hb_blob_make_immutable()
3496    hb_blob_is_immutable()
3497    hb_face_make_immutable()
3498    hb_face_is_immutable()
3499
3500
3501* Changed API for vertical text support
3502
3503  o The following callbacks where removed:
3504    hb_font_get_glyph_advance_func_t
3505    hb_font_get_kerning_func_t
3506
3507  o The following new callbacks added instead:
3508    hb_font_get_glyph_h_advance_func_t
3509    hb_font_get_glyph_v_advance_func_t
3510    hb_font_get_glyph_h_origin_func_t
3511    hb_font_get_glyph_v_origin_func_t
3512    hb_font_get_glyph_h_kerning_func_t
3513    hb_font_get_glyph_v_kerning_func_t
3514
3515  o The following API removed as such:
3516    hb_font_funcs_set_glyph_advance_func()
3517    hb_font_funcs_set_kerning_func()
3518    hb_font_get_glyph_advance()
3519    hb_font_get_kerning()
3520
3521  o New API added instead:
3522    hb_font_funcs_set_glyph_h_advance_func()
3523    hb_font_funcs_set_glyph_v_advance_func()
3524    hb_font_funcs_set_glyph_h_origin_func()
3525    hb_font_funcs_set_glyph_v_origin_func()
3526    hb_font_funcs_set_glyph_h_kerning_func()
3527    hb_font_funcs_set_glyph_v_kerning_func()
3528    hb_font_get_glyph_h_advance()
3529    hb_font_get_glyph_v_advance()
3530    hb_font_get_glyph_h_origin()
3531    hb_font_get_glyph_v_origin()
3532    hb_font_get_glyph_h_kerning()
3533    hb_font_get_glyph_v_kerning()
3534
3535  o The following higher-leve API added for convenience:
3536    hb_font_get_glyph_advance_for_direction()
3537    hb_font_get_glyph_origin_for_direction()
3538    hb_font_add_glyph_origin_for_direction()
3539    hb_font_subtract_glyph_origin_for_direction()
3540    hb_font_get_glyph_kerning_for_direction()
3541    hb_font_get_glyph_extents_for_origin()
3542    hb_font_get_glyph_contour_point_for_origin()
3543
3544
3545* OpenType Layout API:
3546
3547  o New API:
3548    hb_ot_layout_position_start()
3549    hb_ot_layout_substitute_start()
3550    hb_ot_layout_substitute_finish()
3551
3552
3553* Glue code:
3554
3555  o New API:
3556    hb_glib_script_to_script()
3557    hb_glib_script_from_script()
3558    hb_icu_script_to_script()
3559    hb_icu_script_from_script()
3560
3561
3562* Version API added:
3563
3564  o New API:
3565    HB_VERSION_MAJOR
3566    HB_VERSION_MINOR
3567    HB_VERSION_MICRO
3568    HB_VERSION_STRING
3569    HB_VERSION_CHECK()
3570    hb_version()
3571    hb_version_string()
3572    hb_version_check()
3573
3574
3575