diff --git a/HTMLKit/HTMLListOfActiveFormattingElements.h b/HTMLKit/HTMLListOfActiveFormattingElements.h index 7b4446d..9b7d7b4 100644 --- a/HTMLKit/HTMLListOfActiveFormattingElements.h +++ b/HTMLKit/HTMLListOfActiveFormattingElements.h @@ -27,6 +27,8 @@ - (void)addMarker; - (void)clearUptoLastMarker; +- (HTMLElement *)formattingElementWithTagName:(NSString *)tagName; + - (NSUInteger)count; - (BOOL)isEmpty; diff --git a/HTMLKit/HTMLListOfActiveFormattingElements.m b/HTMLKit/HTMLListOfActiveFormattingElements.m index 6994d05..74e5791 100644 --- a/HTMLKit/HTMLListOfActiveFormattingElements.m +++ b/HTMLKit/HTMLListOfActiveFormattingElements.m @@ -88,6 +88,17 @@ [_list removeLastObject]; } +- (HTMLElement *)formattingElementWithTagName:(NSString *)tagName +{ + for (HTMLElement *element in _list.reverseObjectEnumerator) { + if ([element isEqual:[HTMLMarker marker]]) return nil; + if ([element.tagName isEqualToString:tagName]) { + return element; + } + } + return nil; +} + #pragma mark - Count - (NSUInteger)count diff --git a/HTMLKit/HTMLParser.m b/HTMLKit/HTMLParser.m index e187069..5888865 100644 --- a/HTMLKit/HTMLParser.m +++ b/HTMLKit/HTMLParser.m @@ -410,16 +410,7 @@ for (int outerLoopCounter = 0; outerLoopCounter < 8; outerLoopCounter++) { - HTMLElement *formattingElement = ^ HTMLElement * { - for (HTMLElement *element in _listOfActiveFormattingElements.reverseObjectEnumerator) { - if ([element isEqualTo:[HTMLMarker marker]]) return nil; - if ([element.tagName isEqualTo:tagName]) { - return element; - } - } - return nil; - }(); - + HTMLElement *formattingElement = [_listOfActiveFormattingElements formattingElementWithTagName:tagName]; if (formattingElement == nil) { return YES; } @@ -440,16 +431,7 @@ } NSUInteger formattingElementIndex = [_stackOfOpenElements indexOfElement:formattingElement]; - - HTMLElement *furthestBlock = ^ HTMLElement * { - for (NSUInteger i = formattingElementIndex; i < _stackOfOpenElements.count; i++) { - HTMLElement *element = _stackOfOpenElements[i]; - if (IsSpecialElement(element)) { - return element; - } - } - return nil; - }(); + HTMLElement *furthestBlock = [_stackOfOpenElements furthestBlockAfterIndex:formattingElementIndex]; if (furthestBlock == nil) { [_stackOfOpenElements popElementsUntilElementPopped:formattingElement]; diff --git a/HTMLKit/HTMLStackOfOpenElements.h b/HTMLKit/HTMLStackOfOpenElements.h index 725276c..5417a15 100644 --- a/HTMLKit/HTMLStackOfOpenElements.h +++ b/HTMLKit/HTMLStackOfOpenElements.h @@ -40,6 +40,7 @@ - (HTMLElement *)hasElementInButtonScopeWithTagName:(NSString *)tagName; - (HTMLElement *)hasElementInTableScopeWithTagName:(NSString *)tagName; - (HTMLElement *)hasElementInSelectScopeWithTagName:(NSString *)tagName; +- (HTMLElement *)furthestBlockAfterIndex:(NSUInteger)index; - (NSUInteger)count; - (BOOL)isEmpy; diff --git a/HTMLKit/HTMLStackOfOpenElements.m b/HTMLKit/HTMLStackOfOpenElements.m index 6d2ae52..a12e341 100644 --- a/HTMLKit/HTMLStackOfOpenElements.m +++ b/HTMLKit/HTMLStackOfOpenElements.m @@ -8,6 +8,7 @@ #import "HTMLStackOfOpenElements.h" #import "NSString+HTMLKit.h" +#import "HTMLElementTypes.h" @interface HTMLStackOfOpenElements () { @@ -227,6 +228,17 @@ return nil; } +- (HTMLElement *)furthestBlockAfterIndex:(NSUInteger)index +{ + for (NSUInteger i = index; i < _stack.count; i++) { + HTMLElement *element = _stack[i]; + if (IsSpecialElement(element)) { + return element; + } + } + return nil; +} + #pragma mark - Count - (NSUInteger)count