@@ -4,7 +4,7 @@ use html5ever::{namespace_url, ns, LocalName, QualName};
44use regex:: Regex ;
55use 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
99use crate :: constants:: { CONVERT_STYLE_PREFIX , CONVERT_STYLE_PX_FN } ;
1010
@@ -72,21 +72,41 @@ pub fn prefix_style_key(s: &str) -> String {
7272
7373pub 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