From e43d7c21d1dbe3ed8f0564c8aafe19407e6c03ed Mon Sep 17 00:00:00 2001 From: iska Date: Sun, 26 Oct 2014 18:11:21 +0100 Subject: [PATCH] Change tokenzing to concatenate all adjacent character tokens into one --- HTMLKit/HTMLCharacterToken.h | 2 ++ HTMLKit/HTMLCharacterToken.m | 10 +++++++--- HTMLKit/HTMLTokenizer.m | 8 ++++++-- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/HTMLKit/HTMLCharacterToken.h b/HTMLKit/HTMLCharacterToken.h index b200a7a..e54bd1b 100644 --- a/HTMLKit/HTMLCharacterToken.h +++ b/HTMLKit/HTMLCharacterToken.h @@ -15,4 +15,6 @@ - (instancetype)initWithString:(NSString *)string; +- (void)appendString:(NSString *)string; + @end \ No newline at end of file diff --git a/HTMLKit/HTMLCharacterToken.m b/HTMLKit/HTMLCharacterToken.m index 6aecbcf..e23a205 100644 --- a/HTMLKit/HTMLCharacterToken.m +++ b/HTMLKit/HTMLCharacterToken.m @@ -10,8 +10,7 @@ @interface HTMLCharacterToken () { -#warning Find a better solution. Single characters vs String of multiple characters - NSString *_characters; + NSMutableString *_characters; } @end @@ -21,11 +20,16 @@ { self = [super init]; if (self) { - _characters = [string copy]; + _characters = [[NSMutableString alloc] initWithString:string]; } return self; } +- (void)appendString:(NSString *)string +{ + [_characters appendString:string]; +} + #pragma mark - NSObject - (BOOL)isEqual:(id)other diff --git a/HTMLKit/HTMLTokenizer.m b/HTMLKit/HTMLTokenizer.m index 29c238d..745d99b 100644 --- a/HTMLKit/HTMLTokenizer.m +++ b/HTMLKit/HTMLTokenizer.m @@ -167,8 +167,12 @@ - (void)emitCharacterTokenWithString:(NSString *)string { - HTMLToken *token = [[HTMLCharacterToken alloc] initWithString:string]; - [self emitToken:token]; + HTMLToken *previousToken = [_tokens lastObject]; + if ([previousToken isCharacterToken]) { + [(HTMLCharacterToken *)previousToken appendString:string]; + } else { + [self emitToken:[[HTMLCharacterToken alloc] initWithString:string]]; + } } - (void)emitParseError:(NSString *)format, ... NS_FORMAT_FUNCTION(1, 2)