From caba3efd95933f7243c6c435c91f82dceed122ab Mon Sep 17 00:00:00 2001 From: iska Date: Sun, 5 Apr 2015 13:27:45 +0200 Subject: [PATCH] Fix "in-row" insertion mode and add the corresponding logic to clear the stack back to row context --- HTMLKit/HTMLParser.m | 2 +- HTMLKit/HTMLStackOfOpenElements.h | 1 + HTMLKit/HTMLStackOfOpenElements.m | 7 +++++++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/HTMLKit/HTMLParser.m b/HTMLKit/HTMLParser.m index d453490..243dacc 100644 --- a/HTMLKit/HTMLParser.m +++ b/HTMLKit/HTMLParser.m @@ -1873,7 +1873,7 @@ switch (token.type) { case HTMLTokenTypeStartTag: if ([token.asTagToken.tagName isEqualToAny:@"th", @"td", nil]) { - [_stackOfOpenElements clearBackToTableContext]; + [_stackOfOpenElements clearBackToTableRowContext]; [self insertElementForToken:token.asTagToken]; [self switchInsertionMode:HTMLInsertionModeInCell]; [_listOfActiveFormattingElements addMarker]; diff --git a/HTMLKit/HTMLStackOfOpenElements.h b/HTMLKit/HTMLStackOfOpenElements.h index 5417a15..a07b52e 100644 --- a/HTMLKit/HTMLStackOfOpenElements.h +++ b/HTMLKit/HTMLStackOfOpenElements.h @@ -32,6 +32,7 @@ - (void)popElementsUntilElementPopped:(HTMLElement *)element; - (void)clearBackToTableContext; - (void)clearBackToTableBodyContext; +- (void)clearBackToTableRowContext; - (void)popAll; - (HTMLElement *)hasElementInScopeWithTagName:(NSString *)tagName; diff --git a/HTMLKit/HTMLStackOfOpenElements.m b/HTMLKit/HTMLStackOfOpenElements.m index 4fd7ab2..41391a0 100644 --- a/HTMLKit/HTMLStackOfOpenElements.m +++ b/HTMLKit/HTMLStackOfOpenElements.m @@ -152,6 +152,13 @@ } } +- (void)clearBackToTableRowContext +{ + while (![self.currentNode.tagName isEqualToAny:@"tr", @"template", @"html", nil]) { + [_stack removeLastObject]; + } +} + - (void)popAll { [_stack removeAllObjects];