From 141310f9103fca005a58bdf66c6d4ac33e18b2f6 Mon Sep 17 00:00:00 2001 From: iska Date: Sun, 26 Oct 2014 01:54:30 +0200 Subject: [PATCH] Add equality and hash method for HTML Token classes --- HTMLKit/HTMLCharacterToken.m | 18 ++++++++++++++++- HTMLKit/HTMLCommentToken.m | 18 ++++++++++++++++- HTMLKit/HTMLDOCTYPEToken.m | 24 +++++++++++++++++++++-- HTMLKit/HTMLParseErrorToken.m | 2 +- HTMLKit/HTMLTagToken.m | 37 +++++++++++++++++++++++++++++++++++ 5 files changed, 94 insertions(+), 5 deletions(-) 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];