Skip to content

Commit 11bdb49

Browse files
jdufresnegsnedders
authored andcommitted
Make self closing col start tags not cause a parse error (html5lib#244)
1 parent fbce67d commit 11bdb49

File tree

3 files changed

+13
-3
lines changed

3 files changed

+13
-3
lines changed

AUTHORS.rst

+1
Original file line numberDiff line numberDiff line change
@@ -41,3 +41,4 @@ Patches and suggestions
4141
- Jim Baker
4242
- Michael[tm] Smith
4343
- Marc Abramowitz
44+
- Jon Dufresne

html5lib/html5parser.py

+6-3
Original file line numberDiff line numberDiff line change
@@ -171,8 +171,10 @@ def mainLoop(self):
171171
ParseErrorToken = tokenTypes["ParseError"]
172172

173173
for token in self.normalizedTokens():
174+
prev_token = None
174175
new_token = token
175176
while new_token is not None:
177+
prev_token = new_token
176178
currentNode = self.tree.openElements[-1] if self.tree.openElements else None
177179
currentNodeNamespace = currentNode.namespace if currentNode else None
178180
currentNodeName = currentNode.name if currentNode else None
@@ -211,10 +213,10 @@ def mainLoop(self):
211213
elif type == DoctypeToken:
212214
new_token = phase.processDoctype(new_token)
213215

214-
if (type == StartTagToken and token["selfClosing"] and
215-
not token["selfClosingAcknowledged"]):
216+
if (type == StartTagToken and prev_token["selfClosing"] and
217+
not prev_token["selfClosingAcknowledged"]):
216218
self.parseError("non-void-element-with-trailing-solidus",
217-
{"name": token["name"]})
219+
{"name": prev_token["name"]})
218220

219221
# When the loop finishes it's EOF
220222
reprocess = True
@@ -1933,6 +1935,7 @@ def processCharacters(self, token):
19331935
def startTagCol(self, token):
19341936
self.tree.insertElement(token)
19351937
self.tree.openElements.pop()
1938+
token["selfClosingAcknowledged"] = True
19361939

19371940
def startTagOther(self, token):
19381941
ignoreEndTag = self.ignoreEndTagColgroup()

html5lib/tests/test_parser2.py

+6
Original file line numberDiff line numberDiff line change
@@ -93,3 +93,9 @@ def test_debug_log():
9393
def test_no_duplicate_clone():
9494
frag = parseFragment("<b><em><foo><foob><fooc><aside></b></em>")
9595
assert len(frag) == 2
96+
97+
98+
def test_self_closing_col():
99+
parser = HTMLParser()
100+
parser.parseFragment('<table><colgroup><col /></colgroup></table>')
101+
assert not parser.errors

0 commit comments

Comments
 (0)