diff options
| author | Martin Haug <mhaug@live.de> | 2020-07-15 20:57:26 +0200 |
|---|---|---|
| committer | Martin Haug <mhaug@live.de> | 2020-07-15 20:57:26 +0200 |
| commit | 1683ca87f797a6262f0a4f75bde0e23eca31798c (patch) | |
| tree | b6ede1d5ba6c966ad2f83fe92d14c0d5b5204ca5 /src/syntax/tokens.rs | |
| parent | 28c3a797ec7a6fbe3f5069604e5b19a00ae52344 (diff) | |
Healed field for RgbaColors, CodeRev feedback 🤝
Diffstat (limited to 'src/syntax/tokens.rs')
| -rw-r--r-- | src/syntax/tokens.rs | 32 |
1 files changed, 15 insertions, 17 deletions
diff --git a/src/syntax/tokens.rs b/src/syntax/tokens.rs index d3e062a8..07a1ac92 100644 --- a/src/syntax/tokens.rs +++ b/src/syntax/tokens.rs @@ -224,24 +224,13 @@ impl<'s> Iterator for Tokens<'s> { // An escaped thing. '\\' if self.mode == Body => self.parse_escaped(), + // A hex expression. + '#' if self.mode == Header => self.parse_hex_value(), + // Expressions or just strings. c => { let body = self.mode == Body; - // This may be a hex expression - let hex_expr = if c == '#' && !body { - let payload = self.read_string_until(|n| { - match n { - '0'..='9' | 'a'..='f' | 'A'..='F' => false, - _ => true, - } - }, false, 0, 0).0; - - Some(ExprHex(payload)) - } else { - None - }; - let text = self.read_string_until(|n| { match n { c if c.is_whitespace() => true, @@ -253,9 +242,7 @@ impl<'s> Iterator for Tokens<'s> { } }, false, -(c.len_utf8() as isize), 0).0; - if let Some(hex_expr) = hex_expr { - hex_expr - } else if self.mode == Header { + if self.mode == Header { self.parse_expr(text) } else { Text(text) @@ -399,6 +386,17 @@ impl<'s> Tokens<'s> { } } + fn parse_hex_value(&mut self) -> Token<'s> { + // This will parse more than the permissable 0-9, a-f, A-F character + // ranges to provide nicer error messages later. + let payload = self.read_string_until( + |n| !n.is_ascii_alphanumeric(), + false, 0, 0 + ).0; + + ExprHex(payload) + } + fn parse_expr(&mut self, text: &'s str) -> Token<'s> { if let Ok(b) = text.parse::<bool>() { ExprBool(b) |
