diff --git a/src/parser/mod.rs b/src/parser/mod.rs index b40fa26..b23aad8 100644 --- a/src/parser/mod.rs +++ b/src/parser/mod.rs @@ -212,9 +212,10 @@ pub fn parse(s: &str) -> Result { Some((1.0, true)) }; - if let (Some((l, _)), Some((a, a_fmt)), Some((b, b_fmt)), Some((alpha, _))) = + if let (Some((l, l_fmt)), Some((a, a_fmt)), Some((b, b_fmt)), Some((alpha, _))) = (l, a, b, alpha) { + let l = if l_fmt { l * 100.0 } else { l }; let a = if a_fmt { remap(a, -1.0, 1.0, -125.0, 125.0) } else { @@ -225,7 +226,7 @@ pub fn parse(s: &str) -> Result { } else { b }; - return Ok(Color::from_lab(l.max(0.0) * 100.0, a, b, alpha)); + return Ok(Color::from_lab(l.max(0.0), a, b, alpha)); } return Err(ParseColorError::InvalidLab); @@ -246,12 +247,13 @@ pub fn parse(s: &str) -> Result { Some((1.0, true)) }; - if let (Some((l, _)), Some((c, c_fmt)), Some(h), Some((alpha, _))) = + if let (Some((l, l_fmt)), Some((c, c_fmt)), Some(h), Some((alpha, _))) = (l, c, h, alpha) { + let l = if l_fmt { l * 100.0 } else { l }; let c = if c_fmt { c * 150.0 } else { c }; return Ok(Color::from_lch( - l * 100.0, + l.max(0.0), c.max(0.0), h.to_radians(), alpha, diff --git a/tests/parser.rs b/tests/parser.rs index 85090a8..a5c5d08 100644 --- a/tests/parser.rs +++ b/tests/parser.rs @@ -53,6 +53,10 @@ fn equal() { ("hwb(180 0% 60%)", "hwb(180,0%,60%)"), ("hwb(290 30% 0%)", "hwb(290 0.3 0)"), ("hsl(180,50%,27%)", "hsl(180,0.5,0.27)"), + ("rgb(255, 165, 0)", "hsl(38.824 100% 50%)"), + ("#7654CD", "rgb(46.27% 32.94% 80.39%)"), + //#[cfg(feature = "lab")] + //("#7654CD", "lab(44.36% 36.05 -58.99)"), ]; for (a, b) in test_data {