simplify parsing of hex numbers
as suggested by @pickfire
This commit is contained in:
parent
c957c10678
commit
00bd9f3847
@ -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<()> {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user