private static List <MatchedRule> MatchingRules(Dom.ElementData elem, Css.Stylesheet stylesheet) { return(stylesheet.Rules .Select(rule => MatchRule(elem, rule)) .Where(rule => rule != null) .ToList()); }
public static StyledNode StyleTree(Dom.Node root, Css.Stylesheet stylesheet) { var specifiedValues = new Dictionary <string, Css.Value>(); switch (root.NodeType) { case Dom.ElementData elem: specifiedValues = GetSpecifiedValues(elem, stylesheet); break; } var children = root.Children.Select(child => StyleTree(child, stylesheet)).ToList(); return(new StyledNode(root, specifiedValues, children)); }
private static Dictionary <string, Css.Value> GetSpecifiedValues(Dom.ElementData elem, Css.Stylesheet stylesheet) { var values = new Dictionary <string, Css.Value>(); var rules = MatchingRules(elem, stylesheet) .OrderBy(rule => rule.Specificity.Calc()) .Select(r => r.Rule); foreach (var rule in rules) { foreach (var declaration in rule.Declarations) { values[declaration.Name] = declaration.Value; } } return(values); }