simplify parsing of hex numbers

as suggested by @pickfire
This commit is contained in:
ConnorSkees 2020-06-17 06:09:32 -04:00
parent c957c10678
commit 00bd9f3847

View File

@ -554,83 +554,41 @@ impl<'a> Parser<'a> {
}); });
} }
} }
match s.len() { let v = match u32::from_str_radix(&s, 16) {
3 => { Ok(a) => a,
let v = match u16::from_str_radix(&s, 16) { Err(_) => {
Ok(a) => a, return Ok(Value::String(format!("#{}", s), QuoteKind::None).span(self.span_before))
Err(_) => {
return Ok(Value::String(format!("#{}", s), QuoteKind::None)
.span(self.span_before))
}
};
let red = (((v & 0xf00) >> 8) * 0x11) as u8;
let green = (((v & 0x0f0) >> 4) * 0x11) as u8;
let blue = ((v & 0x00f) * 0x11) as u8;
Ok(
Value::Color(Box::new(Color::new(red, green, blue, 1, format!("#{}", s))))
.span(self.span_before),
)
} }
4 => { };
let v = match u16::from_str_radix(&s, 16) { let (red, green, blue, alpha) = match s.len() {
Ok(a) => a, 3 => (
Err(_) => { (((v & 0x0f00) >> 8) * 0x11) as u8,
return Ok(Value::String(format!("#{}", s), QuoteKind::None) (((v & 0x00f0) >> 4) * 0x11) as u8,
.span(self.span_before)) ((v & 0x000f) * 0x11) as u8,
} 1,
}; ),
let red = (((v & 0xf000) >> 12) * 0x11) as u8; 4 => (
let green = (((v & 0x0f00) >> 8) * 0x11) as u8; (((v & 0xf000) >> 12) * 0x11) as u8,
let blue = (((v & 0x00f0) >> 4) * 0x11) as u8; (((v & 0x0f00) >> 8) * 0x11) as u8,
let alpha = ((v & 0x000f) * 0x11) as u8; (((v & 0x00f0) >> 4) * 0x11) as u8,
Ok(Value::Color(Box::new(Color::new( ((v & 0x000f) * 0x11) as u8,
red, ),
green, 6 => (
blue, ((v & 0x00ff_0000) >> 16) as u8,
alpha, ((v & 0x0000_ff00) >> 8) as u8,
format!("#{}", s), (v & 0x0000_00ff) as u8,
))) 1,
.span(self.span_before)) ),
} 8 => (
6 => { ((v & 0xff00_0000) >> 24) as u8,
let v = match u32::from_str_radix(&s, 16) { ((v & 0x00ff_0000) >> 16) as u8,
Ok(a) => a, ((v & 0x0000_ff00) >> 8) as u8,
Err(_) => { (v & 0x0000_00ff) as u8,
return Ok(Value::String(format!("#{}", s), QuoteKind::None) ),
.span(self.span_before)) _ => return Err(("Expected hex digit.", self.span_before).into()),
} };
}; let color = Color::new(red, green, blue, alpha, format!("#{}", s));
let red = ((v & 0x00ff_0000) >> 16) as u8; Ok(Value::Color(Box::new(color)).span(self.span_before))
let green = ((v & 0x0000_ff00) >> 8) as u8;
let blue = (v & 0x0000_00ff) as u8;
Ok(
Value::Color(Box::new(Color::new(red, green, blue, 1, format!("#{}", s))))
.span(self.span_before),
)
}
8 => {
let v = match u32::from_str_radix(&s, 16) {
Ok(a) => a,
Err(_) => {
return Ok(Value::String(format!("#{}", s), QuoteKind::None)
.span(self.span_before))
}
};
let red = ((v & 0xff00_0000) >> 24) as u8;
let green = ((v & 0x00ff_0000) >> 16) as u8;
let blue = ((v & 0x0000_ff00) >> 8) as u8;
let alpha = (v & 0x0000_00ff) as u8;
Ok(Value::Color(Box::new(Color::new(
red,
green,
blue,
alpha,
format!("#{}", s),
)))
.span(self.span_before))
}
_ => Err(("Expected hex digit.", self.span_before).into()),
}
} }
fn eat_calc_args(&mut self, buf: &mut String) -> SassResult<()> { fn eat_calc_args(&mut self, buf: &mut String) -> SassResult<()> {