diff --git a/HTMLKit/HTMLInputStreamReader.m b/HTMLKit/HTMLInputStreamReader.m index 991f587..3fd1751 100644 --- a/HTMLKit/HTMLInputStreamReader.m +++ b/HTMLKit/HTMLInputStreamReader.m @@ -7,55 +7,7 @@ // #import "HTMLInputStreamReader.h" - -#pragma mark Constants & Inlines - -static UTF32Char const REPLACEMENT = 0xFFFD; -static UTF32Char const LINE_FEED = 0x000A; -static UTF32Char const CARRIAGE_RETURN = 0x000D; - -NS_INLINE BOOL isControlOrUndefinedCharacter(UTF32Char character) -{ - return ((character >= 0x0001 && character <= 0x0008) || - (character >= 0x000E && character <= 0x001F) || - (character >= 0x007F && character <= 0x009F) || - (character >= 0xFDD0 && character <= 0xFDEF) || - character == 0x000B || - character == 0xFFFE || - character == 0xFFFF || - character == 0x1FFFE || - character == 0x1FFFF || - character == 0x2FFFE || - character == 0x2FFFF || - character == 0x3FFFE || - character == 0x3FFFF || - character == 0x4FFFE || - character == 0x4FFFF || - character == 0x5FFFE || - character == 0x5FFFF || - character == 0x6FFFE || - character == 0x6FFFF || - character == 0x7FFFE || - character == 0x7FFFF || - character == 0x8FFFE || - character == 0x8FFFF || - character == 0x9FFFE || - character == 0x9FFFF || - character == 0xAFFFE || - character == 0xAFFFF || - character == 0xBFFFE || - character == 0xBFFFF || - character == 0xCFFFE || - character == 0xCFFFF || - character == 0xDFFFE || - character == 0xDFFFF || - character == 0xEFFFE || - character == 0xEFFFF || - character == 0xFFFFE || - character == 0xFFFFF || - character == 0x10FFFE || - character == 0x10FFFF); -} +#import "HTMLTokenizerCharacters.h" #pragma mark - HTMLInputStreamReader @@ -113,7 +65,7 @@ NS_INLINE BOOL isControlOrUndefinedCharacter(UTF32Char character) [HTMLInputStreamReaderErrors reportParseError:HTMLStreamReaderErrorIsolatedLowSurrogate atLocation:_location andCallback:_errorCallback]; - return REPLACEMENT; + return REPLACEMENT_CHAR; } if (CFStringIsSurrogateHighCharacter(nextInputCharacter)) { @@ -122,7 +74,7 @@ NS_INLINE BOOL isControlOrUndefinedCharacter(UTF32Char character) [HTMLInputStreamReaderErrors reportParseError:HTMLStreamReaderErrorIsolatedHighSurrogate atLocation:_location andCallback:_errorCallback]; - return REPLACEMENT; + return REPLACEMENT_CHAR; } nextInputCharacter = CFStringGetLongCharacterForSurrogatePair(nextInputCharacter, surrogateLow); diff --git a/HTMLKit/HTMLTokenizerCharacters.h b/HTMLKit/HTMLTokenizerCharacters.h index dd3ae73..2e87159 100644 --- a/HTMLKit/HTMLTokenizerCharacters.h +++ b/HTMLKit/HTMLTokenizerCharacters.h @@ -6,8 +6,94 @@ // Copyright (c) 2014 BrainCookie. All rights reserved. // -#ifndef HTMLKit_Header_h -#define HTMLKit_Header_h +#define CHARACTERS \ + CHAR( NULL_CHAR, 0x0000 ) \ + CHAR( CHARACTER_TABULATION, 0x0009 ) \ + CHAR( LINE_FEED, 0x000A ) \ + CHAR( FORM_FEED, 0x000C ) \ + CHAR( CARRIAGE_RETURN, 0x000D ) \ + CHAR( SPACE, 0x0020 ) \ + CHAR( EXCLAMATION_MARK, 0x0021 ) \ + CHAR( NUMBER_SIGN, 0x0023 ) \ + CHAR( AMPERSAND, 0x0026 ) \ + CHAR( SOLIDUS, 0x002F ) \ + CHAR( DIGIT_ZERO, 0x0030 ) \ + CHAR( DIGIT_NINE, 0x0039 ) \ + CHAR( LATIN_CAPITAL_LETTER_A, 0x0041 ) \ + CHAR( LATIN_CAPITAL_LETTER_F, 0x0046 ) \ + CHAR( LATIN_CAPITAL_LETTER_X, 0x0058 ) \ + CHAR( LATIN_CAPITAL_LETTER_Z, 0x005A ) \ + CHAR( LATIN_SMALL_LETTER_A, 0x0061 ) \ + CHAR( LATIN_SMALL_LETTER_F, 0x0066 ) \ + CHAR( LATIN_SMALL_LETTER_X, 0x0078 ) \ + CHAR( LATIN_SMALL_LETTER_Z, 0x007A ) \ + CHAR( SEMICOLON, 0x003B ) \ + CHAR( LESS_THAN_SIGN, 0x003C ) \ + CHAR( QUESTION_MARK, 0x003F ) \ + CHAR( REPLACEMENT_CHAR, 0xFFFD ) +#define CHAR( name, value ) static UTF32Char const name = value; +CHARACTERS +#undef CHAR + +NS_INLINE BOOL isControlOrUndefinedCharacter(UTF32Char character) +{ + return ((character >= 0x0001 && character <= 0x0008) || + (character >= 0x000E && character <= 0x001F) || + (character >= 0x007F && character <= 0x009F) || + (character >= 0xFDD0 && character <= 0xFDEF) || + character == 0x000B || + character == 0xFFFE || + character == 0xFFFF || + character == 0x1FFFE || + character == 0x1FFFF || + character == 0x2FFFE || + character == 0x2FFFF || + character == 0x3FFFE || + character == 0x3FFFF || + character == 0x4FFFE || + character == 0x4FFFF || + character == 0x5FFFE || + character == 0x5FFFF || + character == 0x6FFFE || + character == 0x6FFFF || + character == 0x7FFFE || + character == 0x7FFFF || + character == 0x8FFFE || + character == 0x8FFFF || + character == 0x9FFFE || + character == 0x9FFFF || + character == 0xAFFFE || + character == 0xAFFFF || + character == 0xBFFFE || + character == 0xBFFFF || + character == 0xCFFFE || + character == 0xCFFFF || + character == 0xDFFFE || + character == 0xDFFFF || + character == 0xEFFFE || + character == 0xEFFFF || + character == 0xFFFFE || + character == 0xFFFFF || + character == 0x10FFFE || + character == 0x10FFFF); +} + +NS_INLINE BOOL isDigit(UTF32Char character) +{ + return (character >= DIGIT_ZERO && character <= DIGIT_NINE); +} + +NS_INLINE BOOL isHexDigit(UTF32Char character) +{ + return ((character >= DIGIT_ZERO && character <= DIGIT_NINE) || + (character >= LATIN_CAPITAL_LETTER_A && character <= LATIN_CAPITAL_LETTER_F) || + (character >= LATIN_SMALL_LETTER_A && character <= LATIN_SMALL_LETTER_F)); +} + +NS_INLINE BOOL isValidNumericRange(UTF32Char character) +{ + return ((character >= 0xD800 && character <= 0xDFFF) + || character > 0x10FFFF); +} -#endif