129 lines
2.6 KiB
Objective-C
129 lines
2.6 KiB
Objective-C
//
|
|
// HTMLTagToken.m
|
|
// HTMLKit
|
|
//
|
|
// Created by Iska on 23/10/14.
|
|
// Copyright (c) 2014 BrainCookie. All rights reserved.
|
|
//
|
|
|
|
#import "HTMLTagToken.h"
|
|
|
|
@interface HTMLTagToken ()
|
|
{
|
|
NSMutableString *_tagName;
|
|
HTMLOrderedDictionary *_attributes;
|
|
}
|
|
|
|
@end
|
|
|
|
@implementation HTMLTagToken
|
|
@synthesize tagName = _tagName;
|
|
|
|
- (instancetype)initWithTagName:(NSString *)tagName
|
|
{
|
|
return [self initWithTagName:tagName attributes:nil];
|
|
}
|
|
|
|
- (instancetype)initWithTagName:(NSString *)tagName attributes:(NSMutableDictionary *)attributes
|
|
{
|
|
self = [super init];
|
|
if (self) {
|
|
_tagName = [tagName mutableCopy];
|
|
if (attributes != nil) {
|
|
_attributes = [HTMLOrderedDictionary new];
|
|
[_attributes addEntriesFromDictionary:attributes];
|
|
}
|
|
}
|
|
return self;
|
|
}
|
|
|
|
- (void)appendStringToTagName:(NSString *)string
|
|
{
|
|
if (_tagName == nil) {
|
|
_tagName = [NSMutableString new];
|
|
}
|
|
[_tagName appendString:string];
|
|
}
|
|
|
|
@end
|
|
|
|
#pragma mark - Start Tag Token
|
|
|
|
@implementation HTMLStartTagToken
|
|
|
|
- (instancetype)initWithTagName:(NSString *)tagName
|
|
{
|
|
return [self initWithTagName:tagName attributes:nil];
|
|
}
|
|
|
|
- (instancetype)initWithTagName:(NSString *)tagName attributes:(NSMutableDictionary *)attributes
|
|
{
|
|
self = [super initWithTagName:tagName attributes:attributes];
|
|
if (self) {
|
|
self.type = HTMLTokenTypeStartTag;
|
|
}
|
|
return self;
|
|
}
|
|
|
|
- (BOOL)isEqual:(id)other
|
|
{
|
|
if ([other isKindOfClass:[self class]]) {
|
|
HTMLStartTagToken *token = (HTMLStartTagToken *)other;
|
|
|
|
return (bothNilOrEqual(self.tagName, token.tagName) &&
|
|
bothNilOrEqual(self.attributes, token.attributes));
|
|
}
|
|
return NO;
|
|
}
|
|
|
|
- (NSUInteger)hash
|
|
{
|
|
return self.tagName.hash + self.attributes.hash;
|
|
}
|
|
|
|
- (NSString *)description
|
|
{
|
|
return [NSString stringWithFormat:@"<%@: %p TagName=%@ Attributes=%@>", self.class, self, self.tagName, self.attributes];
|
|
}
|
|
|
|
@end
|
|
|
|
#pragma mark - End Tag Token
|
|
|
|
@implementation HTMLEndTagToken
|
|
|
|
- (instancetype)initWithTagName:(NSString *)tagName
|
|
{
|
|
return [self initWithTagName:tagName attributes:nil];
|
|
}
|
|
|
|
- (instancetype)initWithTagName:(NSString *)tagName attributes:(NSMutableDictionary *)attributes
|
|
{
|
|
self = [super initWithTagName:tagName attributes:attributes];
|
|
if (self) {
|
|
self.type = HTMLTokenTypeEndTag;
|
|
}
|
|
return self;
|
|
}
|
|
|
|
- (BOOL)isEqual:(id)other
|
|
{
|
|
if ([other isKindOfClass:[self class]]) {
|
|
HTMLStartTagToken *token = (HTMLStartTagToken *)other;
|
|
return bothNilOrEqual(self.tagName, token.tagName);
|
|
}
|
|
return NO;
|
|
}
|
|
|
|
- (NSUInteger)hash
|
|
{
|
|
return self.tagName.hash;
|
|
}
|
|
|
|
- (NSString *)description
|
|
{
|
|
return [NSString stringWithFormat:@"<%@: %p TagName=%@ Attributes=%@>", self.class, self, self.tagName, self.attributes];
|
|
}
|
|
|
|
@end
|