mirror of
https://github.com/servo/servo.git
synced 2025-07-22 23:03:42 +01:00
style: Parse any order of number and angle for Rotate.
Rotate accepts rotate axis and angle in any order (i.e. <number>{3} <angle> or <angle> <number>{3}), so we rewrite the parser. Differential Revision: https://phabricator.services.mozilla.com/D11417
This commit is contained in:
parent
0b9ecbccfe
commit
d8bd29292e
1 changed files with 21 additions and 10 deletions
|
@ -357,17 +357,28 @@ impl Parse for Rotate {
|
|||
return Ok(generic::Rotate::None);
|
||||
}
|
||||
|
||||
if let Ok(rx) = input.try(|i| Number::parse(context, i)) {
|
||||
// 'rotate: <number>{3} <angle>'
|
||||
let ry = Number::parse(context, input)?;
|
||||
let rz = Number::parse(context, input)?;
|
||||
let angle = specified::Angle::parse(context, input)?;
|
||||
return Ok(generic::Rotate::Rotate3D(rx, ry, rz, angle));
|
||||
}
|
||||
// Parse <angle> or [ x | y | z | <number>{3} ] && <angle>.
|
||||
// TODO: Bug 1504327: Parse [x|y|z] keywords.
|
||||
//
|
||||
// The rotate axis and angle could be in any order, so we parse angle twice to cover
|
||||
// two cases. i.e. `<number>{3} <angle>` or `<angle> <number>{3}`
|
||||
let angle = input.try(|i| specified::Angle::parse(context, i)).ok();
|
||||
let axis = input.try(|i| -> Result<_, ParseError> {
|
||||
Ok((
|
||||
Number::parse(context, i)?,
|
||||
Number::parse(context, i)?,
|
||||
Number::parse(context, i)?,
|
||||
))
|
||||
}).ok();
|
||||
let angle = match angle {
|
||||
Some(a) => a,
|
||||
None => specified::Angle::parse(context, input)?,
|
||||
};
|
||||
|
||||
// 'rotate: <angle>'
|
||||
let angle = specified::Angle::parse(context, input)?;
|
||||
Ok(generic::Rotate::Rotate(angle))
|
||||
Ok(match axis {
|
||||
Some((x, y, z)) => generic::Rotate::Rotate3D(x, y, z, angle),
|
||||
None => generic::Rotate::Rotate(angle),
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue