Skip to content

Commit 9f9b8d0

Browse files
committed
Elementtree now passes all tests! Added hasContent method on the tree node interface so that we can check for either real element/comment children or text in the element and altered the serializer to put in text before and after the html element
--HG-- extra : convert_revision : svn%3Aacbfec75-9323-0410-a652-858a13e371e0/trunk%40399
1 parent 497e527 commit 9f9b8d0

File tree

3 files changed

+22
-1
lines changed

3 files changed

+22
-1
lines changed

src/parser.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -880,7 +880,8 @@ def endTagFormatting(self, name):
880880
bookmark = self.tree.activeFormattingElements.\
881881
index(node) + 1
882882
# Step 7.5
883-
if node.childNodes:
883+
cite = node.parent
884+
if node.hasContent():
884885
clone = node.cloneNode()
885886
# Replace node with clone
886887
self.tree.activeFormattingElements[

src/treebuilders/DOMlite.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,10 @@ def cloneNode(self):
5959
newNode.value = self.value
6060
return newNode
6161

62+
def hasContent(self):
63+
"""Return true if the node has children or text"""
64+
return bool(self.childNodes)
65+
6266
class Document(Node):
6367
def __init__(self):
6468
Node.__init__(self, None)

src/treebuilders/etree.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@ def __init__(self, name):
1818
self._element.text = ""
1919
self._element.tail = ""
2020

21+
def __repr__(self):
22+
return "<%s %s>" % (self.__class__, self.name)
23+
2124
def _setName(self, name):
2225
self._element.tag = name
2326

@@ -50,6 +53,10 @@ def _setChildNodes(self, value):
5053

5154
childNodes = property(_getChildNodes, _setChildNodes)
5255

56+
def hasContent(self):
57+
"""Return true if the node has children or text"""
58+
return bool(self._element.text or self._element.getchildren())
59+
5360
def appendChild(self, node):
5461
self._childNodes.append(node)
5562
self._element.append(node._element)
@@ -108,11 +115,16 @@ def __init__(self):
108115

109116
def testSerializer(element):
110117
rv = []
118+
finalText = None
111119
def serializeElement(element, indent=0):
112120
if element.tag is DocumentType:
113121
rv.append("|%s<!DOCTYPE %s>"%(' '*indent, element.text))
114122
elif element.tag is Document:
115123
rv.append("#document")
124+
if element.text:
125+
rv.append("|%s\"%s\""%(' '*(indent+2), element.text))
126+
if element.tail:
127+
finalText = element.tail
116128
elif element.tag is Comment:
117129
rv.append("|%s<!-- %s -->"%(' '*indent, element.text))
118130
else:
@@ -128,6 +140,10 @@ def serializeElement(element, indent=0):
128140
if element.tail:
129141
rv.append("|%s\"%s\"" %(' '*(indent-2), element.tail))
130142
serializeElement(element, 0)
143+
144+
if finalText is not None:
145+
rv.append("|%s\"%s\""%(' '*2, finalText))
146+
131147
return "\n".join(rv)
132148

133149
class TreeBuilder(base.TreeBuilder):

0 commit comments

Comments
 (0)