diff --git a/Lib/ufo2ft/featureWriters/markFeatureWriter.py b/Lib/ufo2ft/featureWriters/markFeatureWriter.py index 26bef9da..eb1ae682 100644 --- a/Lib/ufo2ft/featureWriters/markFeatureWriter.py +++ b/Lib/ufo2ft/featureWriters/markFeatureWriter.py @@ -318,9 +318,13 @@ class MarkFeatureWriter(BaseFeatureWriter): wins in case when the same base or ligature glyph can attach to the same mark through multiple mark classes. https://github.com/googlefonts/ufo2ft/issues/591 + + If `markClassPrefix=None` the default prefix (`MC`) will be used for prefixing + mark class names (e.g. `@MC_top` for top anchor), otherwise the given prefix + will be used. """ - options = dict(quantization=1, groupMarkClasses=False) + options = dict(quantization=1, groupMarkClasses=False, markClassPrefix=None) tableTag = "GPOS" features = frozenset(["mark", "mkmk", "abvm", "blwm"]) @@ -362,6 +366,11 @@ def shouldContinue(self): return False return super().shouldContinue() + def _getMarkClassPrefix(self): + if self.options.markClassPrefix is not None: + return self.options.markClassPrefix + return self.markClassPrefix + def _getAnchorLists(self): gdefClasses = self.context.gdefClasses if gdefClasses.base is not None: @@ -452,7 +461,7 @@ def _makeMarkClassDefinitions(self): markGlyphSets = self._groupMarkGlyphsByAnchor() currentClasses = self.context.feaFile.markClasses allMarkClasses = self.context.markClasses = {} - classPrefix = self.markClassPrefix + classPrefix = self._getMarkClassPrefix() newDefs = [] for markAnchorName, glyphAnchorPairs in sorted(markGlyphSets.items()): className = ast.makeFeaClassName(classPrefix + markAnchorName) @@ -558,8 +567,9 @@ def _groupMarkClasses(self, markGlyphToMarkClasses): ) def _removeClassPrefix(self, markClass): - assert markClass.startswith(self.markClassPrefix) - return markClass[len(self.markClassPrefix) :] + classPrefix = self._getMarkClassPrefix() + assert markClass.startswith(classPrefix) + return markClass[len(classPrefix) :] def _groupAttachments(self, attachments): """Group the given attachments so that no group contains conflicting diff --git a/tests/featureWriters/markFeatureWriter_test.py b/tests/featureWriters/markFeatureWriter_test.py index c75359aa..8b8ed9de 100644 --- a/tests/featureWriters/markFeatureWriter_test.py +++ b/tests/featureWriters/markFeatureWriter_test.py @@ -2309,6 +2309,12 @@ def test_ignorable_anchors(self, FontClass): assert len(statement.marks) == 1 assert statement.marks[0][1].name == "MC_top" + def test_mark_ckass_prefix(self, testufo): + writer = MarkFeatureWriter(markClassPrefix="mark") + feaFile = ast.FeatureFile() + assert writer.write(testufo, feaFile) + assert all(c.startswith("mark_") for c in feaFile.markClasses) + if __name__ == "__main__": import sys