Skip to content

Commit 34c5648

Browse files
committed
Parse custom idents
1 parent 9f79b35 commit 34c5648

File tree

4 files changed

+40
-1
lines changed

4 files changed

+40
-1
lines changed

src/lib.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1288,5 +1288,9 @@ mod tests {
12881288
minify_test(".foo { transition-duration: calc((1s - 50ms) * 2) }", ".foo{transition-duration:1.9s}");
12891289
minify_test(".foo { transition-duration: calc(2 * (1s - 50ms)) }", ".foo{transition-duration:1.9s}");
12901290
minify_test(".foo { transition-duration: calc((2s + 50ms) - (1s - 50ms)) }", ".foo{transition-duration:1.1s}");
1291+
minify_test(".foo { transition-duration: 500ms, 50ms }", ".foo{transition-duration:.5s,50ms}");
1292+
minify_test(".foo { transition-delay: 500ms }", ".foo{transition-delay:.5s}");
1293+
minify_test(".foo { transition-property: background }", ".foo{transition-property:background}");
1294+
minify_test(".foo { transition-property: background, opacity }", ".foo{transition-property:background,opacity}");
12911295
}
12921296
}

src/properties/mod.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ use box_shadow::*;
2121
use border::*;
2222
use border_image::*;
2323
use border_radius::*;
24-
use crate::values::{image::*, length::*, rect::*, color::*, time::Time};
24+
use crate::values::{image::*, length::*, rect::*, color::*, time::Time, ident::CustomIdent};
2525
use crate::traits::{Parse, ToCss};
2626
use crate::printer::Printer;
2727
use std::fmt::Write;
@@ -231,6 +231,7 @@ pub enum Property {
231231
LineHeight(LineHeight),
232232
Font(Font),
233233

234+
TransitionProperty(Vec<CustomIdent>),
234235
TransitionDuration(Vec<Time>),
235236
TransitionDelay(Vec<Time>)
236237
}
@@ -424,6 +425,7 @@ impl Property {
424425
"font-variant-caps" => property!(FontVariantCaps, FontVariantCaps),
425426
"line-height" => property!(LineHeight, LineHeight),
426427
"font" => property!(Font, Font),
428+
"transition-property" => property!(TransitionProperty, CustomIdent, true),
427429
"transition-duration" => property!(TransitionDuration, Time, true),
428430
"transition-delay" => property!(TransitionDelay, Time, true),
429431
_ => {}
@@ -625,6 +627,7 @@ impl Property {
625627
FontVariantCaps(val) => property!("font-variant-caps", val),
626628
LineHeight(val) => property!("line-height", val),
627629
Font(val) => property!("font", val),
630+
TransitionProperty(val) => property!("transition-property", val, true),
628631
TransitionDuration(val) => property!("transition-duration", val, true),
629632
TransitionDelay(val) => property!("transition-delay", val, true),
630633
Custom(custom) => {

src/values/ident.rs

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
use cssparser::*;
2+
use crate::traits::{Parse, ToCss};
3+
use crate::printer::Printer;
4+
use std::fmt::Write;
5+
6+
/// https://www.w3.org/TR/css-values-4/#custom-idents
7+
#[derive(Debug, Clone, PartialEq)]
8+
pub struct CustomIdent(String);
9+
10+
impl Parse for CustomIdent {
11+
fn parse<'i, 't>(input: &mut Parser<'i, 't>) -> Result<Self, ParseError<'i, ()>> {
12+
let location = input.current_source_location();
13+
let ident = input.expect_ident()?;
14+
let valid = match_ignore_ascii_case! { ident,
15+
"initial" | "inherit" | "unset" | "default" | "revert" => false,
16+
_ => true
17+
};
18+
19+
if !valid {
20+
return Err(location.new_unexpected_token_error(Token::Ident(ident.clone())))
21+
}
22+
23+
Ok(CustomIdent(ident.as_ref().into()))
24+
}
25+
}
26+
27+
impl ToCss for CustomIdent {
28+
fn to_css<W>(&self, dest: &mut Printer<W>) -> std::fmt::Result where W: std::fmt::Write {
29+
serialize_identifier(&self.0, dest)
30+
}
31+
}

src/values/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,4 @@ pub mod rect;
44
pub mod color;
55
pub mod calc;
66
pub mod time;
7+
pub mod ident;

0 commit comments

Comments
 (0)