diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/tokeniser.rs | 20 |
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() { |