inline driver_context_t (const ContextualSubtable *table) :
ret (false),
+ mark_set (false),
mark (0),
last_zero_before_mark (0),
subs (table+table->substitutionTables) {}
{
hb_buffer_t *buffer = driver->buffer;
+ /* Looks like CoreText applies neither mark nor current substitution for
+ * end-of-text if mark was not explicitly set. */
+ if (buffer->idx == buffer->len && !mark_set)
+ return true;
+
if (entry->data.markIndex != 0xFFFF)
{
const Lookup<GlyphID> &lookup = subs[entry->data.markIndex];
if (entry->flags & SetMark)
{
+ mark_set = true;
mark = buffer->idx;
last_zero_before_mark = driver->last_zero;
}
public:
bool ret;
private:
+ bool mark_set;
unsigned int mark;
unsigned int last_zero_before_mark;
const UnsizedOffsetListOf<Lookup<GlyphID>, HBUINT32> &subs;