diff --git a/HTMLKit/HTMLTokenizer.h b/HTMLKit/HTMLTokenizer.h index a4d29a7..c2c82dc 100644 --- a/HTMLKit/HTMLTokenizer.h +++ b/HTMLKit/HTMLTokenizer.h @@ -14,7 +14,7 @@ * HTML Tokenizer * https://html.spec.whatwg.org/multipage/syntax.html#tokenization */ -@interface HTMLTokenizer : NSObject +@interface HTMLTokenizer : NSObject @property (nonatomic, assign) HTMLTokenizerState state; diff --git a/HTMLKit/HTMLTokenizer.m b/HTMLKit/HTMLTokenizer.m index ba564a9..ef41dad 100644 --- a/HTMLKit/HTMLTokenizer.m +++ b/HTMLKit/HTMLTokenizer.m @@ -125,6 +125,27 @@ [self switchToState:state]; } +#pragma mark - Fast Enumeration + +- (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState *)state objects:(__unsafe_unretained id [])buffer count:(NSUInteger)len +{ + if (state->state == 0) { + state->mutationsPtr = &state->extra[0]; + state->state = 1; + } + + HTMLToken *nextToken = [self nextToken]; + + if (nextToken == nil) { + return 0; + } + + __unsafe_unretained const id *const_ptr = (__unsafe_unretained id *)(__bridge void *)nextToken; + state->itemsPtr = (__typeof__(state->itemsPtr))const_ptr; + + return 1; +} + #pragma mark - Emits - (void)emitToken:(HTMLToken *)token