diff --git a/HTMLKit/HTMLTokenizerStates.h b/HTMLKit/HTMLTokenizerStates.h
index 82577eb..8d621b7 100644
--- a/HTMLKit/HTMLTokenizerStates.h
+++ b/HTMLKit/HTMLTokenizerStates.h
@@ -6,8 +6,90 @@
// Copyright (c) 2014 BrainCookie. All rights reserved.
//
-#ifndef HTMLKit_HTMLTokenizerStates_h
-#define HTMLKit_HTMLTokenizerStates_h
+#define TOKENIZER_STATES \
+ STATE_ENTRY( HTMLTokenizerStateData, = 0) \
+ STATE_ENTRY( HTMLTokenizerStateCharacterReferenceInData, ) \
+ STATE_ENTRY( HTMLTokenizerStateRCDATA, ) \
+ STATE_ENTRY( HTMLTokenizerStateCharacterReferenceInRCDATA, ) \
+ STATE_ENTRY( HTMLTokenizerStateRAWTEXT, ) \
+ STATE_ENTRY( HTMLTokenizerStateScriptData, ) \
+ STATE_ENTRY( HTMLTokenizerStatePLAINTEXT, ) \
+ STATE_ENTRY( HTMLTokenizerStateTagOpen, ) \
+ STATE_ENTRY( HTMLTokenizerStateEndTagOpen, ) \
+ STATE_ENTRY( HTMLTokenizerStateTagName, ) \
+ STATE_ENTRY( HTMLTokenizerStateRCDATALessThanSign, ) \
+ STATE_ENTRY( HTMLTokenizerStateRCDATAEndTagOpen, ) \
+ STATE_ENTRY( HTMLTokenizerStateRCDATAEndTagName, ) \
+ STATE_ENTRY( HTMLTokenizerStateRAWTEXTLessThanSign, ) \
+ STATE_ENTRY( HTMLTokenizerStateRAWTEXTEndTagOpen, ) \
+ STATE_ENTRY( HTMLTokenizerStateRAWTEXTEndTagName, ) \
+ STATE_ENTRY( HTMLTokenizerStateScriptDataLessThanSign, ) \
+ STATE_ENTRY( HTMLTokenizerStateScriptDataEndTagOpen, ) \
+ STATE_ENTRY( HTMLTokenizerStateScriptDataEndTagName, ) \
+ STATE_ENTRY( HTMLTokenizerStateScriptDataEscapeStart, ) \
+ STATE_ENTRY( HTMLTokenizerStateScriptDataEscapeStartDash, ) \
+ STATE_ENTRY( HTMLTokenizerStateScriptDataEscaped, ) \
+ STATE_ENTRY( HTMLTokenizerStateScriptDataEscapedDash, ) \
+ STATE_ENTRY( HTMLTokenizerStateScriptDataEscapedDashDash, ) \
+ STATE_ENTRY( HTMLTokenizerStateScriptDataEscapedLessThanSign, ) \
+ STATE_ENTRY( HTMLTokenizerStateScriptDataEscapedEndTagOpen, ) \
+ STATE_ENTRY( HTMLTokenizerStateScriptDataEscapedEndTagName, ) \
+ STATE_ENTRY( HTMLTokenizerStateScriptDataDoubleEscapeStart, ) \
+ STATE_ENTRY( HTMLTokenizerStateScriptDataDoubleEscaped, ) \
+ STATE_ENTRY( HTMLTokenizerStateScriptDataDoubleEscapedDash, ) \
+ STATE_ENTRY( HTMLTokenizerStateScriptDataDoubleEscapedDashDash, ) \
+ STATE_ENTRY( HTMLTokenizerStateScriptDataDoubleEscapedLessThanSign, ) \
+ STATE_ENTRY( HTMLTokenizerStateScriptDataDoubleEscapeEnd, ) \
+ STATE_ENTRY( HTMLTokenizerStateBeforeAttributeName, ) \
+ STATE_ENTRY( HTMLTokenizerStateAttributeName, ) \
+ STATE_ENTRY( HTMLTokenizerStateAfterAttributeName, ) \
+ STATE_ENTRY( HTMLTokenizerStateBeforeAttributeValue, ) \
+ STATE_ENTRY( HTMLTokenizerStateAttributeValueDoubleQuoted, ) \
+ STATE_ENTRY( HTMLTokenizerStateAttributeValueSingleQuoted, ) \
+ STATE_ENTRY( HTMLTokenizerStateAttributeValueUnquoted, ) \
+ STATE_ENTRY( HTMLTokenizerStateCharacterReferenceInAttributeValue, ) \
+ STATE_ENTRY( HTMLTokenizerStateAfterAttributeValueQuoted, ) \
+ STATE_ENTRY( HTMLTokenizerStateSelfClosingStartTag, ) \
+ STATE_ENTRY( HTMLTokenizerStateBogusComment, ) \
+ STATE_ENTRY( HTMLTokenizerStateMarkupDeclarationOpen, ) \
+ STATE_ENTRY( HTMLTokenizerStateCommentStart, ) \
+ STATE_ENTRY( HTMLTokenizerStateCommentStartDash, ) \
+ STATE_ENTRY( HTMLTokenizerStateComment, ) \
+ STATE_ENTRY( HTMLTokenizerStateCommentEndDash, ) \
+ STATE_ENTRY( HTMLTokenizerStateCommentEnd, ) \
+ STATE_ENTRY( HTMLTokenizerStateCommentEndBang, ) \
+ STATE_ENTRY( HTMLTokenizerStateDOCTYPE, ) \
+ STATE_ENTRY( HTMLTokenizerStateBeforeDOCTYPEName, ) \
+ STATE_ENTRY( HTMLTokenizerStateDOCTYPEName, ) \
+ STATE_ENTRY( HTMLTokenizerStateAfterDOCTYPEName, ) \
+ STATE_ENTRY( HTMLTokenizerStateAfterDOCTYPEPublicKeyword, ) \
+ STATE_ENTRY( HTMLTokenizerStateBeforeDOCTYPEPublicIdentifier, ) \
+ STATE_ENTRY( HTMLTokenizerStateDOCTYPEPublicIdentifierDoubleQuoted, ) \
+ STATE_ENTRY( HTMLTokenizerStateDOCTYPEPublicIdentifierSingleQuoted, ) \
+ STATE_ENTRY( HTMLTokenizerStateAfterDOCTYPEPublicIdentifier, ) \
+ STATE_ENTRY( HTMLTokenizerStateBetweenDOCTYPEPublicAndSystemIdentifiers, ) \
+ STATE_ENTRY( HTMLTokenizerStateAfterDOCTYPESystemKeyword, ) \
+ STATE_ENTRY( HTMLTokenizerStateBeforeDOCTYPESystemIdentifier, ) \
+ STATE_ENTRY( HTMLTokenizerStateDOCTYPESystemIdentifierDoubleQuoted, ) \
+ STATE_ENTRY( HTMLTokenizerStateDOCTYPESystemIdentifierSingleQuoted, ) \
+ STATE_ENTRY( HTMLTokenizerStateAfterDOCTYPESystemIdentifier, ) \
+ STATE_ENTRY( HTMLTokenizerStateBogusDOCTYPE, ) \
+ STATE_ENTRY( HTMLTokenizerStateCDATASection, ) \
+ STATE_ENTRY( HTMLTokenizerStatesCount, )
+typedef NS_ENUM(NSUInteger, HTMLTokenizerState)
+{
+#define STATE_ENTRY( name, value ) name value,
+ TOKENIZER_STATES
+#undef STATE_ENTRY
+};
-#endif
+static NSString* HTMLTokenizerStatesTable[] = {
+#define STATE_ENTRY( name, value ) [name] = @#name,
+ TOKENIZER_STATES
+#undef STATE_ENTRY
+};
+
+static NSString * NSStringFromState(HTMLTokenizerState state) {
+ return HTMLTokenizerStatesTable[state];
+}