//
// HTMLCharacterToken.m
// HTMLKit
//
// Created by Iska on 23/10/14.
// Copyright (c) 2014 BrainCookie. All rights reserved.
//
#import "HTMLCharacterToken.h"
#import "NSString+HTMLKit.h"
@interface HTMLCharacterToken ()
{
NSMutableString *_characters;
}
@end
@implementation HTMLCharacterToken
- (instancetype)initWithString:(NSString *)string
{
self = [super init];
if (self) {
_characters = [string mutableCopy];
}
return self;
}
- (void)appendString:(NSString *)string
{
if (_characters == nil) {
_characters = [NSMutableString new];
}
[_characters appendString:string];
}
- (BOOL)isWhitespaceToken
{
return [_characters isHTMLWhitespaceString];
}
- (BOOL)isEmpty
{
return _characters.length == 0;
}
- (void)retainLeadingWhitespace
{
NSUInteger index = _characters.leadingHTMLWhitespaceLength;
if (index > 0) {
[_characters setString:[_characters substringToIndex:index]];
}
}
- (void)trimLeadingWhitespace
{
NSUInteger index = _characters.leadingHTMLWhitespaceLength;
if (index > 0) {
[_characters setString:[_characters substringFromIndex:index]];
}
}
- (void)trimFormIndex:(NSUInteger)index
{
[_characters setString:[_characters substringFromIndex:index]];
}
- (HTMLCharacterToken *)tokenBySplitingLeadingWhiteSpace
{
NSUInteger index = _characters.leadingHTMLWhitespaceLength;
if (index > 0) {
NSString *leading = [_characters substringToIndex:index];
[_characters setString:[_characters substringFromIndex:index]];
return [[HTMLCharacterToken alloc] initWithString:leading];
}
return nil;
}
#pragma mark - NSObject
- (BOOL)isEqual:(id)other
{
if ([other isKindOfClass:[self class]]) {
HTMLCharacterToken *token = (HTMLCharacterToken *)other;
return bothNilOrEqual(self.characters, token.characters);
}
return NO;
}
- (NSUInteger)hash
{
return self.characters.hash;
}
- (NSString *)description
{
return [NSString stringWithFormat:@"<%@: %p Characters='%@'>", self.class, self, _characters];
}
@end