From 4f56f054de94b1992a797e76dfe90be500b0bfa6 Mon Sep 17 00:00:00 2001 From: zhuminghui2 Date: Tue, 19 Dec 2023 21:12:41 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=94=AF=E6=8C=81vw\vh?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/utils.rs | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/src/utils.rs b/src/utils.rs index dd927da..b8d763b 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -4,7 +4,7 @@ use html5ever::{namespace_url, ns, LocalName, QualName}; use regex::Regex; use swc_common::DUMMY_SP; // use lightningcss::values::number::CSSNumber; -use swc_ecma_ast::{JSXMemberExpr, JSXObject, Callee, Expr, CallExpr, Ident, Lit, Number, PropOrSpread, Prop, PropName}; +use swc_ecma_ast::{JSXMemberExpr, JSXObject, Callee, Expr, CallExpr, Ident, Lit, Number, PropOrSpread, Prop, PropName, ExprOrSpread}; use crate::constants::{CONVERT_STYLE_PREFIX, CONVERT_STYLE_PX_FN}; @@ -72,21 +72,41 @@ pub fn prefix_style_key(s: &str) -> String { pub fn convert_px_to_units(input: String) -> Expr { // 定义匹配 '16px' 的正则表达式 - let re = Regex::new(r"(-?(\d+(\.\d*)?|\.\d+))px").unwrap(); + let re: Regex = Regex::new(r"(-?(\d+(\.\d*)?|\.\d+))((px)|(vw)|(vh))").unwrap(); // 使用正则表达式进行匹配 if let Some(captures) = re.captures(&input) { // 提取匹配到的数字部分 let input_str = captures.get(1).unwrap().as_str(); + let unit = match captures.get(4) { + Some(m) => m.as_str(), + None => "vp" + }; + if let Ok(number) = input_str.parse::() { + + let mut args: Vec = vec![ + Expr::Lit(Lit::Num(Number::from(number))).into(), + ]; + match unit { + "vw" => { + args.push(Expr::Lit(Lit::Str("vw".into())).into()); + }, + "vh" => { + args.push(Expr::Lit(Lit::Str("vh".into())).into()); + }, + // "px" => { + // args.push(Expr::Lit(Lit::Str("px".into())).into()); + // }, + _ => {} + } + let fun_call_expr = Expr::Call(CallExpr { span: DUMMY_SP, callee: Callee::Expr(Box::new(Expr::Ident(Ident::new( CONVERT_STYLE_PX_FN.into(), - DUMMY_SP, + DUMMY_SP )))), - args: vec![ - Expr::Lit(Lit::Num(Number::from(number))).into() - ], + args, type_args: None, });