Push get_glyph_alternates() work all the way down
This commit is contained in:
parent
5bede33885
commit
bedf417121
|
@ -557,11 +557,11 @@ struct AlternateSet
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned
|
unsigned
|
||||||
get_glyph_alternates (unsigned start_offset,
|
get_alternates (unsigned start_offset,
|
||||||
unsigned *alternate_count /* IN/OUT. May be NULL. */,
|
unsigned *alternate_count /* IN/OUT. May be NULL. */,
|
||||||
hb_codepoint_t *alternate_glyphs /* OUT. May be NULL. */) const
|
hb_codepoint_t *alternate_glyphs /* OUT. May be NULL. */) const
|
||||||
{
|
{
|
||||||
if (alternate_count)
|
if (alternates.len && alternate_count)
|
||||||
{
|
{
|
||||||
+ alternates.sub_array (start_offset, alternate_count)
|
+ alternates.sub_array (start_offset, alternate_count)
|
||||||
| hb_sink (hb_array (alternate_glyphs, *alternate_count))
|
| hb_sink (hb_array (alternate_glyphs, *alternate_count))
|
||||||
|
@ -642,15 +642,13 @@ struct AlternateSubstFormat1
|
||||||
bool would_apply (hb_would_apply_context_t *c) const
|
bool would_apply (hb_would_apply_context_t *c) const
|
||||||
{ return c->len == 1 && (this+coverage).get_coverage (c->glyphs[0]) != NOT_COVERED; }
|
{ return c->len == 1 && (this+coverage).get_coverage (c->glyphs[0]) != NOT_COVERED; }
|
||||||
|
|
||||||
unsigned get_coverage_index (hb_codepoint_t gid) const
|
|
||||||
{ return (this+coverage).get_coverage (gid); }
|
|
||||||
|
|
||||||
unsigned
|
unsigned
|
||||||
get_glyph_alternates (unsigned index,
|
get_glyph_alternates (hb_codepoint_t gid,
|
||||||
unsigned start_offset,
|
unsigned start_offset,
|
||||||
unsigned *alternate_count /* IN/OUT. May be NULL. */,
|
unsigned *alternate_count /* IN/OUT. May be NULL. */,
|
||||||
hb_codepoint_t *alternate_glyphs /* OUT. May be NULL. */) const
|
hb_codepoint_t *alternate_glyphs /* OUT. May be NULL. */) const
|
||||||
{ return (this+alternateSet[index]).get_glyph_alternates (start_offset, alternate_count, alternate_glyphs); }
|
{ return (this+alternateSet[(this+coverage).get_coverage (gid)])
|
||||||
|
.get_alternates (start_offset, alternate_count, alternate_glyphs); }
|
||||||
|
|
||||||
bool apply (hb_ot_apply_context_t *c) const
|
bool apply (hb_ot_apply_context_t *c) const
|
||||||
{
|
{
|
||||||
|
@ -740,22 +738,13 @@ struct AlternateSubst
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned
|
unsigned
|
||||||
get_coverage_index (hb_codepoint_t gid) const
|
get_glyph_alternates (hb_codepoint_t gid,
|
||||||
{
|
|
||||||
switch (u.format) {
|
|
||||||
case 1: return u.format1.get_coverage_index (gid);
|
|
||||||
default:return NOT_COVERED;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned
|
|
||||||
get_glyph_alternates (unsigned index,
|
|
||||||
unsigned start_offset,
|
unsigned start_offset,
|
||||||
unsigned *alternate_count /* IN/OUT. May be NULL. */,
|
unsigned *alternate_count /* IN/OUT. May be NULL. */,
|
||||||
hb_codepoint_t *alternate_glyphs /* OUT. May be NULL. */) const
|
hb_codepoint_t *alternate_glyphs /* OUT. May be NULL. */) const
|
||||||
{
|
{
|
||||||
switch (u.format) {
|
switch (u.format) {
|
||||||
case 1: return u.format1.get_glyph_alternates (index, start_offset, alternate_count, alternate_glyphs);
|
case 1: return u.format1.get_glyph_alternates (gid, start_offset, alternate_count, alternate_glyphs);
|
||||||
default:assert (0); return 0;
|
default:assert (0); return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1519,10 +1508,9 @@ struct SubstLookup : Lookup
|
||||||
unsigned size = get_subtable_count ();
|
unsigned size = get_subtable_count ();
|
||||||
for (unsigned i = 0; i < size; ++i)
|
for (unsigned i = 0; i < size; ++i)
|
||||||
{
|
{
|
||||||
const AlternateSubst &alternate_subtable = get_subtable (i).u.alternate;
|
const AlternateSubst &subtable = get_subtable (i).u.alternate;
|
||||||
unsigned index = alternate_subtable.get_coverage_index (gid);
|
auto ret = subtable.get_glyph_alternates (gid, start_offset, alternate_count, alternate_glyphs);
|
||||||
if (index != NOT_COVERED)
|
if (ret) return (ret);
|
||||||
return alternate_subtable.get_glyph_alternates (index, start_offset, alternate_count, alternate_glyphs);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (alternate_count) *alternate_count = 0;
|
if (alternate_count) *alternate_count = 0;
|
||||||
|
|
Loading…
Reference in New Issue