From 3ee6a83e09357d34f06782d3d868e82e73f42da0 Mon Sep 17 00:00:00 2001 From: NetterSilver <133535268+Silvertree2010@users.noreply.github.com> Date: Fri, 23 Oct 2026 16:18:55 +0200 Subject: [PATCH] Accept long unit names in FormCalc UnitValue (#4116) Found while testing crates/js/src/formcalc.rs:2526-2532 (UnitValue per_in table; UnitType at :2510-2516) Co-authored-by: Claude Haiku 5.5 --- crates/js/src/formcalc.rs | 8 ++++---- crates/js/src/tests.rs | 3 +++ 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/crates/js/src/formcalc.rs b/crates/js/src/formcalc.rs index 4b955ef9f3..2348ce2206 100644 --- a/crates/js/src/formcalc.rs +++ b/crates/js/src/formcalc.rs @@ -2522,10 +2522,10 @@ impl Interp<'_> { let v = parse_num(&s).unwrap_or(0.0); let unit: String = s.trim().chars().skip_while(|c| c.is_ascii_digit() || *c == '.' || *c == '-' || *c == '+').collect(); let per_in = |u: &str| match u.trim().to_ascii_lowercase().as_str() { - "mm" => 25.4, - "cm" => 2.54, - "pt" => 72.0, - "pc" => 6.0, + "mm" | "millimeter" | "millimeters" => 25.4, + "cm" | "centimeter" | "centimeters" => 2.54, + "pt" | "point" | "points" => 72.0, + "pc" | "pica" => 6.0, _ => 1.0, }; let target = if to.trim().is_empty() { unit.clone() } else { to }; diff --git a/crates/js/src/tests.rs b/crates/js/src/tests.rs index 01a4362400..7d63b49981 100644 --- a/crates/js/src/tests.rs +++ b/crates/js/src/tests.rs @@ -990,6 +990,9 @@ mod formcalc { assert_eq!(calc("Round(PV(100, 0.01, 12), 2)"), "1125.51"); assert_eq!(calc(r#"UnitValue("2in", "mm")"#), "50.8"); assert_eq!(calc(r#"UnitType("2.5cm")"#), "cm"); + assert_eq!(calc(r#"UnitValue("72points", "in")"#), "1"); + assert_eq!(calc(r#"UnitValue("25.4millimeters", "inches")"#), "1"); + assert_eq!(calc(r#"UnitValue("1in", "points")"#), "72"); assert_eq!(calc(r#"Encode("a b&c", "url")"#), "a%20b%26c"); assert_eq!(calc(r#"Decode("a%20b", "url")"#), "a b"); assert!(go(r#"Get("http://example.com")"#, "form1[0].page1[0].total[0]", "calculate").error.unwrap().contains("network"));