mirror of
https://github.com/servo/servo.git
synced 2025-08-06 14:10:11 +01:00
Merge common arms in PropertyDeclaration::to_css
This commit is contained in:
parent
42ea822edf
commit
8ebf0f057f
1 changed files with 59 additions and 34 deletions
|
@ -314,6 +314,24 @@ impl Clone for PropertyDeclaration {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl PropertyDeclaration {
|
||||||
|
/// Like the method on ToCss, but without the type parameter to avoid
|
||||||
|
/// accidentally monomorphizing this large function multiple times for
|
||||||
|
/// different writers.
|
||||||
|
pub fn to_css(&self, dest: &mut CssStringWriter) -> fmt::Result {
|
||||||
|
use self::PropertyDeclaration::*;
|
||||||
|
|
||||||
|
let mut dest = CssWriter::new(dest);
|
||||||
|
match *self {
|
||||||
|
% for ty, variants in groups.iteritems():
|
||||||
|
${" | ".join("{}(ref value)".format(v) for v in variants)} => {
|
||||||
|
value.to_css(&mut dest)
|
||||||
|
}
|
||||||
|
% endfor
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// A longhand or shorthand porperty
|
/// A longhand or shorthand porperty
|
||||||
#[derive(Clone, Copy, Debug)]
|
#[derive(Clone, Copy, Debug)]
|
||||||
pub struct NonCustomPropertyId(usize);
|
pub struct NonCustomPropertyId(usize);
|
||||||
|
@ -1563,6 +1581,15 @@ pub struct WideKeywordDeclaration {
|
||||||
keyword: CSSWideKeyword,
|
keyword: CSSWideKeyword,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl ToCss for WideKeywordDeclaration {
|
||||||
|
fn to_css<W>(&self, dest: &mut CssWriter<W>) -> fmt::Result
|
||||||
|
where
|
||||||
|
W: fmt::Write,
|
||||||
|
{
|
||||||
|
self.keyword.to_css(dest)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// An unparsed declaration that contains `var()` functions.
|
/// An unparsed declaration that contains `var()` functions.
|
||||||
#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
|
#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
|
||||||
#[derive(Clone, PartialEq)]
|
#[derive(Clone, PartialEq)]
|
||||||
|
@ -1572,6 +1599,29 @@ pub struct VariableDeclaration {
|
||||||
value: Arc<UnparsedValue>,
|
value: Arc<UnparsedValue>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl ToCss for VariableDeclaration {
|
||||||
|
fn to_css<W>(&self, dest: &mut CssWriter<W>) -> fmt::Result
|
||||||
|
where
|
||||||
|
W: fmt::Write,
|
||||||
|
{
|
||||||
|
// https://drafts.csswg.org/css-variables/#variables-in-shorthands
|
||||||
|
match self.value.from_shorthand {
|
||||||
|
// Normally, we shouldn't be printing variables here if they came from
|
||||||
|
// shorthands. But we should allow properties that came from shorthand
|
||||||
|
// aliases. That also matches with the Gecko behavior.
|
||||||
|
// FIXME(emilio): This is just a hack for `-moz-transform`.
|
||||||
|
Some(shorthand) if shorthand.flags().contains(PropertyFlags::SHORTHAND_ALIAS_PROPERTY) => {
|
||||||
|
dest.write_str(&*self.value.css)?
|
||||||
|
}
|
||||||
|
None => {
|
||||||
|
dest.write_str(&*self.value.css)?
|
||||||
|
}
|
||||||
|
_ => {},
|
||||||
|
}
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// A custom property declaration with the property name and the declared value.
|
/// A custom property declaration with the property name and the declared value.
|
||||||
#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
|
#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
|
||||||
#[derive(Clone, PartialEq)]
|
#[derive(Clone, PartialEq)]
|
||||||
|
@ -1583,6 +1633,15 @@ pub struct CustomDeclaration {
|
||||||
pub value: DeclaredValueOwned<Arc<::custom_properties::SpecifiedValue>>,
|
pub value: DeclaredValueOwned<Arc<::custom_properties::SpecifiedValue>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl ToCss for CustomDeclaration {
|
||||||
|
fn to_css<W>(&self, dest: &mut CssWriter<W>) -> fmt::Result
|
||||||
|
where
|
||||||
|
W: fmt::Write,
|
||||||
|
{
|
||||||
|
self.value.borrow().to_css(dest)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl fmt::Debug for PropertyDeclaration {
|
impl fmt::Debug for PropertyDeclaration {
|
||||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||||
self.id().to_css(&mut CssWriter::new(f))?;
|
self.id().to_css(&mut CssWriter::new(f))?;
|
||||||
|
@ -1597,40 +1656,6 @@ impl fmt::Debug for PropertyDeclaration {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl PropertyDeclaration {
|
|
||||||
/// Like the method on ToCss, but without the type parameter to avoid
|
|
||||||
/// accidentally monomorphizing this large function multiple times for
|
|
||||||
/// different writers.
|
|
||||||
pub fn to_css(&self, dest: &mut CssStringWriter) -> fmt::Result {
|
|
||||||
match *self {
|
|
||||||
% for property in data.longhands:
|
|
||||||
PropertyDeclaration::${property.camel_case}(ref value) => {
|
|
||||||
value.to_css(&mut CssWriter::new(dest))
|
|
||||||
}
|
|
||||||
% endfor
|
|
||||||
PropertyDeclaration::CSSWideKeyword(ref declaration) => {
|
|
||||||
declaration.keyword.to_css(&mut CssWriter::new(dest))
|
|
||||||
},
|
|
||||||
PropertyDeclaration::WithVariables(ref declaration) => {
|
|
||||||
// https://drafts.csswg.org/css-variables/#variables-in-shorthands
|
|
||||||
match declaration.value.from_shorthand {
|
|
||||||
// Normally, we shouldn't be printing variables here if they came from
|
|
||||||
// shorthands. But we should allow properties that came from shorthand
|
|
||||||
// aliases. That also matches with the Gecko behavior.
|
|
||||||
Some(shorthand) if shorthand.flags().contains(PropertyFlags::SHORTHAND_ALIAS_PROPERTY) =>
|
|
||||||
dest.write_str(&*declaration.value.css)?,
|
|
||||||
None => dest.write_str(&*declaration.value.css)?,
|
|
||||||
_ => {},
|
|
||||||
}
|
|
||||||
Ok(())
|
|
||||||
},
|
|
||||||
PropertyDeclaration::Custom(ref declaration) => {
|
|
||||||
declaration.value.borrow().to_css(&mut CssWriter::new(dest))
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl PropertyDeclaration {
|
impl PropertyDeclaration {
|
||||||
/// Given a property declaration, return the property declaration id.
|
/// Given a property declaration, return the property declaration id.
|
||||||
pub fn id(&self) -> PropertyDeclarationId {
|
pub fn id(&self) -> PropertyDeclarationId {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue