summaryrefslogtreecommitdiff
path: root/src/syntax/tokens.rs
diff options
context:
space:
mode:
authorMartin Haug <mhaug@live.de>2020-07-15 20:57:26 +0200
committerMartin Haug <mhaug@live.de>2020-07-15 20:57:26 +0200
commit1683ca87f797a6262f0a4f75bde0e23eca31798c (patch)
treeb6ede1d5ba6c966ad2f83fe92d14c0d5b5204ca5 /src/syntax/tokens.rs
parent28c3a797ec7a6fbe3f5069604e5b19a00ae52344 (diff)
Healed field for RgbaColors, CodeRev feedback 🤝
Diffstat (limited to 'src/syntax/tokens.rs')
-rw-r--r--src/syntax/tokens.rs32
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)