public IEnumerable<CssRule> ExpandStyleRule(StyleRule rule, CssRule parent) { var newRule = new StyleRule(ExpandSelector(rule)); foreach (var childNode in rule.Children.ToArray()) { if (childNode is StyleRule) { var childRule = (StyleRule)childNode; foreach (var r in ExpandStyleRule(childRule, rule)) { yield return r; } } else { newRule.Add(childNode); } } parent.Remove(rule); // Remove from parent node after it's been processed if (newRule.HasChildren) yield return newRule; }