10000 Make not placing html elements in a namespace work, maybe · html5lib/html5lib-python@852232d · GitHub
[go: up one dir, main page]

Skip to content

Commit 852232d

Browse files
committed
Make not placing html elements in a namespace work, maybe
1 parent 3020a66 commit 852232d

File tree

6 files changed

+29
-9
lines changed

6 files changed

+29
-9
lines changed

src/html5lib/html5parser.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1011,7 +1011,7 @@ def startTagListItem(self, token):
10111011

10121012
# Phrasing elements are all non special, non scoping, non
10131013
# formatting elements
1014-
if ((node.namespace, node.name) in
1014+
if (node.nameTuple in
10151015
(specialElements | scopingElements)
10161016
and node.name not in ("address", "div")):
10171017
break
@@ -1373,7 +1373,7 @@ def endTagFormatting(self, token):
13731373
afeIndex = self.tree.openElements.index(afeElement)
13741374
furthestBlock = None
13751375
for element in self.tree.openElements[afeIndex:]:
1376-
if ((element.namespace, element.name) in
1376+
if (element.nameTuple in
13771377
specialElements | scopingElements):
13781378
furthestBlock = element
13791379
break
@@ -1492,7 +1492,7 @@ def endTagOther(self, token):
14921492
pass
14931493
break
14941494
else:
1495-
if ((node.namespace, node.name) in
1495+
if (node.nameTuple in
14961496
specialElements | scopingElements):
14971497
self.parser.parseError("unexpected-end-tag", {"name": token["name"]})
14981498
break
@@ -2281,7 +2281,7 @@ def nonHTMLElementInScope(self):
22812281
for item in self.tree.openElements[::-1]:
22822282
if item.namespace == self.tree.defaultNamespace:
22832283
return True
2284-
elif (item.namespace, item.name) in scopingElements:
2284+
elif item.nameTuple in scopingElements:
22852285
return False
22862286
return False
22872287

src/html5lib/treebuilders/_base.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,6 @@
1111
# from "leaking" into tables, buttons, object elements, and marquees.
1212
Marker = None
1313

14-
#XXX - TODO; make the default interface more ElementTree-like
15-
# rather than DOM-like
16-
1714
class Node(object):
1815
def __init__(self, name):
1916
"""Node representing an item in the tree.
@@ -144,7 +141,7 @@ def elementInScope(self, target, tableVariant=False):
144141
return True
145142
elif node.name == "table":
146143
return False
147-
elif (not tableVariant and ((node.namespace, node.name) in
144+
elif (not tableVariant and (node.nameTuple in
148145
scopingElements)):
149146
return False
150147
elif node.name == "html":

src/html5lib/treebuilders/dom.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
import _base
77
from html5lib import constants, ihatexml
8+
from html5lib.constants import namespaces
89

910
moduleCache = {}
1011

@@ -108,7 +109,15 @@ def cloneNode(self):
108109

109110
def hasContent(self):
110111
return self.element.hasChildNodes()
111-
112+
113+
def getNameTuple(self):
114+
if self.namespace == None:
115+
return namespaces["html"], self.name
116+
else:
117+
return self.namespace, self.name
118+
119+
nameTuple = property(getNameTuple)
120+
112121
class TreeBuilder(_base.TreeBuilder):
113122
def documentClass(self):
114123
self.dom = Dom.getDOMImplementation().createDocument(None,None,None)

src/html5lib/treebuilders/etree.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import _base
55
from html5lib import ihatexml
66
from html5lib import constants
7+
from html5lib.constants import namespaces
78

89
tag_regexp = re.compile("{([^}]*)}(.*)")
910

@@ -28,6 +29,10 @@ def __init__(self, name, namespace=None):
2829
self._namespace = namespace
2930
self._element = ElementTree.Element(self._getETreeTag(name,
3031
namespace))
32+
if namespace is None:
33+
self.nameTuple = namespaces["html"], self._name
34+
else:
35+
self.nameTuple = self._namespace, self._name
3136
self.parent = None
3237
self._childNodes = []
3338
self._flags = []

src/html5lib/treebuilders/etree_lxml.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,7 @@ class TreeBuilder(_base.TreeBuilder):
179179
def __init__(self, namespaceHTMLElements, fullTree = False):
180180
builder = etree_builders.getETreeModule(etree, fullTree=fullTree)
181181
filter = self.filter = ihatexml.InfosetFilter()
182+
self.namespaceHTMLElements = namespaceHTMLElements
182183

183184
class Attributes(dict):
184185
def __init__(self, element, value={}):

src/html5lib/treebuilders/simpletree.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,14 @@ def hasContent(self):
7575
"""Return true if the node has children or text"""
7676
return bool(self.childNodes)
7777

78+
def getNameTuple(self):
79+
if self.namespace == None:
80+
return namespaces["html"], self.name
81+
else:
82+
return self.namespace, self.name
83+
84+
nameTuple = property(getNameTuple)
85+
7886
class Document(Node):
7987
type = 1
8088
def __init__(self):

0 commit comments

Comments
 (0)
0