aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/style/font_face.rs18
-rw-r--r--components/style/lib.rs3
-rw-r--r--components/style/macros.rs22
-rw-r--r--components/style/properties/helpers.mako.rs64
-rw-r--r--components/style/properties/longhand/border.mako.rs13
-rw-r--r--components/style/properties/longhand/inherited_text.mako.rs35
-rw-r--r--components/style/values/generics/basic_shape.rs30
-rw-r--r--components/style/values/generics/grid.rs13
-rw-r--r--components/style/values/generics/image.rs21
-rw-r--r--components/style/values/generics/mod.rs17
-rw-r--r--components/style/values/generics/transform.rs28
-rw-r--r--components/style/values/mod.rs18
-rw-r--r--components/style/values/specified/box.rs37
-rw-r--r--components/style/values/specified/color.rs13
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,
}
}