Edgewall Software

Ticket #4246: generate1.py

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

Clarify a bit the _generate() helper function within _group_lines()

Line 
1    def _generate():
2        stack = []
3        def _reverse():
4            for kind, data, pos in reversed(stack):
5                if kind is START:
6                    yield END, data[0], pos
7                else:
8                    yield END_NS, data[0], pos
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 kind, lines.pop(0).rstrip('\n'), pos
17                for e in _reverse():
18                    yield e
19                if '\n' in data:
20                    yield TEXT, '\n', pos
21                    for line in lines:
22                        for event in stack:
23                            yield event
24                        yield kind, line.rstrip('\n'), pos
25                        if line.endswith('\n'):
26                            for e in _reverse():
27                                yield e
28                            yield TEXT, '\n', pos
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