diff --git a/CHANGELOG.md b/CHANGELOG.md index ea280099..5ff21124 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ Released on Sunday, January 15 2023. +- Updated build system to use NUKE instead of CAKE - Dropped .NET Framework 4.6 - Updated to use AngleSharp 0.17 - Updated micro parser API to be public (#111) diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index 72f62f62..25959ec7 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -10,6 +10,12 @@ AngleSharp.Css contains code written by (in order of first pull request / commit * [Tom Hazell](https://github.com/The-Nutty) * [Michael Ganss](https://github.com/mganss) * [Gérald Barré](https://github.com/meziantou) +* [Shesh](https://github.com/sheshnathverma) +* [Martin Welsch](https://github.com/MartinWelsch) +* [Jason Nelson](https://github.com/iamcarbon) +* [Bastian Buchholz](https://github.com/campersau) +* [Fraaankes](https://github.com/Fraaankes) +* [Eric Mutta](https://github.com/ericmutta) Without these awesome people AngleSharp.Css could not exist. Thanks to everyone for your contributions! :beers: diff --git a/src/AngleSharp.Css.Tests/CssConstructionFunctions.cs b/src/AngleSharp.Css.Tests/CssConstructionFunctions.cs index b444da1d..e62c5ee5 100644 --- a/src/AngleSharp.Css.Tests/CssConstructionFunctions.cs +++ b/src/AngleSharp.Css.Tests/CssConstructionFunctions.cs @@ -96,5 +96,19 @@ internal static Predicate CreateValidator(String name, String val var feature = new MediaFeature(name, value); return device => validator.Validate(feature, device); } + + internal static CssFontFeatureValuesRule ParseFontFeatureValuesRule(String source) + { + ICssParser parser = new CssParser(); + var sheet = parser.ParseStyleSheet(String.Empty); + return parser.ParseRule(sheet, source) as CssFontFeatureValuesRule; + } + + internal static CssCounterStyleRule ParseCounterStyleRule(String source) + { + ICssParser parser = new CssParser(); + var sheet = parser.ParseStyleSheet(String.Empty); + return parser.ParseRule(sheet, source) as CssCounterStyleRule; + } } } diff --git a/src/AngleSharp.Css.Tests/Rules/CssCounterStyleRule.cs b/src/AngleSharp.Css.Tests/Rules/CssCounterStyleRule.cs new file mode 100644 index 00000000..bba88b4b --- /dev/null +++ b/src/AngleSharp.Css.Tests/Rules/CssCounterStyleRule.cs @@ -0,0 +1,18 @@ +namespace AngleSharp.Css.Tests.Rules +{ + using AngleSharp.Dom; + using NUnit.Framework; + using static CssConstructionFunctions; + + [TestFixture] + public class CssCounterStyleRuleTests + { + [Test] + public void CssCounterStyleThumbsIntroExample() + { + var source = "@counter-style thumbs {\n system: cyclic;\n symbols: \"\"\\1F44D\"\";\n suffix: \"\" \"\";\n }"; + var rule = ParseCounterStyleRule(source); + Assert.AreEqual("thumbs", rule.StyleName); + } + } +} diff --git a/src/AngleSharp.Css.Tests/Rules/CssFontFeatureValuesRule.cs b/src/AngleSharp.Css.Tests/Rules/CssFontFeatureValuesRule.cs new file mode 100644 index 00000000..efc54fb3 --- /dev/null +++ b/src/AngleSharp.Css.Tests/Rules/CssFontFeatureValuesRule.cs @@ -0,0 +1,18 @@ +namespace AngleSharp.Css.Tests.Rules +{ + using AngleSharp.Dom; + using NUnit.Framework; + using static CssConstructionFunctions; + + [TestFixture] + public class CssFontFeatureValuesRuleTests + { + [Test] + public void CssFontFeaturesValuesForSomeIntroExample() + { + var source = "@font-feature-values Font One {\n @styleset {\n nice-style: 12;\n }\n }"; + var rule = ParseFontFeatureValuesRule(source); + Assert.AreEqual("Font One", rule.FamilyName); + } + } +} diff --git a/src/AngleSharp.Css.nuspec b/src/AngleSharp.Css.nuspec index 5f075ede..ae1d28b0 100644 --- a/src/AngleSharp.Css.nuspec +++ b/src/AngleSharp.Css.nuspec @@ -15,7 +15,7 @@ Copyright 2016-2023, AngleSharp html html5 css css3 dom styling library anglesharp angle - + diff --git a/src/AngleSharp.Css/Parser/CssBuilder.cs b/src/AngleSharp.Css/Parser/CssBuilder.cs index b73e1b80..a287e6c7 100644 --- a/src/AngleSharp.Css/Parser/CssBuilder.cs +++ b/src/AngleSharp.Css/Parser/CssBuilder.cs @@ -324,15 +324,34 @@ private CssSupportsRule CreateSupports(CssSupportsRule rule, CssToken current) private CssFontFeatureValuesRule CreateFontFeatureValues(CssFontFeatureValuesRule rule, CssToken current) { - CollectTrivia(ref current); - //rule.FamilyName = + var token = NextToken(); + CollectTrivia(ref token); + rule.FamilyName = GetArgument(ref token); + + if (token.Type == CssTokenType.CurlyBracketOpen) + { + JumpToRuleEnd(ref token); + return rule; + } + + SkipDeclarations(token); return null; } private CssCounterStyleRule CreateCounterStyle(CssCounterStyleRule rule, CssToken current) { - CollectTrivia(ref current); - return null; + var token = NextToken(); + CollectTrivia(ref token); + rule.StyleName = GetArgument(ref token); + + if (token.Type != CssTokenType.CurlyBracketOpen) + { + SkipDeclarations(token); + return null; + } + + FillDeclarations(rule); + return rule; } public CssStyleRule CreateStyle(CssStyleRule rule, CssToken current)