if ( subtables.size() > 0 ) {
gsub = new GlyphSubstitutionTable ( gdef, extractLookups(), subtables );
}
clearTable();
} else if ( en[1].equals ( "GlyphClassDef" ) ) {
GlyphMappingTable mapping = extractClassDefMapping ( glyphClasses, stFormat, true );
addGDEFSubtable ( GlyphDefinitionTable.GDEF_LOOKUP_TYPE_GLYPH_CLASS, mapping );
} else if ( en[1].equals ( "InputCoverage" ) ) {
String ck = makeCoverageKey ( "in", ctIndex );
if ( coverages.containsKey ( ck ) ) {
duplicateCoverageIndex ( en, ctIndex );
} else {
coverages.put ( ck, extractCoverage() );
}
} else if ( en[1].equals ( "LigatureAttach" ) ) {
ligatureAnchors.add ( extractComponents() );
} else if ( en[1].equals ( "LigatureCoverage" ) ) {
coverages.put ( "liga", extractCoverage() );
} else if ( en[1].equals ( "LigatureSet" ) ) {
subtableEntries.add ( extractLigatures() );
} else if ( en[1].equals ( "LigatureSubst" ) ) {
if ( ! sortEntries ( coverageEntries, subtableEntries ) ) {
mismatchedEntries ( en, coverageEntries.size(), subtableEntries.size() );
}
GlyphCoverageTable coverage = extractCoverage();
addGSUBSubtable ( GlyphSubstitutionTable.GSUB_LOOKUP_TYPE_LIGATURE, coverage );
} else if ( en[1].equals ( "LookAheadCoverage" ) ) {
String ck = makeCoverageKey ( "la", ctIndex );
if ( coverages.containsKey ( ck ) ) {
duplicateCoverageIndex ( en, ctIndex );
} else {
coverages.put ( ck, extractCoverage() );
}
} else if ( en[1].equals ( "Lookup" ) ) {
if ( ltIndex != ltSequence ) {
mismatchedIndex ( en, "lookup", ltIndex, ltSequence );
} else {
nextLookup();
}
} else if ( en[1].equals ( "MarkAttachClassDef" ) ) {
GlyphMappingTable mapping = extractClassDefMapping ( glyphClasses, stFormat, true );
addGDEFSubtable ( GlyphDefinitionTable.GDEF_LOOKUP_TYPE_MARK_ATTACHMENT, mapping );
} else if ( en[1].equals ( "MarkCoverage" ) ) {
coverages.put ( "mark", extractCoverage() );
} else if ( en[1].equals ( "Mark1Coverage" ) ) {
coverages.put ( "mrk1", extractCoverage() );