From 226b757789f5581c05c13dbb7d92ce9b85c0c427 Mon Sep 17 00:00:00 2001 From: James Gilbertson Date: Wed, 8 Apr 2015 12:55:58 -0600 Subject: [PATCH] Convert remaining CSS values types to use AllowedNumericType when parsing numbers --- components/style/values.rs | 81 +++++++++++++++++--------------------- 1 file changed, 36 insertions(+), 45 deletions(-) diff --git a/components/style/values.rs b/components/style/values.rs index 81db7753cac..5c2c29f7aef 100644 --- a/components/style/values.rs +++ b/components/style/values.rs @@ -310,21 +310,21 @@ pub mod specified { const AU_PER_PC: CSSFloat = AU_PER_PT * 12.; impl Length { #[inline] - fn parse_internal(input: &mut Parser, negative_ok: bool) -> Result { + fn parse_internal(input: &mut Parser, context: &AllowedNumericType) -> Result { match try!(input.next()) { - Token::Dimension(ref value, ref unit) if negative_ok || value.value >= 0. => { - Length::parse_dimension(value.value, unit) - } - Token::Number(ref value) if value.value == 0. => Ok(Length::Absolute(Au(0))), + Token::Dimension(ref value, ref unit) if context.is_ok(value.value) => + Length::parse_dimension(value.value, unit), + Token::Number(ref value) if value.value == 0. => + Ok(Length::Absolute(Au(0))), _ => Err(()) } } #[allow(dead_code)] pub fn parse(input: &mut Parser) -> Result { - Length::parse_internal(input, /* negative_ok = */ true) + Length::parse_internal(input, &AllowedNumericType::All) } pub fn parse_non_negative(input: &mut Parser) -> Result { - Length::parse_internal(input, /* negative_ok = */ false) + Length::parse_internal(input, &AllowedNumericType::NonNegative) } pub fn parse_dimension(value: CSSFloat, unit: &str) -> Result { match_ignore_ascii_case! { unit, @@ -369,30 +369,27 @@ pub mod specified { } } impl LengthOrPercentage { - fn parse_internal(input: &mut Parser, negative_ok: bool) - -> Result { + fn parse_internal(input: &mut Parser, context: &AllowedNumericType) + -> Result + { match try!(input.next()) { - Token::Dimension(ref value, ref unit) if negative_ok || value.value >= 0. => { - Length::parse_dimension(value.value, unit) - .map(LengthOrPercentage::Length) - } - Token::Percentage(ref value) if negative_ok || value.unit_value >= 0. => { - Ok(LengthOrPercentage::Percentage(value.unit_value)) - } - Token::Number(ref value) if value.value == 0. => { - Ok(LengthOrPercentage::Length(Length::Absolute(Au(0)))) - } + Token::Dimension(ref value, ref unit) if context.is_ok(value.value) => + Length::parse_dimension(value.value, unit).map(LengthOrPercentage::Length), + Token::Percentage(ref value) if context.is_ok(value.unit_value) => + Ok(LengthOrPercentage::Percentage(value.unit_value)), + Token::Number(ref value) if value.value == 0. => + Ok(LengthOrPercentage::Length(Length::Absolute(Au(0)))), _ => Err(()) } } #[allow(dead_code)] #[inline] pub fn parse(input: &mut Parser) -> Result { - LengthOrPercentage::parse_internal(input, /* negative_ok = */ true) + LengthOrPercentage::parse_internal(input, &AllowedNumericType::All) } #[inline] pub fn parse_non_negative(input: &mut Parser) -> Result { - LengthOrPercentage::parse_internal(input, /* negative_ok = */ false) + LengthOrPercentage::parse_internal(input, &AllowedNumericType::NonNegative) } } @@ -419,13 +416,11 @@ pub mod specified { -> Result { match try!(input.next()) { - Token::Dimension(ref value, ref unit) if context.is_ok(value.value) => { - Length::parse_dimension(value.value, unit) - .map(LengthOrPercentageOrAuto::Length) - } + Token::Dimension(ref value, ref unit) if context.is_ok(value.value) => + Length::parse_dimension(value.value, unit).map(LengthOrPercentageOrAuto::Length), Token::Percentage(ref value) if context.is_ok(value.unit_value) => Ok(LengthOrPercentageOrAuto::Percentage(value.unit_value)), - Token::Number(ref value) if context.is_ok(value.value) => + Token::Number(ref value) if value.value == 0. => Ok(LengthOrPercentageOrAuto::Length(Length::Absolute(Au(0)))), Token::Ident(ref value) if value.eq_ignore_ascii_case("auto") => Ok(LengthOrPercentageOrAuto::Auto), @@ -453,40 +448,36 @@ pub mod specified { fn to_css(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { match self { &LengthOrPercentageOrNone::Length(length) => length.to_css(dest), - &LengthOrPercentageOrNone::Percentage(percentage) - => write!(dest, "{}%", percentage * 100.), + &LengthOrPercentageOrNone::Percentage(percentage) => + write!(dest, "{}%", percentage * 100.), &LengthOrPercentageOrNone::None => dest.write_str("none"), } } } impl LengthOrPercentageOrNone { - fn parse_internal(input: &mut Parser, negative_ok: bool) - -> Result { + fn parse_internal(input: &mut Parser, context: &AllowedNumericType) + -> Result + { match try!(input.next()) { - Token::Dimension(ref value, ref unit) if negative_ok || value.value >= 0. => { - Length::parse_dimension(value.value, unit) - .map(LengthOrPercentageOrNone::Length) - } - Token::Percentage(ref value) if negative_ok || value.unit_value >= 0. => { - Ok(LengthOrPercentageOrNone::Percentage(value.unit_value)) - } - Token::Number(ref value) if value.value == 0. => { - Ok(LengthOrPercentageOrNone::Length(Length::Absolute(Au(0)))) - } - Token::Ident(ref value) if value.eq_ignore_ascii_case("none") => { - Ok(LengthOrPercentageOrNone::None) - } + Token::Dimension(ref value, ref unit) if context.is_ok(value.value) => + Length::parse_dimension(value.value, unit).map(LengthOrPercentageOrNone::Length), + Token::Percentage(ref value) if context.is_ok(value.unit_value) => + Ok(LengthOrPercentageOrNone::Percentage(value.unit_value)), + Token::Number(ref value) if value.value == 0. => + Ok(LengthOrPercentageOrNone::Length(Length::Absolute(Au(0)))), + Token::Ident(ref value) if value.eq_ignore_ascii_case("none") => + Ok(LengthOrPercentageOrNone::None), _ => Err(()) } } #[allow(dead_code)] #[inline] pub fn parse(input: &mut Parser) -> Result { - LengthOrPercentageOrNone::parse_internal(input, /* negative_ok = */ true) + LengthOrPercentageOrNone::parse_internal(input, &AllowedNumericType::All) } #[inline] pub fn parse_non_negative(input: &mut Parser) -> Result { - LengthOrPercentageOrNone::parse_internal(input, /* negative_ok = */ false) + LengthOrPercentageOrNone::parse_internal(input, &AllowedNumericType::NonNegative) } }