Overview of changes leading to 1.1.2
Wednesday, November 26, 2015
====================================
- Fix badly-broken fallback shaper that affected terminology.
https://github.com/behdad/harfbuzz/issues/187
- Fix y_scaling in Graphite shaper.
- API changes:
* An unset glyph_h_origin() function in font-funcs now (sensibly)
implies horizontal origin at 0,0. Ie, the nil callback returns
true instead of false. As such, implementations that have a
glyph_h_origin() that simply returns true, can remove that function
with HarfBuzz >= 1.1.2. This results in a tiny speedup.
Overview of changes leading to 1.1.0
Wednesday, November 18, 2015
====================================
- Implement 'stch' stretch feature for Syriac Abbreviation Mark.
https://github.com/behdad/harfbuzz/issues/141
- Disable use of decompose_compatibility() callback.
- Implement "shaping" of various Unicode space characters, even
if the font does not support them.
https://github.com/behdad/harfbuzz/issues/153
- If font does not support U+2011 NO-BREAK HYPHEN, fallback to
U+2010 HYPHEN.
- Changes resulting from libFuzzer continuous fuzzing:
* Reject font tables that need more than 8 edits,
* Bound buffer growth during shaping to 32x,
* Fix assertions and other issues at OOM / buffer max-growth.
- Misc fixes and optimizations.
- API changes:
* All fonts created with hb_font_create() now inherit from
(ie. have parent) hb_font_get_empty().
Overview of changes leading to 1.0.6
Thursday, October 15, 2015
====================================
- Reduce max nesting level in OT lookups from 8 to 6.
Should not affect any real font as far as I know.
- Fix memory access issue in ot-font.
- Revert default load-flags of fonts created using hb_ft_font_create()
back to FT_LOAD_DEFAULT|FT_LOAD_NO_HINTING. This was changed in
last release (1.0.5), but caused major issues, so revert.
https://github.com/behdad/harfbuzz/issues/143
Overview of changes leading to 1.0.5
Tuesday, October 13, 2015
====================================
- Fix multiple memory access bugs discovered using libFuzzer.
https://github.com/behdad/harfbuzz/issues/139
Everyone should upgrade to this version as soon as possible.
We now have continuous fuzzing set up, to avoid issues like
these creeping in again.
- Misc fixes.
- New API:
* hb_font_set_parent().
* hb_ft_font_[sg]et_load_flags()
The default flags for fonts created using hb_ft_font_create()
has changed to default to FT_LOAD_DEFAULT now. Previously it
was defaulting to FT_LOAD_DFEAULT|FT_LOAD_NO_HINTING.
- API changes:
* Fonts now default to units-per-EM as their scale, instead of 0.
* hb_font_create_sub_font() does NOT make parent font immutable
anymore. hb_font_make_immutable() does.
Overview of changes leading to 1.0.3
Tuesday, September 1, 2015
====================================
- Start of user documentation, from Simon Cozens!
- Implement glyph_extents() for TrueType fonts in hb-ot-font.
- Improve GPOS cursive attachments with conflicting lookups.
- More fixes for cluster-level = 1.
- Uniscribe positioning fix.
Overview of changes leading to 1.0.2
Wednesday, August 19, 2015
====================================
- Fix shaping with cluster-level > 0.
- Fix Uniscribe backend font-size scaling.
- Declare dependencies in harfbuzz.pc.
FreeType is not declared though, to avoid bugs in pkg-config
0.26 with recursive dependencies.
- Slightly improved debug infrastructure. More to come later.
- Misc build fixes.
Overview of changes leading to 1.0.1
Monday, July 27, 2015
====================================
- Fix out-of-bounds access in USE shaper.
Overview of changes leading to 1.0.0
Sunday, July 26, 2015
====================================
- Implement Universal Shaping Engine:
https://www.microsoft.com/typography/OpenTypeDev/USE/intro.htmhttp://blogs.windows.com/bloggingwindows/2015/02/23/windows-shapes-the-worlds-languages/
- Bump version to 1.0.0. The soname was NOT bumped.
Overview of changes leading to 0.9.42
Thursday, July 26, 2015
=====================================
- New API to allow for retrieving finer-grained cluster
mappings if the client desires to handle them. Default
behavior is unchanged.
- Fix cluster merging when removing default-ignorables.
- Update to Unicode 8.0
- hb-graphite2 fixes.
- Misc fixes.
- Removed HB_NO_MERGE_CLUSTERS hack.
- New API:
hb_buffer_cluster_level_t enum
hb_buffer_get_cluster_level()
hb_buffer_set_cluster_level()
hb-shape / hb-view --cluster-level
Changelog:
Overview of changes leading to 0.9.41
Thursday, June 18, 2015
=====================================
- Fix hb-coretext with trailing whitespace in right-to-left.
- New API: hb_buffer_reverse_range().
- Allow implementing atomic ops in config.h.
- Fix hb_language_t in language bindings.
- Misc fixes.
Overview of changes leading to 0.9.40
Friday, March 20, 2015
=====================================
- Another hb-coretext crasher fix. Ouch!
- Happy Norouz!
Overview of changes leading to 0.9.39
Wednesday, March 4, 2015
=====================================
- Critical hb-coretext fixes.
- Optimizations and refactoring; no functional change
expected.
- Misc build fixes.
defined in NetBSD-6, NetBSD-7 and -current up to 7.99.4.
Manually override the detection since pkgsrc makes sure the proper
version is available.
Based on a patch by Leonardo Taccari on pkgsrc-changes.
Overview of changes leading to 0.9.38
Friday, January 23, 2015
=====================================
- Fix minor out-of-bounds access in Indic shaper.
- Change New Tai Lue shaping engine from South-East Asian to default,
reflecting change in Unicode encoding model.
- Add hb-shape --font-size. Can take up to two numbers for separate
x / y size.
- Fix CoreText and FreeType scale issues with negative scales.
- Reject blobs larger than 2GB. This might break some icu-le-hb clients
that need security fixes. See:
http://www.icu-project.org/trac/ticket/11450
- Avoid accessing font tables during face destruction, in casce rogue
clients released face data already.
- Fix up gobject-introspection a bit. Python bindings kinda working.
See README.python.
- Misc fixes.
- API additions:
hb_ft_face_create_referenced()
hb_ft_font_create_referenced()
Overview of changes leading to 0.9.37
Wednesday, December 17, 2014
=====================================
- Fix out-of-bounds access in Context lookup format 3.
- Indic: Allow ZWJ/ZWNJ before syllable modifiers.
Overview of changes leading to 0.9.36
Thursday, November 20, 2014
=====================================
- First time that three months went by without a release since
0.9.2 was released on August 10, 2012!
- Fix performance bug in hb_ot_collect_glyphs():
https://bugzilla.mozilla.org/show_bug.cgi?id=1090869
- Add basic vertical-text support to hb-ot-font.
- Misc build fixes.
Overview of changes leading to 0.9.35
Saturday, August 13, 2014
=====================================
- Fix major shape-plan caching bug when more than one shaper were
provided to hb_shape_full() (as exercised by XeTeX).
http://www.mail-archive.com/debian-bugs-dist@lists.debian.org/msg1246370.html
- Fix Arabic fallback shaping regression. This was broken in 0.9.32.
- Major hb-coretext fixes. That backend is complete now, including
respecing buffer direction and language, down to vertical writing.
- Build fixes for Windows CE. Should build fine now.
- Misc fixes:
Use atexit() only if it's safe to call from shared library
https://bugs.freedesktop.org/show_bug.cgi?id=82246
Mandaic had errors in its Unicode Joining_Type
https://bugs.freedesktop.org/show_bug.cgi?id=82306
- API changes:
* hb_buffer_clear_contents() does not reset buffer flags now.
After 763e5466c0a03a7c27020e1e2598e488612529a7, one doesn't
need to set flags for different pieces of text. The flags now
are something the client sets up once, depending on how it
actually uses the buffer. As such, don't clear it in
clear_contents().
I don't expect any changes to be needed to any existing client.
Overview of changes leading to 0.9.34
Saturday, August 2, 2014
=====================================
- hb_feature_from_string() now accepts CSS font-feature-settings format.
- As a result, hb-shape / hb-view --features also accept CSS-style strings.
Eg, "'liga' off" is accepted now.
- Add old-spec Myanmar shaper:
https://bugs.freedesktop.org/show_bug.cgi?id=81775
- Don't apply 'calt' in Hangul shaper.
- Fix mark advance zeroing for Hebrew shaper:
https://bugs.freedesktop.org/show_bug.cgi?id=76767
- Implement Windows-1256 custom Arabic shaping. Only built on Windows,
and requires help from get_glyph(). Used by Firefox.
https://bugzilla.mozilla.org/show_bug.cgi?id=1045139
- Disable 'liga' in vertical text.
- Build fixes.
- API changes:
* Make HB_BUFFER_FLAG_BOT/EOT easier to use.
Previously, we expected users to provide BOT/EOT flags when the
text *segment* was at paragraph boundaries. This meant that for
clients that provide full paragraph to HarfBuzz (eg. Pango), they
had code like this:
hb_buffer_set_flags (hb_buffer,
(item_offset == 0 ? HB_BUFFER_FLAG_BOT : 0) |
(item_offset + item_length == paragraph_length ?
HB_BUFFER_FLAG_EOT : 0));
hb_buffer_add_utf8 (hb_buffer,
paragraph_text, paragraph_length,
item_offset, item_length);
After this change such clients can simply say:
hb_buffer_set_flags (hb_buffer,
HB_BUFFER_FLAG_BOT | HB_BUFFER_FLAG_EOT);
hb_buffer_add_utf8 (hb_buffer,
paragraph_text, paragraph_length,
item_offset, item_length);
Ie, HarfBuzz itself checks whether the segment is at the beginning/end
of the paragraph. Clients that only pass item-at-a-time to HarfBuzz
continue not setting any flags whatsoever.
Another way to put it is: if there's pre-context text in the buffer,
HarfBuzz ignores the BOT flag. If there's post-context, it ignores
EOT flag.
Overview of changes leading to 0.9.33
Tuesday, July 22, 2014
=====================================
- Turn off ARabic 'cswh' feature that was accidentally turned on.
- Add HB_TAG_MAX_SIGNED.
- Make hb_face_make_immutable() really make face immutable!
- Windows build fixes.
Overview of changes leading to 0.9.32
Thursday, July 17, 2014
=====================================
- Apply Arabic shaping features in spec order exactly.
- Another fix for Mongolian free variation selectors.
- For non-Arabic scripts in Arabic shaper apply 'rlig' and 'calt'
together.
- Minor adjustment to U+FFFD logic.
- Fix hb-coretext build.
Overview of changes leading to 0.9.31
Wednesday, July 16, 2014
=====================================
- Only accept valid UTF-8/16/32; we missed many cases before.
- Better shaping of invalid UTF-8/16/32. Falls back to
U+FFFD REPLACEMENT CHARACTER now.
- With all changes in this release, the buffer will contain fully
valid Unicode after hb_buffer_add_utf8/16/32 no matter how
broken the input is. This can be overriden though. See below.
- Fix Mongolian Variation Selectors for fonts without GDEF.
- Fix minor invalid buffer access.
- Accept zh-Hant and zh-Hans language tags. hb_ot_tag_to_language()
now uses these instead of private tags.
- Build fixes.
- New API:
* hb_buffer_add_codepoints(). This does what hb_buffer_add_utf32()
used to do, ie. no validity check on the input at all. add_utf32
now replaces invalid Unicode codepoints with the replacement
character (see below).
* hb_buffer_set_replacement_codepoint()
* hb_buffer_get_replacement_codepoint()
Previously, in hb_buffer_add_utf8 and hb_buffer_add_utf16, when
we detected broken input, we replaced that with (hb_codepoint_t)-1.
This has changed to use U+FFFD now, but can be changed using these
new API.
Overview of changes leading to 0.9.30
Wednesday, July 9, 2014
=====================================
- Update to Unicode 7.0.0:
* New scripts Manichaean and Psalter Pahlavi are shaped using
Arabic shaper.
* All the other new scripts to through the generic shaper for
now.
- Minor Indic improvements.
- Fix graphite2 backend cluster mapping [crasher!]
- API changes:
* New HB_SCRIPT_* values for Unicode 7.0 scripts.
* New function hb_ot_layout_language_get_required_feature().
- Build fixes.
Overview of changes leading to 0.9.29
Thursday, May 29, 2014
=====================================
- Implement cmap in hb-ot-font.h. No variation-selectors yet.
- Myanmar: Allow MedialYa+Asat.
- Various Indic fixes:
* Support most characters in Extended Devanagary and Vedic
Unicode blocks.
* Allow digits and a some punctuation as consonant placeholders.
- Build fixes.
Overview of changes leading to 0.9.28
Monday, April 28, 2014
=====================================
- Unbreak old-spec Indic shaping. (bug 76705)
- Fix shaping of U+17DD and U+0FC6.
- Add HB_NO_MERGE_CLUSTERS build option. NOT to be enabled by default
for shipping libraries. It's an option for further experimentation
right now. When we are sure how to do it properly, we will add
public run-time API for the functionality.
- Build fixes.
Overview of changes leading to 0.9.27
Tuesday, March 18, 2014
=====================================
- Don't use "register" storage class specifier
- Wrap definition of free_langs() with HAVE_ATEXIT
- Add coretext_aat shaper and hb_coretext_face_create() constructor
- If HAVE_ICU_BUILTIN is defined, use hb-icu Unicode callbacks
- Add Myanmar test case from OpenType Myanmar spec
- Only do fallback Hebrew composition if no GPOS 'mark' available
- Allow bootstrapping without gtk-doc
- Use AM_MISSING_PROG for ragel and git
- Typo in ucdn's Makefile.am
- Improve MemoryBarrier() implementation
Overview of changes leading to 0.9.25
Wednesday, December 4, 2013
=====================================
- Myanmar shaper improvements.
- Avoid font fallback in CoreText backend.
- Additional OpenType language tag mappiongs.
- More aggressive shape-plan caching.
- Build with / require automake 1.13.
- Build with libtool 2.4.2.418 alpha to support ppc64le.
Overview of changes leading to 0.9.24
Tuesday, November 13, 2013
=====================================
- Misc compiler warning fixes with clang.
- No functional changes.
Overview of changes leading to 0.9.23
Monday, October 28, 2013
=====================================
- "Udupi HarfBuzz Hackfest", Paris, October 14..18 2013.
- Fix (Chain)Context recursion with non-monotone lookup positions.
- Misc Indic bug fixes.
- New Javanese / Buginese shaping, similar to Windows 8.1.
Overview of changes leading to 0.9.22
Thursday, October 3, 2013
=====================================
- Fix use-after-end-of-scope in hb_language_from_string().
- Fix hiding of default_ignorables if font doesn't have space glyph.
- Protect against out-of-range lookup indices.
- API Changes:
* Added hb_ot_layout_table_get_lookup_count()
Overview of changes leading to 0.9.21
Monday, September 16, 2013
=====================================
- Rename gobject-introspection library name from harfbuzz to HarfBuzz.
- Remove (long disabled) hb-old and hb-icu-le test shapers.
- Misc gtk-doc and gobject-introspection annotations.
- Misc fixes.
- API changes:
* Add HB_SET_VALUE_INVALID
General:
- Misc substitute_closure() fixes.
- Build fixes.
Documentation:
- gtk-doc boilerplate integrated. Docs are built now, but
contain no contents. By next release hopefully we have
some content in. Enable using --enable-gtk-doc.
GObject and Introspection:
- Added harfbuzz-gobject library (hb-gobject.h) that has type
bindings for all HarfBuzz objects and enums. Enable using
--with-gobject.
- Added gobject-introspection boilerplate. Nothing useful
right now. Work in progress. Gets enabled automatically if
--with-gobject is used. Override with --disable-introspection.
OpenType shaper:
- Apply 'mark' in Myanmar shaper.
- Don't apply 'dlig' by default.
Uniscribe shaper:
- Support user features.
- Fix loading of fonts that are also installed on the system.
- Fix shaping of Arabic Presentation Forms.
- Fix build with wide chars.
CoreText shaper:
- Support user features.
Source changes:
- hb_face_t code moved to hb-face.h / hb-face.cc.
- Added hb-deprecated.h.
API changes:
- Added HB_DISABLE_DEPRECATED.
- Deprecated HB_SCRIPT_CANADIAN_ABORIGINAL; replaced by
HB_SCRIPT_CANADIAN_SYLLABICS.
- Deprecated HB_BUFFER_FLAGS_DEFAULT; replaced by
HB_BUFFER_FLAG_DEFAULT.
- Deprecated HB_BUFFER_SERIALIZE_FLAGS_DEFAULT; replaced by
HB_BUFFER_SERIALIZE_FLAG_DEFAULT.
support. Changes, apart from minor fixes, include:
[ft] hb_ft_get_glyph_from_name fails for the name of glyph id 0
[uniscribe] Fix buffer allocation
[Indic] Add Javanese config
[OT] Collect requiredFeature only if features are not provided
Fix contextual lookup recursion indexing
Destroy lookups before blobs.
If variation selector is not consumed by cmap, pass it on to GSUB
Skip over multiple variation selectors in a row
util/ansi-print.cc: Use fallback implementation for lround on MSVC
hb-uniscribe.cc: Re-enable build under Visual Studio
Overview of changes leading to 0.9.18
Tuesday, May 28, 2013
=====================================
New build system:
- All unneeded code is all disabled by default,
- Uniscribe and CoreText shapers can be enabled with their --with options,
- icu_le and old shapers cannot be enabled for now,
- glib, freetype, and cairo will be detected automatically.
They can be force on/off'ed with their --with options,
- icu and graphite2 are default off, can be enabled with their --with
options,
Moreover, ICU support is now build into a separate library:
libharfbuzz-icu.so, and a new harfbuzz-icu.pc is shipped for it.
Distros can enable ICU now without every application on earth
getting linked to via libharfbuzz.so.
For distros I recommend that they make sure they are building --with-glib
--with-freetype --with-cairo, --with-icu, and optionally --with-graphite2;
And package harfbuzz and harfbuzz-icu separately.