diff --git a/HTMLKit/HTMLParser.m b/HTMLKit/HTMLParser.m index 6da0509..8558282 100644 --- a/HTMLKit/HTMLParser.m +++ b/HTMLKit/HTMLParser.m @@ -519,7 +519,7 @@ - (void)generateImpliedEndTagsExceptForElement:(NSString *)tagName { - while ([self.currentNode.tagName isEqualToAny:@"dd", @"dt", @"li", @"option", @"optgroup", @"p", @"rp", @"rt", nil] && + while ([self.currentNode.tagName isEqualToAny:@"dd", @"dt", @"li", @"option", @"optgroup", @"p", @"rb", @"rp", @"rt", @"rtc", nil] && ![self.currentNode.tagName isEqualToString:tagName]) { [_stackOfOpenElements popCurrentNode]; } @@ -528,7 +528,7 @@ - (void)generateAllImpliedEndTagsThoroughly { while ([self.currentNode.tagName isEqualToAny:@"caption", @"colgroup", @"dd", @"dt", @"li", @"option", @"optgroup", @"p", - @"rp", @"rt", @"tbody", @"td", @"tfoot", @"th", @"thead", @"tr", nil]) { + @"rb", @"rp", @"rt", @"rtc", @"tbody", @"td", @"tfoot", @"th", @"thead", @"tr", nil]) { [_stackOfOpenElements popCurrentNode]; } } @@ -1158,8 +1158,8 @@ [self HTMLInsertionModeInTemplate:token]; } else { for (HTMLElement *node in _stackOfOpenElements) { - if ([node.tagName isEqualToAny:@"dd", @"dt", @"li", @"optgroup", @"option", @"p", @"rp" - @"rt", @"tbody", @"td", @"tfoot", @"th", @"thead", @"tr", @"body", @"html", nil]) { + if ([node.tagName isEqualToAny:@"dd", @"dt", @"li", @"optgroup", @"option", @"p", @"rb", @"rp", + @"rt", @"rtc", @"tbody", @"td", @"tfoot", @"th", @"thead", @"tr", @"body", @"html", nil]) { [self emitParseError:@"EOF reached with unclosed element <%@> in
", node.tagName]; break; } @@ -1462,7 +1462,7 @@ } [self reconstructActiveFormattingElements]; [self insertElementForToken:token]; - } else if ([tagName isEqualToAny:@"rp", @"rt", nil]) { + } else if ([tagName isEqualToAny:@"rb", @"rtc", nil]) { if ([_stackOfOpenElements hasElementInScopeWithTagName:@"ruby"]) { [self generateImpliedEndTagsExceptForElement:nil]; if (![self.currentNode.tagName isEqualToString:@"ruby"]) { @@ -1470,6 +1470,15 @@ } } [self insertElementForToken:token]; + } else if ([tagName isEqualToAny:@"rp", @"rt", nil]) { + if ([_stackOfOpenElements hasElementInScopeWithTagName:@"ruby"]) { + [self generateImpliedEndTagsExceptForElement:@"rtc"]; + if (![self.currentNode.tagName isEqualToString:@"rtc"] && + ![self.currentNode.tagName isEqualToString:@"ruby"]) { + [self emitParseError:@"Unexpected start tag <%@> outside of or