Example #1
0
        void CSS3()
        {
            CSSDoc = new Model.CSSDocument();
            string cset = null;

            Model.RuleSet   rset = null;
            Model.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();
                }
            }
        }
Example #2
0
        static string Render(Model.RuleSet rls, int nesting)
        {
            StringBuilder txt = new StringBuilder();

            string start = "";

            for (int i = 0; i < nesting; i++)
            {
                start += "\t";
            }

            bool first = true;

            foreach (Model.Selector sel in rls.Selectors)
            {
                if (first)
                {
                    first = false; txt.Append(start);
                }
                else
                {
                    txt.Append(", ");
                }
                txt.AppendFormat("<span class=\"selector\">{0}</span>", Render(sel));
            }
            txt.Append(" {\r\n");
            txt.Append(start);

            foreach (Model.Declaration dec in rls.Declarations)
            {
                txt.AppendFormat("{1}<span class=\"declaration\">{0}</span>;\r\n", Render(dec), start + "\t");
            }

            txt.Append("}");

            return(txt.ToString());
        }
Example #3
0
        void ruleset(out Model.RuleSet rset)
        {
            rset = new Model.RuleSet();
            Model.Selector sel = null;
            Model.Declaration dec = null;

            selector(out sel);
            rset.Selectors.Add(sel);
            while (la.kind == 4) {
                Get();
            }
            while (la.kind == 25) {
                Get();
                while (la.kind == 4) {
                    Get();
                }
                selector(out sel);
                rset.Selectors.Add(sel);
                while (la.kind == 4) {
                    Get();
                }
            }
            Expect(26);
            while (la.kind == 4) {
                Get();
            }
            if (StartOf(3)) {
                declaration(out dec);
                rset.Declarations.Add(dec);
                while (la.kind == 4) {
                    Get();
                }
                while (la.kind == 27) {
                    Get();
                    while (la.kind == 4) {
                        Get();
                    }
                    if (la.val.Equals("}")) { Get(); return; }

                    declaration(out dec);
                    rset.Declarations.Add(dec);
                    while (la.kind == 4) {
                        Get();
                    }
                }
                if (la.kind == 27) {
                    Get();
                    while (la.kind == 4) {
                        Get();
                    }
                }
            }
            Expect(28);
            while (la.kind == 4) {
                Get();
            }
        }
Example #4
0
        void directive(out Model.Directive dir)
        {
            dir = new Model.Directive();
            Model.Declaration dec   = null;
            Model.RuleSet     rset  = null;
            Model.Expression  exp   = null;
            Model.Directive   dr    = null;
            string            ident = null;

            Model.Medium m;

            Expect(23);
            dir.Name = "@";
            if (la.kind == 24)
            {
                Get();
                dir.Name += "-";
            }
            identity(out ident);
            dir.Name += ident;
            switch (dir.Name.ToLower())
            {
            case "@media": dir.Type = Model.DirectiveType.Media; break;

            case "@import": dir.Type = Model.DirectiveType.Import; break;

            case "@charset": dir.Type = Model.DirectiveType.Charset; break;

            case "@page": dir.Type = Model.DirectiveType.Page; break;

            case "@font-face": dir.Type = Model.DirectiveType.FontFace; break;

            case "@namespace": dir.Type = Model.DirectiveType.Namespace; break;

            default: dir.Type = Model.DirectiveType.Other; break;
            }

            while (la.kind == 4)
            {
                Get();
            }
            if (StartOf(4))
            {
                if (StartOf(5))
                {
                    medium(out m);
                    dir.Mediums.Add(m);
                    while (la.kind == 4)
                    {
                        Get();
                    }
                    while (la.kind == 25)
                    {
                        Get();
                        while (la.kind == 4)
                        {
                            Get();
                        }
                        medium(out m);
                        dir.Mediums.Add(m);
                        while (la.kind == 4)
                        {
                            Get();
                        }
                    }
                }
                else
                {
                    expr(out exp);
                    dir.Expression = exp;
                    while (la.kind == 4)
                    {
                        Get();
                    }
                }
            }
            if (la.kind == 26)
            {
                Get();
                while (la.kind == 4)
                {
                    Get();
                }
                if (StartOf(6))
                {
                    while (StartOf(1))
                    {
                        if (dir.Type == Model.DirectiveType.Page || dir.Type == Model.DirectiveType.FontFace)
                        {
                            declaration(out dec);
                            dir.Declarations.Add(dec);
                            while (la.kind == 4)
                            {
                                Get();
                            }
                            while (la.kind == 27)
                            {
                                Get();
                                while (la.kind == 4)
                                {
                                    Get();
                                }
                                if (la.val.Equals("}"))
                                {
                                    Get(); return;
                                }
                                declaration(out dec);
                                dir.Declarations.Add(dec);
                                while (la.kind == 4)
                                {
                                    Get();
                                }
                            }
                            if (la.kind == 27)
                            {
                                Get();
                                while (la.kind == 4)
                                {
                                    Get();
                                }
                            }
                        }
                        else if (StartOf(2))
                        {
                            ruleset(out rset);
                            dir.RuleSets.Add(rset);
                            while (la.kind == 4)
                            {
                                Get();
                            }
                        }
                        else
                        {
                            directive(out dr);
                            dir.Directives.Add(dr);
                            while (la.kind == 4)
                            {
                                Get();
                            }
                        }
                    }
                }
                Expect(28);
                while (la.kind == 4)
                {
                    Get();
                }
            }
            else if (la.kind == 27)
            {
                Get();
                while (la.kind == 4)
                {
                    Get();
                }
            }
            else
            {
                SynErr(50);
            }
        }
Example #5
0
        void ruleset(out Model.RuleSet rset)
        {
            rset = new Model.RuleSet();
            Model.Selector    sel = null;
            Model.Declaration dec = null;

            selector(out sel);
            rset.Selectors.Add(sel);
            while (la.kind == 4)
            {
                Get();
            }
            while (la.kind == 25)
            {
                Get();
                while (la.kind == 4)
                {
                    Get();
                }
                selector(out sel);
                rset.Selectors.Add(sel);
                while (la.kind == 4)
                {
                    Get();
                }
            }
            Expect(26);
            while (la.kind == 4)
            {
                Get();
            }
            if (StartOf(3))
            {
                declaration(out dec);
                rset.Declarations.Add(dec);
                while (la.kind == 4)
                {
                    Get();
                }
                while (la.kind == 27)
                {
                    Get();
                    while (la.kind == 4)
                    {
                        Get();
                    }
                    if (la.val.Equals("}"))
                    {
                        Get(); return;
                    }

                    declaration(out dec);
                    rset.Declarations.Add(dec);
                    while (la.kind == 4)
                    {
                        Get();
                    }
                }
                if (la.kind == 27)
                {
                    Get();
                    while (la.kind == 4)
                    {
                        Get();
                    }
                }
            }
            Expect(28);
            while (la.kind == 4)
            {
                Get();
            }
        }