[subset] keep glyph trim separate of more general get_offset
This commit is contained in:
parent
0ac8c0c1e6
commit
1454d82a9d
@ -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)
|
||||||
|
@ -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];
|
||||||
|
Loading…
Reference in New Issue
Block a user