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