Hi Behdad,

I've been experimenting a bit with Noto Devanagari, and come up with the attached change to apply_lookup(). This fixes the problem where we were advancing too far during processing the contextual lookups for the first syllable, and hence missing the application of the same lookup at the first glyph of the next syllable.

This greatly improves the results for the Noto Devanagari font (e.g. Hindi failures down from 2.57% to 0.408%), as well as for Gujarati (2.57% down to 1.08%) and Kannada (27.2% down to 0.095%!) which have similar issues. The other Noto fonts are unaffected by the change; I haven't tested against other font collections yet.

Anyhow, please have a look and see if this makes sense at all. I'm far from confident that I actually understand what's going among in all these subtables and recursive lookup calls.....

JK
diff --git a/src/hb-ot-layout-gsubgpos-private.hh 
b/src/hb-ot-layout-gsubgpos-private.hh
index 316f506..8cd6236 100644
--- a/src/hb-ot-layout-gsubgpos-private.hh
+++ b/src/hb-ot-layout-gsubgpos-private.hh
@@ -1037,13 +1037,13 @@ static inline bool apply_lookup (hb_apply_context_t *c,
     c->buffer->next_glyph ();
     i++;
   }
-  while (i < count)
+  while (lookupCount && i < count)
   {
     if (!skippy_iter.next ()) return TRACE_RETURN (true);
     while (c->buffer->idx < skippy_iter.idx)
       c->buffer->next_glyph ();
 
-    if (lookupCount && i == lookupRecord->sequenceIndex)
+    if (i == lookupRecord->sequenceIndex)
     {
       unsigned int old_pos = c->buffer->idx;
 
_______________________________________________
HarfBuzz mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/harfbuzz

Reply via email to