diff --git a/HTMLKit.xcodeproj/project.pbxproj b/HTMLKit.xcodeproj/project.pbxproj
index 97202b7..06c7aec 100644
--- a/HTMLKit.xcodeproj/project.pbxproj
+++ b/HTMLKit.xcodeproj/project.pbxproj
@@ -26,6 +26,14 @@
624AC90F19FC702E00BD3C4A /* HTML Standard.html in Resources */ = {isa = PBXBuildFile; fileRef = 624AC90D19FC702E00BD3C4A /* HTML Standard.html */; };
624B9FB31AE0313300646C4C /* HTMLKitStringCategoryTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 624B9FB11AE0313300646C4C /* HTMLKitStringCategoryTests.m */; };
624B9FB61AE0391400646C4C /* HTMLKitOrderedDictionaryTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 624B9FB41AE0391400646C4C /* HTMLKitOrderedDictionaryTests.m */; };
+ 624C777A1DE9D05E00DD6DFA /* HTMLCharacterData.h in Headers */ = {isa = PBXBuildFile; fileRef = 624C77781DE9D05E00DD6DFA /* HTMLCharacterData.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 624C777B1DE9D05E00DD6DFA /* HTMLCharacterData.h in Headers */ = {isa = PBXBuildFile; fileRef = 624C77781DE9D05E00DD6DFA /* HTMLCharacterData.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 624C777C1DE9D05E00DD6DFA /* HTMLCharacterData.h in Headers */ = {isa = PBXBuildFile; fileRef = 624C77781DE9D05E00DD6DFA /* HTMLCharacterData.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 624C777D1DE9D05E00DD6DFA /* HTMLCharacterData.h in Headers */ = {isa = PBXBuildFile; fileRef = 624C77781DE9D05E00DD6DFA /* HTMLCharacterData.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 624C777E1DE9D05E00DD6DFA /* HTMLCharacterData.m in Sources */ = {isa = PBXBuildFile; fileRef = 624C77791DE9D05E00DD6DFA /* HTMLCharacterData.m */; };
+ 624C777F1DE9D05E00DD6DFA /* HTMLCharacterData.m in Sources */ = {isa = PBXBuildFile; fileRef = 624C77791DE9D05E00DD6DFA /* HTMLCharacterData.m */; };
+ 624C77801DE9D05E00DD6DFA /* HTMLCharacterData.m in Sources */ = {isa = PBXBuildFile; fileRef = 624C77791DE9D05E00DD6DFA /* HTMLCharacterData.m */; };
+ 624C77811DE9D05E00DD6DFA /* HTMLCharacterData.m in Sources */ = {isa = PBXBuildFile; fileRef = 624C77791DE9D05E00DD6DFA /* HTMLCharacterData.m */; };
624FC37B1AE591D80015DDF9 /* HTMLKitNodesTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 624FC3791AE591D80015DDF9 /* HTMLKitNodesTests.m */; };
62567F501C0CB5750025D458 /* HTMLDOMTokenList.h in Headers */ = {isa = PBXBuildFile; fileRef = 62567F4E1C0CB5750025D458 /* HTMLDOMTokenList.h */; settings = {ATTRIBUTES = (Public, ); }; };
62567F511C0CB5750025D458 /* HTMLDOMTokenList.h in Headers */ = {isa = PBXBuildFile; fileRef = 62567F4E1C0CB5750025D458 /* HTMLDOMTokenList.h */; settings = {ATTRIBUTES = (Public, ); }; };
@@ -42,6 +50,10 @@
625EE4581CBAA41D00F2CC8E /* HTMLKitTestObserver.m in Sources */ = {isa = PBXBuildFile; fileRef = 625EE4561CBAA41D00F2CC8E /* HTMLKitTestObserver.m */; };
625EE45B1CBB171300F2CC8E /* HTMLKitTestUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 625EE45A1CBB171300F2CC8E /* HTMLKitTestUtil.m */; };
625EE45C1CBB171300F2CC8E /* HTMLKitTestUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 625EE45A1CBB171300F2CC8E /* HTMLKitTestUtil.m */; };
+ 626679CF1DEA3DAF004353E7 /* HTMLCharacterData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 626679CD1DEA3DAF004353E7 /* HTMLCharacterData+Private.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ 626679D01DEA3DAF004353E7 /* HTMLCharacterData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 626679CD1DEA3DAF004353E7 /* HTMLCharacterData+Private.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ 626679D11DEA3DAF004353E7 /* HTMLCharacterData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 626679CD1DEA3DAF004353E7 /* HTMLCharacterData+Private.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ 626679D21DEA3DAF004353E7 /* HTMLCharacterData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 626679CD1DEA3DAF004353E7 /* HTMLCharacterData+Private.h */; settings = {ATTRIBUTES = (Private, ); }; };
62857C6B1D3988EE008DC254 /* HTMLKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 625A14BC19C7829400AD0C32 /* HTMLKit.h */; settings = {ATTRIBUTES = (Public, ); }; };
62857C6C1D3988EE008DC254 /* HTMLKitErrorDomain.h in Headers */ = {isa = PBXBuildFile; fileRef = 626652F81C03D30F00C3F121 /* HTMLKitErrorDomain.h */; settings = {ATTRIBUTES = (Public, ); }; };
62857C6D1D398907008DC254 /* HTMLInputStreamReader.h in Headers */ = {isa = PBXBuildFile; fileRef = 625A150619C78ABA00AD0C32 /* HTMLInputStreamReader.h */; settings = {ATTRIBUTES = (Private, ); }; };
@@ -620,6 +632,8 @@
624B37211B250BB50010BDDF /* CSSCodePoints.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = CSSCodePoints.h; path = include/CSSCodePoints.h; sourceTree = ""; };
624B9FB11AE0313300646C4C /* HTMLKitStringCategoryTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HTMLKitStringCategoryTests.m; sourceTree = ""; };
624B9FB41AE0391400646C4C /* HTMLKitOrderedDictionaryTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HTMLKitOrderedDictionaryTests.m; sourceTree = ""; };
+ 624C77781DE9D05E00DD6DFA /* HTMLCharacterData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTMLCharacterData.h; sourceTree = ""; };
+ 624C77791DE9D05E00DD6DFA /* HTMLCharacterData.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HTMLCharacterData.m; sourceTree = ""; };
624FC3791AE591D80015DDF9 /* HTMLKitNodesTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HTMLKitNodesTests.m; sourceTree = ""; };
62567F4E1C0CB5750025D458 /* HTMLDOMTokenList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HTMLDOMTokenList.h; path = include/HTMLDOMTokenList.h; sourceTree = ""; };
62567F4F1C0CB5750025D458 /* HTMLDOMTokenList.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HTMLDOMTokenList.m; sourceTree = ""; };
@@ -643,6 +657,7 @@
625EE4591CBB171300F2CC8E /* HTMLKitTestUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTMLKitTestUtil.h; sourceTree = ""; };
625EE45A1CBB171300F2CC8E /* HTMLKitTestUtil.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HTMLKitTestUtil.m; sourceTree = ""; };
626652F81C03D30F00C3F121 /* HTMLKitErrorDomain.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = HTMLKitErrorDomain.h; path = include/HTMLKitErrorDomain.h; sourceTree = ""; };
+ 626679CD1DEA3DAF004353E7 /* HTMLCharacterData+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "HTMLCharacterData+Private.h"; sourceTree = ""; };
6279F87119E17DC700F12EE5 /* HTMLParserInsertionModes.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = HTMLParserInsertionModes.h; path = include/HTMLParserInsertionModes.h; sourceTree = ""; };
6279F87219E1808D00F12EE5 /* HTMLElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HTMLElement.h; path = include/HTMLElement.h; sourceTree = ""; };
6279F87319E1808D00F12EE5 /* HTMLElement.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HTMLElement.m; sourceTree = ""; };
@@ -786,6 +801,8 @@
623406E51ADB05AD004677A3 /* HTMLDocumentFragment.m */,
6279F87219E1808D00F12EE5 /* HTMLElement.h */,
6279F87319E1808D00F12EE5 /* HTMLElement.m */,
+ 624C77781DE9D05E00DD6DFA /* HTMLCharacterData.h */,
+ 624C77791DE9D05E00DD6DFA /* HTMLCharacterData.m */,
623857991A9E8934003A45D9 /* HTMLComment.h */,
6238579A1A9E8934003A45D9 /* HTMLComment.m */,
62362A3A1A9FA70400301989 /* HTMLText.h */,
@@ -954,6 +971,7 @@
isa = PBXGroup;
children = (
625D0F011C2717DE00D7BEB0 /* HTMLNode+Private.h */,
+ 626679CD1DEA3DAF004353E7 /* HTMLCharacterData+Private.h */,
);
name = Private;
sourceTree = "";
@@ -1107,12 +1125,14 @@
62ECBEED1C0B69FD00AF847B /* HTMLTagToken.h in Headers */,
62ECBEEE1C0B69FD00AF847B /* HTMLEOFToken.h in Headers */,
62567F501C0CB5750025D458 /* HTMLDOMTokenList.h in Headers */,
+ 626679CF1DEA3DAF004353E7 /* HTMLCharacterData+Private.h in Headers */,
62ECBEEF1C0B69FD00AF847B /* HTMLParser.h in Headers */,
62ECBEF01C0B69FD00AF847B /* HTMLStackOfOpenElements.h in Headers */,
62ECBEF11C0B69FD00AF847B /* HTMLListOfActiveFormattingElements.h in Headers */,
62ECBEF21C0B69FD00AF847B /* HTMLElementTypes.h in Headers */,
62ECBEF31C0B69FD00AF847B /* HTMLElementAdjustment.h in Headers */,
62ECBEF41C0B69FD00AF847B /* HTMLParserInsertionModes.h in Headers */,
+ 624C777A1DE9D05E00DD6DFA /* HTMLCharacterData.h in Headers */,
62ECBEF51C0B69FD00AF847B /* HTMLMarker.h in Headers */,
62ECBEF61C0B69FE00AF847B /* HTMLDOM.h in Headers */,
62ECBEF71C0B69FE00AF847B /* HTMLNode.h in Headers */,
@@ -1173,12 +1193,14 @@
62857C731D398907008DC254 /* HTMLToken.h in Headers */,
62857CC51D3989AB008DC254 /* CSSStructuralPseudoSelectors.h in Headers */,
62857CDE1D3989CE008DC254 /* CSSPseudoFunctionSelector.h in Headers */,
+ 626679D21DEA3DAF004353E7 /* HTMLCharacterData+Private.h in Headers */,
62857CAB1D398973008DC254 /* HTMLNodeFilter.h in Headers */,
62857CA61D398973008DC254 /* HTMLText.h in Headers */,
62857C751D398907008DC254 /* HTMLCommentToken.h in Headers */,
62857C891D398927008DC254 /* HTMLParserInsertionModes.h in Headers */,
62857CA81D398973008DC254 /* HTMLDOMTokenList.h in Headers */,
62857C851D398927008DC254 /* HTMLStackOfOpenElements.h in Headers */,
+ 624C777D1DE9D05E00DD6DFA /* HTMLCharacterData.h in Headers */,
62857CDF1D3989CE008DC254 /* CSSCombinatorSelector.h in Headers */,
62857CA91D398973008DC254 /* HTMLNodeIterator.h in Headers */,
62857CAE1D398973008DC254 /* HTMLQuirksMode.h in Headers */,
@@ -1239,12 +1261,14 @@
62857D581D39A416008DC254 /* HTMLParser.h in Headers */,
62857D571D39A411008DC254 /* HTMLEOFToken.h in Headers */,
62857D8E1D39A47F008DC254 /* CSSPseudoFunctionSelector.h in Headers */,
+ 626679D11DEA3DAF004353E7 /* HTMLCharacterData+Private.h in Headers */,
62857D511D39A411008DC254 /* HTMLToken.h in Headers */,
62857D531D39A411008DC254 /* HTMLCommentToken.h in Headers */,
62857D741D39A44E008DC254 /* HTMLText.h in Headers */,
62857D5D1D39A41D008DC254 /* HTMLParserInsertionModes.h in Headers */,
62857D591D39A41D008DC254 /* HTMLStackOfOpenElements.h in Headers */,
62857D781D39A44E008DC254 /* HTMLTreeWalker.h in Headers */,
+ 624C777C1DE9D05E00DD6DFA /* HTMLCharacterData.h in Headers */,
62857D551D39A411008DC254 /* HTMLParseErrorToken.h in Headers */,
62857D541D39A411008DC254 /* HTMLDOCTYPEToken.h in Headers */,
62857D871D39A476008DC254 /* CSSInputStream.h in Headers */,
@@ -1305,12 +1329,14 @@
62567F511C0CB5750025D458 /* HTMLDOMTokenList.h in Headers */,
62ECBFB31C0B6D3C00AF847B /* HTMLKitDOMExceptions.h in Headers */,
62ECBFB41C0B6D3D00AF847B /* HTMLNamespaces.h in Headers */,
+ 626679D01DEA3DAF004353E7 /* HTMLCharacterData+Private.h in Headers */,
62ECBFB51C0B6D3D00AF847B /* HTMLQuirksMode.h in Headers */,
62ECBFB61C0B6D3D00AF847B /* NSString+HTMLKit.h in Headers */,
62ECBFB71C0B6D3D00AF847B /* NSCharacterSet+HTMLKit.h in Headers */,
62ECBFB81C0B6D3E00AF847B /* HTMLOrderedDictionary.h in Headers */,
62ECBFB91C0B6D3E00AF847B /* CSSSelectors.h in Headers */,
62ECBFBA1C0B6D3E00AF847B /* CSSStructuralPseudoSelectors.h in Headers */,
+ 624C777B1DE9D05E00DD6DFA /* HTMLCharacterData.h in Headers */,
62ECBFBD1C0B6D3F00AF847B /* CSSSelectorParser.h in Headers */,
62ECBFBE1C0B6D4000AF847B /* CSSNthExpressionParser.h in Headers */,
62ECBFBF1C0B6D4000AF847B /* CSSSelector.h in Headers */,
@@ -1645,6 +1671,7 @@
62ECBF461C0B6B7900AF847B /* CSSCombinatorSelector.m in Sources */,
62ECBF471C0B6B7A00AF847B /* CSSCompoundSelector.m in Sources */,
62567F521C0CB5750025D458 /* HTMLDOMTokenList.m in Sources */,
+ 624C777E1DE9D05E00DD6DFA /* HTMLCharacterData.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -1728,6 +1755,7 @@
62857CD01D3989B8008DC254 /* CSSNthExpressionSelector.m in Sources */,
62857CB81D398992008DC254 /* HTMLDOMTokenList.m in Sources */,
62857C831D398912008DC254 /* HTMLEOFToken.m in Sources */,
+ 624C77811DE9D05E00DD6DFA /* HTMLCharacterData.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -1781,6 +1809,7 @@
62857D2A1D39A334008DC254 /* CSSNthExpressionSelector.m in Sources */,
62857D171D39A32A008DC254 /* HTMLDOMTokenList.m in Sources */,
62857D0A1D39A324008DC254 /* HTMLEOFToken.m in Sources */,
+ 624C77801DE9D05E00DD6DFA /* HTMLCharacterData.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -1864,6 +1893,7 @@
62ECBF8E1C0B6D2A00AF847B /* CSSCombinatorSelector.m in Sources */,
62ECBF8F1C0B6D2A00AF847B /* CSSCompoundSelector.m in Sources */,
62567F531C0CB5750025D458 /* HTMLDOMTokenList.m in Sources */,
+ 624C777F1DE9D05E00DD6DFA /* HTMLCharacterData.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
diff --git a/Sources/HTMLCharacterData+Private.h b/Sources/HTMLCharacterData+Private.h
new file mode 100644
index 0000000..50a9463
--- /dev/null
+++ b/Sources/HTMLCharacterData+Private.h
@@ -0,0 +1,25 @@
+//
+// HTMLCharacterData+Private.h
+// HTMLKit
+//
+// Created by Iska on 26/11/16.
+// Copyright © 2016 BrainCookie. All rights reserved.
+//
+
+#import "HTMLCharacterData.h"
+#import "HTMLNode.h"
+
+@interface HTMLCharacterData ()
+
+/**
+ Designated initializer of the HTML CharacterData, which, however, should not be used directly. It is intended to be
+ called only by subclasses, i.e. HTMLText and HTMLComment.
+
+ @param name The node's name.
+ @param type The node's type.
+ @param data The node's data string.
+ @return A new instance of a HTML CharacterData.
+ */
+- (instancetype)initWithName:(NSString *)name type:(HTMLNodeType)type data:(NSString *)data NS_DESIGNATED_INITIALIZER;
+
+@end
diff --git a/Sources/HTMLCharacterData.h b/Sources/HTMLCharacterData.h
new file mode 100644
index 0000000..7ca0e3a
--- /dev/null
+++ b/Sources/HTMLCharacterData.h
@@ -0,0 +1,25 @@
+//
+// HTMLCharacterData.h
+// HTMLKit
+//
+// Created by Iska on 26/11/16.
+// Copyright © 2016 BrainCookie. All rights reserved.
+//
+
+#import "HTMLNode.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ A HTML CharacterData
+
+ https://dom.spec.whatwg.org/#characterdata
+ */
+@interface HTMLCharacterData : HTMLNode
+
+/** @brief The associated mutable data string. */
+@property (nonatomic, copy, readonly) NSMutableString *data;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Sources/HTMLCharacterData.m b/Sources/HTMLCharacterData.m
new file mode 100644
index 0000000..8f5eb44
--- /dev/null
+++ b/Sources/HTMLCharacterData.m
@@ -0,0 +1,47 @@
+//
+// HTMLCharacterData.m
+// HTMLKit
+//
+// Created by Iska on 26/11/16.
+// Copyright © 2016 BrainCookie. All rights reserved.
+//
+
+#import "HTMLCharacterData.h"
+#import "HTMLNode+Private.h"
+
+@implementation HTMLCharacterData
+
+- (instancetype)initWithName:(NSString *)name type:(HTMLNodeType)type data:(NSString *)data
+{
+ self = [super initWithName:name type:type];
+ if (self) {
+ _data = [[NSMutableString alloc] initWithString:data ?: @""];
+ }
+ return self;
+}
+
+- (NSString *)textContent
+{
+ return [_data copy];
+}
+
+- (void)setTextContent:(NSString *)textContent
+{
+ [_data setString:textContent ?: @""];
+}
+
+- (NSUInteger)length
+{
+ return _data.length;
+}
+
+#pragma mark - NSCopying
+
+- (id)copyWithZone:(NSZone *)zone
+{
+ HTMLCharacterData *copy = [super copyWithZone:zone];
+ copy->_data = self.data;
+ return copy;
+}
+
+@end
diff --git a/Sources/HTMLComment.m b/Sources/HTMLComment.m
index 170f025..afebf89 100644
--- a/Sources/HTMLComment.m
+++ b/Sources/HTMLComment.m
@@ -7,7 +7,7 @@
//
#import "HTMLComment.h"
-#import "HTMLNode+Private.h"
+#import "HTMLCharacterData+Private.h"
@implementation HTMLComment
@@ -18,35 +18,7 @@
- (instancetype)initWithData:(NSString *)data
{
- self = [super initWithName:@"#comment" type:HTMLNodeComment];
- if (self) {
- self.data = data ?: @"";
- }
- return self;
-}
-
-- (NSString *)textContent
-{
- return self.data;
-}
-
-- (void)setTextContent:(NSString *)textContent
-{
- self.data = textContent ?: @"";
-}
-
-- (NSUInteger)length
-{
- return self.data.length;
-}
-
-#pragma mark - NSCopying
-
-- (id)copyWithZone:(NSZone *)zone
-{
- HTMLComment *copy = [super copyWithZone:zone];
- copy.data = self.data;
- return copy;
+ return [super initWithName:@"#comment" type:HTMLNodeComment data:data];
}
#pragma mark - Serialization
diff --git a/Sources/HTMLParser.m b/Sources/HTMLParser.m
index 230ad53..5311c1d 100644
--- a/Sources/HTMLParser.m
+++ b/Sources/HTMLParser.m
@@ -457,9 +457,11 @@
beforeChildNode:&child];
if (adjustedInsertionLocation.nodeType != HTMLNodeDocument) {
if (child != nil && child.previousSibling.nodeType == HTMLNodeText) {
- [(HTMLText *)child.previousSibling appendString:data];
+ HTMLText *textNode = (HTMLText *)child.previousSibling;
+ [textNode.data appendString:data];
} else if (adjustedInsertionLocation.lastChild.nodeType == HTMLNodeText) {
- [(HTMLText *)adjustedInsertionLocation.lastChild appendString:data];
+ HTMLText *textNode = (HTMLText *)adjustedInsertionLocation.lastChild;
+ [textNode.data appendString:data];
} else {
HTMLText *text = [[HTMLText alloc] initWithData:data];
[adjustedInsertionLocation insertNode:text beforeChildNode:child];
diff --git a/Sources/HTMLText.m b/Sources/HTMLText.m
index a56ed51..ff504eb 100644
--- a/Sources/HTMLText.m
+++ b/Sources/HTMLText.m
@@ -9,7 +9,7 @@
#import "HTMLText.h"
#import "HTMLElement.h"
#import "NSString+HTMLKit.h"
-#import "HTMLNode+Private.h"
+#import "HTMLCharacterData+Private.h"
@implementation HTMLText
@@ -20,21 +20,7 @@
- (instancetype)initWithData:(NSString *)data
{
- self = [super initWithName:@"#text" type:HTMLNodeText];
- if (self) {
- _data = [[NSMutableString alloc] initWithString:data ?: @""];
- }
- return self;
-}
-
-- (NSString *)textContent
-{
- return [self.data copy];
-}
-
-- (void)setTextContent:(NSString *)textContent
-{
- [self.data setString:textContent ?: @""];
+ return [super initWithName:@"#text" type:HTMLNodeText data:data];
}
- (void)appendString:(NSString *)string
@@ -42,20 +28,6 @@
[self.data appendString:string];
}
-- (NSUInteger)length
-{
- return self.data.length;
-}
-
-#pragma mark - NSCopying
-
-- (id)copyWithZone:(NSZone *)zone
-{
- HTMLText *copy = [super copyWithZone:zone];
- copy.data = self.data;
- return copy;
-}
-
#pragma mark - Serialization
- (NSString *)outerHTML
diff --git a/Sources/include/HTMLComment.h b/Sources/include/HTMLComment.h
index 41a378e..d9ab331 100644
--- a/Sources/include/HTMLComment.h
+++ b/Sources/include/HTMLComment.h
@@ -6,17 +6,14 @@
// Copyright (c) 2015 BrainCookie. All rights reserved.
//
-#import "HTMLNode.h"
+#import "HTMLCharacterData.h"
NS_ASSUME_NONNULL_BEGIN
/**
A HTML Comment node
*/
-@interface HTMLComment : HTMLNode
-
-/** @brief The comment string. */
-@property (nonatomic, copy) NSString *data;
+@interface HTMLComment : HTMLCharacterData
/**
Initializes a new HTML comment node.
diff --git a/Sources/include/HTMLText.h b/Sources/include/HTMLText.h
index e97df7e..ce7b24b 100644
--- a/Sources/include/HTMLText.h
+++ b/Sources/include/HTMLText.h
@@ -6,17 +6,14 @@
// Copyright (c) 2015 BrainCookie. All rights reserved.
//
-#import "HTMLNode.h"
+#import "HTMLCharacterData.h"
NS_ASSUME_NONNULL_BEGIN
/**
A HTML Text node
*/
-@interface HTMLText : HTMLNode
-
-/** @brief The text string. */
-@property (nonatomic, copy) NSMutableString *data;
+@interface HTMLText : HTMLCharacterData
/**
Initializes a new HTML text node.