diff --git a/Lib/fontTools/feaLib/builder.py b/Lib/fontTools/feaLib/builder.py index 9ae43f610..fc37de678 100644 --- a/Lib/fontTools/feaLib/builder.py +++ b/Lib/fontTools/feaLib/builder.py @@ -1345,8 +1345,19 @@ class MultipleSubstBuilder(LookupBuilder): self.mapping == other.mapping) def build(self): - subtable = otl.buildMultipleSubstSubtable(self.mapping) - return self.buildLookup_([subtable]) + subtables = [] + mapping = {} + for key in self.mapping: + if key[0] == self.SUBTABLE_BREAK_: + subtables.append(otl.buildMultipleSubstSubtable(mapping)) + mapping = {} + else: + mapping[key] = self.mapping[key] + subtables.append(otl.buildMultipleSubstSubtable(mapping)) + return self.buildLookup_(subtables) + + def add_subtable_break(self, location): + self.mapping[(self.SUBTABLE_BREAK_, location)] = self.SUBTABLE_BREAK_ class CursivePosBuilder(LookupBuilder): diff --git a/Tests/feaLib/builder_test.py b/Tests/feaLib/builder_test.py index 2ae911b7c..0b6ca64c9 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 + AlternateSubtable MultipleSubstSubtable """.split() def __init__(self, methodName): diff --git a/Tests/feaLib/data/MultipleSubstSubtable.fea b/Tests/feaLib/data/MultipleSubstSubtable.fea new file mode 100644 index 000000000..4964037f0 --- /dev/null +++ b/Tests/feaLib/data/MultipleSubstSubtable.fea @@ -0,0 +1,5 @@ +feature test { + sub c_t by c t; + subtable; + sub f_i by f i; +} test; diff --git a/Tests/feaLib/data/MultipleSubstSubtable.ttx b/Tests/feaLib/data/MultipleSubstSubtable.ttx new file mode 100644 index 000000000..6b3afd43b --- /dev/null +++ b/Tests/feaLib/data/MultipleSubstSubtable.ttx @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +