return self.tag.tag_name @property def tag_names(self): return self.tag.tag_names @property def attributes(self): return self.tag.attributes @property def collapsible(self): return self.tag.collapsible @property def separator(self): return self.tag.separator _VOID_TAG_NAMES = set(["br", "hr", "img"]) def is_void(self): return not self.children and self.tag_name in self._VOID_TAG_NAMES @cobble.visitable class ForceWrite(Node): pass NodeVisitor = cobble.visitor(Node)
def element_visitor(args): return cobble.visitor(Element, args=args)
note_reference = NoteReference @cobble.data class Comment(object): comment_id = cobble.field() body = cobble.field() author_name = cobble.field() author_initials = cobble.field() def comment(comment_id, body, author_name=None, author_initials=None): return Comment( comment_id=comment_id, body=body, author_name=author_name, author_initials=author_initials, ) @cobble.data class CommentReference(Element): comment_id = cobble.field() comment_reference = CommentReference ElementVisitor = cobble.visitor(Element)
def find_note(self, note_type, note_id): return self._notes[(note_type, note_id)] def resolve(self, reference): return self.find_note(reference.note_type, reference.note_id) def __eq__(self, other): return isinstance(other, Notes) and self._notes == other._notes def __ne__(self, other): return not (self == other) def notes(notes_list): return Notes(dict( (_note_key(note), note) for note in notes_list )) def _note_key(note): return (note.note_type, note.note_id) @cobble.data class NoteReference(Element): note_type = cobble.field() note_id = cobble.field() note_reference = NoteReference ElementVisitor = cobble.visitor(Element)