Skip to content

Commit 62daae2

Browse files
authored
Merge pull request #20 from NervJS/feat/support-vw
feat: 支持vw\vh
2 parents a78804f + 4f56f05 commit 62daae2

File tree

1 file changed

+26
-6
lines changed

1 file changed

+26
-6
lines changed

src/utils.rs

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use html5ever::{namespace_url, ns, LocalName, QualName};
44
use regex::Regex;
55
use swc_common::DUMMY_SP;
66
// use lightningcss::values::number::CSSNumber;
7-
use swc_ecma_ast::{JSXMemberExpr, JSXObject, Callee, Expr, CallExpr, Ident, Lit, Number, PropOrSpread, Prop, PropName};
7+
use swc_ecma_ast::{JSXMemberExpr, JSXObject, Callee, Expr, CallExpr, Ident, Lit, Number, PropOrSpread, Prop, PropName, ExprOrSpread};
88

99
use crate::constants::{CONVERT_STYLE_PREFIX, CONVERT_STYLE_PX_FN};
1010

@@ -72,21 +72,41 @@ pub fn prefix_style_key(s: &str) -> String {
7272

7373
pub fn convert_px_to_units(input: String) -> Expr {
7474
// 定义匹配 '16px' 的正则表达式
75-
let re = Regex::new(r"(-?(\d+(\.\d*)?|\.\d+))px").unwrap();
75+
let re: Regex = Regex::new(r"(-?(\d+(\.\d*)?|\.\d+))((px)|(vw)|(vh))").unwrap();
7676
// 使用正则表达式进行匹配
7777
if let Some(captures) = re.captures(&input) {
7878
// 提取匹配到的数字部分
7979
let input_str = captures.get(1).unwrap().as_str();
80+
let unit = match captures.get(4) {
81+
Some(m) => m.as_str(),
82+
None => "vp"
83+
};
84+
8085
if let Ok(number) = input_str.parse::<f64>() {
86+
87+
let mut args: Vec<ExprOrSpread> = vec![
88+
Expr::Lit(Lit::Num(Number::from(number))).into(),
89+
];
90+
match unit {
91+
"vw" => {
92+
args.push(Expr::Lit(Lit::Str("vw".into())).into());
93+
},
94+
"vh" => {
95+
args.push(Expr::Lit(Lit::Str("vh".into())).into());
96+
},
97+
// "px" => {
98+
// args.push(Expr::Lit(Lit::Str("px".into())).into());
99+
// },
100+
_ => {}
101+
}
102+
81103
let fun_call_expr = Expr::Call(CallExpr {
82104
span: DUMMY_SP,
83105
callee: Callee::Expr(Box::new(Expr::Ident(Ident::new(
84106
CONVERT_STYLE_PX_FN.into(),
85-
DUMMY_SP,
107+
DUMMY_SP
86108
)))),
87-
args: vec![
88-
Expr::Lit(Lit::Num(Number::from(number))).into()
89-
],
109+
args,
90110
type_args: None,
91111
});
92112

0 commit comments

Comments
 (0)