- TRACE("type %i, flag %x, subtables %i\n",GET_BE_WORD(look->LookupType),GET_BE_WORD(look->LookupFlag),GET_BE_WORD(look->SubTableCount));
- switch(GET_BE_WORD(look->LookupType))
+ type = GET_BE_WORD(look->LookupType);
+ TRACE("type %i, flag %x, subtables %i\n",type,GET_BE_WORD(look->LookupFlag),GET_BE_WORD(look->SubTableCount));
+ if (type == 7)
+ {
+ if (GET_BE_WORD(look->SubTableCount))
+ {
+ const GSUB_ExtensionPosFormat1 *ext = (const GSUB_ExtensionPosFormat1 *)((const BYTE *)look + GET_BE_WORD(look->SubTable[0]));
+ if (GET_BE_WORD(ext->SubstFormat) == 1)
+ {
+ type = GET_BE_WORD(ext->ExtensionLookupType);
+ TRACE("extension type %i\n",type);
+ }
+ else
+ {
+ FIXME("Unhandled Extension Substitution Format %i\n",GET_BE_WORD(ext->SubstFormat));
+ }
+ }
+ else
+ {
+ WARN("lookup type is Extension Substitution but no extension subtable exists\n");
+ }
+ }
+ switch(type)