Example #1
0
        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);
                }
            }
        }
Example #2
0
        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;
        }
Example #3
0
        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;
        }
Example #4
0
        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;
            }
        }
Example #5
0
        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;
            }
        }
Example #6
0
        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++;
            }
        }