Repeat less code in Gradient::parse_function

This commit is contained in:
Anthony Ramine 2017-04-13 17:33:18 +02:00
parent bb66bf81d5
commit e01529a647

View file

@ -136,41 +136,35 @@ impl ToCss for Gradient {
impl Gradient { impl Gradient {
/// Parses a gradient from the given arguments. /// Parses a gradient from the given arguments.
pub fn parse_function(context: &ParserContext, input: &mut Parser) -> Result<Gradient, ()> { pub fn parse_function(context: &ParserContext, input: &mut Parser) -> Result<Gradient, ()> {
let parse_linear_gradient = |input: &mut Parser| {
input.parse_nested_block(|input| {
let kind = try!(GradientKind::parse_linear(context, input));
let stops = try!(input.parse_comma_separated(|i| ColorStop::parse(context, i)));
Ok((kind, stops))
})
};
let parse_radial_gradient = |input: &mut Parser| {
input.parse_nested_block(|input| {
let kind = try!(GradientKind::parse_radial(context, input));
let stops = try!(input.parse_comma_separated(|i| ColorStop::parse(context, i)));
Ok((kind, stops))
})
};
let mut repeating = false; let mut repeating = false;
let (gradient_kind, stops) = match_ignore_ascii_case! { &try!(input.expect_function()), let (gradient_kind, stops) = match_ignore_ascii_case! { &try!(input.expect_function()),
"linear-gradient" => { "linear-gradient" => {
try!(input.parse_nested_block(|input| { try!(parse_linear_gradient(input))
let kind = try!(GradientKind::parse_linear(context, input));
let stops = try!(input.parse_comma_separated(|i| ColorStop::parse(context, i)));
Ok((kind, stops))
})
)
}, },
"repeating-linear-gradient" => { "repeating-linear-gradient" => {
repeating = true; repeating = true;
try!(input.parse_nested_block(|input| { try!(parse_linear_gradient(input))
let kind = try!(GradientKind::parse_linear(context, input));
let stops = try!(input.parse_comma_separated(|i| ColorStop::parse(context, i)));
Ok((kind, stops))
})
)
}, },
"radial-gradient" => { "radial-gradient" => {
try!(input.parse_nested_block(|input| { try!(parse_radial_gradient(input))
let kind = try!(GradientKind::parse_radial(context, input));
let stops = try!(input.parse_comma_separated(|i| ColorStop::parse(context, i)));
Ok((kind, stops))
})
)
}, },
"repeating-radial-gradient" => { "repeating-radial-gradient" => {
repeating = true; repeating = true;
try!(input.parse_nested_block(|input| { try!(parse_radial_gradient(input))
let kind = try!(GradientKind::parse_radial(context, input));
let stops = try!(input.parse_comma_separated(|i| ColorStop::parse(context, i)));
Ok((kind, stops))
})
)
}, },
_ => { return Err(()); } _ => { return Err(()); }
}; };