Edgewall Software

Ticket #4246: generate2.py

File generate2.py, 1.3 KB (added by cboos, 2 years ago)

Alternate API for the _generate() helper function within _group_lines()

Line 
1    def _generate():
2        stack = []
3        def _reverse():
4            for event in reversed(stack):
5                if event[0] is START:
6                    yield Stream.End(event)
7                else:
8                    yield Stream.EndNs(event)
9
10        for event in stream:
11            kind, data, pos = event
12            if kind is TEXT:
13                lines = data.splitlines(True)
14                for e in stack:
15                    yield e
16                yield Stream.text(event, lines.pop(0).rstrip('\n'))
17                for e in _reverse():
18                    yield e
19                if '\n' in data:
20                    yield Stream.text(event, '\n')
21                    for line in lines:
22                        for event in stack:
23                            yield event
24                        yield Stream.text(event, line.rstrip('\n'))
25                        if line.endswith('\n'):
26                            for e in _reverse():
27                                yield e
28                            yield Stream.text(event, '\n')
29            else:
30                if kind is START or kind is START_NS:
31                    stack.append(event)
32                elif kind is END or kind is END_NS:
33                    stack.pop()
34                else:
35                    yield event