diff --git a/HTMLKit/HTMLCharacterToken.m b/HTMLKit/HTMLCharacterToken.m
index 41ce1c4..6aecbcf 100644
--- a/HTMLKit/HTMLCharacterToken.m
+++ b/HTMLKit/HTMLCharacterToken.m
@@ -26,9 +26,25 @@
return self;
}
+#pragma mark - NSObject
+
+- (BOOL)isEqual:(id)other
+{
+ if ([other isKindOfClass:[self class]]) {
+ HTMLCharacterToken *token = (HTMLCharacterToken *)other;
+ return [self.characters isEqualToString:token.characters];
+ }
+ return NO;
+}
+
+- (NSUInteger)hash
+{
+ return self.characters.hash;
+}
+
- (NSString *)description
{
- return [NSString stringWithFormat:@"<%@: %p Characters=%@>", self.class, self, _characters];
+ return [NSString stringWithFormat:@"<%@: %p Characters='%@'>", self.class, self, _characters];
}
@end
diff --git a/HTMLKit/HTMLCommentToken.m b/HTMLKit/HTMLCommentToken.m
index 4cbb251..3677f6c 100644
--- a/HTMLKit/HTMLCommentToken.m
+++ b/HTMLKit/HTMLCommentToken.m
@@ -32,9 +32,25 @@
[_data appendString:string];
}
+#pragma mark - NSObject
+
+- (BOOL)isEqual:(id)other
+{
+ if ([other isKindOfClass:[self class]]) {
+ HTMLCommentToken *token = (HTMLCommentToken *)other;
+ return [self.data isEqualToString:token.data];
+ }
+ return NO;
+}
+
+- (NSUInteger)hash
+{
+ return self.data.hash;
+}
+
- (NSString *)description
{
- return [NSString stringWithFormat:@"<%@: %p Data=%@>", self.class, self, _data];
+ return [NSString stringWithFormat:@"<%@: %p Data='%@'>", self.class, self, _data];
}
@end
diff --git a/HTMLKit/HTMLDOCTYPEToken.m b/HTMLKit/HTMLDOCTYPEToken.m
index 810f5e3..fd6e1f2 100644
--- a/HTMLKit/HTMLDOCTYPEToken.m
+++ b/HTMLKit/HTMLDOCTYPEToken.m
@@ -18,7 +18,7 @@
@implementation HTMLDOCTYPEToken
@synthesize name = _name;
- - (instancetype)initWithName:(NSString *)name
+- (instancetype)initWithName:(NSString *)name
{
self = [super init];
if (self) {
@@ -33,9 +33,29 @@
[_name appendString:string];
}
+#pragma mark - NSObject
+
+- (BOOL)isEqual:(id)other
+{
+ if ([other isKindOfClass:[self class]]) {
+ HTMLDOCTYPEToken *token = (HTMLDOCTYPEToken *)other;
+ return (
+ [self.name isEqualToString:token.name] &&
+ [self.publicIdentifier isEqualToString:token.publicIdentifier] &&
+ [self.systemIdentifier isEqualToString:token.systemIdentifier]
+ );
+ }
+ return NO;
+}
+
+- (NSUInteger)hash
+{
+ return self.name.hash + self.publicIdentifier.hash + self.systemIdentifier.hash;
+}
+
- (NSString *)description
{
- return [NSString stringWithFormat:@"<%@: %p Name=%@>", self.class, self, _name];
+ return [NSString stringWithFormat:@"<%@: %p Name='%@' Public='%@' System='%@'>", self.class, self, _name, _publicIdentifier, _systemIdentifier];
}
@end
diff --git a/HTMLKit/HTMLParseErrorToken.m b/HTMLKit/HTMLParseErrorToken.m
index 6097443..4e2bcdd 100644
--- a/HTMLKit/HTMLParseErrorToken.m
+++ b/HTMLKit/HTMLParseErrorToken.m
@@ -32,7 +32,7 @@
- (NSString *)description
{
- return [NSString stringWithFormat:@"<%@: %p Reason=%@ Location=%lu>", self.class, self, _reason, _location];
+ return [NSString stringWithFormat:@"<%@: %p Reason='%@' Location='%lu'>", self.class, self, _reason, _location];
}
@end
diff --git a/HTMLKit/HTMLTagToken.m b/HTMLKit/HTMLTagToken.m
index f5dcb58..2c4fe61 100644
--- a/HTMLKit/HTMLTagToken.m
+++ b/HTMLKit/HTMLTagToken.m
@@ -48,6 +48,25 @@
return self;
}
+#pragma mark - NSObject
+
+- (BOOL)isEqual:(id)other
+{
+ if ([other isKindOfClass:[self class]]) {
+ HTMLStartTagToken *token = (HTMLStartTagToken *)other;
+ return (
+ [self.tagName isEqualToString:token.tagName] &&
+ [self.attributes isEqualToDictionary:token.attributes]
+ );
+ }
+ return NO;
+}
+
+- (NSUInteger)hash
+{
+ return self.tagName.hash + self.attributes.hash;
+}
+
- (NSString *)description
{
return [NSString stringWithFormat:@"<%@: %p TagName=%@>", self.class, self, self.tagName];
@@ -66,6 +85,24 @@
return self;
}
+#pragma mark - NSObject
+
+- (BOOL)isEqual:(id)other
+{
+ if ([other isKindOfClass:[self class]]) {
+ HTMLStartTagToken *token = (HTMLStartTagToken *)other;
+ return (
+ [self.tagName isEqualToString:token.tagName]
+ );
+ }
+ return NO;
+}
+
+- (NSUInteger)hash
+{
+ return self.tagName.hash;
+}
+
- (NSString *)description
{
return [NSString stringWithFormat:@"<%@: %p TagName=%@>", self.class, self, self.tagName];