diff --git a/AUTHORS.rst b/AUTHORS.rst index fe9ae89b..c3820ef7 100644 --- a/AUTHORS.rst +++ b/AUTHORS.rst @@ -41,3 +41,4 @@ Patches and suggestions - Jim Baker - Michael[tm] Smith - Marc Abramowitz +- Jon Dufresne diff --git a/html5lib/html5parser.py b/html5lib/html5parser.py index daee854c..3daf2995 100644 --- a/html5lib/html5parser.py +++ b/html5lib/html5parser.py @@ -171,8 +171,10 @@ def mainLoop(self): ParseErrorToken = tokenTypes["ParseError"] for token in self.normalizedTokens(): + prev_token = None new_token = token while new_token is not None: + prev_token = new_token currentNode = self.tree.openElements[-1] if self.tree.openElements else None currentNodeNamespace = currentNode.namespace if currentNode else None currentNodeName = currentNode.name if currentNode else None @@ -211,10 +213,10 @@ def mainLoop(self): elif type == DoctypeToken: new_token = phase.processDoctype(new_token) - if (type == StartTagToken and token["selfClosing"] and - not token["selfClosingAcknowledged"]): + if (type == StartTagToken and prev_token["selfClosing"] and + not prev_token["selfClosingAcknowledged"]): self.parseError("non-void-element-with-trailing-solidus", - {"name": token["name"]}) + {"name": prev_token["name"]}) # When the loop finishes it's EOF reprocess = True @@ -1933,6 +1935,7 @@ def processCharacters(self, token): def startTagCol(self, token): self.tree.insertElement(token) self.tree.openElements.pop() + token["selfClosingAcknowledged"] = True def startTagOther(self, token): ignoreEndTag = self.ignoreEndTagColgroup() diff --git a/html5lib/tests/test_parser2.py b/html5lib/tests/test_parser2.py index b7a92fd7..21dc59d9 100644 --- a/html5lib/tests/test_parser2.py +++ b/html5lib/tests/test_parser2.py @@ -93,3 +93,9 @@ def test_debug_log(): def test_no_duplicate_clone(): frag = parseFragment("