From 1f63f1255af90702b9ea7838cc8b7af8f2644bcd Mon Sep 17 00:00:00 2001 From: handa Date: Fri, 27 Nov 2009 13:10:57 +0000 Subject: [PATCH] (gstring_subst): Set positioning_type to 1. (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 | 41 +++++++++++++++++++++-------------------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/src/otfdrive.c b/src/otfdrive.c index 93c7062..4443221 100644 --- a/src/otfdrive.c +++ b/src/otfdrive.c @@ -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 -- 1.7.10.4