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