Ejemplo n.º 1
0
        public static string Render(CSSDocument css, bool bCompress)
        {
            if (!bCompress)
                return css.ToString();

            System.Text.StringBuilder sb = new System.Text.StringBuilder();
            foreach (Directive dr in css.Directives)
                RenderDirective(sb, dr);

            foreach (RuleSet rules in css.RuleSets)
                RenderRuleSet(sb, rules);

            return sb.ToString();
        }
Ejemplo n.º 2
0
 public void Parse(string text, Node parentNode = null)
 {
     codeBrowser._tree.BeginUpdate();
     if (parentNode == null)
     {
         ClearAll();
     }
     ActiveWare.CSS.CSSParser parser = new ActiveWare.CSS.CSSParser();
     parser.ParseText(text);
     cssDoc = parser.CSSDocument;
     if (cssDoc != null)
     {
         FillTree(cssDoc, parentNode);
     }
     //codeBrowser._tree.ExpandAll();
     codeBrowser._tree.EndUpdate();
 }
Ejemplo n.º 3
0
        public static string Render(CSSDocument css)
        {
            StringBuilder txt = new StringBuilder();

            txt.Append("<pre><span class=\"cssDoc\">");

            foreach (Directive dr in css.Directives) {
                txt.AppendFormat("<span class=\"directive\">{0}</span>\r\n", Render(dr));
            }
            if (txt.Length > 0) { txt.Append("\r\n"); }
            foreach (RuleSet rules in css.RuleSets) {
                txt.AppendFormat("<span class=\"ruleset\">{0}</span>\r\n", Render(rules, 0));
            }

            txt.Append("</span></pre>");

            return txt.ToString();
        }
        public void BuildCssTest_Has_Class_And_Nested_Element()
        {
            // Arrange
            var cssDocument = new CSSDocument();

            var testInputItemsList = new List <TestInputItems>();
            var testInputItems     = new TestInputItems();

            var listStyle   = "Declaration: url('http://localhost')";
            var className   = "h1Class";
            var elementName = "h1";
            var name        = new StringBuilder();

            testInputItems.ClassName = name.Append(className)
                                       .Append(" ")
                                       .Append(elementName).ToString();
            testInputItemsList.Add(testInputItems);

            testInputItems           = new TestInputItems();
            name                     = new StringBuilder();
            testInputItems.ClassName = name.Append(className).Append(" ").Append(elementName).ToString();
            testInputItemsList.Add(testInputItems);

            cssDocument.RuleSets   = GetRuleSets(testInputItemsList);
            cssDocument.Directives = null;

            InitializeFakeConstructors();

            // Act
            var result = _cssListBuilder.Invoke("BuildCssList", cssDocument) as CssItem;

            // Assert
            result.ShouldNotBeNull();
            result.HasClass.ShouldBeTrue();
            result.HasElement.ShouldBeFalse();
            result.HasId.ShouldBeFalse();
            result.ListClass[0].Name.ShouldBe(className);
            result.ListClass[0].ListClassStyle.ShouldBeNull();
            result.ListClass[0].ListElement[0].ListElementStyle[0].Format.ShouldBe(listStyle);
            result.ListClass[0].ListElement[0].Name.ShouldBe(elementName);
            result.ListClass[0].ListElement[0].Parent.ShouldBeNull();
        }
Ejemplo n.º 5
0
        private void parseFromFileToolStripMenuItem_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();

            ofd.Filter = "CSS files|*.css";
            if (ofd.ShowDialog() == DialogResult.OK)
            {
                var parser = new Parser();
                css = new CSSDocument();
                string raw_text = parser.getTextfromFile(ofd.FileName);
                css = parser.ParseText(raw_text);
                parsedCSSTreeView.Nodes.Clear();
                FillTree(parsedCSSTreeView);
                if (parsedCSSTreeView.Nodes.Count != 0)
                {
                    saveAsToolStripMenuItem.Enabled = true;
                    Search_panel.Enabled            = true;
                }
            }
        }
Ejemplo n.º 6
0
 private void parseTextToolStripMenuItem_Click(object sender, EventArgs e)
 {
     if (ti == null)
     {
         ti = new TextInput();
     }
     if (ti.ShowDialog() == DialogResult.OK)
     {
         var parser = new Parser();
         css = new CSSDocument();
         css = parser.ParseText(ti.RawText);
         parsedCSSTreeView.Nodes.Clear();
         FillTree(parsedCSSTreeView);
         if (parsedCSSTreeView.Nodes.Count != 0)
         {
             saveAsToolStripMenuItem.Enabled = true;
             Search_panel.Enabled            = true;
         }
     }
 }
Ejemplo n.º 7
0
        public void AddFromCSS(CSSDocument doc, UriResolver urSource, UriResolver urTarget )
        {
            foreach (RuleSet rs in doc.RuleSets)
            {
                foreach (Declaration decl in rs.Declarations)
                {
                    foreach (Term t in decl.Expression.Terms)
                    {
                        if (t.Type != TermType.Url)
                            continue;

                        CssImageInfo cii = new CssImageInfo();
                        cii.Term = t;
                        cii.SourceUriResolver = urSource;
                        cii.TargetUriResolver = urTarget;
                        _ciiElements.Add(cii);
                    }
                }
            }
        }
        public void BuildCssTest_Has_Elements_With_Pseudo_Then_Class()
        {
            // Arrange
            var cssDocument = new CSSDocument();

            var testInputItemsList = new List <TestInputItems>();
            var testInputItems     = new TestInputItems();
            var listStyle          = "Declaration: url('http://localhost')";

            var elementName = "li";
            var pseudo      = "hover";
            var className   = "links";

            var syntax = new StringBuilder();

            testInputItems.ElementName = syntax.Append(elementName).Append(":").Append(pseudo).Append(".").Append(className).ToString();
            testInputItemsList.Add(testInputItems);

            cssDocument.RuleSets   = GetRuleSets(testInputItemsList);
            cssDocument.Directives = null;

            InitializeFakeConstructors();

            // Act
            var result = _cssListBuilder.Invoke("BuildCssList", cssDocument) as CssItem;

            // Assert
            result.ShouldNotBeNull();
            result.HasClass.ShouldBeTrue();
            result.HasElement.ShouldBeFalse();
            result.HasId.ShouldBeFalse();
            result.ListElement.Count.ShouldBe(0);
            result.ListId.Count.ShouldBe(0);
            result.ListClass[0].Name.ShouldBe(className);
            result.ListClass[0].ListClassStyle.ShouldBeNull();
            result.ListClass[0].ListElement[0].Parent.ShouldBeNull();
            result.ListClass[0].ListElement[0].Name.ShouldBe(elementName);
            result.ListClass[0].ListElement[0].ListElementStyle.ShouldBeNull();
            result.ListClass[0].ListElement[0].ListPsuedo[0].Name.ShouldBe(pseudo);
            result.ListClass[0].ListElement[0].ListPsuedo[0].ListStyle[0].Format.ShouldBe(listStyle);
        }
Ejemplo n.º 9
0
 public static string Render(CSSDocument css)
 {
     StringBuilder txt = new StringBuilder();
     //foreach (Import imp in css.Imports) {
     //    txt.AppendFormat("{0}\r\n", imp.ToString());
     //}
     //foreach (Media mtg in css.Medias) {
     //    txt.AppendFormat("@media{0} {{\r\n", mtg.Media != Media.None ? " " + mtg.Media.ToString() : "");
     //    foreach (Selector sel in mtg.Selectors) {
     //        txt.Append(Render(sel, 1));
     //        txt.Append("\r\n");
     //    }
     //    txt.Append("}\r\n");
     //}
     //foreach (Selector sel in css.Selectors) {
     //    txt.Append(Render(sel));
     //    txt.Append("\r\n");
     //}
     txt.Append(css.ToString());
     return txt.ToString();
 }
        public void BuildCssTest_Null_Input()
        {
            // Arrange
            var cssDocument = new CSSDocument();

            cssDocument.RuleSets   = null;
            cssDocument.Directives = null;

            InitializeFakeConstructors();

            // Act
            var result = _cssListBuilder.Invoke("BuildCssList", cssDocument) as CssItem;

            // Assert
            result.ShouldNotBeNull();
            result.HasClass.ShouldBeFalse();
            result.HasElement.ShouldBeFalse();
            result.HasId.ShouldBeFalse();
            result.ListClass.Count.ShouldBe(0);
            result.ListElement.Count.ShouldBe(0);
            result.ListId.Count.ShouldBe(0);
        }
Ejemplo n.º 11
0
 /// <summary>
 /// Contrustor taking a list of elements to be displayed
 /// </summary>
 /// <param name="webview">Webciew to send message</param>
 /// <param name="document">Optional css document to load for the program's default css</param>
 /// <param name="elements">Initial elements to add to the HTML body.</param>
 public ContentView(IWebView webview, CSSDocument document = null, params DisplayElement[] elements) : this(webview, document)
 {
     _htmlDocument = new HtmlDocument();
     InitializeDisplay(elements);
 }
Ejemplo n.º 12
0
        void CSS3()
        {
            CSSDoc = new CSSDocument();
            string cset = null;
            RuleSet rset = null;
            Directive dir = null;

            while (la.kind == 4) {
                Get();
            }
            while (la.kind == 5 || la.kind == 6) {
                if (la.kind == 5) {
                    Get();
                } else {
                    Get();
                }
            }
            while (StartOf(1)) {
                if (StartOf(2)) {
                    ruleset(out rset);
                    CSSDoc.RuleSets.Add(rset);
                } else {
                    directive(out dir);
                    CSSDoc.Directives.Add(dir);
                }
                while (la.kind == 5 || la.kind == 6) {
                    if (la.kind == 5) {
                        Get();
                    } else {
                        Get();
                    }
                }
                while (la.kind == 4) {
                    Get();
                }
            }
        }
Ejemplo n.º 13
0
 public static string Render(CSSDocument css)
 {
     StringBuilder txt = new StringBuilder();
     txt.Append(css.ToString());
     return txt.ToString();
 }
Ejemplo n.º 14
0
 public static string ToOutput(this CSSDocument doc)
 {
     return(doc.ToString());
 }
Ejemplo n.º 15
0
        public void NodeHasAncestors_Test()
        {
            // Arrange
            var document = new HtmlDocument();

            document.DocumentNode.Name = "document";
            var node = new HtmlNode(HtmlNodeType.Element, document, 1);

            node.Name = "ul";

            var cssDocument        = new CSSDocument();
            var testInputItemsList = new List <TestInputItems>();
            var testInputItems     = new TestInputItems();

            var className   = "h1Class";
            var elementName = "h1";
            var name        = new StringBuilder();

            testInputItems.ClassName = name.Append(className)
                                       .Append(" ")
                                       .Append(elementName)
                                       .ToString();
            testInputItems.PseudoName = "hover";
            testInputItemsList.Add(testInputItems);

            cssDocument.RuleSets   = GetRuleSets(testInputItemsList);
            cssDocument.Directives = null; // Option of GetDirectives();

            var methodCaller = new PrivateObject(new CssConvert_2_0.Convert());

            _parameters = new object[] { node, cssDocument };

            // Act
            var result = methodCaller.Invoke("NodeHasAncestors", _parameters) as bool?;

            // Assert
            Assert.IsFalse(result);

            // Arrange

            node = new HtmlNode(HtmlNodeType.Element, document, 1)
            {
                Name = "ul"
            };
            var node_ancestor = new HtmlNode(HtmlNodeType.Element, document, 1)
            {
                Name = "div"
            };

            node_ancestor.AppendChild(node);

            _parameters = new object[] { node, cssDocument };

            // Act
            result = methodCaller.Invoke("NodeHasAncestors", _parameters) as bool?;

            // Assert
            Assert.IsFalse(result);

            // Arrange
            node          = new HtmlNode(HtmlNodeType.Element, document, 1);
            node.Name     = "ul";
            node_ancestor = new HtmlNode(HtmlNodeType.Element, document, 1)
            {
                Name = "div"
            };
            node_ancestor.AppendChild(node);

            var ancestor = new HtmlNode(HtmlNodeType.Element, document, 1)
            {
                Name = "body"
            };

            ancestor.AppendChild(node_ancestor);

            _parameters = new object[] { node, cssDocument };

            // Act
            result = methodCaller.Invoke("NodeHasAncestors", _parameters) as bool?;

            // Assert
            Assert.IsFalse(result);
        }
Ejemplo n.º 16
0
 private void FillTree(TreeView tv, CSSDocument css)
 {
     FillAtRules(tv, css.atrules);
     FillRuleSets(tv, css.rulesets);
 }
Ejemplo n.º 17
0
        private string GetColorFromCss(string selector, Dictionary <string, string> selectorToColor, CSSDocument doc)
        {
            if (!selectorToColor.ContainsKey(selector))
            {
                foreach (RuleSet ruleSet in doc.RuleSets)
                {
                    foreach (Selector select in ruleSet.Selectors)
                    {
                        foreach (SimpleSelector sel in select.SimpleSelectors)
                        {
                            if (selector.Equals(sel.Class, StringComparison.Ordinal))
                            {
                                var decl = (from d in ruleSet.Declarations
                                            where d.Name.Equals("color", StringComparison.OrdinalIgnoreCase)
                                            select d).FirstOrDefault();
                                if (decl != null)
                                {
                                    string color  = decl.Expression.ToString();
                                    Color  result = Color.FromName(color);
                                    if (result.A == 0)
                                    {
                                        // Color.FromName returns all 0 if it does not match
                                        return(color);
                                    }
                                    else
                                    {
                                        return(string.Format("#{0:x2}{1:x2}{2:x2}", result.R, result.G, result.B));
                                    }
                                }
                            }
                        }
                    }
                }
            }
            else
            {
                return(selectorToColor[selector]);
            }

            return(null);
        }
Ejemplo n.º 18
0
        private void ProcessSingleSelector(Selector selector, HtmlDocument htmlDocument,
                                           CSSDocument cssDocument, RuleSet ruleSet)
        {
            if (selector == null)
            {
                return;
            }

            var colonName    = String.Empty;
            var selectorName = GetCleanedUpSelector(selector.ToString(), out colonName);

            var identifiedNodes        = new List <HtmlNode>();
            var idNodesIdentified      = false;
            var regularNodesIdentified = false;

            var classNodesIdentified = IdentifyNodesMatchingSelector(selectorName, ClassSelectSyntax,
                                                                     ClassSelectorStart, htmlDocument, (node) => identifiedNodes.Add(node), true);

            if (!classNodesIdentified)
            {
                idNodesIdentified = IdentifyNodesMatchingSelector(selectorName, IdSelectSyntax,
                                                                  IdSelectorStart, htmlDocument, (node) => identifiedNodes.Add(node));
                if (!idNodesIdentified)
                {
                    regularNodesIdentified = true;

                    var tempAllNodes   = htmlDocument.DocumentNode.SelectNodes(String.Format(AllNodesSelectorSyntaxFormat, selectorName));
                    var tempClassNodes = htmlDocument.DocumentNode.SelectNodes(ClassSelectSyntax);
                    var tempIdNodes    = htmlDocument.DocumentNode.SelectNodes(IdSelectSyntax);

                    if (tempAllNodes != null)
                    {
                        foreach (var node in tempAllNodes)
                        {
                            if ((tempClassNodes != null && tempClassNodes.Any(classNode => classNode == node)) ||
                                (tempIdNodes != null && tempIdNodes.Any(idNode => idNode == node)))
                            {
                                identifiedNodes.Add(node);
                            }
                        }
                    }
                }
            }

            foreach (var node in identifiedNodes)
            {
                var hasAncestor = NodeHasAncestors(node, cssDocument);
                if (classNodesIdentified && !hasAncestor)
                {
                    ProcessNode(node, ruleSet.Declarations, colonName);
                }
                if (idNodesIdentified && !hasAncestor)
                {
                    ProcessNode(node, ruleSet.Declarations, colonName);
                }
                if (regularNodesIdentified && !hasAncestor &&
                    selectorName.Equals(node.Name, StringComparison.OrdinalIgnoreCase))
                {
                    ProcessNode(node, ruleSet.Declarations, colonName);
                }
            }
        }
Ejemplo n.º 19
0
        private CSSDocument CreateCSS()
        {
            CSSDocument css = new CSSDocument();

            css.AddElements(
                new CSSHTMLElement("body")
                .AddProperty(new CSSProperty("color", "#e3e3e3"))
                .AddProperty(new CSSProperty("background-color", "#383838"))
                .AddProperty(new CSSProperty("font-family", "Whitney, Helvetica, Neue, Arial, sans-serif")),
                new CSSHTMLElement("nav")
                .AddProperty(new CSSProperty("width", "12%"))
                .AddProperty(new CSSProperty("height", "100%"))
                .AddProperty(new CSSProperty("position", "fixed"))
                .AddProperty(new CSSProperty("z-index", "1"))
                .AddProperty(new CSSProperty("top", "0"))
                .AddProperty(new CSSProperty("left", "0"))
                .AddProperty(new CSSProperty("background-color", "#262626"))
                .AddProperty(new CSSProperty("padding-left", "5px"))
                .AddProperty(new CSSProperty("overflow-x", "hidden")),
                new CSSHTMLElement("nav a")
                .AddProperty(new CSSProperty("padding", "5px"))
                .AddProperty(new CSSProperty("line-height", "1.5"))
                .AddProperty(new CSSProperty("color", "#d8d8d8"))
                .AddProperty(new CSSProperty("text-decoration-line", "none"))
                .AddProperty(new CSSProperty("font-weight", "bold")),
                new CSSClassElement("content")
                .AddProperty(new CSSProperty("margin-left", "12.5%")),
                new CSSHTMLElement("table")
                .AddProperty(new CSSProperty("border-style", "solid solid solid solid"))
                .AddProperty(new CSSProperty("border-width", "1px 1px 1px 5px"))
                .AddProperty(new CSSProperty("border-color", "#282828 #282828 #282828 #cecefe"))
                .AddProperty(new CSSProperty("border-radius", "5px"))
                .AddProperty(new CSSProperty("border-spacing", "0px"))
                .AddProperty(new CSSProperty("background-color", "#343434"))
                .AddProperty(new CSSProperty("width", "100%"))
                .AddProperty(new CSSProperty("margin-bottom", "10px"))
                .AddProperty(new CSSProperty("table-layout", "fixed"))
                .AddProperty(new CSSProperty("word-wrap", "break-word")),
                new CSSHTMLElement("caption")
                .AddProperty(new CSSProperty("font-weight", "bold"))
                .AddProperty(new CSSProperty("font-size", "1.2em")),
                new CSSHTMLElement("th")
                .AddProperty(new CSSProperty("border-style", "none none solid none"))
                .AddProperty(new CSSProperty("background-color", "#323232")),
                new CSSHTMLElement("th, td")
                .AddProperty(new CSSProperty("border-color", "#282828"))
                .AddProperty(new CSSProperty("padding", "3px")),
                new CSSHTMLElement("th:nth-child(even), td:nth-child(even)")
                .AddProperty(new CSSProperty("background-color", "rgba(0,0,0,0.1)")),
                new CSSHTMLElement("th:first-child, td:first-child")
                .AddProperty(new CSSProperty("width", "15%")),
                new CSSHTMLElement("tr:not(:first-child) td")
                .AddProperty(new CSSProperty("border-style", "solid none none none"))
                .AddProperty(new CSSProperty("border-width", "1px")),
                new CSSHTMLElement("th:nth-child(2), td:nth-child(2)")
                .AddProperty(new CSSProperty("width", "15%")),
                new CSSHTMLElement("th:nth-child(5), td:nth-child(5)")
                .AddProperty(new CSSProperty("width", "12.5%")),

                new CSSClassElement("parameter")
                .AddProperty(new CSSProperty("font-size", "0.75em"))
                .AddProperty(new CSSProperty("font-family", "Lucida Console, Georgia")),
                new CSSClassElement("optional-parameter")
                .AddProperty(new CSSProperty("text-decoration", "underline #a4a4b2 dotted")),
                new CSSClassElement("default-value")
                .AddProperty(new CSSProperty("font-style", "italic"))
                );

            return(css);
        }