[subset] In ChainContextFormat3 don't skip subsetting if backtrack or lookahead are empty.
It's valid to have a ChainContextFormat3 with either an empty backtrack or lookahead. Only drop the lookup if the input sequence is empty.
This commit is contained in:
parent
7b77ce0507
commit
90eb1a40eb
@ -2981,18 +2981,20 @@ struct ChainContextFormat3
|
|||||||
|
|
||||||
template<typename Iterator,
|
template<typename Iterator,
|
||||||
hb_requires (hb_is_iterator (Iterator))>
|
hb_requires (hb_is_iterator (Iterator))>
|
||||||
bool serialize_coverage_offsets (hb_subset_context_t *c, Iterator it, const void* base) const
|
OffsetArrayOf<Coverage>* serialize_coverage_offsets
|
||||||
|
(hb_subset_context_t *c, Iterator it, const void* base) const
|
||||||
{
|
{
|
||||||
TRACE_SERIALIZE (this);
|
TRACE_SERIALIZE (this);
|
||||||
auto *out = c->serializer->start_embed<OffsetArrayOf<Coverage>> ();
|
auto *out = c->serializer->start_embed<OffsetArrayOf<Coverage>> ();
|
||||||
|
|
||||||
if (unlikely (!c->serializer->allocate_size<HBUINT16> (HBUINT16::static_size))) return_trace (false);
|
if (unlikely (!c->serializer->allocate_size<HBUINT16> (HBUINT16::static_size)))
|
||||||
|
return_trace (nullptr);
|
||||||
|
|
||||||
+ it
|
+ it
|
||||||
| hb_apply (subset_offset_array (c, *out, base))
|
| hb_apply (subset_offset_array (c, *out, base))
|
||||||
;
|
;
|
||||||
|
|
||||||
return_trace (out->len);
|
return_trace (out);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool subset (hb_subset_context_t *c) const
|
bool subset (hb_subset_context_t *c) const
|
||||||
@ -3007,7 +3009,8 @@ struct ChainContextFormat3
|
|||||||
return_trace (false);
|
return_trace (false);
|
||||||
|
|
||||||
const OffsetArrayOf<Coverage> &input = StructAfter<OffsetArrayOf<Coverage>> (backtrack);
|
const OffsetArrayOf<Coverage> &input = StructAfter<OffsetArrayOf<Coverage>> (backtrack);
|
||||||
if (!serialize_coverage_offsets (c, input.iter (), this))
|
OffsetArrayOf<Coverage>* new_coverage = serialize_coverage_offsets (c, input.iter (), this);
|
||||||
|
if (!new_coverage || !new_coverage->len)
|
||||||
return_trace (false);
|
return_trace (false);
|
||||||
|
|
||||||
const OffsetArrayOf<Coverage> &lookahead = StructAfter<OffsetArrayOf<Coverage>> (input);
|
const OffsetArrayOf<Coverage> &lookahead = StructAfter<OffsetArrayOf<Coverage>> (input);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user