44
55# Really crappy basic implementation of a DOM-core like thing
66class Node (_base .Node ):
7+ type = - 1
78 def __init__ (self , name ):
89 self .name = name
910 self .parent = None
@@ -23,9 +24,6 @@ def __unicode__(self):
2324 def toxml (self ):
2425 raise NotImplementedError
2526
26- def __repr__ (self ):
27- return "<%s %s>" % (self .__class__ , self .name )
28-
2927 def printTree (self , indent = 0 ):
3028 tree = '\n |%s%s' % (' ' * indent , unicode (self ))
3129 for child in self .childNodes :
@@ -75,6 +73,7 @@ def hasContent(self):
7573 return bool (self .childNodes )
7674
7775class Document (Node ):
76+ type = 1
7877 def __init__ (self ):
7978 Node .__init__ (self , None )
8079
@@ -100,6 +99,7 @@ def printTree(self):
10099 return tree
101100
102101class DocumentType (Node ):
102+ type = 3
103103 def __init__ (self , name ):
104104 Node .__init__ (self , name )
105105
@@ -112,6 +112,7 @@ def hilite(self):
112112 return '<code class="markup doctype"><!DOCTYPE %s></code>' % self .name
113113
114114class TextNode (Node ):
115+ type = 4
115116 def __init__ (self , value ):
116117 Node .__init__ (self , None )
117118 self .value = value
@@ -125,6 +126,7 @@ def toxml(self):
125126 hilite = toxml
126127
127128class Element (Node ):
129+ type = 3
128130 def __init__ (self , name ):
129131 Node .__init__ (self , name )
130132 self .attributes = {}
@@ -170,6 +172,7 @@ def printTree(self, indent):
170172 return tree
171173
172174class CommentNode (Node ):
175+ type = 5
173176 def __init__ (self , data ):
174177 Node .__init__ (self , None )
175178 self .data = data
@@ -184,9 +187,36 @@ def hilite(self):
184187 return '<code class="markup comment"><!--%s--></code>' % escape (self .data )
185188
186189class DocumentFragment (Document ):
190+ type = 2
187191 def __unicode__ (self ):
188192 return "#document-fragment"
189193
194+ class HTMLSerializer (object ):
195+ def serialize (self , node ):
196+ rv = self .serializeNode (node )
197+ for child in node .childNodes :
198+ rv += self .serialize (child )
199+ if isinstance (node , Element ):
200+ rv += "</%s>\n " % node .name
201+ return rv
202+
203+ def serializeNode (self , node ):
204+ if node .type == TextNode .type :
205+ rv = node .value
206+ elif node .type == Element .type :
207+ rv = "<%s" % node .name
208+ if node .attributes :
209+ rv = rv + "" .join ([" %s='%s'" % (key , escape (value )) for key ,value in
210+ node .attributes .iteritems ()])
211+ rv += ">"
212+ elif node .type == CommentNode .type :
213+ rv = "<!-- %s -->" % escape (self .data )
214+ elif node .type == DocumentType .type :
215+ rv = "<!DOCTYPE %s>" % node .name
216+ else :
217+ rv = ""
218+ return rv
219+
190220class TreeBuilder (_base .TreeBuilder ):
191221 documentClass = Document
192222 doctypeClass = DocumentType
0 commit comments