Rename LengthOrPercentageOrAutoOrContent to FlexBasis

This commit is contained in:
Anthony Ramine 2017-06-17 12:28:32 +02:00
parent a568f7752f
commit bc9bc1d340
11 changed files with 111 additions and 169 deletions

View file

@ -1101,72 +1101,6 @@ pub type LengthOrNormal = Either<Length, Normal>;
/// Either a `<length>` or the `auto` keyword.
pub type LengthOrAuto = Either<Length, Auto>;
/// Either a `<length>` or a `<percentage>` or the `auto` keyword or the
/// `content` keyword.
#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
#[derive(Clone, Debug, HasViewportPercentage, PartialEq, ToCss)]
pub enum LengthOrPercentageOrAutoOrContent {
/// A `<length>`.
Length(NoCalcLength),
/// A percentage.
Percentage(Percentage),
/// A `calc` node.
Calc(Box<CalcLengthOrPercentage>),
/// The `auto` keyword.
Auto,
/// The `content` keyword.
Content
}
impl LengthOrPercentageOrAutoOrContent {
/// Parse a non-negative LengthOrPercentageOrAutoOrContent.
pub fn parse_non_negative<'i, 't>(context: &ParserContext, input: &mut Parser<'i, 't>)
-> Result<Self, ParseError<'i>> {
let num_context = AllowedLengthType::NonNegative;
let token = try!(input.next());
match token {
Token::Dimension { value, ref unit, .. } if num_context.is_ok(context.parsing_mode, value) => {
NoCalcLength::parse_dimension(context, value, unit)
.map(LengthOrPercentageOrAutoOrContent::Length)
}
Token::Percentage { unit_value, .. } if num_context.is_ok(context.parsing_mode, unit_value) => {
Ok(LengthOrPercentageOrAutoOrContent::Percentage(Percentage(unit_value)))
}
Token::Number { value, .. } if value == 0. => {
Ok(Self::zero())
}
Token::Ident(ref value) if value.eq_ignore_ascii_case("auto") => {
Ok(LengthOrPercentageOrAutoOrContent::Auto)
}
Token::Ident(ref value) if value.eq_ignore_ascii_case("content") => {
Ok(LengthOrPercentageOrAutoOrContent::Content)
}
Token::Function(ref name) if name.eq_ignore_ascii_case("calc") => {
let calc = try!(input.parse_nested_block(|i| {
CalcNode::parse_length_or_percentage(context, i, num_context)
}));
Ok(LengthOrPercentageOrAutoOrContent::Calc(Box::new(calc)))
}
_ => Err(())
}.map_err(|()| BasicParseError::UnexpectedToken(token).into())
}
/// Returns the `auto` value.
pub fn auto() -> Self {
LengthOrPercentageOrAutoOrContent::Auto
}
/// Returns a value representing a `0` length.
pub fn zero() -> Self {
LengthOrPercentageOrAutoOrContent::Length(NoCalcLength::zero())
}
/// Returns a value representing `0%`.
pub fn zero_percent() -> Self {
LengthOrPercentageOrAutoOrContent::Percentage(Percentage::zero())
}
}
/// Either a `<length>` or a `<number>`.
pub type LengthOrNumber = Either<Length, Number>;