if (c->last_base_until > buffer->idx)
{
c->last_base_until = 0;
c->last_base = -1;
} unsigned j; for (j = buffer->idx; j > c->last_base_until; j--)
{ auto match = skippy_iter.match (buffer->info[j - 1]); if (match == skippy_iter.MATCH)
{
c->last_base = (signed) j - 1; break;
}
}
c->last_base_until = buffer->idx; if (c->last_base == -1)
{
buffer->unsafe_to_concat_from_outbuffer (0, buffer->idx + 1);
return_trace (false);
}
unsigned idx = (unsigned) c->last_base;
/* Checking that matched glyph is actually a ligature by GDEF is too strong; disabled */ //if (!_hb_glyph_info_is_ligature (&buffer->info[idx])) { return_trace (false); }
/* Find component to attach to */ unsignedint comp_count = lig_attach.rows; if (unlikely (!comp_count))
{
buffer->unsafe_to_concat_from_outbuffer (idx, buffer->idx + 1);
return_trace (false);
}
/* We must now check whether the ligature ID of the current mark glyph * is identical to the ligature ID of the found ligature. If yes, we * can directly use the component index. If not, we attach the mark
* glyph to the last component of the ligature. */ unsignedint comp_index; unsignedint lig_id = _hb_glyph_info_get_lig_id (&buffer->info[idx]); unsignedint mark_id = _hb_glyph_info_get_lig_id (&buffer->cur()); unsignedint mark_comp = _hb_glyph_info_get_lig_comp (&buffer->cur()); if (lig_id && lig_id == mark_id && mark_comp > 0)
comp_index = hb_min (comp_count, _hb_glyph_info_get_lig_comp (&buffer->cur())) - 1; else
comp_index = comp_count - 1;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.