public IEnumerable <CssRule> Rewrite(CssRule rule, int index = 0) { if (Count == 0) { yield return(rule); yield break; } // TODO: Pass along in order // Chain foreach (var r in this[index].Rewrite(rule)) { if (Count > index + 1) { foreach (var r2 in Rewrite(r, ++index)) { yield return(r2); } } else { yield return(r); } } }
public IEnumerable<CssRule> Rewrite(CssRule rule) { var declaration = rule.GetDeclaration("opacity"); if (declaration == null) { yield return rule; yield break; } var value = declaration.Value as CssNumber; if (value == null) { yield return rule; yield break; } var index = rule.IndexOf(declaration); // Add the filter before the standard rule.Insert(index, new CssDeclaration("filter", $"alpha(opacity={value})")); yield return rule; }
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; }
public IEnumerable<CssRule> Rewrite(CssRule rule) { var styleRule = rule as StyleRule; if (styleRule == null || rule.All(r => r.Kind == NodeKind.Declaration)) { yield return rule; yield break; } // Figure out how to eliminate this clone var clone = (StyleRule)rule.CloneNode(); // Expand includes foreach (var includeNode in clone.Children.OfType<IncludeNode>().ToArray()) { scope = ExpandInclude(includeNode, clone); clone.Children.Remove(includeNode); } var root = new List<CssRule>(); root.Add(clone); foreach (var nestedRule in clone.Children.OfType<StyleRule>().ToArray()) { foreach (var r in ExpandStyleRule(nestedRule, parent: clone)) { root.Add(r); } } foreach (var r in root) { if (r.HasChildren) yield return r; } }
public void _WriteRule(CssRule rule, int level = 0) { Indent(level); switch (rule.Type) { case RuleType.Import : WriteImportRule((ImportRule)rule); break; case RuleType.Media : WriteMediaRule((MediaRule)rule, level); break; case RuleType.Style : WriteStyleRule((StyleRule)rule, level); break; case RuleType.FontFace : WriteFontFaceRule((FontFaceRule)rule, level); break; case RuleType.Keyframes : WriteKeyframesRule((KeyframesRule)rule, level); break; // Unknown rules default: if (rule is AtRule) WriteAtRule((AtRule)rule, level); break; } }
public void WriteRule(CssRule rule, int level = 0) { var i = 0; foreach (var r in Rewrite(rule)) { if (i != 0) writer.WriteLine(); _WriteRule(r, level); i++; } }