From 1ea817516325aecd4f6750869b48e0f0800ac332 Mon Sep 17 00:00:00 2001 From: Manish Goregaokar Date: Mon, 10 Apr 2017 15:28:48 +0800 Subject: [PATCH] stylo: Support most MathML presentation attributes --- .../style/properties/longhand/font.mako.rs | 30 +++++++++++-------- .../properties/longhand/inherited_box.mako.rs | 3 +- ports/geckolib/glue.rs | 3 ++ 3 files changed, 23 insertions(+), 13 deletions(-) diff --git a/components/style/properties/longhand/font.mako.rs b/components/style/properties/longhand/font.mako.rs index 75458446839..cfd36cad6b8 100644 --- a/components/style/properties/longhand/font.mako.rs +++ b/components/style/properties/longhand/font.mako.rs @@ -225,7 +225,8 @@ ${helpers.single_keyword("font-style", gecko_constant_prefix="NS_FONT_STYLE", gecko_ffi_name="mFont.style", spec="https://drafts.csswg.org/css-fonts/#propdef-font-style", - animation_type="none")} + animation_type="none", + needs_conversion=True)} ${helpers.single_keyword("font-variant", "normal small-caps", @@ -292,19 +293,24 @@ ${helpers.single_keyword("font-variant-caps", _ => Err(()) } }).or_else(|()| { - match try!(input.expect_integer()) { - 100 => Ok(SpecifiedValue::Weight100), - 200 => Ok(SpecifiedValue::Weight200), - 300 => Ok(SpecifiedValue::Weight300), - 400 => Ok(SpecifiedValue::Weight400), - 500 => Ok(SpecifiedValue::Weight500), - 600 => Ok(SpecifiedValue::Weight600), - 700 => Ok(SpecifiedValue::Weight700), - 800 => Ok(SpecifiedValue::Weight800), - 900 => Ok(SpecifiedValue::Weight900), + SpecifiedValue::from_int(input.expect_integer()?) + }) + } + + impl SpecifiedValue { + pub fn from_int(kw: i32) -> Result { + match kw { + % for weight in range(100, 901, 100): + ${weight} => Ok(SpecifiedValue::Weight${weight}), + % endfor _ => Err(()) } - }) + } + + pub fn from_gecko_keyword(kw: u32) -> Self { + Self::from_int(kw as i32).expect("Found unexpected value in style + struct for font-weight property") + } } /// Used in @font-face, where relative keywords are not allowed. diff --git a/components/style/properties/longhand/inherited_box.mako.rs b/components/style/properties/longhand/inherited_box.mako.rs index c5a121a794f..d8c286301d5 100644 --- a/components/style/properties/longhand/inherited_box.mako.rs +++ b/components/style/properties/longhand/inherited_box.mako.rs @@ -24,7 +24,8 @@ ${helpers.single_keyword("writing-mode", spec="https://drafts.csswg.org/css-writing-modes/#propdef-writing-mode")} ${helpers.single_keyword("direction", "ltr rtl", need_clone=True, animation_type="none", - spec="https://drafts.csswg.org/css-writing-modes/#propdef-direction")} + spec="https://drafts.csswg.org/css-writing-modes/#propdef-direction", + needs_conversion=True)} <%helpers:single_keyword_computed name="text-orientation" diff --git a/ports/geckolib/glue.rs b/ports/geckolib/glue.rs index 4f828475ac3..313078d74b2 100644 --- a/ports/geckolib/glue.rs +++ b/ports/geckolib/glue.rs @@ -1327,6 +1327,7 @@ pub extern "C" fn Servo_DeclarationBlock_SetKeywordValue(declarations: let prop = match_wrap_declared! { long, MozUserModify => longhands::_moz_user_modify::SpecifiedValue::from_gecko_keyword(value), // TextEmphasisPosition => FIXME implement text-emphasis-position + Direction => longhands::direction::SpecifiedValue::from_gecko_keyword(value), Display => longhands::display::SpecifiedValue::from_gecko_keyword(value), Float => longhands::float::SpecifiedValue::from_gecko_keyword(value), VerticalAlign => longhands::vertical_align::SpecifiedValue::from_gecko_keyword(value), @@ -1337,6 +1338,8 @@ pub extern "C" fn Servo_DeclarationBlock_SetKeywordValue(declarations: // We rely on Gecko passing in font-size values (0...7) here. longhands::font_size::SpecifiedValue::from_html_size(value as u8) }, + FontStyle => longhands::font_style::SpecifiedValue::from_gecko_keyword(value), + FontWeight => longhands::font_weight::SpecifiedValue::from_gecko_keyword(value), ListStyleType => longhands::list_style_type::SpecifiedValue::from_gecko_keyword(value), MozMathVariant => longhands::_moz_math_variant::SpecifiedValue::from_gecko_keyword(value), WhiteSpace => longhands::white_space::SpecifiedValue::from_gecko_keyword(value),