diff --git a/HTMLKit/HTMLInputStreamReader.h b/HTMLKit/HTMLInputStreamReader.h index c50326d..7823a03 100644 --- a/HTMLKit/HTMLInputStreamReader.h +++ b/HTMLKit/HTMLInputStreamReader.h @@ -29,6 +29,8 @@ - (BOOL)consumeCharacter:(UTF32Char)character; - (BOOL)consumeUnsignedInt:(unsigned int *)result; - (BOOL)consumeHexInt:(unsigned int *)result; +- (BOOL)consumeString:(NSString *)string caseSensitive:(BOOL)caseSensitive; +- (NSString *)consumeCharactersUpToCharactersInString:(NSString *)characters; - (void)markCurrentLocation; - (void)rewindToMarkedLocation; diff --git a/HTMLKit/HTMLInputStreamReader.m b/HTMLKit/HTMLInputStreamReader.m index 3fd1751..cd5d18e 100644 --- a/HTMLKit/HTMLInputStreamReader.m +++ b/HTMLKit/HTMLInputStreamReader.m @@ -137,6 +137,32 @@ return success; } +- (BOOL)consumeString:(NSString *)string caseSensitive:(BOOL)caseSensitive +{ + _scanner.caseSensitive = caseSensitive; + BOOL success = [_scanner scanString:string intoString:nil]; + _location = _scanner.scanLocation; + return success; +} + +- (NSString *)consumeCharactersUpToCharactersInString:(NSString *)characters +{ + NSCharacterSet *set = [NSCharacterSet characterSetWithCharactersInString:characters]; + + NSMutableString *consumed = [NSMutableString string]; + + while (YES) { + UTF32Char nextCharacter = [self consumeNextInputCharacter]; + if ([set longCharacterIsMember:nextCharacter] || nextCharacter == EOF) { + break; + } + [consumed appendString:StringFromUTF32Char(nextCharacter)]; + } + [self unconsumeCurrentInputCharacter]; + + return consumed.length > 0 ? consumed : nil; +} + - (void)unconsumeCurrentInputCharacter { _location -= _consume;