1
1
import _base
2
+ from constants import voidElements
2
3
from xml .sax .saxutils import escape
3
4
4
5
# Really crappy basic implementation of a DOM-core like thing
@@ -75,11 +76,17 @@ def __unicode__(self):
75
76
return "#document"
76
77
77
78
def toxml (self , encoding = "utf=8" ):
78
- result = ''
79
+ result = ""
79
80
for child in self .childNodes :
80
81
result += child .toxml ()
81
82
return result .encode (encoding )
82
83
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
+
83
90
def printTree (self ):
84
91
tree = unicode (self )
85
92
for child in self .childNodes :
@@ -94,6 +101,9 @@ def __unicode__(self):
94
101
return "<!DOCTYPE %s>" % self .name
95
102
96
103
toxml = __unicode__
104
+
105
+ def hilite (self ):
106
+ return '<code class="markup doctype"><!DOCTYPE %s></code>' % self .name
97
107
98
108
class TextNode (Node ):
99
109
def __init__ (self , value ):
@@ -105,6 +115,8 @@ def __unicode__(self):
105
115
106
116
def toxml (self ):
107
117
return escape (self .value )
118
+
119
+ hilite = toxml
108
120
109
121
class Element (Node ):
110
122
def __init__ (self , name ):
@@ -127,6 +139,19 @@ def toxml(self):
127
139
else :
128
140
result += '/>'
129
141
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
130
155
131
156
def printTree (self , indent ):
132
157
tree = '\n |%s%s' % (' ' * indent , unicode (self ))
@@ -146,7 +171,11 @@ def __init__(self, data):
146
171
def __unicode__ (self ):
147
172
return "<!-- %s -->" % self .data
148
173
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 )
150
179
151
180
class TreeBuilder (_base .TreeBuilder ):
152
181
documentClass = Document
0 commit comments