diff --git a/Lib/fontTools/feaLib/builder.py b/Lib/fontTools/feaLib/builder.py index c70dca546..f1e0e14e4 100644 --- a/Lib/fontTools/feaLib/builder.py +++ b/Lib/fontTools/feaLib/builder.py @@ -1509,12 +1509,23 @@ class SingleSubstBuilder(LookupBuilder): self.mapping == other.mapping) def build(self): - subtable = otl.buildSingleSubstSubtable(self.mapping) - return self.buildLookup_([subtable]) + subtables = [] + mapping = {} + for key in self.mapping: + if key[0] == self.SUBTABLE_BREAK_: + subtables.append(otl.buildSingleSubstSubtable(mapping)) + mapping = {} + else: + mapping[key] = self.mapping[key] + subtables.append(otl.buildSingleSubstSubtable(mapping)) + return self.buildLookup_(subtables) def getAlternateGlyphs(self): return {glyph: set([repl]) for glyph, repl in self.mapping.items()} + def add_subtable_break(self, location): + self.mapping[(self.SUBTABLE_BREAK_, location)] = self.SUBTABLE_BREAK_ + class ClassPairPosSubtableBuilder(object): def __init__(self, builder, valueFormat1, valueFormat2): diff --git a/Tests/feaLib/builder_test.py b/Tests/feaLib/builder_test.py index 0b6ca64c9..831e377a5 100644 --- a/Tests/feaLib/builder_test.py +++ b/Tests/feaLib/builder_test.py @@ -71,7 +71,7 @@ class BuilderTest(unittest.TestCase): ZeroValue_PairPos_horizontal ZeroValue_PairPos_vertical ZeroValue_ChainSinglePos_horizontal ZeroValue_ChainSinglePos_vertical PairPosSubtable ChainSubstSubtable ChainPosSubtable LigatureSubtable - AlternateSubtable MultipleSubstSubtable + AlternateSubtable MultipleSubstSubtable SingleSubstSubtable """.split() def __init__(self, methodName): @@ -519,9 +519,9 @@ class BuilderTest(unittest.TestCase): 'unsupported "subtable" statement for lookup type', self.build, "feature test {" - " sub a by b;" + " pos a 10;" " subtable;" - " sub c by d;" + " pos b 10;" "} test;" ) diff --git a/Tests/feaLib/data/SingleSubstSubtable.fea b/Tests/feaLib/data/SingleSubstSubtable.fea new file mode 100644 index 000000000..f5a6da313 --- /dev/null +++ b/Tests/feaLib/data/SingleSubstSubtable.fea @@ -0,0 +1,5 @@ +feature test { + sub a by b; + subtable; + sub c by d; +} test; diff --git a/Tests/feaLib/data/SingleSubstSubtable.ttx b/Tests/feaLib/data/SingleSubstSubtable.ttx new file mode 100644 index 000000000..5030b7388 --- /dev/null +++ b/Tests/feaLib/data/SingleSubstSubtable.ttx @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +