Skip to content

Commit a792a87

Browse files
committed
check in some experimental hilite code, use --hilite in parse.py
--HG-- extra : convert_revision : svn%3Aacbfec75-9323-0410-a652-858a13e371e0/trunk%40469
1 parent 6f2cf48 commit a792a87

File tree

2 files changed

+38
-4
lines changed

2 files changed

+38
-4
lines changed

parse.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,9 @@ def parse():
8686
else:
8787
document = p.parse(f)
8888
if opts.xml:
89-
print document.toxml('utf-8')
89+
print document.toxml("utf-8")
90+
elif opts.hilite:
91+
print document.hilite("utf-8")
9092
else:
9193
print p.tree.testSerializer(document).encode("utf-8")
9294
if opts.error:
@@ -113,7 +115,10 @@ def getOptParser():
113115
dest="error", help="Print a list of parse errors")
114116

115117
parser.add_option("-x", "--xml", action="store_true", default=False,
116-
dest="xml", help="output as xml")
118+
dest="xml", help="Output as xml")
119+
120+
parser.add_option("", "--hilite", action="store_true", default=False,
121+
dest="hilite", help="Output as formatted highlighted code.")
117122

118123
return parser
119124

src/treebuilders/simpletree.py

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import _base
2+
from constants import voidElements
23
from 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">&lt;!DOCTYPE %s></code>' % self.name
97107

98108
class 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

109121
class 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 = '&lt;<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, {'"':'&quot;'}))
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 + '&lt;/<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">&lt;!--%s--></code>' % escape(self.data)
150179

151180
class TreeBuilder(_base.TreeBuilder):
152181
documentClass = Document

0 commit comments

Comments
 (0)