continue;
}
- switch (lookup->LookupType)
+ switch (lookup_type)
{
case 1:
if (subtable->Format == 1)
/* Try all subtables until one of them handles the current glyph. */
for (i = 0; i < lookup->SubTableCount && gidx == orig_gidx; i++)
{
+ unsigned lookup_type = lookup->LookupType;
OTF_LookupSubTableGPOS *subtable = lookup->SubTable.gpos + i;
int coverage_idx;
+ if (lookup_type == 9)
+ {
+ OTF_GPOS_Extension1 *extension1 = &subtable->u.extension1;
+
+ lookup_type = extension1->ExtensionLookupType;
+ subtable = extension1->ExtensionSubtable;
+ }
+
if (subtable->Coverage.offset)
{
coverage_idx = get_coverage_index (&subtable->Coverage,
continue;
}
- switch (lookup->LookupType)
+ switch (lookup_type)
{
case 1:
- g->positioning_type = lookup->LookupType;
+ g->positioning_type = lookup_type;
if (subtable->Format == 1)
{
OTF_GPOS_Single1 *single1 = &subtable->u.single1;
{
if (pair1->ValueFormat1)
{
- g->positioning_type = lookup->LookupType;
+ g->positioning_type = lookup_type;
g->f.f2.format = pair1->ValueFormat1;
g->f.f2.value = &set->PairValueRecord[j].Value1;
}
gidx = next_gidx;
if (pair1->ValueFormat2)
{
- nextg->positioning_type = lookup->LookupType;
+ nextg->positioning_type = lookup_type;
nextg->f.f2.format = pair1->ValueFormat2;
nextg->f.f2.value = &set->PairValueRecord[j].Value2;
gidx++;
class2 = get_class_def (&pair2->ClassDef2, nextg->glyph_id);
if (pair2->ValueFormat1)
{
- g->positioning_type = lookup->LookupType;
+ g->positioning_type = lookup_type;
g->f.f2.format = pair2->ValueFormat1;
g->f.f2.value
= &pair2->Class1Record[class1].Class2Record[class2].Value1;
gidx = next_gidx;
if (pair2->ValueFormat2)
{
- nextg->positioning_type = lookup->LookupType;
+ nextg->positioning_type = lookup_type;
nextg->f.f2.format = pair2->ValueFormat2;
nextg->f.f2.value
= &pair2->Class1Record[class1].Class2Record[class2].Value2;
{
OTF_GPOS_Cursive1 *cursive1 = &subtable->u.cursive1;
- g->positioning_type = lookup->LookupType;
+ g->positioning_type = lookup_type;
g->f.f3.entry_anchor
= &cursive1->EntryExitRecord[coverage_idx].EntryAnchor;
g->f.f3.exit_anchor
g->f.f4.mark_anchor = &mark_record->MarkAnchor;
g->f.f4.base_anchor
= &base_record->Anchor[mark_record->Class];
- g->positioning_type = lookup->LookupType;
+ g->positioning_type = lookup_type;
}
break;
if (lig_anchor[mark_record->Class].AnchorFormat
&& num_class[mark_record->Class]-- == 0)
{
- g->positioning_type = lookup->LookupType;
+ g->positioning_type = lookup_type;
g->f.f5.mark_anchor = &mark_record->MarkAnchor;
g->f.f5.ligature_anchor = lig_anchor + mark_record->Class;
break;
g->f.f6.mark1_anchor = &mark1_record->MarkAnchor;
g->f.f6.mark2_anchor
= &mark2_record->Anchor[mark1_record->Class];
- g->positioning_type = lookup->LookupType;
+ g->positioning_type = lookup_type;
break;
}
break;
OTF_ERROR (OTF_ERROR_GPOS_DRIVE, " (invalid subformat)");
break;
- case 9:
- OTF_ERROR (OTF_ERROR_GPOS_DRIVE, " (not yet supported)");
- break;
-
default:
continue;
}