diff --git a/HTMLKit.xcodeproj/project.pbxproj b/HTMLKit.xcodeproj/project.pbxproj
index b60e492..16d21a2 100644
--- a/HTMLKit.xcodeproj/project.pbxproj
+++ b/HTMLKit.xcodeproj/project.pbxproj
@@ -36,6 +36,8 @@
625A14C519C7829400AD0C32 /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 625A14C419C7829400AD0C32 /* XCTest.framework */; };
625A14C919C7829400AD0C32 /* HTMLKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 625A14AC19C7829400AD0C32 /* HTMLKit.framework */; };
625A14CF19C7829400AD0C32 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 625A14CD19C7829400AD0C32 /* InfoPlist.strings */; };
+ 625D0F031C2717DE00D7BEB0 /* HTMLNode+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 625D0F011C2717DE00D7BEB0 /* HTMLNode+Private.h */; };
+ 625D0F041C2717DE00D7BEB0 /* HTMLNode+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 625D0F011C2717DE00D7BEB0 /* HTMLNode+Private.h */; };
628AF6301BC99A6C00496128 /* CSSNthExpressionsParserTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 628AF62E1BC99A6C00496128 /* CSSNthExpressionsParserTests.m */; };
62D8345A19FB1AC4009205A9 /* HTML5LibTokenizerTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 62D8345819FB1AC4009205A9 /* HTML5LibTokenizerTest.m */; };
62EC7AE71AEEAC6F0015D3BE /* HTMLKitMutationAlgorithmsTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 62EC7AE51AEEAC6F0015D3BE /* HTMLKitMutationAlgorithmsTests.m */; };
@@ -387,6 +389,7 @@
625A14DF19C7834100AD0C32 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
625A150619C78ABA00AD0C32 /* HTMLInputStreamReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTMLInputStreamReader.h; sourceTree = ""; };
625A150719C78ABA00AD0C32 /* HTMLInputStreamReader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HTMLInputStreamReader.m; sourceTree = ""; };
+ 625D0F011C2717DE00D7BEB0 /* HTMLNode+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "HTMLNode+Private.h"; sourceTree = ""; };
626652F81C03D30F00C3F121 /* HTMLKitErrorDomain.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HTMLKitErrorDomain.h; sourceTree = ""; };
6279F87119E17DC700F12EE5 /* HTMLParserInsertionModes.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HTMLParserInsertionModes.h; sourceTree = ""; };
6279F87219E1808D00F12EE5 /* HTMLElement.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.objc; fileEncoding = 4; path = HTMLElement.h; sourceTree = ""; };
@@ -524,6 +527,7 @@
6238C9841AB8D6330006512E /* HTMLKitDOMExceptions.m */,
628B7CE61A080E1000602C87 /* HTMLNamespaces.h */,
623719431AA12EE8002E03C8 /* HTMLQuirksMode.h */,
+ 625D0F071C2717E400D7BEB0 /* Private */,
);
name = DOM;
sourceTree = "";
@@ -663,6 +667,14 @@
name = "Supporting Files";
sourceTree = "";
};
+ 625D0F071C2717E400D7BEB0 /* Private */ = {
+ isa = PBXGroup;
+ children = (
+ 625D0F011C2717DE00D7BEB0 /* HTMLNode+Private.h */,
+ );
+ name = Private;
+ sourceTree = "";
+ };
628E16EC1ADAE71700B15A06 /* Parsing */ = {
isa = PBXGroup;
children = (
@@ -799,6 +811,7 @@
62ECBEE41C0B69FD00AF847B /* HTMLTokenizerStates.h in Headers */,
62ECBEE51C0B69FD00AF847B /* HTMLTokenizerCharacters.h in Headers */,
62ECBEE61C0B69FD00AF847B /* HTMLTokenizerEntities.h in Headers */,
+ 625D0F031C2717DE00D7BEB0 /* HTMLNode+Private.h in Headers */,
62ECBEE71C0B69FD00AF847B /* HTMLTokens.h in Headers */,
62ECBF1B1C0B6ABF00AF847B /* HTMLElement.h in Headers */,
62ECBEE81C0B69FD00AF847B /* HTMLToken.h in Headers */,
@@ -863,6 +876,7 @@
62ECBFA71C0B6D3A00AF847B /* HTMLNode.h in Headers */,
62ECBFA81C0B6D3A00AF847B /* HTMLDocument.h in Headers */,
62ECBFA91C0B6D3A00AF847B /* HTMLDocumentType.h in Headers */,
+ 625D0F041C2717DE00D7BEB0 /* HTMLNode+Private.h in Headers */,
62ECBFAA1C0B6D3A00AF847B /* HTMLDocumentFragment.h in Headers */,
62ECBFAB1C0B6D3B00AF847B /* HTMLElement.h in Headers */,
62ECBFAC1C0B6D3B00AF847B /* HTMLComment.h in Headers */,
diff --git a/HTMLKit/CSSCombinatorSelector.m b/HTMLKit/CSSCombinatorSelector.m
index 847ae7f..1a9b4c3 100644
--- a/HTMLKit/CSSCombinatorSelector.m
+++ b/HTMLKit/CSSCombinatorSelector.m
@@ -8,6 +8,7 @@
#import "CSSCombinatorSelector.h"
#import "HTMLElement.h"
+#import "HTMLNode+Private.h"
#pragma mark - Declarations
diff --git a/HTMLKit/CSSNthExpressionSelector.m b/HTMLKit/CSSNthExpressionSelector.m
index 0ef6e5e..ca87bd4 100644
--- a/HTMLKit/CSSNthExpressionSelector.m
+++ b/HTMLKit/CSSNthExpressionSelector.m
@@ -8,6 +8,7 @@
#import "CSSNthExpressionSelector.h"
#import "HTMLElement.h"
+#import "HTMLNode+Private.h"
#pragma mark - Nth-Expression
diff --git a/HTMLKit/CSSPseudoFunctionSelector.m b/HTMLKit/CSSPseudoFunctionSelector.m
index 9c22407..0e0fc14 100644
--- a/HTMLKit/CSSPseudoFunctionSelector.m
+++ b/HTMLKit/CSSPseudoFunctionSelector.m
@@ -8,6 +8,7 @@
#import "CSSPseudoFunctionSelector.h"
#import "HTMLElement.h"
+#import "HTMLNode+Private.h"
#pragma mark - Declarations
diff --git a/HTMLKit/HTMLComment.m b/HTMLKit/HTMLComment.m
index fd3dbc8..c126999 100644
--- a/HTMLKit/HTMLComment.m
+++ b/HTMLKit/HTMLComment.m
@@ -7,6 +7,7 @@
//
#import "HTMLComment.h"
+#import "HTMLNode+Private.h"
@implementation HTMLComment
diff --git a/HTMLKit/HTMLDocument.m b/HTMLKit/HTMLDocument.m
index 09baa88..120cfac 100644
--- a/HTMLKit/HTMLDocument.m
+++ b/HTMLKit/HTMLDocument.m
@@ -10,11 +10,7 @@
#import "HTMLParser.h"
#import "HTMLNodeIterator.h"
#import "HTMLKitDOMExceptions.h"
-
-@interface HTMLNode (Private)
-@property (nonatomic, weak) HTMLDocument *ownerDocument;
-@property (nonatomic, weak) HTMLNode *parentNode;
-@end
+#import "HTMLNode+Private.h"
@interface HTMLNodeIterator (Private)
- (void)runRemovingStepsForNode:(HTMLNode *)oldNode
diff --git a/HTMLKit/HTMLDocumentFragment.m b/HTMLKit/HTMLDocumentFragment.m
index 2f2d5a2..f99483b 100644
--- a/HTMLKit/HTMLDocumentFragment.m
+++ b/HTMLKit/HTMLDocumentFragment.m
@@ -8,10 +8,7 @@
#import "HTMLDocumentFragment.h"
#import "HTMLText.h"
-
-@interface HTMLNode ()
-@property (nonatomic, weak) HTMLDocument *ownerDocument;
-@end
+#import "HTMLNode+Private.h"
@implementation HTMLDocumentFragment
diff --git a/HTMLKit/HTMLDocumentType.m b/HTMLKit/HTMLDocumentType.m
index a7e8165..8a4636c 100644
--- a/HTMLKit/HTMLDocumentType.m
+++ b/HTMLKit/HTMLDocumentType.m
@@ -8,6 +8,7 @@
#import "HTMLDocumentType.h"
#import "NSString+HTMLKit.h"
+#import "HTMLNode+Private.h"
NS_INLINE BOOL nilOrEqual(id first, id second) {
return (first == nil) || ([first isEqual:second]);
diff --git a/HTMLKit/HTMLElement.m b/HTMLKit/HTMLElement.m
index 8cbb9f4..ec3ef89 100644
--- a/HTMLKit/HTMLElement.m
+++ b/HTMLKit/HTMLElement.m
@@ -13,6 +13,7 @@
#import "HTMLDOMTokenList.h"
#import "HTMLOrderedDictionary.h"
#import "NSString+HTMLKit.h"
+#import "HTMLNode+Private.h"
@interface HTMLElement ()
{
diff --git a/HTMLKit/HTMLNode+Private.h b/HTMLKit/HTMLNode+Private.h
new file mode 100644
index 0000000..663ff4c
--- /dev/null
+++ b/HTMLKit/HTMLNode+Private.h
@@ -0,0 +1,54 @@
+//
+// HTMLNode+Private.h
+// HTMLKit
+//
+// Created by Iska on 20/12/15.
+// Copyright © 2015 BrainCookie. All rights reserved.
+//
+
+///------------------------------------------------------
+/// HTMLKit private header
+///------------------------------------------------------
+
+#import
+
+/**
+ Private HTML Node methods which are not intended for public API.
+ */
+@interface HTMLNode ()
+
+/**
+ A read-write redeclaration of the same property in the public API.
+ */
+@property (nonatomic, weak) HTMLDocument *ownerDocument;
+
+/**
+ A read-write redeclaration of the same property in the public API.
+ */
+@property (nonatomic, weak) HTMLNode *parentNode;
+
+/**
+ Designated initializer of the HTML Node, which, however, should not be used directly. It is intended to be called only
+ by subclasses.
+
+ @abstract Use concrete subclasses of the HTML Node.
+
+ @param name The node's name.
+ @param type The node's type.
+ @returns A new instance of a HTML Node.
+ */
+- (instancetype)initWithName:(NSString *)name type:(HTMLNodeType)type NS_DESIGNATED_INITIALIZER;
+
+/**
+ Casts this node to a HTML Element. This cast should only be performed after the appropriate check.
+ */
+- (HTMLElement *)asElement;
+
+/**
+ Returns the same string representation of the DOM tree rooted at this node that is used by html5lib-tests.
+
+ @disucssion This method is indended for testing purposes.
+ */
+- (NSString *)treeDescription;
+
+@end
diff --git a/HTMLKit/HTMLNode.m b/HTMLKit/HTMLNode.m
index 345444a..be9e3c9 100644
--- a/HTMLKit/HTMLNode.m
+++ b/HTMLKit/HTMLNode.m
@@ -7,6 +7,7 @@
//
#import "HTMLNode.h"
+#import "HTMLNode+Private.h"
#import "HTMLDocument.h"
#import "HTMLDocumentType.h"
#import "HTMLElement.h"
@@ -25,7 +26,6 @@
{
NSMutableOrderedSet *_childNodes;
}
-@property (nonatomic, weak) HTMLDocument *ownerDocument;
@end
@implementation HTMLNode
diff --git a/HTMLKit/HTMLNodeFilter.m b/HTMLKit/HTMLNodeFilter.m
index a1e0d2b..a6a6190 100644
--- a/HTMLKit/HTMLNodeFilter.m
+++ b/HTMLKit/HTMLNodeFilter.m
@@ -8,6 +8,7 @@
#import "HTMLNodeFilter.h"
#import "HTMLNode.h"
+#import "HTMLNode+Private.h"
#import "CSSSelector.h"
#pragma mark - Block Filter
diff --git a/HTMLKit/HTMLText.m b/HTMLKit/HTMLText.m
index 8de2a5f..55daaae 100644
--- a/HTMLKit/HTMLText.m
+++ b/HTMLKit/HTMLText.m
@@ -9,6 +9,7 @@
#import "HTMLText.h"
#import "HTMLElement.h"
#import "NSString+HTMLKit.h"
+#import "HTMLNode+Private.h"
@implementation HTMLText
diff --git a/HTMLKitTests/HTMLKitNodesTests.m b/HTMLKitTests/HTMLKitNodesTests.m
index 87f37f9..7193ecb 100644
--- a/HTMLKitTests/HTMLKitNodesTests.m
+++ b/HTMLKitTests/HTMLKitNodesTests.m
@@ -8,6 +8,7 @@
#import
#import "HTMLDOM.h"
+#import "HTMLNode+Private.h"
@interface HTMLKitNodesTests : XCTestCase
diff --git a/HTMLKitTests/HTMLTreeWalkerTests.m b/HTMLKitTests/HTMLTreeWalkerTests.m
index 6aeeaf2..9696809 100644
--- a/HTMLKitTests/HTMLTreeWalkerTests.m
+++ b/HTMLKitTests/HTMLTreeWalkerTests.m
@@ -9,6 +9,7 @@
#import
#import "HTMLTreeWalker.h"
#import "HTMLDOM.h"
+#import "HTMLNode+Private.h"
@interface HTMLTreeWalkerTests : XCTestCase