[subset] fix intersects () for Context/ChainContext tables
return true only when all values in array are intersected with input
This commit is contained in:
parent
42025680cb
commit
44d88cff95
|
@ -791,15 +791,15 @@ static inline bool intersects_coverage (const hb_set_t *glyphs, const HBUINT16 &
|
||||||
return (data+coverage).intersects (glyphs);
|
return (data+coverage).intersects (glyphs);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline bool intersects_array (const hb_set_t *glyphs,
|
static inline bool array_is_subset_of (const hb_set_t *glyphs,
|
||||||
unsigned int count,
|
unsigned int count,
|
||||||
const HBUINT16 values[],
|
const HBUINT16 values[],
|
||||||
intersects_func_t intersects_func,
|
intersects_func_t intersects_func,
|
||||||
const void *intersects_data)
|
const void *intersects_data)
|
||||||
{
|
{
|
||||||
for (const HBUINT16 &_ : + hb_iter (values, count))
|
for (const HBUINT16 &_ : + hb_iter (values, count))
|
||||||
if (intersects_func (glyphs, _, intersects_data)) return true;
|
if (!intersects_func (glyphs, _, intersects_data)) return false;
|
||||||
return false;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1325,7 +1325,7 @@ static inline bool context_intersects (const hb_set_t *glyphs,
|
||||||
const HBUINT16 input[], /* Array of input values--start with second glyph */
|
const HBUINT16 input[], /* Array of input values--start with second glyph */
|
||||||
ContextClosureLookupContext &lookup_context)
|
ContextClosureLookupContext &lookup_context)
|
||||||
{
|
{
|
||||||
return intersects_array (glyphs,
|
return array_is_subset_of (glyphs,
|
||||||
inputCount ? inputCount - 1 : 0, input,
|
inputCount ? inputCount - 1 : 0, input,
|
||||||
lookup_context.funcs.intersects, lookup_context.intersects_data);
|
lookup_context.funcs.intersects, lookup_context.intersects_data);
|
||||||
}
|
}
|
||||||
|
@ -1972,13 +1972,13 @@ static inline bool chain_context_intersects (const hb_set_t *glyphs,
|
||||||
const HBUINT16 lookahead[],
|
const HBUINT16 lookahead[],
|
||||||
ChainContextClosureLookupContext &lookup_context)
|
ChainContextClosureLookupContext &lookup_context)
|
||||||
{
|
{
|
||||||
return intersects_array (glyphs,
|
return array_is_subset_of (glyphs,
|
||||||
backtrackCount, backtrack,
|
backtrackCount, backtrack,
|
||||||
lookup_context.funcs.intersects, lookup_context.intersects_data[0])
|
lookup_context.funcs.intersects, lookup_context.intersects_data[0])
|
||||||
&& intersects_array (glyphs,
|
&& array_is_subset_of (glyphs,
|
||||||
inputCount ? inputCount - 1 : 0, input,
|
inputCount ? inputCount - 1 : 0, input,
|
||||||
lookup_context.funcs.intersects, lookup_context.intersects_data[1])
|
lookup_context.funcs.intersects, lookup_context.intersects_data[1])
|
||||||
&& intersects_array (glyphs,
|
&& array_is_subset_of (glyphs,
|
||||||
lookaheadCount, lookahead,
|
lookaheadCount, lookahead,
|
||||||
lookup_context.funcs.intersects, lookup_context.intersects_data[2]);
|
lookup_context.funcs.intersects, lookup_context.intersects_data[2]);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue