From 1fa88b8c6a568256c153f9a498f53c13bf02df67 Mon Sep 17 00:00:00 2001 From: Anthony Ramine Date: Tue, 30 Jan 2018 14:53:16 +0100 Subject: [PATCH] Simplify define_css_keyword_enum --- components/style_traits/values.rs | 90 +++++++---------------------- components/style_traits/viewport.rs | 20 ++++--- 2 files changed, 33 insertions(+), 77 deletions(-) diff --git a/components/style_traits/values.rs b/components/style_traits/values.rs index 56574ac161d..0c3dcc8851b 100644 --- a/components/style_traits/values.rs +++ b/components/style_traits/values.rs @@ -384,69 +384,12 @@ impl_to_css_for_predefined_type!(::cssparser::UnicodeRange); #[macro_export] macro_rules! define_css_keyword_enum { - ($name: ident: values { $( $css: expr => $variant: ident),+, } - aliases { $( $alias: expr => $alias_variant: ident ),+, }) => { - __define_css_keyword_enum__add_optional_traits!($name [ $( $css => $variant ),+ ] - [ $( $alias => $alias_variant ),+ ]); - }; - ($name: ident: values { $( $css: expr => $variant: ident),+, } - aliases { $( $alias: expr => $alias_variant: ident ),* }) => { - __define_css_keyword_enum__add_optional_traits!($name [ $( $css => $variant ),+ ] - [ $( $alias => $alias_variant ),* ]); - }; - ($name: ident: values { $( $css: expr => $variant: ident),+ } - aliases { $( $alias: expr => $alias_variant: ident ),+, }) => { - __define_css_keyword_enum__add_optional_traits!($name [ $( $css => $variant ),+ ] - [ $( $alias => $alias_variant ),+ ]); - }; - ($name: ident: values { $( $css: expr => $variant: ident),+ } - aliases { $( $alias: expr => $alias_variant: ident ),* }) => { - __define_css_keyword_enum__add_optional_traits!($name [ $( $css => $variant ),+ ] - [ $( $alias => $alias_variant ),* ]); - }; - ($name: ident: $( $css: expr => $variant: ident ),+,) => { - __define_css_keyword_enum__add_optional_traits!($name [ $( $css => $variant ),+ ] []); - }; - ($name: ident: $( $css: expr => $variant: ident ),+) => { - __define_css_keyword_enum__add_optional_traits!($name [ $( $css => $variant ),+ ] []); - }; -} - -#[cfg(feature = "servo")] -#[macro_export] -macro_rules! __define_css_keyword_enum__add_optional_traits { - ($name: ident [ $( $css: expr => $variant: ident ),+ ] - [ $( $alias: expr => $alias_variant: ident),* ]) => { - __define_css_keyword_enum__actual! { - $name [ Deserialize, Serialize, MallocSizeOf ] - [ $( $css => $variant ),+ ] - [ $( $alias => $alias_variant ),* ] - } - }; -} - -#[cfg(not(feature = "servo"))] -#[macro_export] -macro_rules! __define_css_keyword_enum__add_optional_traits { - ($name: ident [ $( $css: expr => $variant: ident ),+ ] - [ $( $alias: expr => $alias_variant: ident),* ]) => { - __define_css_keyword_enum__actual! { - $name [ MallocSizeOf ] - [ $( $css => $variant ),+ ] - [ $( $alias => $alias_variant ),* ] - } - }; -} - -#[macro_export] -macro_rules! __define_css_keyword_enum__actual { - ($name: ident [ $( $derived_trait: ident),* ] - [ $( $css: expr => $variant: ident ),+ ] - [ $( $alias: expr => $alias_variant: ident ),* ]) => { - #[allow(non_camel_case_types, missing_docs)] - #[derive(Clone, Copy, Debug, Eq, Hash, PartialEq$(, $derived_trait )* )] + (pub enum $name:ident { $($variant:ident = $css:expr,)+ }) => { + #[allow(missing_docs)] + #[cfg_attr(feature = "servo", derive(Deserialize, Serialize))] + #[derive(Clone, Copy, Debug, Eq, Hash, MallocSizeOf, PartialEq)] pub enum $name { - $( $variant ),+ + $($variant),+ } impl $name { @@ -458,33 +401,40 @@ macro_rules! __define_css_keyword_enum__actual { match *input.next()? { Token::Ident(ref ident) => { Self::from_ident(ident).map_err(|()| { - location.new_unexpected_token_error(Token::Ident(ident.clone())) + location.new_unexpected_token_error( + Token::Ident(ident.clone()), + ) }) } - ref token => Err(location.new_unexpected_token_error(token.clone())) + ref token => { + Err(location.new_unexpected_token_error(token.clone())) + } } } /// Parse this property from an already-tokenized identifier. pub fn from_ident(ident: &str) -> Result<$name, ()> { match_ignore_ascii_case! { ident, - $( $css => Ok($name::$variant), )+ - $( $alias => Ok($name::$alias_variant), )* - _ => Err(()) + $($css => Ok($name::$variant),)+ + _ => Err(()) } } } impl $crate::ToCss for $name { - fn to_css(&self, dest: &mut $crate::CssWriter) -> ::std::fmt::Result - where W: ::std::fmt::Write + fn to_css( + &self, + dest: &mut $crate::CssWriter, + ) -> ::std::fmt::Result + where + W: ::std::fmt::Write, { match *self { $( $name::$variant => ::std::fmt::Write::write_str(dest, $css) ),+ } } } - } + }; } /// Helper types for the handling of specified values. diff --git a/components/style_traits/viewport.rs b/components/style_traits/viewport.rs index e2f8c6baf6f..75dd13870e0 100644 --- a/components/style_traits/viewport.rs +++ b/components/style_traits/viewport.rs @@ -10,14 +10,20 @@ use euclid::TypedSize2D; #[allow(unused_imports)] use std::ascii::AsciiExt; use std::fmt::{self, Write}; -define_css_keyword_enum!(UserZoom: - "zoom" => Zoom, - "fixed" => Fixed); +define_css_keyword_enum! { + pub enum UserZoom { + Zoom = "zoom", + Fixed = "fixed", + } +} -define_css_keyword_enum!(Orientation: - "auto" => Auto, - "portrait" => Portrait, - "landscape" => Landscape); +define_css_keyword_enum! { + pub enum Orientation { + Auto = "auto", + Portrait = "portrait", + Landscape = "landscape", + } +} /// A set of viewport descriptors: ///