diff options
author | kkkkkkkk <seankao31@gmail.com> | 2017-01-21 11:29:36 +0800 |
---|---|---|
committer | kkkkkkkk <seankao31@gmail.com> | 2017-01-21 22:24:12 +0800 |
commit | 7c654048d24da4da1ba108f23590bff4cb7cefe8 (patch) | |
tree | 15f0508e6e98178f627ea3c128e43ca9972cd6b2 | |
parent | 1b68f7946858ccd25132fe5e04923f23e269c6b0 (diff) | |
download | servo-7c654048d24da4da1ba108f23590bff4cb7cefe8.tar.gz servo-7c654048d24da4da1ba108f23590bff4cb7cefe8.zip |
add font-stretch to font shorthand sub-property
modify to_css_declared function
update comment and Err condition
use statement split to two lines
-rw-r--r-- | components/style/properties/shorthand/font.mako.rs | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/components/style/properties/shorthand/font.mako.rs b/components/style/properties/shorthand/font.mako.rs index 7742ab11be5..f058c56a777 100644 --- a/components/style/properties/shorthand/font.mako.rs +++ b/components/style/properties/shorthand/font.mako.rs @@ -4,21 +4,22 @@ <%namespace name="helpers" file="/helpers.mako.rs" /> -<%helpers:shorthand name="font" sub_properties="font-style font-variant font-weight +<%helpers:shorthand name="font" sub_properties="font-style font-variant font-weight font-stretch font-size line-height font-family" spec="https://drafts.csswg.org/css-fonts-3/#propdef-font"> - use properties::longhands::{font_style, font_variant, font_weight, font_size, - line_height, font_family}; + use properties::longhands::{font_style, font_variant, font_weight, font_stretch}; + use properties::longhands::{font_size, line_height, font_family}; pub fn parse_value(context: &ParserContext, input: &mut Parser) -> Result<Longhands, ()> { let mut nb_normals = 0; let mut style = None; let mut variant = None; let mut weight = None; + let mut stretch = None; let size; loop { // Special-case 'normal' because it is valid in each of - // font-style, font-weight and font-variant. + // font-style, font-weight, font-variant and font-stretch. // Leaves the values to None, 'normal' is the initial value for each of them. if input.try(|input| input.expect_ident_matching("normal")).is_ok() { nb_normals += 1; @@ -42,6 +43,12 @@ continue } } + if stretch.is_none() { + if let Ok(value) = input.try(|input| font_stretch::parse(context, input)) { + stretch = Some(value); + continue + } + } size = Some(try!(font_size::parse(context, input))); break } @@ -49,7 +56,7 @@ fn count<T>(opt: &Option<T>) -> u8 { if opt.is_some() { 1 } else { 0 } } - if size.is_none() || (count(&style) + count(&weight) + count(&variant) + nb_normals) > 3 { + if size.is_none() || (count(&style) + count(&weight) + count(&variant) + count(&stretch) + nb_normals) > 4 { return Err(()) } let line_height = if input.try(|input| input.expect_delim('/')).is_ok() { @@ -62,6 +69,7 @@ font_style: style, font_variant: variant, font_weight: weight, + font_stretch: stretch, font_size: size, line_height: line_height, font_family: Some(font_family::SpecifiedValue(family)) @@ -86,6 +94,11 @@ try!(write!(dest, " ")); } + if let DeclaredValue::Value(ref stretch) = *self.font_stretch { + try!(stretch.to_css(dest)); + try!(write!(dest, " ")); + } + try!(self.font_size.to_css(dest)); if let DeclaredValue::Value(ref height) = *self.line_height { match *height { |