[subset] keep glyph trim separate of more general get_offset

This commit is contained in:
Rod Sheeter 2018-02-23 17:49:23 -08:00
parent 0ac8c0c1e6
commit 1454d82a9d
2 changed files with 8 additions and 10 deletions

View File

@ -267,7 +267,7 @@ struct glyf
CompositeGlyphHeader::Iterator *composite /* OUT */) const CompositeGlyphHeader::Iterator *composite /* OUT */) const
{ {
unsigned int start_offset, end_offset; unsigned int start_offset, end_offset;
if (!get_offsets (glyph, /* trim */ false, &start_offset, &end_offset)) if (!get_offsets (glyph, &start_offset, &end_offset))
return false; /* glyph not found */ return false; /* glyph not found */
return CompositeGlyphHeader::get_iterator ((const char*) this->glyf_table + start_offset, return CompositeGlyphHeader::get_iterator ((const char*) this->glyf_table + start_offset,
@ -276,8 +276,8 @@ struct glyf
} }
/* based on FontTools _g_l_y_f.py::trim */ /* based on FontTools _g_l_y_f.py::trim */
inline bool trim_glyph(unsigned int start_offset, inline bool trim(unsigned int start_offset,
unsigned int *end_offset) const unsigned int *end_offset) const
{ {
static const int FLAG_X_SHORT = 0x02; static const int FLAG_X_SHORT = 0x02;
static const int FLAG_Y_SHORT = 0x04; static const int FLAG_Y_SHORT = 0x04;
@ -359,7 +359,6 @@ struct glyf
} }
inline bool get_offsets (hb_codepoint_t glyph, inline bool get_offsets (hb_codepoint_t glyph,
bool trim,
unsigned int *start_offset /* OUT */, unsigned int *start_offset /* OUT */,
unsigned int *end_offset /* OUT */) const unsigned int *end_offset /* OUT */) const
{ {
@ -383,9 +382,6 @@ struct glyf
if (*start_offset > *end_offset || *end_offset > glyf_len) if (*start_offset > *end_offset || *end_offset > glyf_len)
return false; return false;
if (trim)
return trim_glyph(*start_offset, end_offset);
return true; return true;
} }
@ -438,7 +434,7 @@ struct glyf
hb_glyph_extents_t *extents) const hb_glyph_extents_t *extents) const
{ {
unsigned int start_offset, end_offset; unsigned int start_offset, end_offset;
if (!get_offsets (glyph, /* trim */ false, &start_offset, &end_offset)) if (!get_offsets (glyph, &start_offset, &end_offset))
return false; return false;
if (end_offset - start_offset < GlyphHeader::static_size) if (end_offset - start_offset < GlyphHeader::static_size)

View File

@ -47,7 +47,8 @@ _calculate_glyf_and_loca_prime_size (const OT::glyf::accelerator_t &glyf,
*(instruction_ranges->push()) = 0; *(instruction_ranges->push()) = 0;
unsigned int start_offset, end_offset; unsigned int start_offset, end_offset;
if (unlikely (!glyf.get_offsets(next_glyph, /* trim */ true, &start_offset, &end_offset))) if (unlikely (!(glyf.get_offsets(next_glyph, &start_offset, &end_offset)
&& glyf.trim(start_offset, &end_offset))))
{ {
DEBUG_MSG(SUBSET, nullptr, "Invalid gid %d", next_glyph); DEBUG_MSG(SUBSET, nullptr, "Invalid gid %d", next_glyph);
continue; continue;
@ -154,7 +155,8 @@ _write_glyf_and_loca_prime (hb_subset_plan_t *plan,
for (unsigned int i = 0; i < glyph_ids.len; i++) for (unsigned int i = 0; i < glyph_ids.len; i++)
{ {
unsigned int start_offset, end_offset; unsigned int start_offset, end_offset;
if (unlikely (!glyf.get_offsets (glyph_ids[i], /* trim */ true, &start_offset, &end_offset))) if (unlikely (!(glyf.get_offsets (glyph_ids[i], &start_offset, &end_offset)
&& glyf.trim(start_offset, &end_offset))))
end_offset = start_offset = 0; end_offset = start_offset = 0;
unsigned int instruction_start = instruction_ranges[i * 2]; unsigned int instruction_start = instruction_ranges[i * 2];
unsigned int instruction_end = instruction_ranges[i * 2 + 1]; unsigned int instruction_end = instruction_ranges[i * 2 + 1];