From da00182ff29acf69cfbe3ac9eddcb58576b01387 Mon Sep 17 00:00:00 2001 From: iska Date: Wed, 25 Feb 2015 22:38:02 +0100 Subject: [PATCH] Add HTML Node interface https://dom.spec.whatwg.org/#interface-node --- HTMLKit.xcodeproj/project.pbxproj | 10 +++++ HTMLKit/HTMLNode.h | 72 +++++++++++++++++++++++++++++++ HTMLKit/HTMLNode.m | 13 ++++++ 3 files changed, 95 insertions(+) create mode 100644 HTMLKit/HTMLNode.h create mode 100644 HTMLKit/HTMLNode.m diff --git a/HTMLKit.xcodeproj/project.pbxproj b/HTMLKit.xcodeproj/project.pbxproj index 3a4744d..9a4ad39 100644 --- a/HTMLKit.xcodeproj/project.pbxproj +++ b/HTMLKit.xcodeproj/project.pbxproj @@ -7,6 +7,9 @@ objects = { /* Begin PBXBuildFile section */ + 6234584E1A9D2FA4009BD491 /* HTMLNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 6234584C1A9D2FA4009BD491 /* HTMLNode.h */; }; + 6234584F1A9D2FA4009BD491 /* HTMLNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 6234584D1A9D2FA4009BD491 /* HTMLNode.m */; }; + 623458501A9D2FA4009BD491 /* HTMLNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 6234584D1A9D2FA4009BD491 /* HTMLNode.m */; }; 624493A619CCC54100BCDDF4 /* HTMLTokenizer.h in Headers */ = {isa = PBXBuildFile; fileRef = 624493A419CCC54100BCDDF4 /* HTMLTokenizer.h */; }; 624493A719CCC54100BCDDF4 /* HTMLTokenizer.m in Sources */ = {isa = PBXBuildFile; fileRef = 624493A519CCC54100BCDDF4 /* HTMLTokenizer.m */; }; 624493A819CCC54100BCDDF4 /* HTMLTokenizer.m in Sources */ = {isa = PBXBuildFile; fileRef = 624493A519CCC54100BCDDF4 /* HTMLTokenizer.m */; }; @@ -99,6 +102,8 @@ /* Begin PBXFileReference section */ 6223211D1A969B9300BACED5 /* HTMLElementTypes.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HTMLElementTypes.h; sourceTree = ""; }; + 6234584C1A9D2FA4009BD491 /* HTMLNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTMLNode.h; sourceTree = ""; }; + 6234584D1A9D2FA4009BD491 /* HTMLNode.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HTMLNode.m; sourceTree = ""; }; 624493A419CCC54100BCDDF4 /* HTMLTokenizer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTMLTokenizer.h; sourceTree = ""; }; 624493A519CCC54100BCDDF4 /* HTMLTokenizer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HTMLTokenizer.m; sourceTree = ""; }; 624493A919CCE84A00BCDDF4 /* HTMLTokenizerStates.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HTMLTokenizerStates.h; sourceTree = ""; }; @@ -245,6 +250,8 @@ 628B7CE61A080E1000602C87 /* HTMLNamespaces.h */, 6223211D1A969B9300BACED5 /* HTMLElementTypes.h */, 6279F87119E17DC700F12EE5 /* HTMLParserInsertionModes.h */, + 6234584C1A9D2FA4009BD491 /* HTMLNode.h */, + 6234584D1A9D2FA4009BD491 /* HTMLNode.m */, 6279F87219E1808D00F12EE5 /* HTMLElement.h */, 6279F87319E1808D00F12EE5 /* HTMLElement.m */, 625A14B619C7829400AD0C32 /* Supporting Files */, @@ -336,6 +343,7 @@ 625A150819C78ABA00AD0C32 /* HTMLInputStreamReader.h in Headers */, 62AE593519F97D880043F069 /* HTMLParseErrorToken.h in Headers */, 62AE594919F9948A0043F069 /* HTMLCharacterToken.h in Headers */, + 6234584E1A9D2FA4009BD491 /* HTMLNode.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -495,6 +503,7 @@ 624493A819CCC54100BCDDF4 /* HTMLTokenizer.m in Sources */, 625A14BE19C7829400AD0C32 /* HTMLKit.m in Sources */, 62AE594B19F9948A0043F069 /* HTMLCharacterToken.m in Sources */, + 623458501A9D2FA4009BD491 /* HTMLNode.m in Sources */, 62F31FDF19E9DCCF007F0657 /* HTMLTokenizerEntities.m in Sources */, 62AE593719F97D880043F069 /* HTMLParseErrorToken.m in Sources */, ); @@ -524,6 +533,7 @@ 624493A719CCC54100BCDDF4 /* HTMLTokenizer.m in Sources */, 625A150219C783DE00AD0C32 /* HTMLKit.m in Sources */, 62AE594A19F9948A0043F069 /* HTMLCharacterToken.m in Sources */, + 6234584F1A9D2FA4009BD491 /* HTMLNode.m in Sources */, 62F31FDE19E9DCCF007F0657 /* HTMLTokenizerEntities.m in Sources */, 62AE593619F97D880043F069 /* HTMLParseErrorToken.m in Sources */, ); diff --git a/HTMLKit/HTMLNode.h b/HTMLKit/HTMLNode.h new file mode 100644 index 0000000..632573b --- /dev/null +++ b/HTMLKit/HTMLNode.h @@ -0,0 +1,72 @@ +// +// HTMLNode.h +// HTMLKit +// +// Created by Iska on 24/02/15. +// Copyright (c) 2015 BrainCookie. All rights reserved. +// + +#import + +typedef NS_ENUM(short, HTMLNodeType) +{ + HTMLElementNode = 1, + HTMLAttributeNode = 2, // historical + HTMLTextNode = 3, + HTMLCDATASectionNode = 4, // historical + HTMLEntityReferenceNode = 5, // historical + HTMLEntityNode = 6, // historical + HTMLProcessingInstructionNode = 7, + HTMLCommentNode = 8, + HTMLDocumentNode = 9, + HTMLDocumentTypeNode = 10, + HTMLDocumentFragmentNode = 11, + HTMLNotationNode = 12 // historical +}; + +@class HTMLDocument; +@class HTMLElement; + +@interface HTMLNode : NSObject + +@property (nonatomic, assign, readonly) HTMLNodeType type; + +@property (nonatomic, strong, readonly) NSString *name; + +@property (nonatomic, strong, readonly) HTMLDocument *document; + +@property (nonatomic, strong, readonly) NSString *baseURI; + +@property (nonatomic, strong, readonly) HTMLNode *parentNode; + +@property (nonatomic, strong, readonly) HTMLElement *parentElement; + +@property (nonatomic, strong, readonly) NSOrderedSet *childNodes; + +@property (nonatomic, strong, readonly) HTMLNode *firstNode; + +@property (nonatomic, strong, readonly) HTMLNode *lastNode; + +@property (nonatomic, strong, readonly) HTMLNode *previousSibling; + +@property (nonatomic, strong, readonly) HTMLNode *nextSibling; + +@property (nonatomic, copy) NSString *value; + +@property (nonatomic, copy) NSString *textContent; + +- (BOOL)hasChildNodes; + +- (HTMLNode *)childNodeAtIndex:(NSUInteger)index; + +- (NSUInteger)indexOfChildNode:(HTMLNode *)node; + +- (HTMLNode *)insertNodeBefore:(HTMLNode *)node; + +- (HTMLNode *)appendChildNode:(HTMLNode *)node; + +- (HTMLNode *)replaceChildNode:(HTMLNode *)node; + +- (HTMLNode *)removeChildNode:(HTMLNode *)node; + +@end diff --git a/HTMLKit/HTMLNode.m b/HTMLKit/HTMLNode.m new file mode 100644 index 0000000..5e4acdc --- /dev/null +++ b/HTMLKit/HTMLNode.m @@ -0,0 +1,13 @@ +// +// HTMLNode.m +// HTMLKit +// +// Created by Iska on 24/02/15. +// Copyright (c) 2015 BrainCookie. All rights reserved. +// + +#import "HTMLNode.h" + +@implementation HTMLNode + +@end