From e1dea1faf3e29655c008bf139d2a9acf3229df53 Mon Sep 17 00:00:00 2001 From: Ben Bridle Date: Sat, 8 Mar 2025 16:46:18 +1300 Subject: Add Tokeniser::eat_if method This method is used for consuming a multi-character sequence only if that sequence matches a passed string. --- src/tokeniser.rs | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'src/tokeniser.rs') 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 { + // 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() { -- cgit v1.2.3-70-g09d2