|
1 | 1 | use crate::{ |
2 | 2 | COLOR_HASH, F_SPACE_RE, ZERO_RE, |
3 | | - constant::{DOT_ZERO_RE, F_DOT_RE, INNER_TRIM_RE, ZERO_PERCENT_FUNCTION}, |
| 3 | + constant::{ |
| 4 | + DOT_ZERO_RE, F_DOT_RE, INNER_TRIM_RE, NUM_TRIM_RE, RM_MINUS_ZERO_RE, ZERO_PERCENT_FUNCTION, |
| 5 | + }, |
4 | 6 | }; |
5 | 7 |
|
6 | 8 | pub fn optimize_value(value: &str) -> String { |
7 | 9 | let mut ret = value.trim().to_string(); |
8 | 10 | ret = INNER_TRIM_RE.replace_all(&ret, "(${1})").to_string(); |
| 11 | + ret = RM_MINUS_ZERO_RE.replace_all(&ret, "0${1}").to_string(); |
| 12 | + ret = NUM_TRIM_RE.replace_all(&ret, "${1} ${3}").to_string(); |
| 13 | + |
9 | 14 | if ret.contains(",") { |
10 | 15 | ret = F_SPACE_RE.replace_all(&ret, ",").trim().to_string(); |
11 | 16 | } |
@@ -128,6 +133,8 @@ mod tests { |
128 | 133 | #[case("0dvh", "0")] |
129 | 134 | #[case("0dvw", "0")] |
130 | 135 | #[case("0px 0px", "0 0")] |
| 136 | + #[case("-0px -0px", "0 0")] |
| 137 | + #[case("0.0px -0px", "0 0")] |
131 | 138 | #[case("0em 0em", "0 0")] |
132 | 139 | #[case("0rem 0rem", "0 0")] |
133 | 140 | #[case("0vh 0vh", "0 0")] |
@@ -158,6 +165,7 @@ mod tests { |
158 | 165 | #[case("min(10px, 0)", "min(10px,0%)")] |
159 | 166 | #[case("max(10px, 0)", "max(10px,0%)")] |
160 | 167 | #[case("max(some(0), 0)", "max(some(0),0%)")] |
| 168 | + #[case("max(some(0), -0)", "max(some(0),0%)")] |
161 | 169 | #[case("translate(0, min(0, 10px))", "translate(0,min(0%,10px))")] |
162 | 170 | #[case("\"red\"", "\"red\"")] |
163 | 171 | #[case("'red'", "'red'")] |
|
0 commit comments