diff --git a/HTMLKit/HTMLParser.m b/HTMLKit/HTMLParser.m
index 5a28b5d..390bbd6 100644
--- a/HTMLKit/HTMLParser.m
+++ b/HTMLKit/HTMLParser.m
@@ -32,7 +32,6 @@
NSMutableArray *_errors;
- NSMutableDictionary *_insertionModes;
HTMLInsertionMode _insertionMode;
HTMLInsertionMode _originalInsertionMode;
@@ -71,9 +70,7 @@
_errors = [NSMutableArray new];
- _insertionModes = [NSMutableDictionary new];
_insertionMode = HTMLInsertionModeInitial;
- [self setupStateMachine];
_stackOfOpenElements = [HTMLStackOfOpenElements new];
_listOfActiveFormattingElements = [HTMLListOfActiveFormattingElements new];
@@ -89,15 +86,6 @@
return self;
}
-- (void)setupStateMachine
-{
- for (NSUInteger i = 0; i < HTMLInsertionModesCount; i++) {
- NSString *selectorName = HTMLInsertionModesTable[i];
- SEL selector = NSSelectorFromString(selectorName);
- [_insertionModes setObject:[NSValue valueWithPointer:selector] forKey:@(i)];
- }
-}
-
#pragma mark - Properties
- (NSArray *)parseErrors
@@ -272,13 +260,53 @@
- (void)processToken:(HTMLToken *)token byApplyingRulesForInsertionMode:(HTMLInsertionMode)insertionMode
{
- SEL selector = [[_insertionModes objectForKey:@(_insertionMode)] pointerValue];
- if ([self respondsToSelector:selector]) {
- /* ObjC-Runtime-style performSelector for ARC to shut up the
- compiler, since it can't figure out the type of the return
- value on its own */
- IMP method = [self methodForSelector:selector];
- ((void (*)(id, SEL, id))method)(self, selector, token);
+ switch (_insertionMode) {
+ case HTMLInsertionModeInitial:
+ return [self HTMLInsertionModeInitial:token];
+ case HTMLInsertionModeBeforeHTML:
+ return [self HTMLInsertionModeBeforeHTML:token];
+ case HTMLInsertionModeBeforeHead:
+ return [self HTMLInsertionModeBeforeHead:token];
+ case HTMLInsertionModeInHead:
+ return [self HTMLInsertionModeInHead:token];
+ case HTMLInsertionModeInHeadNoscript:
+ return [self HTMLInsertionModeInHeadNoscript:token];
+ case HTMLInsertionModeAfterHead:
+ return [self HTMLInsertionModeAfterHead:token];
+ case HTMLInsertionModeInBody:
+ return [self HTMLInsertionModeInBody:token];
+ case HTMLInsertionModeText:
+ return [self HTMLInsertionModeText:token];
+ case HTMLInsertionModeInTable:
+ return [self HTMLInsertionModeInTable:token];
+ case HTMLInsertionModeInTableText:
+ return [self HTMLInsertionModeInTableText:token];
+ case HTMLInsertionModeInCaption:
+ return [self HTMLInsertionModeInCaption:token];
+ case HTMLInsertionModeInColumnGroup:
+ return [self HTMLInsertionModeInColumnGroup:token];
+ case HTMLInsertionModeInTableBody:
+ return [self HTMLInsertionModeInTableBody:token];
+ case HTMLInsertionModeInRow:
+ return [self HTMLInsertionModeInRow:token];
+ case HTMLInsertionModeInCell:
+ return [self HTMLInsertionModeInCell:token];
+ case HTMLInsertionModeInSelect:
+ return [self HTMLInsertionModeInSelect:token];
+ case HTMLInsertionModeInSelectInTable:
+ return [self HTMLInsertionModeInSelectInTable:token];
+ case HTMLInsertionModeInTemplate:
+ return [self HTMLInsertionModeInTemplate:token];
+ case HTMLInsertionModeAfterBody:
+ return [self HTMLInsertionModeAfterBody:token];
+ case HTMLInsertionModeInFrameset:
+ return [self HTMLInsertionModeInFrameset:token];
+ case HTMLInsertionModeAfterFrameset:
+ return [self HTMLInsertionModeAfterFrameset:token];
+ case HTMLInsertionModeAfterAfterBody:
+ return [self HTMLInsertionModeAfterAfterBody:token];
+ case HTMLInsertionModeAfterAfterFrameset:
+ return [self HTMLInsertionModeAfterAfterFrameset:token];
}
}
diff --git a/HTMLKit/HTMLParserInsertionModes.h b/HTMLKit/HTMLParserInsertionModes.h
index 5dee85c..69fb669 100644
--- a/HTMLKit/HTMLParserInsertionModes.h
+++ b/HTMLKit/HTMLParserInsertionModes.h
@@ -30,8 +30,6 @@
MODE_ENTRY( HTMLInsertionModeAfterFrameset, ) \
MODE_ENTRY( HTMLInsertionModeAfterAfterBody, ) \
MODE_ENTRY( HTMLInsertionModeAfterAfterFrameset, ) \
- MODE_ENTRY( HTMLInsertionModeCurrentTemplate, ) \
- MODE_ENTRY( HTMLInsertionModesCount, )
typedef NS_ENUM(NSUInteger, HTMLInsertionMode)
{
@@ -39,13 +37,3 @@ typedef NS_ENUM(NSUInteger, HTMLInsertionMode)
INSERTION_MODES
#undef MODE_ENTRY
};
-
-static NSString * HTMLInsertionModesTable[] = {
-#define LITERAL(X) #X
-#define STRINGIFY(X) LITERAL(X)
-#define MODE_ENTRY( name, value ) [name] = @#name STRINGIFY(:),
- INSERTION_MODES
-#undef MODE_ENTRY
-#undef STRINGIFY
-#undef LITERAL
-};
diff --git a/HTMLKit/HTMLTokenizerStates.h b/HTMLKit/HTMLTokenizerStates.h
index e3ff330..086df56 100644
--- a/HTMLKit/HTMLTokenizerStates.h
+++ b/HTMLKit/HTMLTokenizerStates.h
@@ -74,8 +74,7 @@
STATE_ENTRY( HTMLTokenizerStateDOCTYPESystemIdentifierSingleQuoted, ) \
STATE_ENTRY( HTMLTokenizerStateAfterDOCTYPESystemIdentifier, ) \
STATE_ENTRY( HTMLTokenizerStateBogusDOCTYPE, ) \
- STATE_ENTRY( HTMLTokenizerStateCDATASection, ) \
- STATE_ENTRY( HTMLTokenizerStatesCount, )
+ STATE_ENTRY( HTMLTokenizerStateCDATASection, )
typedef NS_ENUM(NSUInteger, HTMLTokenizerState)
{