diff --git a/HTMLKit/HTMLTokenizer.m b/HTMLKit/HTMLTokenizer.m
index d64cba9..2dc8fd8 100644
--- a/HTMLKit/HTMLTokenizer.m
+++ b/HTMLKit/HTMLTokenizer.m
@@ -33,6 +33,7 @@
/* Pending Tokens & Attributes*/
HTMLTagToken *_currentTagToken;
+ HTMLCharacterToken *_currentCharacterToken;
HTMLCommentToken *_currentCommentToken;
HTMLDOCTYPEToken *_currentDoctypeToken;
NSMutableString *_currentAttributeName;
@@ -131,6 +132,10 @@
- (void)emitToken:(HTMLToken *)token
{
+ if (_currentCharacterToken != nil) {
+ [_tokens addObject:_currentCharacterToken];
+ _currentCharacterToken = nil;
+ }
[_tokens addObject:token];
}
@@ -174,16 +179,15 @@
- (void)emitCharacterTokenWithString:(NSString *)string
{
- if (string == nil) {
+ if (string.length == 0) {
return;
}
- HTMLToken *previousToken = [_tokens lastObject];
- if ([previousToken isCharacterToken]) {
- [(HTMLCharacterToken *)previousToken appendString:string];
- } else {
- [self emitToken:[[HTMLCharacterToken alloc] initWithString:string]];
+ if (_currentCharacterToken == nil) {
+ _currentCharacterToken = [HTMLCharacterToken new];
}
+
+ [_currentCharacterToken appendString:string];
}
- (void)emitParseError:(NSString *)format, ... NS_FORMAT_FUNCTION(1, 2)
diff --git a/HTMLKitTests/HTMLKitTokenizerPerformance.m b/HTMLKitTests/HTMLKitTokenizerPerformance.m
index 9aa8cfa..83c3c09 100644
--- a/HTMLKitTests/HTMLKitTokenizerPerformance.m
+++ b/HTMLKitTests/HTMLKitTokenizerPerformance.m
@@ -26,11 +26,7 @@
[self measureBlock:^{
HTMLTokenizer *tokenizer = [[HTMLTokenizer alloc] initWithString:string];
-
- id token = nil;
- do {
- token = [tokenizer nextObject];
- } while (token != nil);
+ [tokenizer allObjects];
}];
}