From b8c18a753689f12e1f3e1535e312ac48874a7361 Mon Sep 17 00:00:00 2001 From: iska Date: Sat, 7 Mar 2015 00:45:25 +0100 Subject: [PATCH] Add method to generate implied end tags and close a "p" tag https://html.spec.whatwg.org/multipage/syntax.html#generate-implied-end-tags https://html.spec.whatwg.org/multipage/syntax.html#close-a-p-element --- HTMLKit/HTMLParser.m | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) 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