def parse_markClass_(self): assert self.is_cur_keyword_("markClass") location = self.cur_token_location_ glyphs = self.parse_glyphclass_(accept_glyphname=True) anchor = self.parse_anchor_() name = self.expect_class_name_() self.expect_symbol_(";") markClass = self.doc_.markClasses.get(name) if markClass is None: markClass = ast.MarkClass(name) self.doc_.markClasses[name] = markClass self.glyphclasses_.define(name, markClass) mcdef = ast.MarkClassDefinition(location, markClass, anchor, glyphs) markClass.addDefinition(mcdef) return mcdef
def feaPreamble(self, ff): if self.is_cursive: return [] sortByAnchor(self) if not "mark_classes_done" in ff.scratch: ff.scratch["mark_classes_done"] = {} b = feaast.Block() for mark in self.markslist: if not (self.base_name, tuple( mark[0])) in ff.scratch["mark_classes_done"]: b.statements.append( feaast.MarkClassDefinition( feaast.MarkClass(self.base_name), feaast.Anchor(*mark[1]), _glyphref(mark[0]), )) ff.scratch["mark_classes_done"][(self.base_name, tuple(mark[0]))] = True return [b]