def class_box(self, cn: ClassDefinitionName) -> str:
slot_defs: List[str] = []<EOL>if cn not in self.box_generated and (not self.focus_classes or cn in self.focus_classes):<EOL><INDENT>cls = self.schema.classes[cn]<EOL>for slotname in self.filtered_cls_slots(cn, all_slots=True):<EOL><INDENT>slot = self.schema.slots[slotname]<EOL>if not slot.range or slot.range in builtin_names or slot.range in self.schema.types:<EOL><INDENT>mod = self.prop_modifier(cls, slot)<EOL>slot_defs.append(underscore(self.aliased_slot_name(slot)) +<EOL>mod + '<STR_LIT::>' +<EOL>underscore(slot.range) + self.cardinality(slot))<EOL><DEDENT><DEDENT>self.box_generated.add(cn)<EOL><DEDENT>self.referenced.add(cn)<EOL>return '<STR_LIT:[>' + camelcase(cn) + ('<STR_LIT:|>' + '<STR_LIT:;>'.join(slot_defs) if slot_defs else '<STR_LIT>') + '<STR_LIT:]>'<EOL>
Generate a box for the class.  Populate its interior only if (a) it hasn't previously been generated and
        (b) it appears in the gen_classes list

        @param cn:
        @param inherited:
        @return: