Example #1
0
    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)
Example #2
0
    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)
Example #3
0
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
Example #4
0
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