mirror of
https://github.com/servo/servo.git
synced 2025-07-23 07:13:52 +01:00
Simplify define_css_keyword_enum
This commit is contained in:
parent
3d99a4489c
commit
1fa88b8c6a
2 changed files with 33 additions and 77 deletions
|
@ -384,69 +384,12 @@ impl_to_css_for_predefined_type!(::cssparser::UnicodeRange);
|
||||||
|
|
||||||
#[macro_export]
|
#[macro_export]
|
||||||
macro_rules! define_css_keyword_enum {
|
macro_rules! define_css_keyword_enum {
|
||||||
($name: ident: values { $( $css: expr => $variant: ident),+, }
|
(pub enum $name:ident { $($variant:ident = $css:expr,)+ }) => {
|
||||||
aliases { $( $alias: expr => $alias_variant: ident ),+, }) => {
|
#[allow(missing_docs)]
|
||||||
__define_css_keyword_enum__add_optional_traits!($name [ $( $css => $variant ),+ ]
|
#[cfg_attr(feature = "servo", derive(Deserialize, Serialize))]
|
||||||
[ $( $alias => $alias_variant ),+ ]);
|
#[derive(Clone, Copy, Debug, Eq, Hash, MallocSizeOf, PartialEq)]
|
||||||
};
|
|
||||||
($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 {
|
pub enum $name {
|
||||||
$( $variant ),+
|
$($variant),+
|
||||||
}
|
}
|
||||||
|
|
||||||
impl $name {
|
impl $name {
|
||||||
|
@ -458,33 +401,40 @@ macro_rules! __define_css_keyword_enum__actual {
|
||||||
match *input.next()? {
|
match *input.next()? {
|
||||||
Token::Ident(ref ident) => {
|
Token::Ident(ref ident) => {
|
||||||
Self::from_ident(ident).map_err(|()| {
|
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.
|
/// Parse this property from an already-tokenized identifier.
|
||||||
pub fn from_ident(ident: &str) -> Result<$name, ()> {
|
pub fn from_ident(ident: &str) -> Result<$name, ()> {
|
||||||
match_ignore_ascii_case! { ident,
|
match_ignore_ascii_case! { ident,
|
||||||
$( $css => Ok($name::$variant), )+
|
$($css => Ok($name::$variant),)+
|
||||||
$( $alias => Ok($name::$alias_variant), )*
|
_ => Err(())
|
||||||
_ => Err(())
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl $crate::ToCss for $name {
|
impl $crate::ToCss for $name {
|
||||||
fn to_css<W>(&self, dest: &mut $crate::CssWriter<W>) -> ::std::fmt::Result
|
fn to_css<W>(
|
||||||
where W: ::std::fmt::Write
|
&self,
|
||||||
|
dest: &mut $crate::CssWriter<W>,
|
||||||
|
) -> ::std::fmt::Result
|
||||||
|
where
|
||||||
|
W: ::std::fmt::Write,
|
||||||
{
|
{
|
||||||
match *self {
|
match *self {
|
||||||
$( $name::$variant => ::std::fmt::Write::write_str(dest, $css) ),+
|
$( $name::$variant => ::std::fmt::Write::write_str(dest, $css) ),+
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Helper types for the handling of specified values.
|
/// Helper types for the handling of specified values.
|
||||||
|
|
|
@ -10,14 +10,20 @@ use euclid::TypedSize2D;
|
||||||
#[allow(unused_imports)] use std::ascii::AsciiExt;
|
#[allow(unused_imports)] use std::ascii::AsciiExt;
|
||||||
use std::fmt::{self, Write};
|
use std::fmt::{self, Write};
|
||||||
|
|
||||||
define_css_keyword_enum!(UserZoom:
|
define_css_keyword_enum! {
|
||||||
"zoom" => Zoom,
|
pub enum UserZoom {
|
||||||
"fixed" => Fixed);
|
Zoom = "zoom",
|
||||||
|
Fixed = "fixed",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
define_css_keyword_enum!(Orientation:
|
define_css_keyword_enum! {
|
||||||
"auto" => Auto,
|
pub enum Orientation {
|
||||||
"portrait" => Portrait,
|
Auto = "auto",
|
||||||
"landscape" => Landscape);
|
Portrait = "portrait",
|
||||||
|
Landscape = "landscape",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// A set of viewport descriptors:
|
/// A set of viewport descriptors:
|
||||||
///
|
///
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue