diff --git a/crates/turbopack-image/src/process/svg.rs b/crates/turbopack-image/src/process/svg.rs index c25e06744f8da..f27717f23b39a 100644 --- a/crates/turbopack-image/src/process/svg.rs +++ b/crates/turbopack-image/src/process/svg.rs @@ -24,7 +24,7 @@ static UNITS: Lazy> = Lazy::new(|| { }); static UNIT_REGEX: Lazy = - Lazy::new(|| Regex::new(r"^([0-9.]+(?:e\d+)?)((?:in|cm|em|ex|m|mm|pc|pt|px)?)$").unwrap()); + Lazy::new(|| Regex::new(r"^([0-9.]+(?:e-?\d+)?)((?:in|cm|em|ex|m|mm|pc|pt|px)?)$").unwrap()); static ROOT_REGEX: Lazy = Lazy::new(|| Regex::new(r#""']|"[^"]*"|'[^']*')*>"#).unwrap()); @@ -33,8 +33,10 @@ static HEIGHT_REGEX: Lazy = Lazy::new(|| Regex::new(r#"\sheight=['"]([^%]+?)['"]"#).unwrap()); static VIEW_BOX_REGEX: Lazy = Lazy::new(|| Regex::new(r#"\sviewBox=['"](.+?)['"]"#).unwrap()); -static VIEW_BOX_CONTENT_REGEX: Lazy = - Lazy::new(|| Regex::new(r#"^\s*(\w+)\s+(\w+)\s+(\w+)\s+(\w+)\s*$"#).unwrap()); +static VIEW_BOX_CONTENT_REGEX: Lazy = Lazy::new(|| { + Regex::new(r#"^\s*((?:\w|\.|-)+)\s+((?:\w|\.|-)+)\s+((?:\w|\.|-)+)\s+((?:\w|\.|-)+)\s*$"#) + .unwrap() +}); fn parse_length(len: &str) -> Result { let captures = UNIT_REGEX @@ -159,4 +161,12 @@ mod tests { assert_eq!(result, (160, 80)); Ok(()) } + + #[test] + fn test_calculate_complex_viewbox() -> Result<()> { + let svg = r#""#; + let result = calculate(svg)?; + assert_eq!(result, (50, 50420)); + Ok(()) + } }