diff --git a/HTMLKit/HTMLParser.m b/HTMLKit/HTMLParser.m index 697148f..b201392 100644 --- a/HTMLKit/HTMLParser.m +++ b/HTMLKit/HTMLParser.m @@ -543,6 +543,27 @@ withAdditionalTypes:@{@"optgroup": @(HTMLNamespaceHTML), @"option": @(HTMLNamespaceHTML)}]; } + +- (void)generateImpliedEndTagsExceptForElement:(NSString *)tagName +{ + while ([self.currentNode.tagName isEqualToAny:@"dd", @"dt", @"li", @"option", @"optgroup", @"p", @"rp", @"rt", nil] && + ![self.currentNode.tagName isEqualToString:tagName]) { + [_stackOfOpenElements removeLastObject]; + } +} + +- (void)closePElement +{ + [self generateImpliedEndTagsExceptForElement:@"p"]; + if (![self.currentNode.tagName isEqualToString:@"p"]) { + [self emitParseError:@"Current node being closed is not a

element"]; + } + while (![self.currentNode.tagName isEqualToString:@"p"]) { + [_stackOfOpenElements removeLastObject]; + } + [_stackOfOpenElements removeLastObject]; +} + #pragma mark - Insertion Modes - (void)HTMLInsertionModeInitial:(HTMLToken *)token