summaryrefslogtreecommitdiff
path: root/src/tokeniser.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/tokeniser.rs')
-rw-r--r--src/tokeniser.rs20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/tokeniser.rs b/src/tokeniser.rs
index 2214f42..3608e9e 100644
--- a/src/tokeniser.rs
+++ b/src/tokeniser.rs
@@ -93,6 +93,26 @@ impl Tokeniser {
return option;
}
+ /// Consume next characters if they match a pattern.
+ pub fn eat_if(&mut self, pattern: &str) -> Option<String> {
+ // Check that next characters match the pattern.
+ for (i, c) in pattern.chars().enumerate() {
+ if let Some(d) = self.chars.get(self.mark.i + i) {
+ if c == *d {
+ continue;
+ }
+ }
+ return None;
+ }
+ // Consume the next characters.
+ self.prev = self.mark;
+ for c in pattern.chars() {
+ self.mark.advance(c);
+ self.mark_end();
+ }
+ return Some(pattern.to_string());
+ }
+
/// Consume whitespace.
pub fn eat_whitespace(&mut self) {
while let Some(c) = self.peek_char() {