def test_tree_events(self): event_prefixed_items = [(STARTEVENT, 'a'), (ENDEVENT, 'a')] rootitem, childs = build_subtree(iter(event_prefixed_items[1:])) self.assertEquals('a', rootitem) self.assertEquals(0, len(childs)) event_prefixed_items = [ (STARTEVENT, 'a'), (STARTEVENT, 'b'), (ENDEVENT, 'b'), (ENDEVENT, 'a') ] self.assertEquals( ('a', [('b', [])]), build_subtree(iter(event_prefixed_items[1:])) ) event_prefixed_items = [ (STARTEVENT, 'a'), (STARTEVENT, 'b'), (STARTEVENT, 'c'), (ENDEVENT, 'c'), (STARTEVENT, 'd'), (ENDEVENT, 'd'), (ENDEVENT, 'b'), (ENDEVENT, 'a') ] result = build_subtree(iter(event_prefixed_items[1:])) self.assertEquals( ('a', [('b', [('c', []), ('d', [])])]), result ) back = list(tree_events(*result)) self.assertEquals(event_prefixed_items, back)
def test_tree_events(self): from hwp5.treeop import STARTEVENT, ENDEVENT from hwp5.treeop import build_subtree from hwp5.treeop import tree_events event_prefixed_items = [ (STARTEVENT, 'a'), (ENDEVENT, 'a') ] rootitem, childs = build_subtree(iter(event_prefixed_items[1:])) self.assertEquals('a', rootitem) self.assertEquals(0, len(childs)) event_prefixed_items = [ (STARTEVENT, 'a'), (STARTEVENT, 'b'), (ENDEVENT, 'b'), (ENDEVENT, 'a') ] self.assertEquals( ('a', [('b', [])]), build_subtree(iter(event_prefixed_items[1:]))) event_prefixed_items = [ (STARTEVENT, 'a'), (STARTEVENT, 'b'), (STARTEVENT, 'c'), (ENDEVENT, 'c'), (STARTEVENT, 'd'), (ENDEVENT, 'd'), (ENDEVENT, 'b'), (ENDEVENT, 'a')] result = build_subtree(iter(event_prefixed_items[1:])) self.assertEquals( ('a', [('b', [('c', []), ('d', [])])]), result) back = list(tree_events(*result)) self.assertEquals(event_prefixed_items, back)
def make_extended_controls_inline(event_prefixed_mac, stack=None): ''' inline extended-controls into paragraph texts ''' if stack is None: stack = [] # stack of ancestor Paragraphs for event, item in event_prefixed_mac: model, attributes, context = item if model is Paragraph: for x in meci_paragraph(event, stack, item): yield x elif model is ControlChar: for x in meci_controlchar(event, stack, item, attributes): yield x elif issubclass(model, Control) and event == STARTEVENT: control_subtree = build_subtree(event_prefixed_mac) paragraph = stack[-1] paragraph_controls = paragraph.setdefault(Control, []) paragraph_controls.append(control_subtree) else: yield event, item
def wrap_section(event_prefixed_mac, sect_id=None): ''' wrap a section with SectionDef ''' starting_buffer = list() started = False sectiondef = None for event, item in event_prefixed_mac: if started: yield event, item else: model, attributes, context = item if model is SectionDef and event is STARTEVENT: sectiondef, sectdef_child = build_subtree(event_prefixed_mac) if sect_id is not None: attributes['section_id'] = sect_id yield STARTEVENT, sectiondef for k in tree_events_multi(sectdef_child): yield k for evented_item in starting_buffer: yield evented_item started = True else: starting_buffer.append((event, item)) yield ENDEVENT, sectiondef