Fix calculation of glyph offset in indirect-mapped tables
This commit is contained in:
parent
23f7f88f43
commit
8033149e8b
|
@ -12,6 +12,7 @@ use byteorder::{BigEndian, ReadBytesExt};
|
||||||
use charmap::CodepointRange;
|
use charmap::CodepointRange;
|
||||||
use glyph_range::{GlyphRange, GlyphRanges, MappedGlyphRange};
|
use glyph_range::{GlyphRange, GlyphRanges, MappedGlyphRange};
|
||||||
use otf::{Error, FontTable};
|
use otf::{Error, FontTable};
|
||||||
|
use std::char;
|
||||||
use std::cmp;
|
use std::cmp;
|
||||||
use std::mem;
|
use std::mem;
|
||||||
use std::u16;
|
use std::u16;
|
||||||
|
@ -205,10 +206,10 @@ impl<'a> CmapTable<'a> {
|
||||||
|
|
||||||
// Otherwise, look up the glyphs individually.
|
// Otherwise, look up the glyphs individually.
|
||||||
for code_offset in start_code_offset..(end_code_offset + 1) {
|
for code_offset in start_code_offset..(end_code_offset + 1) {
|
||||||
let mut glyph_id = glyph_ids;
|
let mut reader = id_range_offsets;
|
||||||
try!(glyph_id.jump((id_range_offset as usize + code_offset as usize) * 2)
|
try!(reader.jump(segment_index as usize * 2 + code_offset as usize * 2 +
|
||||||
.map_err(Error::eof));
|
id_range_offset as usize).map_err(Error::eof));
|
||||||
let mut glyph_id = try!(glyph_id.read_u16::<BigEndian>().map_err(Error::eof));
|
let mut glyph_id = try!(reader.read_u16::<BigEndian>().map_err(Error::eof));
|
||||||
if glyph_id == 0 {
|
if glyph_id == 0 {
|
||||||
glyph_ranges.ranges.push(MappedGlyphRange {
|
glyph_ranges.ranges.push(MappedGlyphRange {
|
||||||
codepoint_start: start_code as u32 + code_offset as u32,
|
codepoint_start: start_code as u32 + code_offset as u32,
|
||||||
|
|
Loading…
Reference in New Issue