(gstring_subst): Set positioning_type to 1.
authorhanda <handa>
Fri, 27 Nov 2009 13:10:57 +0000 (13:10 +0000)
committerhanda <handa>
Fri, 27 Nov 2009 13:10:57 +0000 (13:10 +0000)
(lookup_gsub): If a feature is applied to a glyph, set its
positioning_type to 1.
(OTF_drive_gsub_internal): Only if a feature is applied to a
glyph, set its feature log.
(OTF_drive_gpos_internal): Likewise.

src/otfdrive.c

index 93c7062..4443221 100644 (file)
@@ -119,7 +119,7 @@ gstring_subst (OTF *otf, OTF_GlyphString *gstring, int from, int to, int flag,
            gstring->glyphs[from + i].GlyphClass = 0;
        }
       gstring->glyphs[from + i].glyph_id = ids[i];
-      gstring->glyphs[from + i].positioning_type = 0;
+      gstring->glyphs[from + i].positioning_type = 1;
       gstring->glyphs[from + i].f.index.from = from_idx;
       gstring->glyphs[from + i].f.index.to = to_idx;
     }
@@ -456,6 +456,7 @@ lookup_gsub (OTF *otf, OTF_LookupList *lookup_list, unsigned lookup_list_index,
            g->glyph_id += subtable->u.single1.DeltaGlyphID;
          else
            g->glyph_id = subtable->u.single2.Substitute[coverage_idx];
+         g->positioning_type = 1;
          gidx++;
          break;
 
@@ -705,6 +706,7 @@ lookup_gsub (OTF *otf, OTF_LookupList *lookup_list, unsigned lookup_list_index,
            if (j < reverse->LookaheadGlyphCount)
              continue;
            g->glyph_id = reverse->Substitute[coverage_idx];
+           g->positioning_type = 1;
            gidx--;
          }
 
@@ -851,7 +853,6 @@ lookup_gpos (OTF_LookupList *lookup_list, unsigned lookup_list_index,
       switch (lookup_type)
        {
        case 1:
-         positioning_type = lookup_type;
          if (subtable->Format == 1)
            {
              OTF_GPOS_Single1 *single1 = &subtable->u.single1;
@@ -866,13 +867,13 @@ lookup_gpos (OTF_LookupList *lookup_list, unsigned lookup_list_index,
              format = single2->ValueFormat;
              value = single2->Value + coverage_idx;
            }
-         if (accumulate && g->positioning_type)
+         if (accumulate && (g->positioning_type & 0xF))
            {
              gidx = gstring_insert_for_gpos (gstring, gidx);
              g = gstring->glyphs + gidx;
            }
          g->positioning_type
-           = (g->positioning_type & 0xFFFFFFF0) | positioning_type;
+           = (g->positioning_type & 0xFFFFFFF0) | lookup_type;
          g->f.f1.format = format;
          g->f.f1.value = value;
          if (debug_flag)
@@ -985,7 +986,7 @@ lookup_gpos (OTF_LookupList *lookup_list, unsigned lookup_list_index,
            OTF_GPOS_Cursive1 *cursive1 = &subtable->u.cursive1;
 
            g->positioning_type
-           = (g->positioning_type & 0xFFFFFFF0) | lookup_type;
+             = (g->positioning_type & 0xFFFFFFF0) | lookup_type;
            g->f.f3.entry_anchor
              = &cursive1->EntryExitRecord[coverage_idx].EntryAnchor;
            g->f.f3.exit_anchor
@@ -1777,11 +1778,9 @@ OTF_drive_gsub_internal (OTF *otf, OTF_GlyphString *gstring,
                return errret;
              if (gidx < result)
                {
-                 if (with_log)
-                   for (j = gidx; j < result; j++)
-                     gstring->glyphs[j].positioning_type
-                       = ((gstring->glyphs[j].positioning_type & 0xF)
-                          | (lookup_flags[i] << 4));
+                 for (j = gidx; j < result; j++)
+                   gstring->glyphs[j].positioning_type
+                     = with_log ? (lookup_flags[i] << 4) : 0;
                  gidx = result;
                }
              else
@@ -1799,11 +1798,9 @@ OTF_drive_gsub_internal (OTF *otf, OTF_GlyphString *gstring,
                return errret;
              if (gidx > result)
                {
-                 if (with_log)
-                   for (j = gidx; j > result; j--)
-                     gstring->glyphs[j].positioning_type
-                       = ((gstring->glyphs[j].positioning_type & 0xF)
-                          | (lookup_flags[i] << 4));
+                 for (j = gidx; j > result; j--)
+                   gstring->glyphs[j].positioning_type
+                     = with_log ? (lookup_flags[i] << 4) : 0;
                  gidx = result;
                }
              else
@@ -1884,11 +1881,15 @@ OTF_drive_gpos_internal (OTF *otf, OTF_GlyphString *gstring,
            return errret;
          if (gidx < result)
            {
-             if (with_log)
-               for (j = gidx; j < result; j++)
-                 gstring->glyphs[j].positioning_type
-                   = ((gstring->glyphs[j].positioning_type & 0xF)
-                      | (lookup_flags[i] << 4));
+             for (j = gidx; j < result; j++)
+               {
+                 int positioning_type
+                   = gstring->glyphs[j].positioning_type & 0xF;
+
+                 if (with_log && positioning_type)
+                   gstring->glyphs[j].positioning_type
+                     = positioning_type | (lookup_flags[i] << 4);
+               }
              gidx = result;
            }
          else