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)