Skip to content

Commit e9db87b

Browse files
committed
Added PullDOM tree walker
--HG-- extra : convert_revision : svn%3Aacbfec75-9323-0410-a652-858a13e371e0/trunk%40614
1 parent b2e045f commit e9db87b

1 file changed

Lines changed: 46 additions & 0 deletions

File tree

src/treewalkers/pulldom.py

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
from xml.dom.pulldom import START_ELEMENT, END_ELEMENT, \
2+
COMMENT, IGNORABLE_WHITESPACE, CHARACTERS
3+
4+
import _base
5+
6+
from constants import voidElements
7+
8+
class TreeWalker(_base.TreeWalker):
9+
def walk(self, stream):
10+
previous = None
11+
for event in stream:
12+
if previous is not None:
13+
for token in self.tokens(previous, event):
14+
yield token
15+
previous = event
16+
for token in self.tokens(previous, None):
17+
yield token
18+
19+
def tokens(self, event, next):
20+
type, node = event
21+
if type == START_ELEMENT:
22+
name = node.nodeName
23+
if name in voidElements:
24+
for token in self.emptyTag(name, \
25+
node.attributes.items(), not event or event[1] is not node):
26+
yield token
27+
else:
28+
yield self.startTag(name, node.attributes.items())
29+
30+
elif type == END_ELEMENT:
31+
name = node.nodeName
32+
if name not in voidElements:
33+
yield self.endTag(name)
34+
35+
elif type == COMMENT:
36+
yield self.comment(node.nodeValue)
37+
38+
elif type in (IGNORABLE_WHITESPACE, CHARACTERS):
39+
for token in self.text(node.nodeValue):
40+
yield token
41+
42+
else:
43+
yield self.unknown(type)
44+
45+
def walkChildren(self, node):
46+
raise Exception(_("PullDOM tree walker's walkChildren should never be called"))

0 commit comments

Comments
 (0)