Skip to content

Commit

Permalink
feat: 支持vw\vh
Browse files Browse the repository at this point in the history
  • Loading branch information
heiazu committed Dec 19, 2023
1 parent a78804f commit 4f56f05
Showing 1 changed file with 26 additions and 6 deletions.
32 changes: 26 additions & 6 deletions src/utils.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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};

Expand Down Expand Up @@ -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::<f64>() {

let mut args: Vec<ExprOrSpread> = 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,
});

Expand Down

0 comments on commit 4f56f05

Please # to comment.