diff options
-rw-r--r-- | components/style/font_face.rs | 18 | ||||
-rw-r--r-- | components/style/lib.rs | 3 | ||||
-rw-r--r-- | components/style/macros.rs | 22 | ||||
-rw-r--r-- | components/style/properties/helpers.mako.rs | 64 | ||||
-rw-r--r-- | components/style/properties/longhand/border.mako.rs | 13 | ||||
-rw-r--r-- | components/style/properties/longhand/inherited_text.mako.rs | 35 | ||||
-rw-r--r-- | components/style/values/generics/basic_shape.rs | 30 | ||||
-rw-r--r-- | components/style/values/generics/grid.rs | 13 | ||||
-rw-r--r-- | components/style/values/generics/image.rs | 21 | ||||
-rw-r--r-- | components/style/values/generics/mod.rs | 17 | ||||
-rw-r--r-- | components/style/values/generics/transform.rs | 28 | ||||
-rw-r--r-- | components/style/values/mod.rs | 18 | ||||
-rw-r--r-- | components/style/values/specified/box.rs | 37 | ||||
-rw-r--r-- | components/style/values/specified/color.rs | 13 |
14 files changed, 174 insertions, 158 deletions
diff --git a/components/style/font_face.rs b/components/style/font_face.rs index 1eae14e4a3a..36361c27e67 100644 --- a/components/style/font_face.rs +++ b/components/style/font_face.rs @@ -67,13 +67,17 @@ impl ToCss for UrlSource { /// A font-display value for a @font-face rule. /// The font-display descriptor determines how a font face is displayed based /// on whether and when it is downloaded and ready to use. -define_css_keyword_enum!(FontDisplay: - "auto" => Auto, - "block" => Block, - "swap" => Swap, - "fallback" => Fallback, - "optional" => Optional); -add_impls_for_keyword_enum!(FontDisplay); +#[allow(missing_docs)] +#[cfg_attr(feature = "servo", derive(Deserialize, Serialize))] +#[derive(Clone, Copy, Debug, Eq, MallocSizeOf, Parse, PartialEq)] +#[derive(ToComputedValue, ToCss)] +pub enum FontDisplay { + Auto, + Block, + Swap, + Fallback, + Optional, +} /// A font-weight value for a @font-face rule. /// The font-weight CSS property specifies the weight or boldness of the font. diff --git a/components/style/lib.rs b/components/style/lib.rs index 8a343496e6d..5c5a837d5ba 100644 --- a/components/style/lib.rs +++ b/components/style/lib.rs @@ -25,8 +25,6 @@ #![deny(missing_docs)] -#![recursion_limit = "500"] // For define_css_keyword_enum! in -moz-appearance - extern crate app_units; extern crate arrayvec; extern crate atomic_refcell; @@ -72,7 +70,6 @@ extern crate smallbitvec; extern crate smallvec; #[macro_use] extern crate style_derive; -#[macro_use] extern crate style_traits; extern crate time; extern crate uluru; diff --git a/components/style/macros.rs b/components/style/macros.rs index 8dfbbfd9760..5f20e3c8d0c 100644 --- a/components/style/macros.rs +++ b/components/style/macros.rs @@ -65,28 +65,6 @@ macro_rules! try_match_ident_ignore_ascii_case { }} } -/// A macro for implementing `ToComputedValue`, and `Parse` traits for -/// the enums defined using `define_css_keyword_enum` macro. -/// -/// NOTE: We should either move `Parse` trait to `style_traits` -/// or `define_css_keyword_enum` macro to this crate, but that -/// may involve significant cleanup in both the crates. -macro_rules! add_impls_for_keyword_enum { - ($name:ident) => { - impl $crate::parser::Parse for $name { - #[inline] - fn parse<'i, 't>( - _context: &$crate::parser::ParserContext, - input: &mut ::cssparser::Parser<'i, 't>, - ) -> Result<Self, ::style_traits::ParseError<'i>> { - $name::parse(input) - } - } - - trivial_to_computed_value!($name); - }; -} - macro_rules! define_keyword_type { ($name: ident, $css: expr) => { #[allow(missing_docs)] diff --git a/components/style/properties/helpers.mako.rs b/components/style/properties/helpers.mako.rs index 4d7c1ff19ad..411dea7a95a 100644 --- a/components/style/properties/helpers.mako.rs +++ b/components/style/properties/helpers.mako.rs @@ -424,20 +424,13 @@ use properties::longhands::system_font::SystemFont; pub mod computed_value { - use cssparser::Parser; - use parser::{Parse, ParserContext}; - - use style_traits::ParseError; - define_css_keyword_enum! { T: - % for value in keyword.values_for(product): - "${value}" => ${to_camel_case(value)}, - % endfor - } - - impl Parse for T { - fn parse<'i, 't>(_: &ParserContext, input: &mut Parser<'i, 't>) -> Result<Self, ParseError<'i>> { - T::parse(input) - } + #[cfg_attr(feature = "servo", derive(Deserialize, Serialize))] + #[derive(Clone, Copy, Debug, Eq, Hash, MallocSizeOf, Parse)] + #[derive(PartialEq, ToCss)] + pub enum T { + % for value in keyword.values_for(product): + ${to_camel_case(value)}, + % endfor } ${gecko_keyword_conversion(keyword, keyword.values_for(product), type="T", cast_to="i32")} @@ -604,26 +597,32 @@ <%def name="inner_body(keyword, extra_specified=None, needs_conversion=False)"> % if extra_specified or keyword.aliases_for(product): - define_css_keyword_enum! { SpecifiedValue: - values { - % for value in keyword.values_for(product) + (extra_specified or "").split(): - "${value}" => ${to_camel_case(value)}, - % endfor - } - aliases { - % for alias, value in keyword.aliases_for(product).iteritems(): - "${alias}" => ${to_camel_case(value)}, - % endfor - } + #[cfg_attr(feature = "servo", derive(Deserialize, Serialize))] + #[derive(Clone, Copy, Debug, Eq, MallocSizeOf, Parse, PartialEq, ToCss)] + pub enum SpecifiedValue { + % for value in keyword.values_for(product) + (extra_specified or "").split(): + <% + aliases = [] + for alias, v in keyword.aliases_for(product).iteritems(): + if value == v: + aliases.append(alias) + %> + % if aliases: + #[css(aliases = "${','.join(aliases)}")] + % endif + ${to_camel_case(value)}, + % endfor } % else: pub use self::computed_value::T as SpecifiedValue; % endif pub mod computed_value { - define_css_keyword_enum! { T: - % for value in data.longhands_by_name[name].keyword.values_for(product): - "${value}" => ${to_camel_case(value)}, - % endfor + #[cfg_attr(feature = "servo", derive(Deserialize, Serialize))] + #[derive(Clone, Copy, Debug, Eq, MallocSizeOf, Parse, PartialEq, ToCss)] + pub enum T { + % for value in data.longhands_by_name[name].keyword.values_for(product): + ${to_camel_case(value)}, + % endfor } } #[inline] @@ -639,13 +638,6 @@ -> Result<SpecifiedValue, ParseError<'i>> { SpecifiedValue::parse(input) } - impl Parse for SpecifiedValue { - #[inline] - fn parse<'i, 't>(_context: &ParserContext, input: &mut Parser<'i, 't>) - -> Result<SpecifiedValue, ParseError<'i>> { - SpecifiedValue::parse(input) - } - } % if needs_conversion: <% diff --git a/components/style/properties/longhand/border.mako.rs b/components/style/properties/longhand/border.mako.rs index b7c20fd6218..a98c83c6697 100644 --- a/components/style/properties/longhand/border.mako.rs +++ b/components/style/properties/longhand/border.mako.rs @@ -115,11 +115,14 @@ ${helpers.predefined_type("border-image-outset", "LengthOrNumberRect", pub struct SpecifiedValue(pub RepeatKeyword, pub Option<RepeatKeyword>); - define_css_keyword_enum!(RepeatKeyword: - "stretch" => Stretch, - "repeat" => Repeat, - "round" => Round, - "space" => Space); + #[cfg_attr(feature = "servo", derive(Deserialize, Serialize))] + #[derive(Clone, Copy, Debug, Eq, MallocSizeOf, Parse, PartialEq, ToCss)] + pub enum RepeatKeyword { + Stretch, + Repeat, + Round, + Space, + } #[inline] pub fn get_initial_value() -> computed_value::T { diff --git a/components/style/properties/longhand/inherited_text.mako.rs b/components/style/properties/longhand/inherited_text.mako.rs index c7ad330a274..7c8ec734c3c 100644 --- a/components/style/properties/longhand/inherited_text.mako.rs +++ b/components/style/properties/longhand/inherited_text.mako.rs @@ -279,12 +279,14 @@ ${helpers.predefined_type( } } - define_css_keyword_enum!(ShapeKeyword: - "dot" => Dot, - "circle" => Circle, - "double-circle" => DoubleCircle, - "triangle" => Triangle, - "sesame" => Sesame); + #[derive(Clone, Copy, Debug, Eq, MallocSizeOf, Parse, PartialEq, ToCss)] + pub enum ShapeKeyword { + Dot, + Circle, + DoubleCircle, + Triangle, + Sesame, + } impl ShapeKeyword { pub fn char(&self, fill: bool) -> &str { @@ -381,14 +383,19 @@ ${helpers.predefined_type( <%helpers:longhand name="text-emphasis-position" animation_value_type="discrete" products="gecko" spec="https://drafts.csswg.org/css-text-decor/#propdef-text-emphasis-position"> - define_css_keyword_enum!(HorizontalWritingModeValue: - "over" => Over, - "under" => Under); - add_impls_for_keyword_enum!(VerticalWritingModeValue); - define_css_keyword_enum!(VerticalWritingModeValue: - "right" => Right, - "left" => Left); - add_impls_for_keyword_enum!(HorizontalWritingModeValue); + #[derive(Clone, Copy, Debug, Eq, MallocSizeOf, Parse, PartialEq)] + #[derive(ToComputedValue, ToCss)] + pub enum HorizontalWritingModeValue { + Over, + Under, + } + + #[derive(Clone, Copy, Debug, Eq, MallocSizeOf, Parse, PartialEq)] + #[derive(ToComputedValue, ToCss)] + pub enum VerticalWritingModeValue { + Right, + Left, + } #[derive(Clone, Debug, MallocSizeOf, PartialEq, ToComputedValue, ToCss)] pub struct SpecifiedValue(pub HorizontalWritingModeValue, pub VerticalWritingModeValue); diff --git a/components/style/values/generics/basic_shape.rs b/components/style/values/generics/basic_shape.rs index 65395e253fe..4c805eb0591 100644 --- a/components/style/values/generics/basic_shape.rs +++ b/components/style/values/generics/basic_shape.rs @@ -30,13 +30,16 @@ pub enum GeometryBox { pub type FloatAreaShape<BasicShape, Image> = ShapeSource<BasicShape, ShapeBox, Image>; // https://drafts.csswg.org/css-shapes-1/#typedef-shape-box -define_css_keyword_enum!(ShapeBox: - "margin-box" => MarginBox, - "border-box" => BorderBox, - "padding-box" => PaddingBox, - "content-box" => ContentBox -); -add_impls_for_keyword_enum!(ShapeBox); +#[allow(missing_docs)] +#[cfg_attr(feature = "servo", derive(Deserialize, Serialize))] +#[derive(Clone, Copy, Debug, Eq, MallocSizeOf, Parse, PartialEq)] +#[derive(ToComputedValue, ToCss)] +pub enum ShapeBox { + MarginBox, + BorderBox, + PaddingBox, + ContentBox, +} /// A shape source, for some reference box. #[allow(missing_docs)] @@ -117,11 +120,14 @@ pub struct Polygon<LengthOrPercentage> { // NOTE: Basic shapes spec says that these are the only two values, however // https://www.w3.org/TR/SVG/painting.html#FillRuleProperty // says that it can also be `inherit` -define_css_keyword_enum!(FillRule: - "nonzero" => Nonzero, - "evenodd" => Evenodd -); -add_impls_for_keyword_enum!(FillRule); +#[allow(missing_docs)] +#[cfg_attr(feature = "servo", derive(Deserialize, Serialize))] +#[derive(Clone, Copy, Debug, Eq, MallocSizeOf, Parse, PartialEq)] +#[derive(ToComputedValue, ToCss)] +pub enum FillRule { + Nonzero, + Evenodd, +} // FIXME(nox): Implement ComputeSquaredDistance for T types and stop // using PartialEq here, this will let us derive this impl. diff --git a/components/style/values/generics/grid.rs b/components/style/values/generics/grid.rs index dab8b0f3e9d..2b519f1aa85 100644 --- a/components/style/values/generics/grid.rs +++ b/components/style/values/generics/grid.rs @@ -140,12 +140,15 @@ impl Parse for GridLine<specified::Integer> { } } -define_css_keyword_enum!{ TrackKeyword: - "auto" => Auto, - "max-content" => MaxContent, - "min-content" => MinContent +#[allow(missing_docs)] +#[cfg_attr(feature = "servo", derive(Deserialize, Serialize))] +#[derive(Clone, Copy, Debug, Eq, MallocSizeOf, Parse, PartialEq)] +#[derive(ToComputedValue, ToCss)] +pub enum TrackKeyword { + Auto, + MaxContent, + MinContent, } -add_impls_for_keyword_enum!(TrackKeyword); /// A track breadth for explicit grid track sizing. It's generic solely to /// avoid re-implementing it for the computed type. diff --git a/components/style/values/generics/image.rs b/components/style/values/generics/image.rs index d74c05ae81d..588c4d3fdda 100644 --- a/components/style/values/generics/image.rs +++ b/components/style/values/generics/image.rs @@ -97,15 +97,18 @@ pub enum Ellipse<LengthOrPercentage> { } /// <https://drafts.csswg.org/css-images/#typedef-extent-keyword> -define_css_keyword_enum!(ShapeExtent: - "closest-side" => ClosestSide, - "farthest-side" => FarthestSide, - "closest-corner" => ClosestCorner, - "farthest-corner" => FarthestCorner, - "contain" => Contain, - "cover" => Cover -); -add_impls_for_keyword_enum!(ShapeExtent); +#[allow(missing_docs)] +#[cfg_attr(feature = "servo", derive(Deserialize, Serialize))] +#[derive(Clone, Copy, Debug, Eq, MallocSizeOf, Parse, PartialEq)] +#[derive(ToComputedValue, ToCss)] +pub enum ShapeExtent { + ClosestSide, + FarthestSide, + ClosestCorner, + FarthestCorner, + Contain, + Cover, +} /// A gradient item. /// <https://drafts.csswg.org/css-images-4/#color-stop-syntax> diff --git a/components/style/values/generics/mod.rs b/components/style/values/generics/mod.rs index 263db6890d2..0ecd51f170c 100644 --- a/components/style/values/generics/mod.rs +++ b/components/style/values/generics/mod.rs @@ -32,14 +32,17 @@ pub mod text; pub mod transform; // https://drafts.csswg.org/css-counter-styles/#typedef-symbols-type -define_css_keyword_enum! { SymbolsType: - "cyclic" => Cyclic, - "numeric" => Numeric, - "alphabetic" => Alphabetic, - "symbolic" => Symbolic, - "fixed" => Fixed, +#[allow(missing_docs)] +#[cfg_attr(feature = "servo", derive(Deserialize, Serialize))] +#[derive(Clone, Copy, Debug, Eq, MallocSizeOf, Parse, PartialEq)] +#[derive(ToComputedValue, ToCss)] +pub enum SymbolsType { + Cyclic, + Numeric, + Alphabetic, + Symbolic, + Fixed, } -add_impls_for_keyword_enum!(SymbolsType); #[cfg(feature = "gecko")] impl SymbolsType { diff --git a/components/style/values/generics/transform.rs b/components/style/values/generics/transform.rs index 432934cc1e4..f2818842723 100644 --- a/components/style/values/generics/transform.rs +++ b/components/style/values/generics/transform.rs @@ -98,20 +98,26 @@ pub enum TimingFunction<Integer, Number> { Frames(Integer), } -define_css_keyword_enum! { TimingKeyword: - "linear" => Linear, - "ease" => Ease, - "ease-in" => EaseIn, - "ease-out" => EaseOut, - "ease-in-out" => EaseInOut, +#[allow(missing_docs)] +#[cfg_attr(feature = "servo", derive(Deserialize, Serialize))] +#[derive(Clone, Copy, Debug, Eq, MallocSizeOf, Parse, PartialEq)] +#[derive(ToComputedValue, ToCss)] +pub enum TimingKeyword { + Linear, + Ease, + EaseIn, + EaseOut, + EaseInOut, } -add_impls_for_keyword_enum!(TimingKeyword); -define_css_keyword_enum! { StepPosition: - "start" => Start, - "end" => End, +#[allow(missing_docs)] +#[cfg_attr(feature = "servo", derive(Deserialize, Serialize))] +#[derive(Clone, Copy, Debug, Eq, MallocSizeOf, Parse, PartialEq)] +#[derive(ToComputedValue, ToCss)] +pub enum StepPosition { + Start, + End, } -add_impls_for_keyword_enum!(StepPosition); impl<H, V, D> TransformOrigin<H, V, D> { /// Returns a new transform origin. diff --git a/components/style/values/mod.rs b/components/style/values/mod.rs index 1668c103def..d75400d9e7e 100644 --- a/components/style/values/mod.rs +++ b/components/style/values/mod.rs @@ -195,10 +195,14 @@ impl ToCss for KeyframesName { } } -// A type for possible values for min- and max- flavors of width, -// height, block-size, and inline-size. -define_css_keyword_enum!(ExtremumLength: - "-moz-max-content" => MozMaxContent, - "-moz-min-content" => MozMinContent, - "-moz-fit-content" => MozFitContent, - "-moz-available" => MozAvailable); +/// A type for possible values for min- and max- flavors of width, +/// height, block-size, and inline-size. +#[allow(missing_docs)] +#[cfg_attr(feature = "servo", derive(Deserialize, Serialize))] +#[derive(Clone, Copy, Debug, Eq, MallocSizeOf, Parse, PartialEq, ToCss)] +pub enum ExtremumLength { + MozMaxContent, + MozMinContent, + MozFitContent, + MozAvailable, +} diff --git a/components/style/values/specified/box.rs b/components/style/values/specified/box.rs index 65d714971ed..99858936702 100644 --- a/components/style/values/specified/box.rs +++ b/components/style/values/specified/box.rs @@ -320,25 +320,34 @@ impl Parse for AnimationName { } } -define_css_keyword_enum! { ScrollSnapType: - "none" => None, - "mandatory" => Mandatory, - "proximity" => Proximity, +#[allow(missing_docs)] +#[cfg_attr(feature = "servo", derive(Deserialize, Serialize))] +#[derive(Clone, Copy, Debug, Eq, MallocSizeOf, Parse, PartialEq)] +#[derive(ToComputedValue, ToCss)] +pub enum ScrollSnapType { + None, + Mandatory, + Proximity, } -add_impls_for_keyword_enum!(ScrollSnapType); -define_css_keyword_enum! { OverscrollBehavior: - "auto" => Auto, - "contain" => Contain, - "none" => None, +#[allow(missing_docs)] +#[cfg_attr(feature = "servo", derive(Deserialize, Serialize))] +#[derive(Clone, Copy, Debug, Eq, MallocSizeOf, Parse, PartialEq)] +#[derive(ToComputedValue, ToCss)] +pub enum OverscrollBehavior { + Auto, + Contain, + None, } -add_impls_for_keyword_enum!(OverscrollBehavior); -define_css_keyword_enum! { OverflowClipBox: - "padding-box" => PaddingBox, - "content-box" => ContentBox, +#[allow(missing_docs)] +#[cfg_attr(feature = "servo", derive(Deserialize, Serialize))] +#[derive(Clone, Copy, Debug, Eq, MallocSizeOf, Parse, PartialEq)] +#[derive(ToComputedValue, ToCss)] +pub enum OverflowClipBox { + PaddingBox, + ContentBox, } -add_impls_for_keyword_enum!(OverflowClipBox); #[derive(Clone, Debug, MallocSizeOf, PartialEq, ToComputedValue, ToCss)] /// Provides a rendering hint to the user agent, diff --git a/components/style/values/specified/color.rs b/components/style/values/specified/color.rs index a22a183cf49..b7dbe35a165 100644 --- a/components/style/values/specified/color.rs +++ b/components/style/values/specified/color.rs @@ -47,12 +47,13 @@ pub enum Color { #[cfg(feature = "gecko")] mod gecko { - define_css_keyword_enum! { SpecialColorKeyword: - "-moz-default-color" => MozDefaultColor, - "-moz-default-background-color" => MozDefaultBackgroundColor, - "-moz-hyperlinktext" => MozHyperlinktext, - "-moz-activehyperlinktext" => MozActiveHyperlinktext, - "-moz-visitedhyperlinktext" => MozVisitedHyperlinktext, + #[derive(Clone, Copy, Debug, Eq, Hash, MallocSizeOf, Parse, PartialEq, ToCss)] + pub enum SpecialColorKeyword { + MozDefaultColor, + MozDefaultBackgroundColor, + MozHyperlinktext, + MozActiveHyperlinktext, + MozVisitedHyperlinktext, } } |