11import _base
2+ from constants import voidElements
23from xml .sax .saxutils import escape
34
45# Really crappy basic implementation of a DOM-core like thing
@@ -75,11 +76,17 @@ def __unicode__(self):
7576 return "#document"
7677
7778 def toxml (self , encoding = "utf=8" ):
78- result = ''
79+ result = ""
7980 for child in self .childNodes :
8081 result += child .toxml ()
8182 return result .encode (encoding )
8283
84+ def hilite (self , encoding = "utf-8" ):
85+ result = "<pre>"
86+ for child in self .childNodes :
87+ result += child .hilite ()
88+ return result .encode (encoding ) + "</pre>"
89+
8390 def printTree (self ):
8491 tree = unicode (self )
8592 for child in self .childNodes :
@@ -94,6 +101,9 @@ def __unicode__(self):
94101 return "<!DOCTYPE %s>" % self .name
95102
96103 toxml = __unicode__
104+
105+ def hilite (self ):
106+ return '<code class="markup doctype"><!DOCTYPE %s></code>' % self .name
97107
98108class TextNode (Node ):
99109 def __init__ (self , value ):
@@ -105,6 +115,8 @@ def __unicode__(self):
105115
106116 def toxml (self ):
107117 return escape (self .value )
118+
119+ hilite = toxml
108120
109121class Element (Node ):
110122 def __init__ (self , name ):
@@ -127,6 +139,19 @@ def toxml(self):
127139 else :
128140 result += '/>'
129141 return result
142+
143+ def hilite (self ):
144+ result = '<<code class="markup element-name">%s</code>' % self .name
145+ if self .attributes :
146+ for name , value in self .attributes .iteritems ():
147+ result += ' <code class="markup attribute-name">%s</code>=<code class="markup attribute-value">"%s"</code>' % (name , escape (value , {'"' :'"' }))
148+ if self .childNodes :
149+ result += ">"
150+ for child in self .childNodes :
151+ result += child .hilite ()
152+ elif self .name in voidElements :
153+ return result + ">"
154+ return result + '</<code class="markup element-name">%s</code>>' % self .name
130155
131156 def printTree (self , indent ):
132157 tree = '\n |%s%s' % (' ' * indent , unicode (self ))
@@ -146,7 +171,11 @@ def __init__(self, data):
146171 def __unicode__ (self ):
147172 return "<!-- %s -->" % self .data
148173
149- toxml = __unicode__
174+ def toxml (self ):
175+ return "<!--%s-->" % self .data
176+
177+ def hilite (self ):
178+ return '<code class="markup comment"><!--%s--></code>' % escape (self .data )
150179
151180class TreeBuilder (_base .TreeBuilder ):
152181 documentClass = Document
0 commit comments