diff --git a/CHANGELOG.md b/CHANGELOG.md index acab19a8..74d3a57b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ Released on Tuesday, May 31 2022. - Dropped .NET Framework 4.6 - Updated to use AngleSharp 0.17 - Fixed casing issue with color, timing, and gradient functions (#109) +- Fixed parsing of `skew` (#101) - Fixed shorthand properties using `inherit` being omitted (#100) - Added support for `conic-gradient` (#101) diff --git a/src/AngleSharp.Css.Tests/Declarations/CssTransformProperty.cs b/src/AngleSharp.Css.Tests/Declarations/CssTransformProperty.cs index f10d559c..48a481df 100644 --- a/src/AngleSharp.Css.Tests/Declarations/CssTransformProperty.cs +++ b/src/AngleSharp.Css.Tests/Declarations/CssTransformProperty.cs @@ -461,6 +461,18 @@ public void CssTransformSkewYLegal() Assert.AreEqual("skewY(1.07rad)", property.Value); } + [Test] + public void CssTransformSkewLegal_Issue101() + { + var snippet = "transform: skew(20deg) "; + var property = ParseDeclaration(snippet); + Assert.AreEqual("transform", property.Name); + Assert.IsFalse(property.IsImportant); + Assert.IsFalse(property.IsInherited); + Assert.IsTrue(property.HasValue); + Assert.AreEqual("skew(20deg)", property.Value); + } + [Test] public void CssTransformMultipleLegal() { diff --git a/src/AngleSharp.Css/Parser/Micro/TransformParser.cs b/src/AngleSharp.Css/Parser/Micro/TransformParser.cs index 8102115b..a90d379b 100644 --- a/src/AngleSharp.Css/Parser/Micro/TransformParser.cs +++ b/src/AngleSharp.Css/Parser/Micro/TransformParser.cs @@ -62,17 +62,26 @@ public static ICssTransformFunctionValue ParseTransform(this StringSource source /// private static CssSkewValue ParseSkew2d(StringSource source) { - var x = source.ParseAngleOrCalc(); + ICssValue x = source.ParseAngleOrCalc(); + ICssValue y = Angle.Zero; var c = source.SkipGetSkip(); - var y = source.ParseAngleOrCalc(); - var f = source.SkipGetSkip(); - if (x != null && y != null && c == Symbols.Comma && f == Symbols.RoundBracketClose) + if (x == null) { - return new CssSkewValue(x, y); + return null; } - return null; + if (c == Symbols.Comma) { + y = source.ParseAngleOrCalc(); + c = source.SkipGetSkip(); + } + + if (c != Symbols.RoundBracketClose) + { + return null; + } + + return new CssSkewValue(x, y); } /// diff --git a/src/AngleSharp.Css/Values/Functions/CssSkewValue.cs b/src/AngleSharp.Css/Values/Functions/CssSkewValue.cs index 49b25ab3..d287a646 100644 --- a/src/AngleSharp.Css/Values/Functions/CssSkewValue.cs +++ b/src/AngleSharp.Css/Values/Functions/CssSkewValue.cs @@ -76,7 +76,7 @@ public String CssText { args = _beta.CssText; } - else if (_beta != null) + else if (_beta != null && _beta.CssText != "0rad") { args = String.Concat(args, ", ", _beta.CssText); }