diff --git a/src/AngleSharp.Css.Tests/Functions/CssColorFunction.cs b/src/AngleSharp.Css.Tests/Functions/CssColorFunction.cs index cf36e11b..e74d060d 100644 --- a/src/AngleSharp.Css.Tests/Functions/CssColorFunction.cs +++ b/src/AngleSharp.Css.Tests/Functions/CssColorFunction.cs @@ -75,6 +75,28 @@ public void ParseOklabToRgb_Second() Assert.AreEqual("rgba(198, 93, 7, 1)", color); } + [Test] + public void ParseOklabNumberToRgb_First() + { + var html = @"
Text
"; + var dom = ParseDocument(html); + var p = dom.QuerySelector("p"); + var s = p.GetStyle(); + var color = s.GetColor(); + Assert.AreEqual("rgba(125, 35, 40, 1)", color); + } + + [Test] + public void ParseOklabNumberToRgb_Second() + { + var html = @"Text
"; + var dom = ParseDocument(html); + var p = dom.QuerySelector("p"); + var s = p.GetStyle(); + var color = s.GetColor(); + Assert.AreEqual("rgba(198, 93, 7, 1)", color); + } + [Test] public void ParseOklabToRgb_Alpha() { @@ -108,6 +130,28 @@ public void ParseOklchToRgb_Second() Assert.AreEqual("rgba(198, 93, 7, 1)", color); } + [Test] + public void ParseOklchNumberToRgb_First() + { + var html = @"Text
"; + var dom = ParseDocument(html); + var p = dom.QuerySelector("p"); + var s = p.GetStyle(); + var color = s.GetColor(); + Assert.AreEqual("rgba(125, 35, 40, 1)", color); + } + + [Test] + public void ParseOklchNumberToRgb_Second() + { + var html = @"Text
"; + var dom = ParseDocument(html); + var p = dom.QuerySelector("p"); + var s = p.GetStyle(); + var color = s.GetColor(); + Assert.AreEqual("rgba(198, 93, 7, 1)", color); + } + [Test] public void ParseOklchToRgb_Alpha() { diff --git a/src/AngleSharp.Css/Parser/Micro/ColorParser.cs b/src/AngleSharp.Css/Parser/Micro/ColorParser.cs index 033accc3..bc5bd43a 100644 --- a/src/AngleSharp.Css/Parser/Micro/ColorParser.cs +++ b/src/AngleSharp.Css/Parser/Micro/ColorParser.cs @@ -292,7 +292,7 @@ static class ColorParser private static CssColorValue? ParseOklab(StringSource source) { - var l = ParseLabComponent(source); + var l = ParseLabComponent(source, numberScale: 100.0); source.SkipSpacesAndComments(); var a = ParseLabComponent(source); source.SkipSpacesAndComments(); @@ -324,7 +324,7 @@ static class ColorParser private static CssColorValue? ParseOklch(StringSource source) { - var l = ParseLabComponent(source); + var l = ParseLabComponent(source, numberScale: 100.0); source.SkipSpacesAndComments(); var c = ParseLabComponent(source); source.SkipSpacesAndComments(); @@ -385,7 +385,7 @@ static class ColorParser return null; } - private static Double? ParseLabComponent(StringSource source) + private static Double? ParseLabComponent(StringSource source, Double numberScale = 1.0) { var pos = source.Index; var unit = source.ParseUnit(); @@ -404,7 +404,7 @@ static class ColorParser if ((unit.Dimension == String.Empty || unit.Dimension == "%") && Double.TryParse(unit.Value, NumberStyles.Float, CultureInfo.InvariantCulture, out var value)) { - return value; + return unit.Dimension == String.Empty ? value * numberScale : value; } return null;