diff --git a/HTMLKit.xcodeproj/project.pbxproj b/HTMLKit.xcodeproj/project.pbxproj index f01e630..06880b2 100644 --- a/HTMLKit.xcodeproj/project.pbxproj +++ b/HTMLKit.xcodeproj/project.pbxproj @@ -52,9 +52,6 @@ 6238C9851AB8D6330006512E /* HTMLKitDOMExceptions.h in Headers */ = {isa = PBXBuildFile; fileRef = 6238C9831AB8D6330006512E /* HTMLKitDOMExceptions.h */; }; 6238C9861AB8D6330006512E /* HTMLKitDOMExceptions.m in Sources */ = {isa = PBXBuildFile; fileRef = 6238C9841AB8D6330006512E /* HTMLKitDOMExceptions.m */; }; 6238C9871AB8D6330006512E /* HTMLKitDOMExceptions.m in Sources */ = {isa = PBXBuildFile; fileRef = 6238C9841AB8D6330006512E /* HTMLKitDOMExceptions.m */; }; - 623916C31AC707250066B4FE /* HTMLNodeTreeEnumerator.h in Headers */ = {isa = PBXBuildFile; fileRef = 623916C11AC707250066B4FE /* HTMLNodeTreeEnumerator.h */; }; - 623916C41AC707250066B4FE /* HTMLNodeTreeEnumerator.m in Sources */ = {isa = PBXBuildFile; fileRef = 623916C21AC707250066B4FE /* HTMLNodeTreeEnumerator.m */; }; - 623916C51AC707250066B4FE /* HTMLNodeTreeEnumerator.m in Sources */ = {isa = PBXBuildFile; fileRef = 623916C21AC707250066B4FE /* HTMLNodeTreeEnumerator.m */; }; 623916C71AC7209E0066B4FE /* HTMLKitNodeIteratorTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 623916C61AC7209E0066B4FE /* HTMLKitNodeIteratorTests.m */; }; 623916C81AC7209E0066B4FE /* HTMLKitNodeIteratorTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 623916C61AC7209E0066B4FE /* HTMLKitNodeIteratorTests.m */; }; 6239755A1AC362CA007E26F1 /* HTMLKitTreeConstructionTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 623975591AC362CA007E26F1 /* HTMLKitTreeConstructionTests.m */; }; @@ -204,8 +201,6 @@ 6238579A1A9E8934003A45D9 /* HTMLComment.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HTMLComment.m; sourceTree = ""; }; 6238C9831AB8D6330006512E /* HTMLKitDOMExceptions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTMLKitDOMExceptions.h; sourceTree = ""; }; 6238C9841AB8D6330006512E /* HTMLKitDOMExceptions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HTMLKitDOMExceptions.m; sourceTree = ""; }; - 623916C11AC707250066B4FE /* HTMLNodeTreeEnumerator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTMLNodeTreeEnumerator.h; sourceTree = ""; }; - 623916C21AC707250066B4FE /* HTMLNodeTreeEnumerator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HTMLNodeTreeEnumerator.m; sourceTree = ""; }; 623916C61AC7209E0066B4FE /* HTMLKitNodeIteratorTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HTMLKitNodeIteratorTests.m; sourceTree = ""; }; 623975591AC362CA007E26F1 /* HTMLKitTreeConstructionTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HTMLKitTreeConstructionTests.m; sourceTree = ""; }; 6239755C1AC364BB007E26F1 /* HTML5LibTreeConstructionTest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTML5LibTreeConstructionTest.h; sourceTree = ""; }; @@ -343,8 +338,6 @@ 6247A9411B152F4F00CCF25C /* HTMLNodeIterator.h */, 6247A9421B152F4F00CCF25C /* HTMLNodeIterator.m */, 6247A9461B152F8C00CCF25C /* HTMLNodeFilter.h */, - 623916C11AC707250066B4FE /* HTMLNodeTreeEnumerator.h */, - 623916C21AC707250066B4FE /* HTMLNodeTreeEnumerator.m */, 6238C9831AB8D6330006512E /* HTMLKitDOMExceptions.h */, 6238C9841AB8D6330006512E /* HTMLKitDOMExceptions.m */, 628B7CE61A080E1000602C87 /* HTMLNamespaces.h */, @@ -559,7 +552,6 @@ 62D89DB01AE7080300B6243D /* HTMLDOM.h in Headers */, 62F873EB19E088C90062683C /* HTMLParser.h in Headers */, 624AC8FF19FBF59800BD3C4A /* HTMLTokens.h in Headers */, - 623916C31AC707250066B4FE /* HTMLNodeTreeEnumerator.h in Headers */, 62AE594419F992F30043F069 /* HTMLCommentToken.h in Headers */, 624493AC19CD0CBE00BCDDF4 /* HTMLToken.h in Headers */, 6235CEA01AA5170A0026937B /* HTMLMarker.h in Headers */, @@ -746,7 +738,6 @@ 62AE594119F9907C0043F069 /* HTMLTagToken.m in Sources */, 62AE594619F992F30043F069 /* HTMLCommentToken.m in Sources */, 62363C3F1ABE428200DAB4C6 /* HTMLListOfActiveFormattingElements.m in Sources */, - 623916C51AC707250066B4FE /* HTMLNodeTreeEnumerator.m in Sources */, 62AE593C19F97E1C0043F069 /* HTMLDOCTYPEToken.m in Sources */, 623406E31ADB04F9004677A3 /* HTMLTemplate.m in Sources */, 6238C9871AB8D6330006512E /* HTMLKitDOMExceptions.m in Sources */, @@ -799,7 +790,6 @@ 62AE594019F9907C0043F069 /* HTMLTagToken.m in Sources */, 62AE594519F992F30043F069 /* HTMLCommentToken.m in Sources */, 62363C3E1ABE428200DAB4C6 /* HTMLListOfActiveFormattingElements.m in Sources */, - 623916C41AC707250066B4FE /* HTMLNodeTreeEnumerator.m in Sources */, 62AE593B19F97E1C0043F069 /* HTMLDOCTYPEToken.m in Sources */, 623406E21ADB04F9004677A3 /* HTMLTemplate.m in Sources */, 6238C9861AB8D6330006512E /* HTMLKitDOMExceptions.m in Sources */, diff --git a/HTMLKit/HTMLElement.m b/HTMLKit/HTMLElement.m index 47df5f9..1c018da 100644 --- a/HTMLKit/HTMLElement.m +++ b/HTMLKit/HTMLElement.m @@ -88,7 +88,7 @@ - (NSString *)textContent { NSMutableString *content = [NSMutableString string]; - for (HTMLNode *node in self.treeEnumerator) { + for (HTMLNode *node in self.nodeIterator) { if (node.nodeType == HTMLNodeText) { [content appendString:[(HTMLText *)node data]]; } diff --git a/HTMLKit/HTMLNode.h b/HTMLKit/HTMLNode.h index 3ef90cf..a2820f4 100644 --- a/HTMLKit/HTMLNode.h +++ b/HTMLKit/HTMLNode.h @@ -7,6 +7,7 @@ // #import +#import "HTMLNodeIterator.h" typedef NS_ENUM(short, HTMLNodeType) { @@ -99,9 +100,7 @@ typedef NS_ENUM(short, HTMLNodeType) - (void)enumerateChildElementsUsingBlock:(void (^)(HTMLElement *element, NSUInteger idx, BOOL *stop))block; -- (NSEnumerator *)treeEnumerator; - -- (NSEnumerator *)reverseTreeEnumerator; +- (HTMLNodeIterator *)nodeIterator; - (NSString *)treeDescription; diff --git a/HTMLKit/HTMLNode.m b/HTMLKit/HTMLNode.m index 0babcf9..bb8bbf7 100644 --- a/HTMLKit/HTMLNode.m +++ b/HTMLKit/HTMLNode.m @@ -13,7 +13,6 @@ #import "HTMLText.h" #import "HTMLComment.h" #import "HTMLKitDOMExceptions.h" -#import "HTMLNodeTreeEnumerator.h" @interface HTMLNode () { @@ -276,28 +275,11 @@ }]; } -- (NSEnumerator *)treeEnumerator +- (HTMLNodeIterator *)nodeIterator { - return [[HTMLNodeTreeEnumerator alloc] initWithNode:self reverse:NO]; + return [[HTMLNodeIterator alloc] initWithNode:self]; } -- (NSEnumerator *)reverseTreeEnumerator -{ - return [[HTMLNodeTreeEnumerator alloc] initWithNode:self reverse:YES]; -} - -- (void)doInsertNode:(HTMLNode *)node beforeChildNode:(HTMLNode *)child -{ - NSArray *nodes = node.nodeType == HTMLNodeDocumentFragment ? node.childNodes.array : @[node]; - - NSUInteger index = [self indexOfChildNode:child]; - if (index != NSNotFound) { - NSIndexSet *indexes = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(index, nodes.count)]; - [(NSMutableOrderedSet *)self.childNodes insertObjects:nodes atIndexes:indexes]; - } else { - [(NSMutableOrderedSet *)self.childNodes addObjectsFromArray:nodes]; - } -} #ifndef HTMLKIT_NO_DOM_CHECKS diff --git a/HTMLKit/HTMLNodeTreeEnumerator.h b/HTMLKit/HTMLNodeTreeEnumerator.h deleted file mode 100644 index baf7243..0000000 --- a/HTMLKit/HTMLNodeTreeEnumerator.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// HTMLNodeTreeEnumerator.h -// HTMLKit -// -// Created by Iska on 28/03/15. -// Copyright (c) 2015 BrainCookie. All rights reserved. -// - -#import - -@class HTMLNode; - -@interface HTMLNodeTreeEnumerator : NSEnumerator - -- (instancetype)initWithNode:(HTMLNode *)node reverse:(BOOL)reverse; - -@end diff --git a/HTMLKit/HTMLNodeTreeEnumerator.m b/HTMLKit/HTMLNodeTreeEnumerator.m deleted file mode 100644 index 8f82972..0000000 --- a/HTMLKit/HTMLNodeTreeEnumerator.m +++ /dev/null @@ -1,54 +0,0 @@ -// -// HTMLNodeTreeEnumerator.m -// HTMLKit -// -// Created by Iska on 28/03/15. -// Copyright (c) 2015 BrainCookie. All rights reserved. -// - -#import "HTMLNodeTreeEnumerator.h" -#import "HTMLNode.h" - -@interface HTMLNodeTreeEnumerator () -{ - BOOL _reverse; - NSMutableArray *_stack; -} -@end - -@implementation HTMLNodeTreeEnumerator - -- (instancetype)initWithNode:(HTMLNode *)node reverse:(BOOL)reverse -{ - self = [super init]; - if (self) { - _reverse = reverse; - _stack = [[NSMutableArray alloc] initWithObjects:node, nil]; - } - return self; -} - -- (id)nextObject -{ - if (_stack.count == 0) { - return nil; - } - - HTMLNode *node = _stack.lastObject; - [_stack removeLastObject]; - - NSArray *childNodes = node.childNodes.array; - if (childNodes != nil && childNodes.count > 0) { - if (childNodes.count > 1) { - NSRange range = NSMakeRange(_reverse ? 0 : 1, childNodes.count - 1); - NSArray *rest = [childNodes subarrayWithRange:range]; - - [_stack addObjectsFromArray:_reverse ? rest : rest.reverseObjectEnumerator.allObjects]; - } - [_stack addObject:_reverse ? childNodes.lastObject : childNodes.firstObject]; - } - - return node; -} - -@end diff --git a/HTMLKitTests/HTMLKitNodeIteratorTests.m b/HTMLKitTests/HTMLKitNodeIteratorTests.m index 27a699a..ecea4bf 100644 --- a/HTMLKitTests/HTMLKitNodeIteratorTests.m +++ b/HTMLKitTests/HTMLKitNodeIteratorTests.m @@ -104,14 +104,6 @@ XCTAssertEqualObjects([result valueForKey:@"name"], expected); } -- (void)testSimpleTreeReversed -{ -// HTMLElement *tree = self.simpleTree; -// NSArray *result = tree.reverseTreeEnumerator.allObjects; -// NSArray *expected = @[@"div", @"c", @"b", @"a"]; -// XCTAssertEqualObjects([result valueForKey:@"name"], expected); -} - - (void)testNestedSimpleTree { HTMLElement *tree = self.nestedSimpleTree; @@ -120,14 +112,6 @@ XCTAssertEqualObjects([result valueForKey:@"name"], expected); } -- (void)testNestedSimpleTreeReversed -{ -// HTMLElement *tree = self.nestedSimpleTree; -// NSArray *result = tree.reverseTreeEnumerator.allObjects; -// NSArray *expected = @[@"div", @"div", @"c", @"b", @"a", @"div", @"c", @"b", @"a"]; -// XCTAssertEqualObjects([result valueForKey:@"name"], expected); -} - - (void)testComplexSimpleTree { HTMLElement *tree = self.complexTree; @@ -136,12 +120,24 @@ XCTAssertEqualObjects([result valueForKey:@"name"], expected); } -- (void)testComplexSimpleTreeReversed +- (void)testNextPreviousIteration { -// HTMLElement *tree = self.complexTree; -// NSArray *result = tree.reverseTreeEnumerator.allObjects; -// NSArray *expected = @[@"div", @"div", @"c", @"b", @"a", @"e", @"f", @"div", @"div", @"c", @"b", @"a"]; -// XCTAssertEqualObjects([result valueForKey:@"name"], expected); + HTMLElement *tree = self.simpleTree; + HTMLNodeIterator *iterator = tree.nodeIterator; + + XCTAssertEqualObjects(iterator.previousNode, nil); + XCTAssertEqualObjects(iterator.nextNode.name, @"div"); + XCTAssertEqualObjects(iterator.nextNode.name, @"a"); + XCTAssertEqualObjects(iterator.previousNode.name, @"a"); + XCTAssertEqualObjects(iterator.previousNode.name, @"div"); + XCTAssertEqualObjects(iterator.nextNode.name, @"div"); + XCTAssertEqualObjects(iterator.nextNode.name, @"a"); + XCTAssertEqualObjects(iterator.nextNode.name, @"b"); + XCTAssertEqualObjects(iterator.nextNode.name, @"c"); + XCTAssertEqualObjects(iterator.previousNode.name, @"c"); + XCTAssertEqualObjects(iterator.previousNode.name, @"b"); + XCTAssertEqualObjects(iterator.previousNode.name, @"a"); + XCTAssertEqualObjects(iterator.previousNode.name, @"div"); } @end