Don't assume the first glyph is part of the first char

Shaper::save_glyph_results incorrectly starts its loop by setting glyph_span
to a length of 1.  This means that the `if glyph_span.len() == 0` test in the
inner loop will never succeed.

Instead the glyph span should start out empty, and a glyph should be added only
as the corresponding char is found.  For comparison, see the Gecko code this
was ported from:

https://hg.mozilla.org/mozilla-central/file/ab0044bf/gfx/thebes/gfxHarfBuzzShaper.cpp#l1682
This commit is contained in:
Matt Brubeck 2016-04-28 07:59:42 -07:00
parent 4d05bf23b8
commit 97a58e9689

View file

@ -323,9 +323,8 @@ impl Shaper {
// in cases with complex glyph-character associations, 2+ glyphs and 1+ chars can be
// processed.
while glyph_span.start < glyph_count {
// start by looking at just one glyph.
glyph_span.end += 1;
debug!("Processing glyph at idx={}", glyph_span.start);
glyph_span.end = glyph_span.start;
let char_byte_start = glyph_data.byte_offset_of_glyph(glyph_span.start) as usize;
char_byte_span = char_byte_start..char_byte_start;