11import gettext
22_ = gettext .gettext
33
4- from constants import voidElements , spaceCharacters
5-
6- spaceCharacters = u'' .join (spaceCharacters )
7-
84import new
9- import copy
5+ import copy
6+
7+ import _base
108
119moduleCache = {}
1210
@@ -24,47 +22,41 @@ def getETreeModule(ElementTreeImplementation):
2422def getETreeBuilder (ElementTreeImplementation ):
2523 ElementTree = ElementTreeImplementation
2624
27- def _charactersToken (characters ):
28- return {"type" : characters .lstrip (spaceCharacters ) and "Characters" or "SpaceCharacters" ,
29- "data" : characters }
30-
31- class TreeWalker (object ):
32- def serialize (self , node ):
25+ class TreeWalker (_base .TreeWalker ):
26+ def walk (self , node ):
3327 if type (element ) == type (ElementTree .ElementTree ):
3428 element = element .getroot ()
3529
3630 if node .tag in ("<DOCUMENT_ROOT>" , "<DOCUMENT_FRAGMENT>" ):
37- if node .text :
38- yield self .charactersToken (node .text )
39- for childNode in node .getchildren ():
40- for token in self .serialize (childNode ):
41- yield token
31+ for token in self .walkChildren (node ):
32+ yield token
4233
4334 elif node .tag == "<!DOCTYPE>" :
44- yield {"type" : "Doctype" , "name" : node .text , "data" : False }
35+ yield self .doctype (node .text )
36+ if node .tail :
37+ for token in self .text (node .tail ):
38+ yield token
4539
4640 elif type (node .tag ) == type (ElementTree .Comment ):
47- yield {"type" : "Comment" , "data" : node .text }
41+ yield self .comment (node .text )
42+ if node .tail :
43+ for token in self .text (node .tail ):
44+ yield token
4845
4946 else :
5047 #This is assumed to be an ordinary element
51- if node .name in voidElements :
52- yield {"type" : "EmptyTag" , "name" : node .tag ,
53- "data" : node .attrib .items ()}
54- if node .childNodes or node .text :
55- yield {"type" : "SerializeError" ,
56- "data" : _ ("Void element has children" )}
57- else :
58- yield {"type" : "StartTag" , "name" : node .name ,
59- "data" : node .attrib .items ()}
60- if node .text :
61- yield self .charactersToken (node .text )
62- for childNode in node .getchildren ():
63- for token in self .serialize (childNode ):
64- yield token
65- yield {"type" : "EndTag" , "name" : node .tag , "data" : []}
66-
48+ for token in self .element (node ):
49+ yield token
50+
51+ def walkChildren (self , node ):
52+ if node .text :
53+ for token in self .text (node .text ):
54+ yield token
55+ for childNode in node .getchildren ():
56+ for token in self .walk (childNode ):
57+ yield token
6758 if node .tail :
68- yield self .charactersToken (node .tail )
59+ for token in self .text (node .tail ):
60+ yield token
6961
7062 return locals ()
0 commit comments