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;